Add wxGridSelection::SelectAll() and use it in wxGrid

The difference between calling SelectAll() and SelectBlock() with a
block covering the entire grid is that the former discards any
previously selected blocks, which become clearly redundant.

As a consequence, clicking on the grid corner 10 times in a row still
results in a selection with a single block, not 10 (identical) blocks.
This commit is contained in:
Vadim Zeitlin
2020-04-12 01:06:42 +02:00
parent 7d56146998
commit 415bab551c
3 changed files with 23 additions and 5 deletions

View File

@@ -52,6 +52,10 @@ public:
kbd, sendEvent);
}
// This function replaces all the existing selected blocks (which become
// redundant) with a single block covering the entire grid.
void SelectAll();
void DeselectBlock(const wxGridBlockCoords& block,
const wxKeyboardState& kbd = wxKeyboardState(),
bool sendEvent = true );

View File

@@ -10234,12 +10234,9 @@ void wxGrid::SelectBlock(int topRow, int leftCol, int bottomRow, int rightCol,
}
void wxGrid::SelectAll()
{
if ( m_numRows > 0 && m_numCols > 0 )
{
if ( m_selection )
m_selection->SelectBlock( 0, 0, m_numRows - 1, m_numCols - 1 );
}
m_selection->SelectAll();
}
// ----------------------------------------------------------------------------

View File

@@ -194,6 +194,23 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol,
kbd, sendEvent);
}
void
wxGridSelection::SelectAll()
{
// There is no need to refresh anything, as Select() will do it anyhow, and
// no need to generate any events, so do not call ClearSelection() here.
m_selection.clear();
const int numRows = m_grid->GetNumberRows();
const int numCols = m_grid->GetNumberCols();
if ( numRows && numCols )
{
Select(wxGridBlockCoords(0, 0, numRows - 1, numCols - 1),
wxKeyboardState(), true /* send event */);
}
}
void
wxGridSelection::DeselectBlock(const wxGridBlockCoords& block,
const wxKeyboardState& kbd,