Merge branch 'grid-selection-compat'

Fix wxGrid selection functions compatibility.

See https://github.com/wxWidgets/wxWidgets/pull/2568
This commit is contained in:
Vadim Zeitlin 2021-10-27 18:42:57 +01:00
commit f9621cb888
3 changed files with 17 additions and 22 deletions

View File

@ -2301,17 +2301,12 @@ void wxGrid::Render( wxDC& dc,
// remove grid selection, don't paint selection colour
// unless we have wxGRID_DRAW_SELECTION
// block selections are the only ones catered for here
wxGridCellCoordsArray selectedCells;
bool hasSelection = IsSelection();
if ( hasSelection && !( style & wxGRID_DRAW_SELECTION ) )
wxGridSelection* selectionOrig = NULL;
if ( m_selection && !( style & wxGRID_DRAW_SELECTION ) )
{
selectedCells = GetSelectionBlockTopLeft();
// non block selections may not have a bottom right
if ( GetSelectionBlockBottomRight().size() )
selectedCells.Add( GetSelectionBlockBottomRight()[ 0 ] );
ClearSelection();
// remove the selection temporarily, it will be restored below
selectionOrig = m_selection;
m_selection = NULL;
}
// store user device origin
@ -2437,12 +2432,9 @@ void wxGrid::Render( wxDC& dc,
dc.SetDeviceOrigin( userOriginX, userOriginY );
dc.SetUserScale( scaleUserX, scaleUserY );
if ( selectedCells.size() && !( style & wxGRID_DRAW_SELECTION ) )
if ( selectionOrig )
{
SelectBlock( selectedCells[ 0 ].GetRow(),
selectedCells[ 0 ].GetCol(),
selectedCells[ selectedCells.size() -1 ].GetRow(),
selectedCells[ selectedCells.size() -1 ].GetCol() );
m_selection = selectionOrig;
}
}

View File

@ -746,10 +746,6 @@ wxGridCellCoordsArray wxGridSelection::GetCellSelection() const
wxGridCellCoordsArray wxGridSelection::GetBlockSelectionTopLeft() const
{
// return blocks only in wxGridSelectCells selection mode
if ( m_selectionMode != wxGrid::wxGridSelectCells )
return wxGridCellCoordsArray();
wxGridCellCoordsArray coords;
const size_t count = m_selection.size();
coords.reserve(count);
@ -762,9 +758,6 @@ wxGridCellCoordsArray wxGridSelection::GetBlockSelectionTopLeft() const
wxGridCellCoordsArray wxGridSelection::GetBlockSelectionBottomRight() const
{
if ( m_selectionMode != wxGrid::wxGridSelectCells )
return wxGridCellCoordsArray();
wxGridCellCoordsArray coords;
const size_t count = m_selection.size();
coords.reserve(count);

View File

@ -1163,6 +1163,16 @@ TEST_CASE_METHOD(GridTestCase, "Grid::SelectionMode", "[grid]")
CHECK( m_grid->IsInSelection(5, 1) );
CHECK( !m_grid->IsInSelection(3, 1) );
// Check that top left/bottom right selection functions still work in row
// selection mode.
wxGridCellCoordsArray arr = m_grid->GetSelectionBlockTopLeft();
REQUIRE( arr.size() == 1 );
CHECK( arr[0] == wxGridCellCoords(5, 0) );
arr = m_grid->GetSelectionBlockBottomRight();
REQUIRE( arr.size() == 1 );
CHECK( arr[0] == wxGridCellCoords(5, 1) );
//Test row selection be selecting a single cell and checking the whole
//row is selected
m_grid->ClearSelection();