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:
Václav Slavík
2005-03-27 21:28:27 +00:00
parent 2f025841ee
commit 172541f64b
4 changed files with 94 additions and 13 deletions

View File

@@ -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_

View File

@@ -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>

View File

@@ -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

View File

@@ -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);