]> git.saurik.com Git - wxWidgets.git/commitdiff
added XRC handler for wxStdDialogButtonSizer
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Mar 2005 21:28:27 +0000 (21:28 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 Mar 2005 21:28:27 +0000 (21:28 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33108 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/xrc/xh_sizer.h
samples/xrc/rc/basicdlg.xrc
src/xrc/xh_sizer.cpp
src/xrc/xmlrsall.cpp

index c3329e572f910aab4b473db25b78bef9f0a4c447..2647b5b8cee5451d5f4e2f5444f5d9179b36d119 100644 (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_
index 95e211a53b14e9288fb1545f81bce1489d9000fe..ae632f6e1018c288e486251044fb39b999c98a42 100644 (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>
             </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>
index 248b7f2fad709f8bb6ea39b1478c7279ad6511f3..78cade22a8f9688eb3bc04780dd3c8b0d5c14169 100644 (file)
 #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
index f8465e58f738194ff50605ced8e359b1dcaab95f..d1474daa7075cc2e13b494b83671a09d46d7ee25 100644 (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);