X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8862315bb910b4d86cdcb48ae8736c7d15e89536..aa61d3525370a9b9fa8c797d9b7f89d96994db5f:/src/generic/gridsel.cpp diff --git a/src/generic/gridsel.cpp b/src/generic/gridsel.cpp index 91d57fc968..c815064484 100644 --- a/src/generic/gridsel.cpp +++ b/src/generic/gridsel.cpp @@ -30,6 +30,7 @@ #include "wx/generic/gridsel.h" + // Some explanation for the members of the class: // m_cellSelection stores individual selected cells // -- this is only used if m_selectionMode == wxGridSelectCells @@ -52,7 +53,7 @@ bool wxGridSelection::IsSelection() m_rowSelection.GetCount() || m_colSelection.GetCount() ); } -bool wxGridSelection::IsInSelection ( int row, int col ) +bool wxGridSelection::IsInSelection( int row, int col ) { size_t count; @@ -107,11 +108,12 @@ bool wxGridSelection::IsInSelection ( int row, int col ) return true; } } + return false; } // Change the selection mode -void wxGridSelection::SetSelectionMode(wxGrid::wxGridSelectionModes selmode) +void wxGridSelection::SetSelectionMode( wxGrid::wxGridSelectionModes selmode ) { // if selection mode is unchanged return immediately if (selmode == m_selectionMode) @@ -144,8 +146,8 @@ void wxGridSelection::SetSelectionMode(wxGrid::wxGridSelectionModes selmode) SelectCol( col ); } - for (n = 0; n < m_blockSelectionTopLeft.GetCount(); n++) // Note that m_blockSelectionTopLeft's size may be changing! + for (n = 0; n < m_blockSelectionTopLeft.GetCount(); n++) { wxGridCellCoords& coords = m_blockSelectionTopLeft[n]; int topRow = coords.GetRow(); @@ -153,6 +155,7 @@ void wxGridSelection::SetSelectionMode(wxGrid::wxGridSelectionModes selmode) coords = m_blockSelectionBottomRight[n]; int bottomRow = coords.GetRow(); int rightCol = coords.GetCol(); + if (selmode == wxGrid::wxGridSelectRows) { if (leftCol != 0 || rightCol != m_grid->GetNumberCols() - 1 ) @@ -176,6 +179,7 @@ void wxGridSelection::SetSelectionMode(wxGrid::wxGridSelectionModes selmode) } } } + m_selectionMode = selmode; } } @@ -186,6 +190,7 @@ void wxGridSelection::SelectRow( int row, { if ( m_selectionMode == wxGrid::wxGridSelectColumns ) return; + size_t count, n; // Remove single cells contained in newly selected block. @@ -199,7 +204,8 @@ void wxGridSelection::SelectRow( int row, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); - n--; count--; + n--; + count--; } } } @@ -207,6 +213,7 @@ void wxGridSelection::SelectRow( int row, // Simplify list of selected blocks (if possible) count = m_blockSelectionTopLeft.GetCount(); bool done = false; + for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; @@ -217,7 +224,8 @@ void wxGridSelection::SelectRow( int row, { m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; } else if ( coords1.GetCol() == 0 && coords2.GetCol() == m_grid->GetNumberCols() - 1 ) @@ -272,7 +280,7 @@ void wxGridSelection::SelectRow( int row, ControlDown, ShiftDown, AltDown, MetaDown ); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); + m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } void wxGridSelection::SelectCol( int col, @@ -294,7 +302,8 @@ void wxGridSelection::SelectCol( int col, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); - n--; count--; + n--; + count--; } } } @@ -312,7 +321,8 @@ void wxGridSelection::SelectCol( int col, { m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; } else if ( coords1.GetRow() == 0 && coords2.GetRow() == m_grid->GetNumberRows() - 1 ) @@ -367,7 +377,7 @@ void wxGridSelection::SelectCol( int col, ControlDown, ShiftDown, AltDown, MetaDown ); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); + m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } void wxGridSelection::SelectBlock( int topRow, int leftCol, @@ -387,6 +397,7 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, topRow = 0; bottomRow = m_grid->GetNumberRows() - 1; } + if ( topRow > bottomRow ) { int temp = topRow; @@ -407,10 +418,13 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, // grid only has 1 col) if ( m_selectionMode == wxGrid::wxGridSelectCells && topRow == bottomRow && leftCol == rightCol ) + { SelectCell( topRow, leftCol, ControlDown, ShiftDown, AltDown, MetaDown, sendEvent ); + } size_t count, n; + // Remove single cells contained in newly selected block. if ( m_selectionMode == wxGrid::wxGridSelectCells ) { @@ -422,7 +436,8 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, coords.GetRow(), coords.GetCol() ) ) { m_cellSelection.RemoveAt(n); - n--; count--; + n--; + count--; } } } @@ -435,6 +450,7 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; + switch ( BlockContain( coords1.GetRow(), coords1.GetCol(), coords2.GetRow(), coords2.GetCol(), topRow, leftCol, bottomRow, rightCol ) ) @@ -445,7 +461,8 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, case -1: m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; break; default: @@ -461,7 +478,7 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, for ( n = 0; n < count; n++ ) { switch ( BlockContain( m_rowSelection[n], 0, - m_rowSelection[n], m_grid->GetNumberCols()-1, + m_rowSelection[n], m_grid->GetNumberCols() - 1, topRow, leftCol, bottomRow, rightCol ) ) { case 1: @@ -469,7 +486,8 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, case -1: m_rowSelection.RemoveAt(n); - n--; count--; + n--; + count--; break; default: @@ -477,13 +495,14 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, } } } + if ( m_selectionMode != wxGrid::wxGridSelectRows ) { count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { switch ( BlockContain( 0, m_colSelection[n], - m_grid->GetNumberRows()-1, m_colSelection[n], + m_grid->GetNumberRows() - 1, m_colSelection[n], topRow, leftCol, bottomRow, rightCol ) ) { case 1: @@ -491,7 +510,8 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, case -1: m_colSelection.RemoveAt(n); - n--; count--; + n--; + count--; break; default: @@ -499,6 +519,7 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, } } } + m_blockSelectionTopLeft.Add( wxGridCellCoords( topRow, leftCol ) ); m_blockSelectionBottomRight.Add( wxGridCellCoords( bottomRow, rightCol ) ); @@ -514,14 +535,14 @@ void wxGridSelection::SelectBlock( int topRow, int leftCol, if ( sendEvent ) { wxGridRangeSelectEvent gridEvt( m_grid->GetId(), - wxEVT_GRID_RANGE_SELECT, - m_grid, - wxGridCellCoords( topRow, leftCol ), - wxGridCellCoords( bottomRow, rightCol ), - true, - ControlDown, ShiftDown, - AltDown, MetaDown ); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); + wxEVT_GRID_RANGE_SELECT, + m_grid, + wxGridCellCoords( topRow, leftCol ), + wxGridCellCoords( bottomRow, rightCol ), + true, + ControlDown, ShiftDown, + AltDown, MetaDown ); + m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } } @@ -534,23 +555,27 @@ void wxGridSelection::SelectCell( int row, int col, { SelectBlock(row, 0, row, m_grid->GetNumberCols() - 1, ControlDown, ShiftDown, AltDown, MetaDown, sendEvent); + return; } else if ( m_selectionMode == wxGrid::wxGridSelectColumns ) { SelectBlock(0, col, m_grid->GetNumberRows() - 1, col, ControlDown, ShiftDown, AltDown, MetaDown, sendEvent); + return; } else if ( IsInSelection ( row, col ) ) return; + m_cellSelection.Add( wxGridCellCoords( row, col ) ); // Update View: if ( !m_grid->GetBatchCount() ) { - wxRect r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ) ); + wxRect r = m_grid->BlockToDeviceRect( + wxGridCellCoords( row, col ), + wxGridCellCoords( row, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); } @@ -558,14 +583,14 @@ void wxGridSelection::SelectCell( int row, int col, if (sendEvent) { wxGridRangeSelectEvent gridEvt( m_grid->GetId(), - wxEVT_GRID_RANGE_SELECT, - m_grid, - wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ), - true, - ControlDown, ShiftDown, - AltDown, MetaDown); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); + wxEVT_GRID_RANGE_SELECT, + m_grid, + wxGridCellCoords( row, col ), + wxGridCellCoords( row, col ), + true, + ControlDown, ShiftDown, + AltDown, MetaDown ); + m_grid->GetEventHandler()->ProcessEvent( gridEvt ); } } @@ -576,8 +601,8 @@ void wxGridSelection::ToggleCellSelection( int row, int col, // if the cell is not selected, select it if ( !IsInSelection ( row, col ) ) { - SelectCell( row, col, ControlDown, ShiftDown, - AltDown, MetaDown ); + SelectCell( row, col, ControlDown, ShiftDown, AltDown, MetaDown ); + return; } @@ -615,7 +640,8 @@ void wxGridSelection::ToggleCellSelection( int row, int col, false, ControlDown, ShiftDown, AltDown, MetaDown ); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); + m_grid->GetEventHandler()->ProcessEvent( gridEvt ); + return; } } @@ -642,20 +668,22 @@ void wxGridSelection::ToggleCellSelection( int row, int col, count = m_blockSelectionTopLeft.GetCount(); for ( n = 0; n < count; n++ ) - { + { wxGridCellCoords& coords1 = m_blockSelectionTopLeft[n]; wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; int topRow = coords1.GetRow(); int leftCol = coords1.GetCol(); int bottomRow = coords2.GetRow(); int rightCol = coords2.GetCol(); - if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, - row, col ) ) + + if ( BlockContainsCell( topRow, leftCol, bottomRow, rightCol, row, col ) ) { // remove the block m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; + // add up to 4 smaller blocks and set update region if ( m_selectionMode != wxGrid::wxGridSelectColumns ) { @@ -666,6 +694,7 @@ void wxGridSelection::ToggleCellSelection( int row, int col, SelectBlock( row + 1, leftCol, bottomRow, rightCol, false, false, false, false, false ); } + if ( m_selectionMode != wxGrid::wxGridSelectRows ) { if ( leftCol < col ) @@ -687,7 +716,9 @@ void wxGridSelection::ToggleCellSelection( int row, int col, if ( m_rowSelection[n] == row ) { m_rowSelection.RemoveAt(n); - n--; count--; + n--; + count--; + if (m_selectionMode == wxGrid::wxGridSelectCells) { if ( col > 0 ) @@ -711,7 +742,9 @@ void wxGridSelection::ToggleCellSelection( int row, int col, if ( m_colSelection[n] == col ) { m_colSelection.RemoveAt(n); - n--; count--; + n--; + count--; + if (m_selectionMode == wxGrid::wxGridSelectCells) { if ( row > 0 ) @@ -731,66 +764,74 @@ void wxGridSelection::ToggleCellSelection( int row, int col, wxRect r; switch (m_selectionMode) { - case wxGrid::wxGridSelectCells: - { - if ( !m_grid->GetBatchCount() ) - { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, col ), - wxGridCellCoords( row, col ) ); - ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); - } + case 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, - ControlDown, ShiftDown, - AltDown, MetaDown ); - m_grid->GetEventHandler()->ProcessEvent(gridEvt); - break; - } - case wxGrid::wxGridSelectRows: - { - if ( !m_grid->GetBatchCount() ) - { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), - wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); - ((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; - 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: - { - if ( !m_grid->GetBatchCount() ) - { - r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), - wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); + case wxGrid::wxGridSelectRows: + { + if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( + wxGridCellCoords( row, 0 ), + wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); + ((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: + { + if ( !m_grid->GetBatchCount() ) + { + r = m_grid->BlockToDeviceRect( + wxGridCellCoords( 0, col ), + wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((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; - } + 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; + + default: + break; } } @@ -812,6 +853,7 @@ void wxGridSelection::ClearSelection() { r = m_grid->BlockToDeviceRect( coords1, coords1 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); + #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif @@ -831,6 +873,7 @@ void wxGridSelection::ClearSelection() { r = m_grid->BlockToDeviceRect( coords1, coords2 ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); + #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif @@ -850,6 +893,7 @@ void wxGridSelection::ClearSelection() r = m_grid->BlockToDeviceRect( wxGridCellCoords( row, 0 ), wxGridCellCoords( row, m_grid->GetNumberCols() - 1 ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); + #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif @@ -870,6 +914,7 @@ void wxGridSelection::ClearSelection() r = m_grid->BlockToDeviceRect( wxGridCellCoords( 0, col ), wxGridCellCoords( m_grid->GetNumberRows() - 1, col ) ); ((wxWindow *)m_grid->m_gridWin)->Refresh( false, &r ); + #ifdef __WXMAC__ ((wxWindow *)m_grid->m_gridWin)->Update(); #endif @@ -884,8 +929,9 @@ void wxGridSelection::ClearSelection() wxEVT_GRID_RANGE_SELECT, m_grid, wxGridCellCoords( 0, 0 ), - wxGridCellCoords( m_grid->GetNumberRows() - 1, - m_grid->GetNumberCols() - 1 ), + wxGridCellCoords( + m_grid->GetNumberRows() - 1, + m_grid->GetNumberCols() - 1 ), false ); m_grid->GetEventHandler()->ProcessEvent(gridEvt); @@ -919,7 +965,8 @@ void wxGridSelection::UpdateRows( size_t pos, int numRows ) { // ...or remove the attribute m_cellSelection.RemoveAt(n); - n--; count--; + n--; + count--; } } } @@ -932,14 +979,15 @@ void wxGridSelection::UpdateRows( size_t pos, int numRows ) wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; wxCoord row1 = coords1.GetRow(); wxCoord row2 = coords2.GetRow(); + if ((size_t)row2 >= pos) { if (numRows > 0) { // If rows inserted, increase row counter where necessary - coords2.SetRow(row2 + numRows); - if ( (size_t)row1 >= pos ) - coords1.SetRow(row1 + numRows); + coords2.SetRow( row2 + numRows ); + if ((size_t)row1 >= pos) + coords1.SetRow( row1 + numRows ); } else if (numRows < 0) { @@ -947,22 +995,23 @@ void wxGridSelection::UpdateRows( size_t pos, int numRows ) if ((size_t)row2 >= pos - numRows) { // ...either decrement row counter (if row still exists)... - coords2.SetRow(row2 + numRows); - if ( (size_t) row1 >= pos) - coords1.SetRow( wxMax(row1 + numRows, (int) pos) ); + coords2.SetRow( row2 + numRows ); + if ((size_t)row1 >= pos) + coords1.SetRow( wxMax(row1 + numRows, (int)pos) ); } else { - if ( (size_t) row1 >= pos) + if ((size_t)row1 >= pos) { // ...or remove the attribute m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; } else - coords2.SetRow(pos); + coords2.SetRow( pos ); } } } @@ -971,21 +1020,21 @@ void wxGridSelection::UpdateRows( size_t pos, int numRows ) count = m_rowSelection.GetCount(); for ( n = 0; n < count; n++ ) { - int rowOrCol_ = m_rowSelection [ n ]; + int rowOrCol_ = m_rowSelection[n]; - if ( ( size_t ) rowOrCol_ >= pos ) + if ((size_t) rowOrCol_ >= pos) { if ( numRows > 0 ) { - m_rowSelection [ n ] += numRows; + m_rowSelection[n] += numRows; } else if ( numRows < 0 ) { - if ( ( size_t ) rowOrCol_ >= ( pos - numRows ) ) - m_rowSelection [ n ] += numRows; + if ((size_t)rowOrCol_ >= (pos - numRows)) + m_rowSelection[n] += numRows; else { - m_rowSelection.RemoveAt ( n ); + m_rowSelection.RemoveAt( n ); n--; count--; } @@ -1004,6 +1053,7 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) { size_t count = m_cellSelection.GetCount(); size_t n; + for ( n = 0; n < count; n++ ) { wxGridCellCoords& coords = m_cellSelection[n]; @@ -1027,7 +1077,8 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) { // ...or remove the attribute m_cellSelection.RemoveAt(n); - n--; count--; + n--; + count--; } } } @@ -1040,13 +1091,14 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) wxGridCellCoords& coords2 = m_blockSelectionBottomRight[n]; wxCoord col1 = coords1.GetCol(); wxCoord col2 = coords2.GetCol(); + if ((size_t)col2 >= pos) { if (numCols > 0) { // If rows inserted, increase row counter where necessary coords2.SetCol(col2 + numCols); - if ( (size_t)col1 >= pos ) + if ((size_t)col1 >= pos) coords1.SetCol(col1 + numCols); } else if (numCols < 0) @@ -1057,17 +1109,18 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) // ...either decrement col counter (if col still exists)... coords2.SetCol(col2 + numCols); if ( (size_t) col1 >= pos) - coords1.SetCol( wxMax(col1 + numCols, (int) pos) ); + coords1.SetCol( wxMax(col1 + numCols, (int)pos) ); } else { - if ( (size_t) col1 >= pos) + if ((size_t)col1 >= pos) { // ...or remove the attribute m_blockSelectionTopLeft.RemoveAt(n); m_blockSelectionBottomRight.RemoveAt(n); - n--; count--; + n--; + count--; } else coords2.SetCol(pos); @@ -1079,25 +1132,24 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) count = m_colSelection.GetCount(); for ( n = 0; n < count; n++ ) { + int rowOrCol = m_colSelection[n]; - int rowOrCol = m_colSelection [ n ]; - if ( ( size_t ) rowOrCol >= pos ) + if ((size_t)rowOrCol >= pos) { if ( numCols > 0 ) - m_colSelection [ n ] += numCols; + m_colSelection[n] += numCols; else if ( numCols < 0 ) { - if ( ( size_t ) rowOrCol >= ( pos -numCols ) ) - m_colSelection [ n ] += numCols; + if ((size_t)rowOrCol >= (pos - numCols)) + m_colSelection[n] += numCols; else { - m_colSelection.RemoveAt ( n ); + m_colSelection.RemoveAt( n ); n--; count--; } } } - } // No need to touch selected rows, unless we removed _all_ @@ -1106,7 +1158,6 @@ void wxGridSelection::UpdateCols( size_t pos, int numCols ) m_rowSelection.Clear(); } - int wxGridSelection::BlockContain( int topRow1, int leftCol1, int bottomRow1, int rightCol1, int topRow2, int leftCol2, @@ -1121,6 +1172,7 @@ int wxGridSelection::BlockContain( int topRow1, int leftCol1, else if ( topRow2 <= topRow1 && bottomRow1 <= bottomRow2 && leftCol2 <= leftCol1 && rightCol1 <= rightCol2 ) return -1; + return 0; }