X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/afc0db8ca0bcae488ed7efa8ee3bcd873873a8d9..81765ad4b8dfc7b701941927ae6cfa1315a00f72:/src/xrc/xh_sizer.cpp diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index 30a1175b00..6fbe286e96 100644 --- a/src/xrc/xh_sizer.cpp +++ b/src/xrc/xh_sizer.cpp @@ -115,9 +115,40 @@ wxObject* wxSizerXmlHandler::DoCreateResource() } +wxSizer* wxSizerXmlHandler::DoCreateSizer(const wxString& name) +{ + if (name == wxT("wxBoxSizer")) + return Handle_wxBoxSizer(); +#if wxUSE_STATBOX + else if (name == wxT("wxStaticBoxSizer")) + return Handle_wxStaticBoxSizer(); +#endif + else if (name == wxT("wxGridSizer")) + { + if ( !ValidateGridSizerChildren() ) + return NULL; + return Handle_wxGridSizer(); + } + else if (name == wxT("wxFlexGridSizer")) + { + return Handle_wxFlexGridSizer(); + } + else if (name == wxT("wxGridBagSizer")) + { + return Handle_wxGridBagSizer(); + } + else if (name == wxT("wxWrapSizer")) + { + return Handle_wxWrapSizer(); + } + + ReportError(wxString::Format("unknown sizer class \"%s\"", name)); + return NULL; +} -bool wxSizerXmlHandler::IsSizerNode(wxXmlNode *node) + +bool wxSizerXmlHandler::IsSizerNode(wxXmlNode *node) const { return (IsOfClass(node, wxT("wxBoxSizer"))) || (IsOfClass(node, wxT("wxStaticBoxSizer"))) || @@ -195,9 +226,6 @@ wxObject* wxSizerXmlHandler::Handle_spacer() wxObject* wxSizerXmlHandler::Handle_sizer() { - wxSizer *sizer = NULL; - wxFlexGridSizer *flexsizer = NULL; - wxXmlNode *parentNode = m_node->GetParent(); if ( !m_parentSizer && @@ -208,36 +236,8 @@ wxObject* wxSizerXmlHandler::Handle_sizer() return NULL; } - if (m_class == wxT("wxBoxSizer")) - sizer = Handle_wxBoxSizer(); -#if wxUSE_STATBOX - else if (m_class == wxT("wxStaticBoxSizer")) - sizer = Handle_wxStaticBoxSizer(); -#endif - else if (m_class == wxT("wxGridSizer")) - { - if ( !ValidateGridSizerChildren() ) - return NULL; - sizer = Handle_wxGridSizer(); - } - else if (m_class == wxT("wxFlexGridSizer")) - { - flexsizer = Handle_wxFlexGridSizer(); - sizer = flexsizer; - } - else if (m_class == wxT("wxGridBagSizer")) - { - flexsizer = Handle_wxGridBagSizer(); - sizer = flexsizer; - } - else if (m_class == wxT("wxWrapSizer")) - { - sizer = Handle_wxWrapSizer(); - } - else - { - ReportError(wxString::Format("unknown sizer class \"%s\"", m_class)); - } + // Create the sizer of the appropriate class. + wxSizer * const sizer = DoCreateSizer(m_class); // creation of sizer failed for some (already reported) reason, so exit: if ( !sizer ) @@ -256,10 +256,19 @@ wxObject* wxSizerXmlHandler::Handle_sizer() m_isInside = true; m_isGBS = (m_class == wxT("wxGridBagSizer")); - CreateChildren(m_parent, true/*only this handler*/); + wxObject* parent = m_parent; +#if wxUSE_STATBOX + // wxStaticBoxSizer's child controls should be parented by the box itself, + // not its parent. + wxStaticBoxSizer* const stsizer = wxDynamicCast(sizer, wxStaticBoxSizer); + if ( stsizer ) + parent = stsizer->GetStaticBox(); +#endif // wxUSE_STATBOX + + CreateChildren(parent, true/*only this handler*/); // set growable rows and cols for sizers which support this - if ( flexsizer ) + if ( wxFlexGridSizer *flexsizer = wxDynamicCast(sizer, wxFlexGridSizer) ) { SetGrowables(flexsizer, wxT("growablerows"), true); SetGrowables(flexsizer, wxT("growablecols"), false); @@ -410,7 +419,8 @@ void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer, break; } - if ( (int)l >= nslots ) + const int n = static_cast(l); + if ( n >= nslots ) { ReportParamError ( @@ -419,7 +429,7 @@ void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer, ( "invalid %s index %d: must be less than %d", rows ? "row" : "column", - l, + n, nslots ) ); @@ -429,9 +439,9 @@ void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer, } if (rows) - sizer->AddGrowableRow(l); + sizer->AddGrowableRow(n); else - sizer->AddGrowableCol(l); + sizer->AddGrowableCol(n); } }