added XRC handler for wxStdDialogButtonSizer
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33108 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -56,4 +56,20 @@ private:
|
||||
};
|
||||
|
||||
|
||||
#endif // _WX_XH_BOXSIZER_H_
|
||||
class WXDLLIMPEXP_XRC wxStdDialogButtonSizerXmlHandler
|
||||
: public wxXmlResourceHandler
|
||||
{
|
||||
public:
|
||||
wxStdDialogButtonSizerXmlHandler();
|
||||
virtual wxObject *DoCreateResource();
|
||||
virtual bool CanHandle(wxXmlNode *node);
|
||||
|
||||
private:
|
||||
bool m_isInside;
|
||||
wxStdDialogButtonSizer *m_parentSizer;
|
||||
|
||||
DECLARE_DYNAMIC_CLASS(wxStdDialogButtonSizerXmlHandler)
|
||||
};
|
||||
|
||||
|
||||
#endif // _WX_XH_SIZER_H_
|
||||
|
@@ -5,7 +5,8 @@
|
||||
<object class="wxDialog" name="non_derived_dialog">
|
||||
<title>Non-Derived Dialog Example</title>
|
||||
<centered>1</centered>
|
||||
<object class="wxFlexGridSizer">
|
||||
<object class="wxBoxSizer">
|
||||
<orient>wxVERTICAL</orient>
|
||||
<cols>1</cols>
|
||||
<rows>0</rows>
|
||||
<vgap>0</vgap>
|
||||
@@ -22,20 +23,15 @@
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<flag>wxALIGN_CENTRE|wxALL</flag>
|
||||
<flag>wxEXPAND|wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxBoxSizer">
|
||||
<orient>wxHORIZONTAL</orient>
|
||||
<object class="sizeritem">
|
||||
<flag>wxALIGN_CENTRE|wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="wxStdDialogButtonSizer">
|
||||
<object class="button">
|
||||
<object class="wxButton" name="wxID_OK">
|
||||
<label>OK</label>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem">
|
||||
<flag>wxALIGN_CENTRE|wxALL</flag>
|
||||
<border>5</border>
|
||||
<object class="button">
|
||||
<object class="wxButton" name="wxID_CANCEL">
|
||||
<label>Cancel</label>
|
||||
</object>
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// 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
|
||||
|
@@ -34,6 +34,7 @@ void wxXmlResource::InitAllHandlers()
|
||||
AddHandler(new wxDialogXmlHandler);
|
||||
AddHandler(new wxPanelXmlHandler);
|
||||
AddHandler(new wxSizerXmlHandler);
|
||||
AddHandler(new wxStdDialogButtonSizerXmlHandler);
|
||||
AddHandler(new wxButtonXmlHandler);
|
||||
AddHandler(new wxBitmapButtonXmlHandler);
|
||||
AddHandler(new wxStaticTextXmlHandler);
|
||||
|
Reference in New Issue
Block a user