Add wxGridSelectNone selection mode
In this mode the user can't select any cells at all in wxGrid.
This commit is contained in:
committed by
Vadim Zeitlin
parent
a64348f3e4
commit
095d1e317c
@@ -1457,7 +1457,8 @@ public:
|
|||||||
wxGridSelectCells = 0, // allow selecting anything
|
wxGridSelectCells = 0, // allow selecting anything
|
||||||
wxGridSelectRows = 1, // allow selecting only entire rows
|
wxGridSelectRows = 1, // allow selecting only entire rows
|
||||||
wxGridSelectColumns = 2, // allow selecting only entire columns
|
wxGridSelectColumns = 2, // allow selecting only entire columns
|
||||||
wxGridSelectRowsOrColumns = wxGridSelectRows | wxGridSelectColumns
|
wxGridSelectRowsOrColumns = wxGridSelectRows | wxGridSelectColumns,
|
||||||
|
wxGridSelectNone = 4 // disallow selecting anything
|
||||||
};
|
};
|
||||||
|
|
||||||
// Different behaviour of the TAB key when the end (or the beginning, for
|
// Different behaviour of the TAB key when the end (or the beginning, for
|
||||||
|
@@ -2945,7 +2945,16 @@ public:
|
|||||||
|
|
||||||
@since 2.9.1
|
@since 2.9.1
|
||||||
*/
|
*/
|
||||||
wxGridSelectRowsOrColumns
|
wxGridSelectRowsOrColumns,
|
||||||
|
|
||||||
|
/**
|
||||||
|
The selection mode allowing no selections to be made at all.
|
||||||
|
|
||||||
|
The user won't be able to select any cells in this mode.
|
||||||
|
|
||||||
|
@since 3.1.5
|
||||||
|
*/
|
||||||
|
wxGridSelectNone
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -4631,6 +4631,7 @@ wxGrid::DoGridCellLeftDown(wxMouseEvent& event,
|
|||||||
// mode and is compatible with 2.8 behaviour (see #12062).
|
// mode and is compatible with 2.8 behaviour (see #12062).
|
||||||
switch ( m_selection->GetSelectionMode() )
|
switch ( m_selection->GetSelectionMode() )
|
||||||
{
|
{
|
||||||
|
case wxGridSelectNone:
|
||||||
case wxGridSelectCells:
|
case wxGridSelectCells:
|
||||||
case wxGridSelectRowsOrColumns:
|
case wxGridSelectRowsOrColumns:
|
||||||
// nothing to do in these cases
|
// nothing to do in these cases
|
||||||
|
@@ -98,6 +98,13 @@ void wxGridSelection::SetSelectionMode( wxGrid::wxGridSelectionModes selmode )
|
|||||||
if (selmode == m_selectionMode)
|
if (selmode == m_selectionMode)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (selmode == wxGrid::wxGridSelectNone)
|
||||||
|
{
|
||||||
|
ClearSelection();
|
||||||
|
m_selectionMode = selmode;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_selectionMode != wxGrid::wxGridSelectCells )
|
if ( m_selectionMode != wxGrid::wxGridSelectCells )
|
||||||
{
|
{
|
||||||
// if changing form row to column selection
|
// if changing form row to column selection
|
||||||
@@ -127,6 +134,7 @@ void wxGridSelection::SetSelectionMode( wxGrid::wxGridSelectionModes selmode )
|
|||||||
switch ( selmode )
|
switch ( selmode )
|
||||||
{
|
{
|
||||||
case wxGrid::wxGridSelectCells:
|
case wxGrid::wxGridSelectCells:
|
||||||
|
case wxGrid::wxGridSelectNone:
|
||||||
wxFAIL_MSG("unreachable");
|
wxFAIL_MSG("unreachable");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -160,7 +168,8 @@ void wxGridSelection::SetSelectionMode( wxGrid::wxGridSelectionModes selmode )
|
|||||||
|
|
||||||
void wxGridSelection::SelectRow(int row, const wxKeyboardState& kbd)
|
void wxGridSelection::SelectRow(int row, const wxKeyboardState& kbd)
|
||||||
{
|
{
|
||||||
if ( m_selectionMode == wxGrid::wxGridSelectColumns )
|
if ( m_selectionMode == wxGrid::wxGridSelectColumns ||
|
||||||
|
m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Select(wxGridBlockCoords(row, 0, row, m_grid->GetNumberCols() - 1),
|
Select(wxGridBlockCoords(row, 0, row, m_grid->GetNumberCols() - 1),
|
||||||
@@ -169,7 +178,8 @@ void wxGridSelection::SelectRow(int row, const wxKeyboardState& kbd)
|
|||||||
|
|
||||||
void wxGridSelection::SelectCol(int col, const wxKeyboardState& kbd)
|
void wxGridSelection::SelectCol(int col, const wxKeyboardState& kbd)
|
||||||
{
|
{
|
||||||
if ( m_selectionMode == wxGrid::wxGridSelectRows )
|
if ( m_selectionMode == wxGrid::wxGridSelectRows ||
|
||||||
|
m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Select(wxGridBlockCoords(0, col, m_grid->GetNumberRows() - 1, col),
|
Select(wxGridBlockCoords(0, col, m_grid->GetNumberRows() - 1, col),
|
||||||
@@ -214,6 +224,10 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol,
|
|||||||
else
|
else
|
||||||
allowed = 0;
|
allowed = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case wxGrid::wxGridSelectNone:
|
||||||
|
allowed = 0;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxASSERT_MSG(allowed != -1, "unknown selection mode?");
|
wxASSERT_MSG(allowed != -1, "unknown selection mode?");
|
||||||
@@ -246,6 +260,10 @@ wxGridSelection::DeselectBlock(const wxGridBlockCoords& block,
|
|||||||
const wxKeyboardState& kbd,
|
const wxKeyboardState& kbd,
|
||||||
wxEventType eventType)
|
wxEventType eventType)
|
||||||
{
|
{
|
||||||
|
// In wxGridSelectNone mode, all blocks should already be deselected.
|
||||||
|
if ( m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
|
return;
|
||||||
|
|
||||||
const wxGridBlockCoords canonicalizedBlock = block.Canonicalize();
|
const wxGridBlockCoords canonicalizedBlock = block.Canonicalize();
|
||||||
|
|
||||||
size_t count, n;
|
size_t count, n;
|
||||||
@@ -312,6 +330,10 @@ wxGridSelection::DeselectBlock(const wxGridBlockCoords& block,
|
|||||||
else
|
else
|
||||||
splitOrientation = wxVERTICAL;
|
splitOrientation = wxVERTICAL;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case wxGrid::wxGridSelectNone:
|
||||||
|
wxFAIL_MSG("unreachable");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxASSERT_MSG( splitOrientation != -1, "unknown selection mode" );
|
wxASSERT_MSG( splitOrientation != -1, "unknown selection mode" );
|
||||||
@@ -517,10 +539,14 @@ bool wxGridSelection::ExtendCurrentBlock(const wxGridCellCoords& blockStart,
|
|||||||
wxASSERT( blockStart.GetRow() != -1 && blockStart.GetCol() != -1 &&
|
wxASSERT( blockStart.GetRow() != -1 && blockStart.GetCol() != -1 &&
|
||||||
blockEnd.GetRow() != -1 && blockEnd.GetCol() != -1 );
|
blockEnd.GetRow() != -1 && blockEnd.GetCol() != -1 );
|
||||||
|
|
||||||
|
if ( m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
|
return false;
|
||||||
|
|
||||||
// If selection doesn't contain the current cell (which also covers the
|
// If selection doesn't contain the current cell (which also covers the
|
||||||
// special case of nothing being selected yet), we have to create a new
|
// special case of nothing being selected yet), we have to create a new
|
||||||
// block containing it because it doesn't make sense to extend any existing
|
// block containing it because it doesn't make sense to extend any existing
|
||||||
// block to non-selected current cell.
|
// block to non-selected current cell.
|
||||||
|
|
||||||
if ( !IsInSelection(m_grid->GetGridCursorCoords()) )
|
if ( !IsInSelection(m_grid->GetGridCursorCoords()) )
|
||||||
{
|
{
|
||||||
SelectBlock(blockStart, blockEnd, kbd, eventType);
|
SelectBlock(blockStart, blockEnd, kbd, eventType);
|
||||||
@@ -574,6 +600,10 @@ bool wxGridSelection::ExtendCurrentBlock(const wxGridCellCoords& blockStart,
|
|||||||
canChangeCol = true;
|
canChangeCol = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case wxGrid::wxGridSelectNone:
|
||||||
|
wxFAIL_MSG("unreachable");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( canChangeRow )
|
if ( canChangeRow )
|
||||||
@@ -754,7 +784,8 @@ wxGridCellCoordsArray wxGridSelection::GetBlockSelectionBottomRight() const
|
|||||||
// is, anyhow, the best we can do.
|
// is, anyhow, the best we can do.
|
||||||
wxArrayInt wxGridSelection::GetRowSelection() const
|
wxArrayInt wxGridSelection::GetRowSelection() const
|
||||||
{
|
{
|
||||||
if ( m_selectionMode == wxGrid::wxGridSelectColumns )
|
if ( m_selectionMode == wxGrid::wxGridSelectColumns ||
|
||||||
|
m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
return wxArrayInt();
|
return wxArrayInt();
|
||||||
|
|
||||||
wxIntSortedArray uniqueRows;
|
wxIntSortedArray uniqueRows;
|
||||||
@@ -785,7 +816,8 @@ wxArrayInt wxGridSelection::GetRowSelection() const
|
|||||||
// See comments for GetRowSelection().
|
// See comments for GetRowSelection().
|
||||||
wxArrayInt wxGridSelection::GetColSelection() const
|
wxArrayInt wxGridSelection::GetColSelection() const
|
||||||
{
|
{
|
||||||
if ( m_selectionMode == wxGrid::wxGridSelectRows )
|
if ( m_selectionMode == wxGrid::wxGridSelectRows ||
|
||||||
|
m_selectionMode == wxGrid::wxGridSelectNone )
|
||||||
return wxArrayInt();
|
return wxArrayInt();
|
||||||
|
|
||||||
wxIntSortedArray uniqueCols;
|
wxIntSortedArray uniqueCols;
|
||||||
|
Reference in New Issue
Block a user