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
To show the column later you need to call SetColSize() with non-0
width or ShowCol() to restore the previous column width.
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.
@param col
The column index.
The column is shown again with the same width that it had before
HideCol() call.
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()
*/
@see HideCol(), SetColSize()
*/
To show the row later you need to call SetRowSize() with non-0
width or ShowRow() to restore its original height.
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.
*/
@param col
The row index.
*/
The row is shown again with the same height that it had before
HideRow() call.
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);
@see HideRow(), SetRowSize()
*/
void ShowRow(int col);
EVT_MENU( ID_SIZE_LABELS_ROW, GridFrame::AutoSizeLabelsRow )
EVT_MENU( ID_SIZE_GRID, GridFrame::AutoSizeTable )
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)
EVT_MENU( ID_SET_HIGHLIGHT_WIDTH, GridFrame::OnSetHighlightWidth)
EVT_MENU( ID_SET_RO_HIGHLIGHT_WIDTH, GridFrame::OnSetROHighlightWidth)
viewMenu->AppendCheckItem(ID_AUTOSIZECOLS, "&Auto-size cols");
viewMenu->AppendCheckItem(ID_CELLOVERFLOW, "&Overflow cells");
viewMenu->AppendCheckItem(ID_RESIZECELL, "&Resize cell (7,1)");
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"),
wxMenu *rowLabelMenu = new wxMenu;
viewMenu->Append( ID_ROWLABELALIGN, wxT("R&ow label alignment"),
m_gridBitmap.GetHeight(),
&memDc, 0, 0 );
}
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);
+}
void AutoSizeLabelsRow(wxCommandEvent& event);
void AutoSizeTable(wxCommandEvent& event);
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& );
void OnLabelLeftClick( wxGridEvent& );
void OnCellLeftClick( wxGridEvent& );
void OnRowSize( wxGridSizeEvent& );
ID_TOGGLEGRIDLINES,
ID_AUTOSIZECOLS,
ID_CELLOVERFLOW,
ID_TOGGLEGRIDLINES,
ID_AUTOSIZECOLS,
ID_CELLOVERFLOW,
+ ID_HIDECOL,
+ ID_SHOWCOL,
+ ID_HIDEROW,
+ ID_SHOWROW,
ID_RESIZECELL,
ID_SETLABELCOLOUR,
ID_SETLABELTEXTCOLOUR,
ID_RESIZECELL,
ID_SETLABELCOLOUR,
ID_SETLABELTEXTCOLOUR,
// We're showing back a previously hidden row/column.
wxASSERT_MSG( sizeNew == -1, wxS("New size must be positive or -1.") );
// 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.
sizeCurrent = -sizeCurrent;
// This is positive which is correct.
else if ( sizeNew == 0 )
{
// We're hiding a row/column.
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.
sizeCurrent = -sizeCurrent;
// This is negative which is correct.