X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1c104648931c9e1b52b243732d9dacf28703f5dc..a130a96cd3dcdf9d7ec0f96b372eccbf3b4ea977:/src/xrc/xh_sizer.cpp diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index 5ce46b41bd..a9779ecc72 100644 --- a/src/xrc/xh_sizer.cpp +++ b/src/xrc/xh_sizer.cpp @@ -27,9 +27,11 @@ #include "wx/frame.h" #include "wx/dialog.h" #include "wx/button.h" + #include "wx/scrolwin.h" #endif #include "wx/gbsizer.h" +#include "wx/wrapsizer.h" #include "wx/notebook.h" #include "wx/tokenzr.h" @@ -76,8 +78,8 @@ wxSizerXmlHandler::wxSizerXmlHandler() XRC_ADD_STYLE(wxALIGN_CENTER_VERTICAL); XRC_ADD_STYLE(wxALIGN_CENTRE_VERTICAL); - XRC_ADD_STYLE(wxADJUST_MINSIZE); XRC_ADD_STYLE(wxFIXED_MINSIZE); + XRC_ADD_STYLE(wxRESERVE_SPACE_EVEN_IF_HIDDEN); } @@ -112,7 +114,8 @@ bool wxSizerXmlHandler::IsSizerNode(wxXmlNode *node) (IsOfClass(node, wxT("wxStaticBoxSizer"))) || (IsOfClass(node, wxT("wxGridSizer"))) || (IsOfClass(node, wxT("wxFlexGridSizer"))) || - (IsOfClass(node, wxT("wxGridBagSizer"))); + (IsOfClass(node, wxT("wxGridBagSizer"))) || + (IsOfClass(node, wxT("wxWrapSizer"))); } @@ -145,9 +148,9 @@ wxObject* wxSizerXmlHandler::Handle_sizeritem() wxWindow *wnd = wxDynamicCast(item, wxWindow); if (sizer) - sitem->SetSizer(sizer); + sitem->AssignSizer(sizer); else if (wnd) - sitem->SetWindow(wnd); + sitem->AssignWindow(wnd); else wxLogError(wxT("Error in resource.")); @@ -171,7 +174,7 @@ wxObject* wxSizerXmlHandler::Handle_spacer() wxSizerItem* sitem = MakeSizerItem(); SetSizerItemAttributes(sitem); - sitem->SetSpacer(GetSize()); + sitem->AssignSpacer(GetSize()); AddSizerItem(sitem); return NULL; } @@ -185,16 +188,16 @@ wxObject* wxSizerXmlHandler::Handle_sizer() wxCHECK_MSG(m_parentSizer != NULL || (parentNode && parentNode->GetType() == wxXML_ELEMENT_NODE && - m_parentAsWindow != NULL && - (m_parentAsWindow->IsKindOf(CLASSINFO(wxWindow))) - ), NULL, - wxT("Incorrect use of sizer: parent is not a 'wxWindow'.")); + m_parentAsWindow), NULL, + wxT("Sizer must have a window parent node")); 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")) sizer = Handle_wxGridSizer(); @@ -205,6 +208,9 @@ wxObject* wxSizerXmlHandler::Handle_sizer() else if (m_class == wxT("wxGridBagSizer")) sizer = Handle_wxGridBagSizer(); + else if (m_class == wxT("wxWrapSizer")) + sizer = Handle_wxGridBagSizer(); + if ( !sizer ) { wxLogError(_T("Failed to create size of class \"%s\""), m_class.c_str()); @@ -237,11 +243,22 @@ wxObject* wxSizerXmlHandler::Handle_sizer() wxXmlNode *nd = m_node; m_node = parentNode; if (GetSize() == wxDefaultSize) - sizer->Fit(m_parentAsWindow); + { + if ( wxDynamicCast(m_parentAsWindow, wxScrolledWindow) != NULL ) + { + sizer->FitInside(m_parentAsWindow); + } + else + { + sizer->Fit(m_parentAsWindow); + } + } m_node = nd; - if (m_parentAsWindow->GetWindowStyle() & (wxMAXIMIZE_BOX | wxRESIZE_BORDER)) + if (m_parentAsWindow->IsTopLevel()) + { sizer->SetSizeHints(m_parentAsWindow); + } } return sizer; @@ -253,6 +270,7 @@ wxSizer* wxSizerXmlHandler::Handle_wxBoxSizer() return new wxBoxSizer(GetStyle(wxT("orient"), wxHORIZONTAL)); } +#if wxUSE_STATBOX wxSizer* wxSizerXmlHandler::Handle_wxStaticBoxSizer() { return new wxStaticBoxSizer( @@ -264,6 +282,7 @@ wxSizer* wxSizerXmlHandler::Handle_wxStaticBoxSizer() GetName()), GetStyle(wxT("orient"), wxHORIZONTAL)); } +#endif // wxUSE_STATBOX wxSizer* wxSizerXmlHandler::Handle_wxGridSizer() { @@ -292,6 +311,11 @@ wxSizer* wxSizerXmlHandler::Handle_wxGridBagSizer() return sizer; } +wxSizer* wxSizerXmlHandler::Handle_wxWrapSizer() +{ + wxWrapSizer *sizer = new wxWrapSizer(GetStyle("orient"), wxHORIZONTAL); + return sizer; +} @@ -360,6 +384,9 @@ void wxSizerXmlHandler::SetSizerItemAttributes(wxSizerItem* sitem) gbsitem->SetPos(GetGBPos(wxT("cellpos"))); gbsitem->SetSpan(GetGBSpan(wxT("cellspan"))); } + + // record the id of the item, if any, for use by XRCSIZERITEM() + sitem->SetId(GetID()); } void wxSizerXmlHandler::AddSizerItem(wxSizerItem* sitem)