]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xh_sizer.cpp
Fix wxWindow::MSWShowWithEffect() compilation with wxUSE_DYNLIB_CLASS==0.
[wxWidgets.git] / src / xrc / xh_sizer.cpp
index 30a1175b006b6d2fe7f6e4b2a5f0099eef328218..6a7e591bb37562a17f7bc629de4d5196b52b1438 100644 (file)
@@ -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);