X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1f89d869e72e889fe39fb74755390f1fea12623e..e56fee472c0a59f9b1d45c84a8439e37a1f9925d:/src/generic/grid.cpp diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 6e276fe316..9c795c276b 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -6663,7 +6663,7 @@ int wxGrid::XToPos(int x) const return PosToLinePos(x, true /* clip */, wxGridColumnOperations()); } -// return the row number such that the y coord is near the edge of, or -1 if +// return the row/col number such that the pos is near the edge of, or -1 if // not near an edge. // // notice that position can only possibly be near an edge if the row/column is @@ -6672,7 +6672,8 @@ int wxGrid::XToPos(int x) const // _never_ be considered to be near the edge). int wxGrid::PosToEdgeOfLine(int pos, const wxGridOperations& oper) const { - const int line = oper.PosToLine(this, pos, true); + // Get the bottom or rightmost line that could match. + int line = oper.PosToLine(this, pos, true); if ( oper.GetLineSize(this, line) > WXGRID_LABEL_EDGE_ZONE ) { @@ -6684,7 +6685,16 @@ int wxGrid::PosToEdgeOfLine(int pos, const wxGridOperations& oper) const pos - oper.GetLineStartPos(this, line) < WXGRID_LABEL_EDGE_ZONE ) { - return oper.GetLineBefore(this, line); + // We need to find the previous visible line, so skip all the + // hidden (of size 0) ones. + do + { + line = oper.GetLineBefore(this, line); + } + while ( line >= 0 && oper.GetLineSize(this, line) == 0 ); + + // It can possibly be -1 here. + return line; } } @@ -8106,8 +8116,11 @@ int UpdateRowOrColSize(int& sizeCurrent, int sizeNew) // We're showing back a previously hidden row/column. wxASSERT_MSG( sizeNew == -1, wxS("New size must be positive or -1.") ); - wxASSERT_MSG( sizeCurrent < 0, wxS("May only show back if hidden.") ); + // If it's already visible, simply do nothing. + if ( sizeCurrent >= 0 ) + return 0; + // Otherwise show it by restoring its old size. sizeCurrent = -sizeCurrent; // This is positive which is correct. @@ -8116,8 +8129,13 @@ int UpdateRowOrColSize(int& sizeCurrent, int sizeNew) else if ( sizeNew == 0 ) { // We're hiding a row/column. - wxASSERT_MSG( sizeCurrent > 0, wxS("Can't hide if already hidden.") ); + // If it's already hidden, simply do nothing. + if ( sizeCurrent <= 0 ) + return 0; + + // Otherwise hide it and also remember the shown size to be able to + // restore it later. sizeCurrent = -sizeCurrent; // This is negative which is correct.