- switch (m_selectionMode)
- {
- case wxGrid::wxGridSelectCells:
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ),
- wxGridCellCoords( row, col ) );
- break;
- case wxGrid::wxGridSelectRows:
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ),
- wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) );
- break;
- case wxGrid::wxGridSelectColumns:
- r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ),
- wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) );
- break;
+ if ( m_selectionMode == wxGrid::wxGridSelectCells )
+ {
+ 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;
+ }
+ }
+ }