X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/db59a97cdad9867499280fe10f751135964cbb5c..0b7dce5480b8cf7ce4368122744d853f7a684e34:/src/xrc/xh_toolb.cpp diff --git a/src/xrc/xh_toolb.cpp b/src/xrc/xh_toolb.cpp index 6fe844c348..c1bda2419f 100644 --- a/src/xrc/xh_toolb.cpp +++ b/src/xrc/xh_toolb.cpp @@ -1,16 +1,12 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: xh_toolb.cpp -// Purpose: XRC resource for wxBoxSizer +// Name: src/xrc/xh_toolb.cpp +// Purpose: XRC resource for wxToolBar // Author: Vaclav Slavik // Created: 2000/08/11 // RCS-ID: $Id$ // Copyright: (c) 2000 Vaclav Slavik // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - -#ifdef __GNUG__ -#pragma implementation "xh_toolb.h" -#endif // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -19,45 +15,76 @@ #pragma hdrstop #endif +#if wxUSE_XRC && wxUSE_TOOLBAR + #include "wx/xrc/xh_toolb.h" -#include "wx/toolbar.h" -#include "wx/frame.h" -#if wxUSE_TOOLBAR +#ifndef WX_PRECOMP + #include "wx/frame.h" + #include "wx/toolbar.h" +#endif + +IMPLEMENT_DYNAMIC_CLASS(wxToolBarXmlHandler, wxXmlResourceHandler) -wxToolBarXmlHandler::wxToolBarXmlHandler() -: wxXmlResourceHandler(), m_isInside(FALSE), m_toolbar(NULL) +wxToolBarXmlHandler::wxToolBarXmlHandler() +: wxXmlResourceHandler(), m_isInside(false), m_toolbar(NULL) { 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); + XRC_ADD_STYLE(wxTB_HORZ_LAYOUT); + XRC_ADD_STYLE(wxTB_HORZ_TEXT); + + XRC_ADD_STYLE(wxTB_TOP); + XRC_ADD_STYLE(wxTB_LEFT); + XRC_ADD_STYLE(wxTB_RIGHT); + XRC_ADD_STYLE(wxTB_BOTTOM); + + AddWindowStyles(); } wxObject *wxToolBarXmlHandler::DoCreateResource() -{ +{ if (m_class == wxT("tool")) { wxCHECK_MSG(m_toolbar, NULL, wxT("Incorrect syntax of XRC resource: tool not within a toolbar!")); + + 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 toggle and radio button at once") ); + kind = wxITEM_CHECK; + } m_toolbar->AddTool(GetID(), + GetText(wxT("label")), GetBitmap(wxT("bitmap"), wxART_TOOLBAR), GetBitmap(wxT("bitmap2"), wxART_TOOLBAR), - GetBool(wxT("toggle")), - GetPosition().x, - GetPosition().y, - NULL, + kind, GetText(wxT("tooltip")), GetText(wxT("longhelp"))); + + if ( GetBool(wxT("disabled")) ) + m_toolbar->EnableTool(GetID(), false); + return m_toolbar; // must return non-NULL } - + else if (m_class == wxT("separator")) { 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 } - + else /**/ { int style = GetStyle(wxT("style"), wxNO_BORDER | wxTB_HORIZONTAL); @@ -66,13 +93,14 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() #endif XRC_MAKE_INSTANCE(toolbar, wxToolBar) - + toolbar->Create(m_parentAsWindow, GetID(), GetPosition(), GetSize(), style, GetName()); + SetupWindow(toolbar); wxSize bmpsize = GetSize(wxT("bitmapsize")); if (!(bmpsize == wxDefaultSize)) @@ -93,14 +121,14 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() if (children_node == NULL) return toolbar; - m_isInside = TRUE; + m_isInside = true; m_toolbar = toolbar; wxXmlNode *n = children_node; while (n) { - if ((n->GetType() == wxXML_ELEMENT_NODE) && + if ((n->GetType() == wxXML_ELEMENT_NODE) && (n->GetName() == wxT("object") || n->GetName() == wxT("object_ref"))) { wxObject *created = CreateResFromNode(n, toolbar, NULL); @@ -113,13 +141,12 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() n = n->GetNext(); } - m_isInside = FALSE; + m_isInside = false; m_toolbar = NULL; toolbar->Realize(); - // FIXME: how can I create a toolbar without immediately setting it to the frame? - if (m_parentAsWindow) + if (m_parentAsWindow && !GetBool(wxT("dontattachtoframe"))) { wxFrame *parentFrame = wxDynamicCast(m_parent, wxFrame); if (parentFrame) @@ -133,8 +160,8 @@ wxObject *wxToolBarXmlHandler::DoCreateResource() bool wxToolBarXmlHandler::CanHandle(wxXmlNode *node) { return ((!m_isInside && IsOfClass(node, wxT("wxToolBar"))) || - (m_isInside && IsOfClass(node, wxT("tool"))) || + (m_isInside && IsOfClass(node, wxT("tool"))) || (m_isInside && IsOfClass(node, wxT("separator")))); } -#endif +#endif // wxUSE_XRC && wxUSE_TOOLBAR