From: Vadim Zeitlin Date: Sat, 12 Jan 2013 03:09:12 +0000 (+0000) Subject: Allow hiding/showing already hidden/shown wxGrid rows/columns. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2328f4686384a1f51f3635a5a1a4269996610d54?ds=inline Allow hiding/showing already hidden/shown wxGrid rows/columns. Don't assert if an already hidden/shown row/column is being hidden/shown again but simply don't do anything. This is more convenient because the code outside wxGrid has no efficient way to only hide a row/column if it's currently shown. Closes #14960. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@73366 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/interface/wx/grid.h b/interface/wx/grid.h index a614af5b0e..0b15c437fb 100644 --- a/interface/wx/grid.h +++ b/interface/wx/grid.h @@ -2988,8 +2988,7 @@ public: To show the column later you need to call SetColSize() with non-0 width or ShowCol() to restore the previous column width. - Notice that this method shouldn't be called if the column is already - hidden. + If the column is already hidden, this method doesn't do anything. @param col The column index. @@ -3002,8 +3001,7 @@ public: The column is shown again with the same width that it had before HideCol() call. - Notice that this method shouldn't be called if the column is not - currently hidden. + If the column is currently shown, this method doesn't do anything. @see HideCol(), SetColSize() */ @@ -3073,6 +3071,8 @@ public: To show the row later you need to call SetRowSize() with non-0 width or ShowRow() to restore its original height. + If the row is already hidden, this method doesn't do anything. + @param col The row index. */ @@ -3084,6 +3084,8 @@ public: The row is shown again with the same height that it had before HideRow() call. + If the row is currently shown, this method doesn't do anything. + @see HideRow(), SetRowSize() */ void ShowRow(int col); diff --git a/samples/grid/griddemo.cpp b/samples/grid/griddemo.cpp index 35dcee999a..f10c12a51c 100644 --- a/samples/grid/griddemo.cpp +++ b/samples/grid/griddemo.cpp @@ -211,6 +211,11 @@ BEGIN_EVENT_TABLE( GridFrame, wxFrame ) EVT_MENU( ID_SIZE_LABELS_ROW, GridFrame::AutoSizeLabelsRow ) EVT_MENU( ID_SIZE_GRID, GridFrame::AutoSizeTable ) + EVT_MENU( ID_HIDECOL, GridFrame::HideCol ) + EVT_MENU( ID_SHOWCOL, GridFrame::ShowCol ) + EVT_MENU( ID_HIDEROW, GridFrame::HideRow ) + EVT_MENU( ID_SHOWROW, GridFrame::ShowRow ) + EVT_MENU( ID_SET_HIGHLIGHT_WIDTH, GridFrame::OnSetHighlightWidth) EVT_MENU( ID_SET_RO_HIGHLIGHT_WIDTH, GridFrame::OnSetROHighlightWidth) @@ -293,7 +298,10 @@ GridFrame::GridFrame() viewMenu->AppendCheckItem(ID_AUTOSIZECOLS, "&Auto-size cols"); viewMenu->AppendCheckItem(ID_CELLOVERFLOW, "&Overflow cells"); viewMenu->AppendCheckItem(ID_RESIZECELL, "&Resize cell (7,1)"); - + viewMenu->Append(ID_HIDECOL, "&Hide column A"); + viewMenu->Append(ID_SHOWCOL, "&Show column A"); + viewMenu->Append(ID_HIDEROW, "&Hide row 2"); + viewMenu->Append(ID_SHOWROW, "&Show row 2"); wxMenu *rowLabelMenu = new wxMenu; viewMenu->Append( ID_ROWLABELALIGN, wxT("R&ow label alignment"), @@ -2309,3 +2317,23 @@ void GridFrame::OnRenderPaint( wxPaintEvent& event ) m_gridBitmap.GetHeight(), &memDc, 0, 0 ); } + +void GridFrame::HideCol( wxCommandEvent& WXUNUSED(event) ) +{ + grid->HideCol(0); +} + +void GridFrame::ShowCol( wxCommandEvent& WXUNUSED(event) ) +{ + grid->ShowCol(0); +} + +void GridFrame::HideRow( wxCommandEvent& WXUNUSED(event) ) +{ + grid->HideRow(1); +} + +void GridFrame::ShowRow( wxCommandEvent& WXUNUSED(event) ) +{ + grid->ShowRow(1); +} diff --git a/samples/grid/griddemo.h b/samples/grid/griddemo.h index 8805614194..1303018c97 100644 --- a/samples/grid/griddemo.h +++ b/samples/grid/griddemo.h @@ -88,6 +88,12 @@ class GridFrame : public wxFrame void AutoSizeLabelsRow(wxCommandEvent& event); void AutoSizeTable(wxCommandEvent& event); + void HideCol(wxCommandEvent& event); + void ShowCol(wxCommandEvent& event); + void HideRow(wxCommandEvent& event); + void ShowRow(wxCommandEvent& event); + + void OnLabelLeftClick( wxGridEvent& ); void OnCellLeftClick( wxGridEvent& ); void OnRowSize( wxGridSizeEvent& ); @@ -131,6 +137,10 @@ public: ID_TOGGLEGRIDLINES, ID_AUTOSIZECOLS, ID_CELLOVERFLOW, + ID_HIDECOL, + ID_SHOWCOL, + ID_HIDEROW, + ID_SHOWROW, ID_RESIZECELL, ID_SETLABELCOLOUR, ID_SETLABELTEXTCOLOUR, diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 6e276fe316..499e600b19 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -8106,8 +8106,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 +8119,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.