X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a42aa5d7be12e5bb24aa0488892574c01cae5a5b..06519806e3f197125ef0609752088272a345b2db:/src/xrc/xh_toolb.cpp?ds=sidebyside diff --git a/src/xrc/xh_toolb.cpp b/src/xrc/xh_toolb.cpp index c86e521763..526a3a9377 100644 --- a/src/xrc/xh_toolb.cpp +++ b/src/xrc/xh_toolb.cpp @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: xh_toolb.cpp -// Purpose: XML resource for wxBoxSizer +// Purpose: XRC resource for wxBoxSizer // Author: Vaclav Slavik // Created: 2000/08/11 // RCS-ID: $Id$ @@ -21,7 +21,7 @@ #include "wx/xrc/xh_toolb.h" #include "wx/toolbar.h" - +#include "wx/frame.h" #if wxUSE_TOOLBAR @@ -40,7 +40,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() { if (m_class == wxT("tool")) { - wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XML resource: tool not within a toolbar!")); + 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")), @@ -55,7 +55,7 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() else if (m_class == wxT("separator")) { - wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XML resource: separator not within a toolbar!")); + wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: separator not within a toolbar!")); m_toolbar->AddSeparator(); return m_toolbar; // must return non-NULL } @@ -66,12 +66,18 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() #ifdef __WXMSW__ if (!(style & wxNO_BORDER)) style |= wxNO_BORDER; #endif - wxToolBar *toolbar = new wxToolBar(m_parentAsWindow, - GetID(), - GetPosition(), - GetSize(), - style, - GetName()); + + wxToolBar *toolbar = wxStaticCast(m_instance, wxToolBar); + + if ( !toolbar ) + toolbar = new wxToolBar; + + toolbar->Create(m_parentAsWindow, + GetID(), + GetPosition(), + GetSize(), + style, + GetName()); wxSize bmpsize = GetSize(wxT("bitmapsize")); if (!(bmpsize == wxDefaultSize)) @@ -87,6 +93,9 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() 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; @@ -96,8 +105,8 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() 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); @@ -113,6 +122,15 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() m_toolbar = NULL; toolbar->Realize(); + + // FIXME: how can I create a toolbar without immediately setting it to the frame? + if (m_parentAsWindow) + { + wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame); + if (parentFrame) + parentFrame->SetToolBar(toolbar); + } + return toolbar; } }