diff --git a/include/wx/generic/gridsel.h b/include/wx/generic/gridsel.h index c6859d94d6..cb53078f2c 100644 --- a/include/wx/generic/gridsel.h +++ b/include/wx/generic/gridsel.h @@ -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 ); diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index fe821cd87a..56f1cfec6a 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -10235,11 +10235,8 @@ 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 ); - } + if ( m_selection ) + m_selection->SelectAll(); } // ---------------------------------------------------------------------------- diff --git a/src/generic/gridsel.cpp b/src/generic/gridsel.cpp index e8cfdbf048..cc361a0d97 100644 --- a/src/generic/gridsel.cpp +++ b/src/generic/gridsel.cpp @@ -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,