From: Julian Smart <julian@anthemion.co.uk>
Date: Fri, 23 Jan 2004 10:01:44 +0000 (+0000)
Subject: Applied patch [ 882493 ] Added XRC support for wxStatusBar
X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/b0fb0f3c71c527b5c5cb839355c88766b6f8c888

Applied patch [ 882493 ] Added XRC support for wxStatusBar
By Brian Ravnsgaard Riis


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25337 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---

diff --git a/contrib/build/xrc/xrc.bkl b/contrib/build/xrc/xrc.bkl
index 3a6f12564e..6a2022558f 100644
--- a/contrib/build/xrc/xrc.bkl
+++ b/contrib/build/xrc/xrc.bkl
@@ -35,6 +35,7 @@
         xh_slidr.cpp
         xh_spin.cpp
         xh_split.cpp
+        xh_statbar.cpp
         xh_stbmp.cpp
         xh_stbox.cpp
         xh_stlin.cpp
@@ -77,6 +78,7 @@
             wx/xrc/xh_slidr.h
             wx/xrc/xh_spin.h
             wx/xrc/xh_split.h
+            wx/xrc/xh_statbar.h
             wx/xrc/xh_stbmp.h
             wx/xrc/xh_stbox.h
             wx/xrc/xh_stlin.h
diff --git a/contrib/include/wx/xrc/xh_all.h b/contrib/include/wx/xrc/xh_all.h
index 51ccbf3533..fc1d82c439 100644
--- a/contrib/include/wx/xrc/xh_all.h
+++ b/contrib/include/wx/xrc/xh_all.h
@@ -49,5 +49,6 @@
 #include "wx/xrc/xh_scwin.h"
 #include "wx/xrc/xh_split.h"
 #include "wx/xrc/xh_wizrd.h"
+#include "wx/xrc/xh_statbar.h"
 
 #endif // _WX_XMLRES_H_
diff --git a/contrib/include/wx/xrc/xh_statbar.h b/contrib/include/wx/xrc/xh_statbar.h
new file mode 100644
index 0000000000..7e57e00d2f
--- /dev/null
+++ b/contrib/include/wx/xrc/xh_statbar.h
@@ -0,0 +1,29 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        xh_statbar.h
+// Purpose:     XML resource handler for wxStatusBar
+// Author:      Brian Ravnsgaard Riis
+// Created:     2004/01/21
+// RCS-ID:
+// Copyright:   (c) 2004 Brian Ravnsgaard Riis
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_XH_STATBAR_H_
+#define _WX_XH_STATBAR_H_
+
+#if defined(__GNUG__) && !defined(__APPLE__)
+#pragma interface "xh_statbar.h"
+#endif
+
+#include "wx/xrc/xmlres.h"
+
+class WXXMLDLLEXPORT wxStatusBarXmlHandler : public wxXmlResourceHandler
+{
+    public:
+        wxStatusBarXmlHandler();
+        virtual wxObject *DoCreateResource();
+        virtual bool CanHandle(wxXmlNode *node);
+};
+
+#endif // _WX_XH_STATBAR_H_
+
diff --git a/contrib/src/xrc/xh_statbar.cpp b/contrib/src/xrc/xh_statbar.cpp
new file mode 100644
index 0000000000..d69735c63b
--- /dev/null
+++ b/contrib/src/xrc/xh_statbar.cpp
@@ -0,0 +1,79 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        xh_statbar.cpp
+// Purpose:     XRC resource for wxStatusBar
+// Author:      Brian Ravnsgaard Riis
+// Created:     2004/01/21
+// RCS-ID:      
+// Copyright:   (c) 2004 Brian Ravnsgaard Riis
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "xh_statbar.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/frame.h"
+#include "wx/string.h"
+
+#if wxUSE_STATUSBAR
+
+#include "wx/xrc/xh_statbar.h"
+#include "wx/statusbr.h"
+
+wxStatusBarXmlHandler::wxStatusBarXmlHandler() : 
+        wxXmlResourceHandler()
+{
+    XRC_ADD_STYLE(wxST_SIZEGRIP);
+    AddWindowStyles();
+}
+
+wxObject *wxStatusBarXmlHandler::DoCreateResource()
+{
+    XRC_MAKE_INSTANCE(statbar, wxStatusBar)
+
+    statbar->Create(m_parentAsWindow,
+                    GetID(),
+                    GetStyle(),
+                    GetName());
+
+    int fields = GetLong(wxT("fields"), 1);
+    wxString widths = GetParamValue(wxT("widths"));
+
+    if(fields > 1)
+    {
+        int *width = new int[fields];
+  
+        for (unsigned int i = 0; i < fields; ++i)
+        {
+            width[i] = wxAtoi(widths.BeforeFirst(wxT(',')));
+            if(widths.Find(wxT(',')))
+                widths.Remove(0, widths.Find(wxT(',')) + 1);
+        }
+        statbar->SetFieldsCount(fields, width);
+        delete[] width;
+    }
+
+    if (m_parentAsWindow)
+    {
+        wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame);
+        if (parentFrame)
+            parentFrame->SetStatusBar(statbar);
+    }
+
+    return statbar;
+}
+
+bool wxStatusBarXmlHandler::CanHandle(wxXmlNode *node)
+{
+    return IsOfClass(node, wxT("wxStatusBar"));
+}
+
+#endif
+
diff --git a/contrib/src/xrc/xmlrsall.cpp b/contrib/src/xrc/xmlrsall.cpp
index 2749b9eb00..0b180c5cbf 100644
--- a/contrib/src/xrc/xmlrsall.cpp
+++ b/contrib/src/xrc/xmlrsall.cpp
@@ -99,4 +99,7 @@ void wxXmlResource::InitAllHandlers()
 #if wxUSE_WIZARDDLG
     AddHandler(new wxWizardXmlHandler);
 #endif
