From 2e8cd9776a2eec80033e5ddd3f2a028bedd854b2 Mon Sep 17 00:00:00 2001 From: Michael Bedward Date: Wed, 9 Feb 2000 02:15:05 +0000 Subject: [PATCH] Implemented row and col label size functions. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5917 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/grid.cpp | 145 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 2 deletions(-) diff --git a/src/generic/grid.cpp b/src/generic/grid.cpp index 9322592aa8..dccc132f5b 100644 --- a/src/generic/grid.cpp +++ b/src/generic/grid.cpp @@ -3878,16 +3878,157 @@ wxString wxGrid::GetColLabelValue( int col ) } } + void wxGrid::SetRowLabelSize( int width ) { - // TODO: how to do this with the box sizers ? + wxSize sz; + + width = wxMax( width, 0 ); + if ( width != m_rowLabelWidth ) + { + // Hiding the row labels (and possible the corner label) + // + if ( width == 0 ) + { + m_rowLabelWin->Show( FALSE ); + + // If the col labels are on display we need to hide the + // corner label and remove it from the top sizer + // + if ( m_colLabelHeight > 0 ) + { + m_cornerLabelWin->Show( FALSE ); + m_topSizer->Remove( m_cornerLabelWin ); + } + + m_middleSizer->Remove( m_rowLabelWin ); + } + else + { + // Displaying the row labels (and possibly the corner + // label) after being hidden + // + if ( m_rowLabelWidth == 0 ) + { + m_rowLabelWin->Show( TRUE ); + + if ( m_colLabelHeight > 0 ) + { + m_cornerLabelWin->Show( TRUE ); + m_topSizer->Prepend( m_cornerLabelWin, 0 ); + } + + m_middleSizer->Prepend( m_rowLabelWin, 0, wxEXPAND ); + } + + + // set the width of the corner label if it is on display + // + if ( m_colLabelHeight > 0 ) + { + wxList& childList = m_topSizer->GetChildren(); + wxNode *node = childList.First(); + while (node) + { + wxSizerItem *item = (wxSizerItem*)node->Data(); + if ( item->GetWindow() == m_cornerLabelWin ) + { + item->SetInitSize( width, m_colLabelHeight ); + break; + } + node = node->Next(); + } + } + + // set the width of the row labels + // + wxList& childList = m_middleSizer->GetChildren(); + wxNode *node = childList.First(); + while (node) + { + wxSizerItem *item = (wxSizerItem*)node->Data(); + if ( item->GetWindow() == m_rowLabelWin ) + { + sz = item->GetWindow()->GetSize(); + item->SetInitSize( width, sz.GetHeight() ); + break; + } + node = node->Next(); + } + } + + m_rowLabelWidth = width; + m_mainSizer->Layout(); + } } + void wxGrid::SetColLabelSize( int height ) { - // TODO: how to do this with the box sizers ? + wxSize sz; + + if ( height < 0 ) height = 0; + if ( height != m_colLabelHeight ) + { + // hiding the column labels + // + if ( height == 0 ) + { + m_cornerLabelWin->Show( FALSE ); + m_colLabelWin->Show( FALSE ); + + // Note: this call will actually delete the sizer + // + m_mainSizer->Remove( m_topSizer ); + m_topSizer = (wxBoxSizer *)NULL; + } + else + { + // column labels to be displayed after being hidden + // + if ( m_colLabelHeight == 0 ) + { + // recreate the top sizer + // + m_topSizer = new wxBoxSizer( wxHORIZONTAL ); + + if ( m_rowLabelWidth > 0 ) + m_topSizer->Add( m_cornerLabelWin, 0 ); + + m_topSizer->Add( m_colLabelWin, 1 ); + m_mainSizer->Prepend( m_topSizer, 0, wxEXPAND ); + + // only show the corner label if the row labels are + // also displayed + // + if ( m_rowLabelWidth > 0 ) + m_cornerLabelWin->Show( TRUE ); + + m_colLabelWin->Show( TRUE ); + } + + wxList& childList = m_topSizer->GetChildren(); + wxNode *node = childList.First(); + while (node) + { + wxSizerItem *item = (wxSizerItem*)node->Data(); + + if ( (item->GetWindow() == m_cornerLabelWin && m_rowLabelWidth > 0) || + item->GetWindow() == m_colLabelWin ) + { + sz = item->GetWindow()->GetSize(); + item->SetInitSize( sz.GetWidth(), height ); + } + node = node->Next(); + } + } + + m_colLabelHeight = height; + m_mainSizer->Layout(); + } } + void wxGrid::SetLabelBackgroundColour( const wxColour& colour ) { if ( m_labelBackgroundColour != colour )