From: Julian Smart Date: Tue, 10 Sep 2002 13:50:52 +0000 (+0000) Subject: Applied patch [ 607261 ] Fix: wxGrid: row and cell selection X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/64e15340d0e76155609ea60b4f952a895261d869?hp=69c14ebe016ee8be2dd14defc4d37a136d0c3450 Applied patch [ 607261 ] Fix: wxGrid: row and cell selection This is a patch against version 1.222 of src/generic/grid.cpp. 1. The patch contains a fix for the row selection as mentioned by me on the wx-dev mailing list. After selecting one row and deselecting it no new row could be selected. 2. Another change has been made to the function CoordToRowOrCol() and addresses an error mailed to wx-dev by John Labensky. The error was that no cell could be selected until a horizontal and vertical resize of at least one cell has been made. The error was that the function could not handle grids with default row or columns sizes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@17112 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 8cda3b1549..e74164d9ae 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3573,14 +3573,15 @@ void wxGridWindow::OnEraseBackground( wxEraseEvent& WXUNUSED(event) ) // Internal helper macros for simpler use of that function static int CoordToRowOrCol(int coord, int defaultDist, int minDist, - const wxArrayInt& BorderArray, bool maxOnOverflow); + const wxArrayInt& BorderArray, int nMax, + bool maxOnOverflow); #define internalXToCol(x) CoordToRowOrCol(x, m_defaultColWidth, \ WXGRID_MIN_COL_WIDTH, \ - m_colRights, TRUE) + m_colRights, m_numCols, TRUE) #define internalYToRow(y) CoordToRowOrCol(y, m_defaultRowHeight, \ WXGRID_MIN_ROW_HEIGHT, \ - m_rowBottoms, TRUE) + m_rowBottoms, m_numRows, TRUE) ///////////////////////////////////////////////////////////////////// IMPLEMENT_DYNAMIC_CLASS( wxGrid, wxScrolledWindow ) @@ -4558,7 +4559,7 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event ) { if ( !event.ShiftDown() && !event.ControlDown() ) ClearSelection(); - else if ( m_selection ) + if ( m_selection ) { if ( event.ShiftDown() ) { @@ -7323,7 +7324,8 @@ void wxGrid::XYToCell( int x, int y, wxGridCellCoords& coords ) // of m_rowBottoms/m_ColRights to speed up the search! static int CoordToRowOrCol(int coord, int defaultDist, int minDist, - const wxArrayInt& BorderArray, bool maxOnOverflow) + const wxArrayInt& BorderArray, int nMax, + bool maxOnOverflow) { if (!defaultDist) defaultDist = 1; @@ -7331,6 +7333,8 @@ static int CoordToRowOrCol(int coord, int defaultDist, int minDist, i_min = 0; if (BorderArray.IsEmpty()) { + if((int) i_max <= nMax) + return i_max; return maxOnOverflow ? (int)i_max : -1; } @@ -7371,14 +7375,14 @@ static int CoordToRowOrCol(int coord, int defaultDist, int minDist, int wxGrid::YToRow( int y ) { return CoordToRowOrCol(y, m_defaultRowHeight, - WXGRID_MIN_ROW_HEIGHT, m_rowBottoms, FALSE); + WXGRID_MIN_ROW_HEIGHT, m_rowBottoms, m_numRows, FALSE); } int wxGrid::XToCol( int x ) { return CoordToRowOrCol(x, m_defaultColWidth, - WXGRID_MIN_COL_WIDTH, m_colRights, FALSE); + WXGRID_MIN_COL_WIDTH, m_colRights, m_numCols, FALSE); }