+#if wxUSE_STATUSBAR
+    AddHandler(new wxStatusBarXmlHandler);
+#endif
 }
diff --git a/docs/changes.txt b/docs/changes.txt
index 65bb4e65f4..7b0182d2c7 100644
--- a/docs/changes.txt
+++ b/docs/changes.txt
@@ -113,6 +113,7 @@ All (GUI):
 - fixed scrollbar problem in wxGrid (not showing scrollbars
   when sizing smaller) (Shane Harper)
 - dbbrowse demo fixed for Unicode (Wlodzimierz Skiba)
+- added wxStatusBar support to XRC (Brian Ravnsgaard Riis)
 
 wxMSW:
 
diff --git a/docs/tech/tn0014.txt b/docs/tech/tn0014.txt
index c079024bbf..cf95ed05ab 100644
--- a/docs/tech/tn0014.txt
+++ b/docs/tech/tn0014.txt
@@ -323,6 +323,10 @@ and the splitter is created unsplitted. If there are two children, the
 splitter is created splitted, either horizontally or vertically depending
 on the value of "orientation" attribute.
 
+wxStatusBar
+-----------
+fields                     Integer number of fields
+widths                     Width1, Width2, Width3, ...
 
 wxToolBar
 ---------
diff --git a/include/wx/xrc/xh_all.h b/include/wx/xrc/xh_all.h
index 51ccbf3533..fc1d82c439 100644
--- a/include/wx/xrc/xh_all.h
+++ b/include/wx/xrc/xh_all.h
@@ -49,5 +49,6 @@
 #include "wx/xrc/xh_scwin.h"
 #include "wx/xrc/xh_split.h"
 #include "wx/xrc/xh_wizrd.h"
+#include "wx/xrc/xh_statbar.h"
 
 #endif // _WX_XMLRES_H_
