X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f80ea77b4a8bac4ab005bfc592f9cd3262ffa397..cdef03346586b83cb87ed1e9d239f236ce8baaf7:/src/xrc/xh_sizer.cpp?ds=sidebyside diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index 1163ab619f..91dea16977 100644 --- a/src/xrc/xh_sizer.cpp +++ b/src/xrc/xh_sizer.cpp @@ -8,10 +8,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "xh_sizer.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -19,6 +15,8 @@ #pragma hdrstop #endif +#if wxUSE_XRC + #include "wx/xrc/xh_sizer.h" #include "wx/sizer.h" #include "wx/gbsizer.h" @@ -29,11 +27,12 @@ #include "wx/tokenzr.h" +//----------------------------------------------------------------------------- +// wxSizerXmlHandler +//----------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxSizerXmlHandler, wxXmlResourceHandler) - - wxSizerXmlHandler::wxSizerXmlHandler() : wxXmlResourceHandler(), m_isInside(false), @@ -201,6 +200,11 @@ wxObject* wxSizerXmlHandler::Handle_sizer() else if (m_class == wxT("wxGridBagSizer")) sizer = Handle_wxGridBagSizer(); + if ( !sizer ) + { + wxLogError(_T("Failed to create size of class \"%s\""), m_class.c_str()); + return NULL; + } wxSize minsize = GetSize(wxT("minsize")); if (!(minsize == wxDefaultSize)) @@ -223,7 +227,6 @@ wxObject* wxSizerXmlHandler::Handle_sizer() if (m_parentSizer == NULL) // setup window: { - m_parentAsWindow->SetAutoLayout(true); m_parentAsWindow->SetSizer(sizer); wxXmlNode *nd = m_node; @@ -364,10 +367,69 @@ void wxSizerXmlHandler::AddSizerItem(wxSizerItem* sitem) +//----------------------------------------------------------------------------- +// wxStdDialogButtonSizerXmlHandler +//----------------------------------------------------------------------------- +IMPLEMENT_DYNAMIC_CLASS(wxStdDialogButtonSizerXmlHandler, wxXmlResourceHandler) +wxStdDialogButtonSizerXmlHandler::wxStdDialogButtonSizerXmlHandler() + : m_isInside(false), m_parentSizer(NULL) +{ +} +wxObject *wxStdDialogButtonSizerXmlHandler::DoCreateResource() +{ + if (m_class == wxT("wxStdDialogButtonSizer")) + { + wxASSERT( !m_parentSizer ); + wxSizer *s = m_parentSizer = new wxStdDialogButtonSizer; + m_isInside = true; + CreateChildren(m_parent, true/*only this handler*/); + + m_parentSizer->Realize(); + + m_isInside = false; + m_parentSizer = NULL; + return s; + } + else // m_class == "button" + { + wxASSERT( m_parentSizer ); + + // find the item to be managed by this sizeritem + wxXmlNode *n = GetParamNode(wxT("object")); + if ( !n ) + n = GetParamNode(wxT("object_ref")); + + // did we find one? + if (n) + { + wxObject *item = CreateResFromNode(n, m_parent, NULL); + wxButton *button = wxDynamicCast(item, wxButton); + + if (button) + m_parentSizer->AddButton(button); + else + wxLogError(wxT("Error in resource - expected button.")); + + return item; + } + else /*n == NULL*/ + { + wxLogError(wxT("Error in resource: no button within wxStdDialogButtonSizer.")); + return NULL; + } + } +} + +bool wxStdDialogButtonSizerXmlHandler::CanHandle(wxXmlNode *node) +{ + return (!m_isInside && IsOfClass(node, wxT("wxStdDialogButtonSizer"))) || + (m_isInside && IsOfClass(node, wxT("button"))); +} +#endif // wxUSE_XRC