X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f43255e83836c1a023ea7f9c1fe1b3439e58c516..58c23da1d54bf50d9f892b692b941f2cd20d96d0:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index b594635146..81c2031157 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -17,16 +17,17 @@ #pragma hdrstop #endif +#include "wx/sizer.h" + #ifndef WX_PRECOMP #include "wx/string.h" #include "wx/intl.h" #include "wx/math.h" + #include "wx/utils.h" + #include "wx/settings.h" + #include "wx/statbox.h" #endif // WX_PRECOMP -#include "wx/sizer.h" -#include "wx/utils.h" -#include "wx/statbox.h" -#include "wx/settings.h" #include "wx/listimpl.cpp" #if WXWIN_COMPATIBILITY_2_4 @@ -1697,16 +1698,27 @@ wxSize wxBoxSizer::CalcMin() #if wxUSE_STATBOX wxStaticBoxSizer::wxStaticBoxSizer( wxStaticBox *box, int orient ) - : wxBoxSizer( orient ) - , m_staticBox( box ) + : wxBoxSizer( orient ), + m_staticBox( box ) { wxASSERT_MSG( box, wxT("wxStaticBoxSizer needs a static box") ); + + // do this so that our Detach() is called if the static box is destroyed + // before we are + m_staticBox->SetContainingSizer(this); } wxStaticBoxSizer::wxStaticBoxSizer(int orient, wxWindow *win, const wxString& s) : wxBoxSizer(orient), m_staticBox(new wxStaticBox(win, wxID_ANY, s)) { + // same as above + m_staticBox->SetContainingSizer(this); +} + +wxStaticBoxSizer::~wxStaticBoxSizer() +{ + delete m_staticBox; } static void GetStaticBoxBorders( wxStaticBox *box, @@ -1756,6 +1768,20 @@ void wxStaticBoxSizer::ShowItems( bool show ) wxBoxSizer::ShowItems( show ); } +bool wxStaticBoxSizer::Detach( wxWindow *window ) +{ + // avoid deleting m_staticBox in our dtor if it's being detached from the + // sizer (which can happen because it's being already destroyed for + // example) + if ( window == m_staticBox ) + { + m_staticBox = NULL; + return true; + } + + return wxSizer::Detach( window ); +} + #endif // wxUSE_STATBOX #if wxUSE_BUTTON