diff --git a/include/wx/xrc/xh_statbar.h b/include/wx/xrc/xh_statbar.h
new file mode 100644
index 0000000000..7e57e00d2f
--- /dev/null
+++ b/include/wx/xrc/xh_statbar.h
@@ -0,0 +1,29 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        xh_statbar.h
+// Purpose:     XML resource handler for wxStatusBar
+// Author:      Brian Ravnsgaard Riis
+// Created:     2004/01/21
+// RCS-ID:
+// Copyright:   (c) 2004 Brian Ravnsgaard Riis
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifndef _WX_XH_STATBAR_H_
+#define _WX_XH_STATBAR_H_
+
+#if defined(__GNUG__) && !defined(__APPLE__)
+#pragma interface "xh_statbar.h"
+#endif
+
+#include "wx/xrc/xmlres.h"
+
+class WXXMLDLLEXPORT wxStatusBarXmlHandler : public wxXmlResourceHandler
+{
+    public:
+        wxStatusBarXmlHandler();
+        virtual wxObject *DoCreateResource();
+        virtual bool CanHandle(wxXmlNode *node);
+};
+
+#endif // _WX_XH_STATBAR_H_
+
diff --git a/src/xrc/xh_statbar.cpp b/src/xrc/xh_statbar.cpp
new file mode 100644
index 0000000000..d69735c63b
--- /dev/null
+++ b/src/xrc/xh_statbar.cpp
@@ -0,0 +1,79 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        xh_statbar.cpp
+// Purpose:     XRC resource for wxStatusBar
+// Author:      Brian Ravnsgaard Riis
+// Created:     2004/01/21
+// RCS-ID:      
+// Copyright:   (c) 2004 Brian Ravnsgaard Riis
+// Licence:     wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "xh_statbar.h"
+#endif
+
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+    #pragma hdrstop
+#endif
+
+#include "wx/frame.h"
+#include "wx/string.h"
+
+#if wxUSE_STATUSBAR
+
+#include "wx/xrc/xh_statbar.h"
+#include "wx/statusbr.h"
+
+wxStatusBarXmlHandler::wxStatusBarXmlHandler() : 
+        wxXmlResourceHandler()
+{
+    XRC_ADD_STYLE(wxST_SIZEGRIP);
+    AddWindowStyles();
+}
+
+wxObject *wxStatusBarXmlHandler::DoCreateResource()
+{
+    XRC_MAKE_INSTANCE(statbar, wxStatusBar)
+
+    statbar->Create(m_parentAsWindow,
+                    GetID(),
+                    GetStyle(),
+                    GetName());
+
+    int fields = GetLong(wxT("fields"), 1);
+    wxString widths = GetParamValue(wxT("widths"));
+
+    if(fields > 1)
+    {
+        int *width = new int[fields];
+  
+        for (unsigned int i = 0; i < fields; ++i)
+        {
+            width[i] = wxAtoi(widths.BeforeFirst(wxT(',')));
+            if(widths.Find(wxT(',')))
+                widths.Remove(0, widths.Find(wxT(',')) + 1);
+        }
+        statbar->SetFieldsCount(fields, width);
+        delete[] width;
+    }
+
+    if (m_parentAsWindow)
+    {
+        wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame);
+        if (parentFrame)
+            parentFrame->SetStatusBar(statbar);
+    }
+
+    return statbar;
+}
+
+bool wxStatusBarXmlHandler::CanHandle(wxXmlNode *node)
+{
+    return IsOfClass(node, wxT("wxStatusBar"));
+}
+
+#endif
+
diff --git a/src/xrc/xmlrsall.cpp b/src/xrc/xmlrsall.cpp
index 2749b9eb00..0b180c5cbf 100644
--- a/src/xrc/xmlrsall.cpp
+++ b/src/xrc/xmlrsall.cpp
@@ -99,4 +99,7 @@ void wxXmlResource::InitAllHandlers()
 #if wxUSE_WIZARDDLG
     AddHandler(new wxWizardXmlHandler);
 #endif
+#if wxUSE_STATUSBAR
+    AddHandler(new wxStatusBarXmlHandler);
+#endif
 }