]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/xml/xh_notbk.cpp
added XML resources library
[wxWidgets.git] / contrib / src / xml / xh_notbk.cpp
diff --git a/contrib/src/xml/xh_notbk.cpp b/contrib/src/xml/xh_notbk.cpp
new file mode 100644 (file)
index 0000000..30b4b63
--- /dev/null
@@ -0,0 +1,95 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        xh_notbk.cpp
+// Purpose:     XML resource for wxBoxSizer
+// Author:      Vaclav Slavik
+// Created:     2000/03/21
+// RCS-ID:      $Id$
+// Copyright:   (c) 2000 Vaclav Slavik
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+#ifdef __GNUG__
+#pragma implementation "xh_notbk.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/xml/xh_notbk.h"
+
+#if wxUSE_NOTEBOOK
+
+#include "wx/log.h"
+#include "wx/notebook.h"
+
+wxNotebookXmlHandler::wxNotebookXmlHandler() 
+: wxXmlResourceHandler(), m_IsInside(FALSE), m_Notebook(NULL)
+{
+    ADD_STYLE(wxNB_FIXEDWIDTH);
+    ADD_STYLE(wxNB_LEFT);
+    ADD_STYLE(wxNB_RIGHT);
+    ADD_STYLE(wxNB_BOTTOM);
+}
+
+
+
+wxObject *wxNotebookXmlHandler::DoCreateResource()
+{ 
+    if (m_Node->GetName() == _T("page"))
+    {
+        wxXmlNode *n = GetParamNode(_T("child"))->GetChildren();
+        while (n)
+        {
+            if (n->GetType() == wxXML_ELEMENT_NODE)
+            {        
+                bool old_ins = m_IsInside;
+                m_IsInside = FALSE;
+                m_IsInside = old_ins;
+                wxObject *item = CreateResFromNode(n, m_Notebook, NULL);
+                wxWindow *wnd = wxDynamicCast(item, wxWindow);
+                
+                if (wnd)
+                    m_Notebook->AddPage(wnd, GetText(_T("label")), 
+                                             GetBool(_T("selected"), 0));
+                else 
+                    wxLogError(_T("Error in resource."));              
+                return wnd;
+            }
+            n = n->GetNext();
+        }
+        wxLogError(_T("Error in resource: no control within notebook's <page> tag."));
+        return NULL;
+    }
+    
+    else {
+        wxNotebook *nb = new wxNotebook(m_ParentAsWindow, 
+                                        GetID(),
+                                        GetPosition(), GetSize(),
+                                        GetStyle( _T("style" )),
+                                        GetName());
+    
+        wxNotebook *old_par = m_Notebook;
+        m_Notebook = nb;
+        bool old_ins = m_IsInside;
+        m_IsInside = TRUE;
+        CreateChildren(m_Notebook, TRUE/*only this handler*/);
+        m_IsInside = old_ins;
+        m_Notebook = old_par;
+        
+        return nb;
+    }
+}
+
+
+
+bool wxNotebookXmlHandler::CanHandle(wxXmlNode *node)
+{
+    return ((!m_IsInside && node->GetName() == _T("notebook")) ||
+            (m_IsInside && node->GetName() == _T("page")));
+}
+
+#endif