]> git.saurik.com Git - wxWidgets.git/blobdiff - src/xrc/xh_toolb.cpp
This should work on SuSE and Mandrake icon themes.
[wxWidgets.git] / src / xrc / xh_toolb.cpp
index 3cddf6f6b271a348eb825728a3da50122982fc65..40fc9246df9891200836849962e6571156d72376 100644 (file)
 
 #include "wx/xrc/xh_toolb.h"
 #include "wx/toolbar.h"
 
 #include "wx/xrc/xh_toolb.h"
 #include "wx/toolbar.h"
-
+#include "wx/frame.h"
 
 #if wxUSE_TOOLBAR
 
 
 #if wxUSE_TOOLBAR
 
+IMPLEMENT_DYNAMIC_CLASS(wxToolBarXmlHandler, wxXmlResourceHandler)
+
 wxToolBarXmlHandler::wxToolBarXmlHandler() 
 : wxXmlResourceHandler(), m_isInside(FALSE), m_toolbar(NULL)
 {
 wxToolBarXmlHandler::wxToolBarXmlHandler() 
 : wxXmlResourceHandler(), m_isInside(FALSE), m_toolbar(NULL)
 {
-    ADD_STYLE(wxTB_FLAT);
-    ADD_STYLE(wxTB_DOCKABLE);
-    ADD_STYLE(wxTB_VERTICAL);
-    ADD_STYLE(wxTB_HORIZONTAL);
+    XRC_ADD_STYLE(wxTB_FLAT);
+    XRC_ADD_STYLE(wxTB_DOCKABLE);
+    XRC_ADD_STYLE(wxTB_VERTICAL);
+    XRC_ADD_STYLE(wxTB_HORIZONTAL);
+    XRC_ADD_STYLE(wxTB_3DBUTTONS);
+    XRC_ADD_STYLE(wxTB_TEXT);
+    XRC_ADD_STYLE(wxTB_NOICONS);
+    XRC_ADD_STYLE(wxTB_NODIVIDER);
+    XRC_ADD_STYLE(wxTB_NOALIGN);
 }
 
 }
 
-
-
 wxObject *wxToolBarXmlHandler::DoCreateResource()
 { 
     if (m_class == wxT("tool"))
     {
         wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: tool not within a toolbar!"));
 wxObject *wxToolBarXmlHandler::DoCreateResource()
 { 
     if (m_class == wxT("tool"))
     {
         wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: tool not within a toolbar!"));
-        m_toolbar->AddTool(GetID(),
-                           GetBitmap(wxT("bitmap")),
-                           GetBitmap(wxT("bitmap2")),
-                           GetBool(wxT("toggle")),
-                           GetPosition().x,
-                           GetPosition().y,
-                           NULL,
-                           GetText(wxT("tooltip")),
-                           GetText(wxT("longhelp")));
+        
+        if (GetPosition() != wxDefaultPosition)
+        {
+            m_toolbar->AddTool(GetID(),
+                               GetBitmap(wxT("bitmap"), wxART_TOOLBAR),
+                               GetBitmap(wxT("bitmap2"), wxART_TOOLBAR),
+                               GetBool(wxT("toggle")),
+                               GetPosition().x,
+                               GetPosition().y,
+                               NULL,
+                               GetText(wxT("tooltip")),
+                               GetText(wxT("longhelp")));
+        }
+        else
+        {        
+            wxItemKind kind = wxITEM_NORMAL;
+            if (GetBool(wxT("radio")))
+                kind = wxITEM_RADIO;
+            if (GetBool(wxT("toggle")))
+            {
+                wxASSERT_MSG( kind == wxITEM_NORMAL,
+                              _T("can't have both toggleable and radion button at once") );
+                kind = wxITEM_CHECK;
+            }        
+            m_toolbar->AddTool(GetID(),
+                               GetText(wxT("label")),
+                               GetBitmap(wxT("bitmap"), wxART_TOOLBAR),
+                               GetBitmap(wxT("bitmap2"), wxART_TOOLBAR),
+                               kind,
+                               GetText(wxT("tooltip")),
+                               GetText(wxT("longhelp")));
+        }
         return m_toolbar; // must return non-NULL
     }
     
         return m_toolbar; // must return non-NULL
     }
     
@@ -66,12 +94,15 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
 #ifdef __WXMSW__
         if (!(style & wxNO_BORDER)) style |= wxNO_BORDER;
 #endif
 #ifdef __WXMSW__
         if (!(style & wxNO_BORDER)) style |= wxNO_BORDER;
 #endif
-        wxToolBar *toolbar = new wxToolBar(m_parentAsWindow,
-                                    GetID(),
-                                    GetPosition(),
-                                    GetSize(),
-                                    style,
-                                    GetName());
+
+        XRC_MAKE_INSTANCE(toolbar, wxToolBar)
+        toolbar->Create(m_parentAsWindow,
+                         GetID(),
+                         GetPosition(),
+                         GetSize(),
+                         style,
+                         GetName());
 
         wxSize bmpsize = GetSize(wxT("bitmapsize"));
         if (!(bmpsize == wxDefaultSize))
 
         wxSize bmpsize = GetSize(wxT("bitmapsize"));
         if (!(bmpsize == wxDefaultSize))
@@ -87,6 +118,9 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
             toolbar->SetToolSeparation(separation);
 
         wxXmlNode *children_node = GetParamNode(wxT("object"));
             toolbar->SetToolSeparation(separation);
 
         wxXmlNode *children_node = GetParamNode(wxT("object"));
+        if (!children_node)
+           children_node = GetParamNode(wxT("object_ref"));
+
         if (children_node == NULL) return toolbar;
 
         m_isInside = TRUE;
         if (children_node == NULL) return toolbar;
 
         m_isInside = TRUE;
@@ -96,8 +130,8 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
 
         while (n)
         {
 
         while (n)
         {
-            if (n->GetType() == wxXML_ELEMENT_NODE && 
-                n->GetName() == wxT("object"))
+            if ((n->GetType() == wxXML_ELEMENT_NODE) && 
+                (n->GetName() == wxT("object") || n->GetName() == wxT("object_ref")))
             {
                 wxObject *created = CreateResFromNode(n, toolbar, NULL);
                 wxControl *control = wxDynamicCast(created, wxControl);
             {
                 wxObject *created = CreateResFromNode(n, toolbar, NULL);
                 wxControl *control = wxDynamicCast(created, wxControl);
@@ -113,12 +147,18 @@ wxObject *wxToolBarXmlHandler::DoCreateResource()
         m_toolbar = NULL;
 
         toolbar->Realize();
         m_toolbar = NULL;
 
         toolbar->Realize();
+
+        if (m_parentAsWindow && !GetBool(wxT("dontattachtoframe")))
+        {
+            wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame);
+            if (parentFrame)
+                parentFrame->SetToolBar(toolbar);
+        }
+
         return toolbar;
     }
 }
 
         return toolbar;
     }
 }
 
-
-
 bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node)
 {
     return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) ||
 bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node)
 {
     return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) ||