X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/da86e1776517d2403a687de08947698f5a608219..3bcf4cce0775db9677e73bb4bbe14d9cfa7df688:/src/xrc/xh_sizer.cpp?ds=inline diff --git a/src/xrc/xh_sizer.cpp b/src/xrc/xh_sizer.cpp index d694e9a275..78cade22a8 100644 --- a/src/xrc/xh_sizer.cpp +++ b/src/xrc/xh_sizer.cpp @@ -8,7 +8,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "xh_sizer.h" #endif @@ -19,7 +19,7 @@ #pragma hdrstop #endif -#if wxUSE_XML && wxUSE_XRC +#if wxUSE_XRC #include "wx/xrc/xh_sizer.h" #include "wx/sizer.h" @@ -31,11 +31,12 @@ #include "wx/tokenzr.h" +//----------------------------------------------------------------------------- +// wxSizerXmlHandler +//----------------------------------------------------------------------------- IMPLEMENT_DYNAMIC_CLASS(wxSizerXmlHandler, wxXmlResourceHandler) - - wxSizerXmlHandler::wxSizerXmlHandler() : wxXmlResourceHandler(), m_isInside(false), @@ -363,4 +364,71 @@ void wxSizerXmlHandler::AddSizerItem(wxSizerItem* sitem) m_parentSizer->Add(sitem); } -#endif // wxUSE_XML && wxUSE_XRC + + +//----------------------------------------------------------------------------- +// 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