]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xh_statbar.cpp
fix preprocessor expression, closes #12822
[wxWidgets.git] / src / xrc / xh_statbar.cpp
index a31db982a4229414e86798eddce32db3f4c05031..fbf25f189f8337b935760f3f9d9c402851fc88a1 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        xh_statbar.cpp
+// Name:        src/xrc/xh_statbar.cpp
 // Purpose:     XRC resource for wxStatusBar
 // Author:      Brian Ravnsgaard Riis
 // Created:     2004/01/21
@@ -8,10 +8,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
-#pragma implementation "xh_statbar.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
     #pragma hdrstop
 #endif
 
-#include "wx/frame.h"
-#include "wx/string.h"
-
-#if wxUSE_STATUSBAR
+#if wxUSE_XRC && wxUSE_STATUSBAR
 
 #include "wx/xrc/xh_statbar.h"
-#include "wx/statusbr.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/string.h"
+    #include "wx/log.h"
+    #include "wx/frame.h"
+    #include "wx/statusbr.h"
+#endif
 
 IMPLEMENT_DYNAMIC_CLASS(wxStatusBarXmlHandler, wxXmlResourceHandler)
 
-wxStatusBarXmlHandler::wxStatusBarXmlHandler() :
-        wxXmlResourceHandler()
+wxStatusBarXmlHandler::wxStatusBarXmlHandler()
+                      :wxXmlResourceHandler()
 {
+    XRC_ADD_STYLE(wxSTB_SIZEGRIP);
+    XRC_ADD_STYLE(wxSTB_SHOW_TIPS);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_START);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_MIDDLE);
+    XRC_ADD_STYLE(wxSTB_ELLIPSIZE_END);
+    XRC_ADD_STYLE(wxSTB_DEFAULT_STYLE);
+
+    // compat style name:
     XRC_ADD_STYLE(wxST_SIZEGRIP);
+
     AddWindowStyles();
 }
 
@@ -47,8 +55,9 @@ wxObject *wxStatusBarXmlHandler::DoCreateResource()
 
     int fields = GetLong(wxT("fields"), 1);
     wxString widths = GetParamValue(wxT("widths"));
+    wxString styles = GetParamValue(wxT("styles"));
 
-    if(fields > 1)
+    if (fields > 1 && !widths.IsEmpty())
     {
         int *width = new int[fields];
 
@@ -61,6 +70,44 @@ wxObject *wxStatusBarXmlHandler::DoCreateResource()
         statbar->SetFieldsCount(fields, width);
         delete[] width;
     }
+    else
+        statbar->SetFieldsCount(fields);
+
+    if (!styles.empty())
+    {
+        int *style = new int[fields];
+        for (int i = 0; i < fields; ++i)
+        {
+            style[i] = wxSB_NORMAL;
+
+            wxString first = styles.BeforeFirst(wxT(','));
+            if (first == wxT("wxSB_NORMAL"))
+                style[i] = wxSB_NORMAL;
+            else if (first == wxT("wxSB_FLAT"))
+                style[i] = wxSB_FLAT;
+            else if (first == wxT("wxSB_RAISED"))
+                style[i] = wxSB_RAISED;
+            else if (!first.empty())
+            {
+                ReportParamError
+                (
+                    "styles",
+                    wxString::Format
+                    (
+                        "unknown status bar field style \"%s\"",
+                        first
+                    )
+                );
+            }
+
+            if(styles.Find(wxT(',')))
+                styles.Remove(0, styles.Find(wxT(',')) + 1);
+        }
+        statbar->SetStatusStyles(fields, style);
+        delete [] style;
+    }
+
+    CreateChildren(statbar);
 
     if (m_parentAsWindow)
     {
@@ -77,5 +124,4 @@ bool wxStatusBarXmlHandler::CanHandle(wxXmlNode *node)
     return IsOfClass(node, wxT("wxStatusBar"));
 }
 
-#endif
-
+#endif // wxUSE_XRC && wxUSE_STATUSBAR