X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dabbc6a5a1795d169f26ce95927f3e4f1a5e7b7e..370dc79c5a7fd9ac24fb001e38388a210750e2e7:/src/xrc/xh_sizer.cpp diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index ba6c799f25..cfb98b21f7 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), @@ -363,10 +362,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