X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55f9f0cbc8dcf45f8d484b2f931c5c254d4404d1..1b5ff3a3feed9f5a23dcf8de40189c0af2746483:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 18faa4a469..e121731de8 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -10,7 +10,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "sizer.h" #endif @@ -37,13 +37,47 @@ IMPLEMENT_CLASS(wxBoxSizer, wxSizer) #if wxUSE_STATBOX IMPLEMENT_CLASS(wxStaticBoxSizer, wxBoxSizer) #endif +#if wxUSE_BOOKCTRL +IMPLEMENT_CLASS(wxBookCtrlSizer, wxSizer) #if wxUSE_NOTEBOOK -IMPLEMENT_CLASS(wxNotebookSizer, wxSizer) -#endif +IMPLEMENT_CLASS(wxNotebookSizer, wxBookCtrlSizer) +#endif // wxUSE_NOTEBOOK +#endif // wxUSE_BOOKCTRL WX_DEFINE_EXPORTED_LIST( wxSizerItemList ); - +/* + TODO PROPERTIES + sizeritem + object + object_ref + minsize + option + flag + border + spacer + option + flag + borfder + boxsizer + orient + staticboxsizer + orient + label + gridsizer + rows + cols + vgap + hgap + flexgridsizer + rows + cols + vgap + hgap + growablerows + growablecols + minsize +*/ //--------------------------------------------------------------------------- // wxSizerItem //--------------------------------------------------------------------------- @@ -94,10 +128,16 @@ wxSizerItem::wxSizerItem( wxSizer *sizer, int proportion, int flag, int border, wxSizerItem::~wxSizerItem() { - if (m_userData) - delete m_userData; - if (m_sizer) + delete m_userData; + + if ( m_window ) + { + m_window->SetContainingSizer(NULL); + } + else // we must be a sizer + { delete m_sizer; + } } @@ -277,12 +317,11 @@ int wxSizerItem::GetOption() const wxSizer::wxSizer() : m_minSize( wxSize( 0, 0 ) ) { - m_children.DeleteContents( true ); } wxSizer::~wxSizer() { - Clear(); + WX_CLEAR_LIST(wxSizerItemList, m_children); } void wxSizer::Add( wxWindow *window, int proportion, int flag, int border, wxObject* userData ) @@ -385,13 +424,17 @@ bool wxSizer::Remove( wxSizer *sizer ) { wxASSERT_MSG( sizer, _T("Removing NULL sizer") ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); if (item->GetSizer() == sizer) - return m_children.DeleteNode( node ); + { + delete item; + m_children.Erase( node ); + return true; + } node = node->GetNext(); } @@ -405,7 +448,7 @@ bool wxSizer::Remove( int index ) false, _T("Remove index is out of range") ); - wxSizerItemList::Node *node = m_children.Item( index ); + wxSizerItemList::compatibility_iterator node = m_children.Item( index ); wxCHECK_MSG( node, false, _T("Failed to find child node") ); @@ -414,14 +457,16 @@ bool wxSizer::Remove( int index ) if( item->IsWindow() ) item->GetWindow()->SetContainingSizer( NULL ); - return m_children.DeleteNode( node ); + delete item; + m_children.Erase( node ); + return true; } bool wxSizer::Detach( wxSizer *sizer ) { wxASSERT_MSG( sizer, _T("Detaching NULL sizer") ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -429,7 +474,9 @@ bool wxSizer::Detach( wxSizer *sizer ) if (item->GetSizer() == sizer) { item->DetachSizer(); - return m_children.DeleteNode( node ); + delete item; + m_children.Erase( node ); + return true; } node = node->GetNext(); } @@ -441,7 +488,7 @@ bool wxSizer::Detach( wxWindow *window ) { wxASSERT_MSG( window, _T("Detaching NULL window") ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -449,7 +496,9 @@ bool wxSizer::Detach( wxWindow *window ) if (item->GetWindow() == window) { item->GetWindow()->SetContainingSizer( NULL ); - return m_children.DeleteNode( node ); + delete item; + m_children.Erase( node ); + return true; } node = node->GetNext(); } @@ -463,7 +512,7 @@ bool wxSizer::Detach( int index ) false, _T("Detach index is out of range") ); - wxSizerItemList::Node *node = m_children.Item( index ); + wxSizerItemList::compatibility_iterator node = m_children.Item( index ); wxCHECK_MSG( node, false, _T("Failed to find child node") ); @@ -474,13 +523,15 @@ bool wxSizer::Detach( int index ) else if( item->IsWindow() ) item->GetWindow()->SetContainingSizer( NULL ); - return m_children.DeleteNode( node ); + delete item; + m_children.Erase( node ); + return true; } void wxSizer::Clear( bool delete_windows ) { // First clear the ContainingSizer pointers - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -495,12 +546,12 @@ void wxSizer::Clear( bool delete_windows ) DeleteWindows(); // Now empty the list - m_children.Clear(); + WX_CLEAR_LIST(wxSizerItemList, m_children); } void wxSizer::DeleteWindows() { - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -662,7 +713,7 @@ bool wxSizer::DoSetItemMinSize( wxWindow *window, int width, int height ) // Is it our immediate child? - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -700,7 +751,7 @@ bool wxSizer::DoSetItemMinSize( wxSizer *sizer, int width, int height ) // Is it our immediate child? - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -734,7 +785,7 @@ bool wxSizer::DoSetItemMinSize( wxSizer *sizer, int width, int height ) bool wxSizer::DoSetItemMinSize( size_t index, int width, int height ) { - wxSizerItemList::Node *node = m_children.Item( index ); + wxSizerItemList::compatibility_iterator node = m_children.Item( index ); wxCHECK_MSG( node, false, _T("Failed to find child node") ); @@ -758,7 +809,7 @@ void wxSizer::Show( wxWindow *window, bool show ) { wxASSERT_MSG( window, _T("Show for NULL window") ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -776,7 +827,7 @@ void wxSizer::Show( wxSizer *sizer, bool show ) { wxASSERT_MSG( sizer, _T("Show for NULL sizer") ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -800,7 +851,7 @@ void wxSizer::Show( size_t index, bool show ) void wxSizer::ShowItems( bool show ) { - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { node->GetData()->Show( show ); @@ -810,7 +861,7 @@ void wxSizer::ShowItems( bool show ) bool wxSizer::IsShown( wxWindow *window ) const { - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -829,7 +880,7 @@ bool wxSizer::IsShown( wxWindow *window ) const bool wxSizer::IsShown( wxSizer *sizer ) const { - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -923,7 +974,7 @@ void wxGridSizer::RecalcSizes() int i = r * ncols + c; if (i < nitems) { - wxSizerItemList::Node *node = m_children.Item( i ); + wxSizerItemList::compatibility_iterator node = m_children.Item( i ); wxASSERT_MSG( node, _T("Failed to find SizerItemList node") ); @@ -937,15 +988,15 @@ void wxGridSizer::RecalcSizes() wxSize wxGridSizer::CalcMin() { - int nitems, nrows, ncols; - if ( (nitems = CalcRowsCols(nrows, ncols)) == 0 ) + int nrows, ncols; + if ( CalcRowsCols(nrows, ncols) == 0 ) return wxSize(10, 10); // Find the max width and height for any component int w = 0; int h = 0; - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -1036,13 +1087,13 @@ void wxFlexGridSizer::RecalcSizes() size_t idx; for (idx = 0; idx < m_growableRows.GetCount(); idx++) { - // Since the number of rows/columns can change as items are inserted/deleted, we need + // Since the number of rows/columns can change as items are inserted/deleted, we need // to verify at runtime that the requested growable rows/columns are still valid. - if (m_growableRows[idx] >= nrows) + if (m_growableRows[idx] >= nrows) continue; // If all items in a row/column are hidden, that row/column will have a dimension of -1. // This causes the row/column to be hidden completely. - if (m_rowHeights[ m_growableRows[idx] ] == -1) + if (m_rowHeights[ m_growableRows[idx] ] == -1) continue; sum_proportions += m_growableRowsProportions[idx]; growable_space += m_rowHeights[ m_growableRows[idx] ]; @@ -1053,9 +1104,9 @@ void wxFlexGridSizer::RecalcSizes() { for (idx = 0; idx < m_growableRows.GetCount(); idx++) { - if (m_growableRows[idx] >= nrows ) + if (m_growableRows[idx] >= nrows ) continue; - if (m_rowHeights[ m_growableRows[idx] ] == -1) + if (m_rowHeights[ m_growableRows[idx] ] == -1) m_rowHeights[ m_growableRows[idx] ] = 0; else { @@ -1085,13 +1136,13 @@ void wxFlexGridSizer::RecalcSizes() size_t idx; for (idx = 0; idx < m_growableCols.GetCount(); idx++) { - // Since the number of rows/columns can change as items are inserted/deleted, we need + // Since the number of rows/columns can change as items are inserted/deleted, we need // to verify at runtime that the requested growable rows/columns are still valid. - if (m_growableCols[idx] >= ncols) + if (m_growableCols[idx] >= ncols) continue; // If all items in a row/column are hidden, that row/column will have a dimension of -1. // This causes the column to be hidden completely. - if (m_colWidths[ m_growableCols[idx] ] == -1) + if (m_colWidths[ m_growableCols[idx] ] == -1) continue; sum_proportions += m_growableColsProportions[idx]; // wtb 5/12/02 bugfix - was m_ColWidths[idx]!! @@ -1103,9 +1154,9 @@ void wxFlexGridSizer::RecalcSizes() { for (idx = 0; idx < m_growableCols.GetCount(); idx++) { - if (m_growableCols[idx] >= ncols ) + if (m_growableCols[idx] >= ncols ) continue; - if (m_colWidths[ m_growableCols[idx] ] == -1) + if (m_colWidths[ m_growableCols[idx] ] == -1) m_colWidths[ m_growableCols[idx] ] = 0; else { @@ -1136,7 +1187,7 @@ void wxFlexGridSizer::RecalcSizes() int i = r * ncols + c; if (i < nitems) { - wxSizerItemList::Node *node = m_children.Item( i ); + wxSizerItemList::compatibility_iterator node = m_children.Item( i ); wxASSERT_MSG( node, _T("Failed to find node") ); @@ -1164,16 +1215,16 @@ wxSize wxFlexGridSizer::CalcMin() m_rowHeights.SetCount(nrows); m_colWidths.SetCount(ncols); - // We have to recalcuate the sizes in case an item has wxADJUST_MINSIZE, has changed + // We have to recalcuate the sizes in case an item has wxADJUST_MINSIZE, has changed // minimum size since the previous layout, or has been hidden using wxSizer::Show(). - // If all the items in a row/column are hidden, the final dimension of the row/column + // If all the items in a row/column are hidden, the final dimension of the row/column // will be -1, indicating that the column itself is hidden. for( s = m_rowHeights.GetCount(), i = 0; i < s; ++i ) m_rowHeights[ i ] = -1; for( s = m_colWidths.GetCount(), i = 0; i < s; ++i ) m_colWidths[ i ] = -1; - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); i = 0; while (node) @@ -1223,7 +1274,7 @@ wxSize wxFlexGridSizer::CalcMin() // -1 is used as a magic number meaning empty column. int width = 0; for (int col = 0; col < ncols; col++) - if ( m_colWidths[ col ] != -1 ) + if ( m_colWidths[ col ] != -1 ) width += m_colWidths[ col ] + ( col == ncols-1 ? 0 : m_hgap ); int height = 0; @@ -1286,7 +1337,7 @@ void wxBoxSizer::RecalcSizes() wxPoint pt( m_position ); - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { wxSizerItem *item = node->GetData(); @@ -1368,7 +1419,7 @@ wxSize wxBoxSizer::CalcMin() // Find how long each stretch unit needs to be int stretchSize = 1; - wxSizerItemList::Node *node = m_children.GetFirst(); + wxSizerItemList::compatibility_iterator node = m_children.GetFirst(); while (node) { @@ -1507,31 +1558,31 @@ wxSize wxStaticBoxSizer::CalcMin() #endif // wxUSE_STATBOX -//--------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // wxNotebookSizer -//--------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- -#if wxUSE_NOTEBOOK +#if wxUSE_BOOKCTRL -wxNotebookSizer::wxNotebookSizer( wxNotebook *nb ) - : m_notebook( nb ) +wxBookCtrlSizer::wxBookCtrlSizer(wxBookCtrl *bookctrl) + : m_bookctrl(bookctrl) { - wxASSERT_MSG( nb, wxT("wxNotebookSizer needs a notebook") ); + wxASSERT_MSG( bookctrl, wxT("wxBookCtrlSizer needs a control") ); } -void wxNotebookSizer::RecalcSizes() +void wxBookCtrlSizer::RecalcSizes() { - m_notebook->SetSize( m_position.x, m_position.y, m_size.x, m_size.y ); + m_bookctrl->SetSize( m_position.x, m_position.y, m_size.x, m_size.y ); } -wxSize wxNotebookSizer::CalcMin() +wxSize wxBookCtrlSizer::CalcMin() { - wxSize sizeBorder = m_notebook->CalcSizeFromPage(wxSize(0, 0)); + wxSize sizeBorder = m_bookctrl->CalcSizeFromPage(wxSize(0, 0)); sizeBorder.x += 5; sizeBorder.y += 5; - if (m_notebook->GetChildren().GetCount() == 0) + if ( m_bookctrl->GetPageCount() == 0 ) { return wxSize(sizeBorder.x + 10, sizeBorder.y + 10); } @@ -1539,7 +1590,8 @@ wxSize wxNotebookSizer::CalcMin() int maxX = 0; int maxY = 0; - wxWindowList::Node *node = m_notebook->GetChildren().GetFirst(); + wxWindowList::compatibility_iterator + node = m_bookctrl->GetChildren().GetFirst(); while (node) { wxWindow *item = node->GetData(); @@ -1561,6 +1613,14 @@ wxSize wxNotebookSizer::CalcMin() return wxSize( maxX, maxY ) + sizeBorder; } -#endif // wxUSE_NOTEBOOK -// vi:sts=4:sw=4:et +#if wxUSE_NOTEBOOK + +wxNotebookSizer::wxNotebookSizer(wxNotebook *nb) + : wxBookCtrlSizer(nb) +{ +} + +#endif // wxUSE_NOTEBOOOK +#endif // wxUSE_BOOKCTRL +