- case wxGrid::wxGridSelectCells:
- {
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
- wxGridCellCoords( row, col ) );
- if ( !m_grid->GetBatchCount() )
- ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
- wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
- wxEVT_GRID_RANGE_SELECT,
- m_grid,
- wxGridCellCoords( row, col ),
- wxGridCellCoords( row, col ),
- FALSE,
- ControlDown, ShiftDown,
- AltDown, MetaDown );
- m_grid->GetEventHandler()->ProcessEvent(gridEvt);
- break;
- }
- case wxGrid::wxGridSelectRows:
- {
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
- wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
- if ( !m_grid->GetBatchCount() )
- ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
- wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
- wxEVT_GRID_RANGE_SELECT,
- m_grid,
- wxGridCellCoords( row, 0 ),
- wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ),
- FALSE,
- ControlDown, ShiftDown,
- AltDown, MetaDown );
- m_grid->GetEventHandler()->ProcessEvent(gridEvt);
- break;
- }
- case wxGrid::wxGridSelectColumns:
- {
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
- wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
- if ( !m_grid->GetBatchCount() )
- ((wxWindow *)m_grid->m_gridWin)->Refresh( FALSE, &r );
- wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
- wxEVT_GRID_RANGE_SELECT,
- m_grid,
- wxGridCellCoords( 0, col ),
- wxGridCellCoords( m_grid->GetNumberRows() - 1, col ),
- FALSE,
- ControlDown, ShiftDown,
- AltDown, MetaDown );
- m_grid->GetEventHandler()->ProcessEvent(gridEvt);
- break;
- }
+ if ( !m_grid->GetBatchCount() )
+ {
+ r = m_grid->BlockToDeviceRect(
+ wxGridCellCoords( row, col ),
+ wxGridCellCoords( row, col ) );
+ ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r );
+ }
+
+ wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
+ wxEVT_GRID_RANGE_SELECT,
+ m_grid,
+ wxGridCellCoords( row, col ),
+ wxGridCellCoords( row, col ),
+ false,
+ kbd );
+ m_grid->GetEventHandler()->ProcessEvent( gridEvt );
+ }
+ else // rows/columns selection mode
+ {
+ if ( m_selectionMode != wxGrid::wxGridSelectColumns &&
+ rowSelectionWasChanged )
+ {
+ int numCols = m_grid->GetNumberCols();
+ for ( int colFrom = 0, colTo = 0; colTo <= numCols; ++colTo )
+ {
+ if ( m_colSelection.Index(colTo) >= 0 || colTo == numCols )
+ {
+ if ( colFrom < colTo )
+ {
+ if ( !m_grid->GetBatchCount() )
+ {
+ r = m_grid->BlockToDeviceRect(
+ wxGridCellCoords( row, colFrom ),
+ wxGridCellCoords( row, colTo-1 ) );
+ ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r );
+ }
+
+ wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
+ wxEVT_GRID_RANGE_SELECT,
+ m_grid,
+ wxGridCellCoords( row, colFrom ),
+ wxGridCellCoords( row, colTo - 1 ),
+ false,
+ kbd );
+ m_grid->GetEventHandler()->ProcessEvent( gridEvt );
+ }
+
+ colFrom = colTo + 1;
+ }
+ }
+ }
+
+ if ( m_selectionMode != wxGrid::wxGridSelectRows &&
+ colSelectionWasChanged )
+ {
+ int numRows = m_grid->GetNumberRows();
+ for ( int rowFrom = 0, rowTo = 0; rowTo <= numRows; ++rowTo )
+ {
+ if ( m_rowSelection.Index(rowTo) >= 0 || rowTo == numRows )
+ {
+ if (rowFrom < rowTo)
+ {
+ if ( !m_grid->GetBatchCount() )
+ {
+ r = m_grid->BlockToDeviceRect(
+ wxGridCellCoords( rowFrom, col ),
+ wxGridCellCoords( rowTo - 1, col ) );
+ ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r );
+ }
+
+ wxGridRangeSelectEvent gridEvt( m_grid->GetId(),
+ wxEVT_GRID_RANGE_SELECT,
+ m_grid,
+ wxGridCellCoords( rowFrom, col ),
+ wxGridCellCoords( rowTo - 1, col ),
+ false,
+ kbd );
+ m_grid->GetEventHandler()->ProcessEvent( gridEvt );
+ }
+
+ rowFrom = rowTo + 1;
+ }
+ }
+ }