X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d9485f89b8c8d6160cedf8b9b4a7a4105a3624d1..9859d369b49e35a1cad0f760173e165f974fb6cb:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 66a1525431..b4ae33b5a7 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -103,12 +103,10 @@ wxSizerItem::wxSizerItem() m_proportion = 0; m_border = 0; m_flag = 0; - - m_kind = Item_None; } // window item -void wxSizerItem::SetWindow(wxWindow *window) +void wxSizerItem::DoSetWindow(wxWindow *window) { wxCHECK_RET( window, _T("NULL window in wxSizerItem::SetWindow()") ); @@ -130,16 +128,17 @@ wxSizerItem::wxSizerItem(wxWindow *window, int flag, int border, wxObject* userData) - : m_proportion(proportion), + : m_kind(Item_None), + m_proportion(proportion), m_border(border), m_flag(flag), m_userData(userData) { - SetWindow(window); + DoSetWindow(window); } // sizer item -void wxSizerItem::SetSizer(wxSizer *sizer) +void wxSizerItem::DoSetSizer(wxSizer *sizer) { m_kind = Item_Sizer; m_sizer = sizer; @@ -150,19 +149,21 @@ wxSizerItem::wxSizerItem(wxSizer *sizer, int flag, int border, wxObject* userData) - : m_proportion(proportion), + : m_kind(Item_None), + m_sizer(NULL), + m_proportion(proportion), m_border(border), m_flag(flag), m_ratio(0.0), m_userData(userData) { - SetSizer(sizer); + DoSetSizer(sizer); // m_minSize is set later } // spacer item -void wxSizerItem::SetSpacer(const wxSize& size) +void wxSizerItem::DoSetSpacer(const wxSize& size) { m_kind = Item_Spacer; m_spacer = new wxSizerSpacer(size); @@ -176,19 +177,25 @@ wxSizerItem::wxSizerItem(int width, int flag, int border, wxObject* userData) - : m_minSize(width, height), // minimal size is the initial size + : m_kind(Item_None), + m_sizer(NULL), + m_minSize(width, height), // minimal size is the initial size m_proportion(proportion), m_border(border), m_flag(flag), m_userData(userData) { - SetSpacer(width, height); + DoSetSpacer(wxSize(width, height)); } wxSizerItem::~wxSizerItem() { delete m_userData; + Free(); +} +void wxSizerItem::Free() +{ switch ( m_kind ) { case Item_None: @@ -210,6 +217,8 @@ wxSizerItem::~wxSizerItem() default: wxFAIL_MSG( _T("unexpected wxSizerItem::m_kind") ); } + + m_kind = Item_None; } wxSize wxSizerItem::GetSpacer() const @@ -578,13 +587,9 @@ bool wxSizer::Remove( int index ) wxCHECK_MSG( node, false, _T("Failed to find child node") ); - wxSizerItem *item = node->GetData(); - - if ( item->IsWindow() ) - item->GetWindow()->SetContainingSizer( NULL ); - - delete item; + delete node->GetData(); m_children.Erase( node ); + return true; } @@ -621,7 +626,6 @@ bool wxSizer::Detach( wxWindow *window ) if (item->GetWindow() == window) { - item->GetWindow()->SetContainingSizer( NULL ); delete item; m_children.Erase( node ); return true; @@ -646,8 +650,6 @@ bool wxSizer::Detach( int index ) if ( item->IsSizer() ) item->DetachSizer(); - else if ( item->IsWindow() ) - item->GetWindow()->SetContainingSizer( NULL ); delete item; m_children.Erase( node ); @@ -666,8 +668,7 @@ bool wxSizer::Replace( wxWindow *oldwin, wxWindow *newwin, bool recursive ) if (item->GetWindow() == oldwin) { - item->GetWindow()->SetContainingSizer( NULL ); - item->SetWindow(newwin); + item->AssignWindow(newwin); newwin->SetContainingSizer( this ); return true; } @@ -695,9 +696,7 @@ bool wxSizer::Replace( wxSizer *oldsz, wxSizer *newsz, bool recursive ) if (item->GetSizer() == oldsz) { - wxSizer *old = item->GetSizer(); - item->SetSizer(newsz); - delete old; + item->AssignSizer(newsz); return true; } else if (recursive && item->IsSizer())