]>
git.saurik.com Git - wxWidgets.git/blob - src/xrc/xh_toolb.cpp
1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: XRC resource for wxBoxSizer
4 // Author: Vaclav Slavik
7 // Copyright: (c) 2000 Vaclav Slavik
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 // For compilers that support precompilation, includes "wx.h".
12 #include "wx/wxprec.h"
18 #if wxUSE_XRC && wxUSE_TOOLBAR
20 #include "wx/xrc/xh_toolb.h"
21 #include "wx/toolbar.h"
24 IMPLEMENT_DYNAMIC_CLASS(wxToolBarXmlHandler
, wxXmlResourceHandler
)
26 wxToolBarXmlHandler::wxToolBarXmlHandler()
27 : wxXmlResourceHandler(), m_isInside(false), m_toolbar(NULL
)
29 XRC_ADD_STYLE(wxTB_FLAT
);
30 XRC_ADD_STYLE(wxTB_DOCKABLE
);
31 XRC_ADD_STYLE(wxTB_VERTICAL
);
32 XRC_ADD_STYLE(wxTB_HORIZONTAL
);
33 XRC_ADD_STYLE(wxTB_3DBUTTONS
);
34 XRC_ADD_STYLE(wxTB_TEXT
);
35 XRC_ADD_STYLE(wxTB_NOICONS
);
36 XRC_ADD_STYLE(wxTB_NODIVIDER
);
37 XRC_ADD_STYLE(wxTB_NOALIGN
);
38 XRC_ADD_STYLE(wxTB_HORZ_LAYOUT
);
39 XRC_ADD_STYLE(wxTB_HORZ_TEXT
);
43 wxObject
*wxToolBarXmlHandler::DoCreateResource()
45 if (m_class
== wxT("tool"))
47 wxCHECK_MSG(m_toolbar
, NULL
, wxT("Incorrect syntax of XRC resource: tool not within a toolbar!"));
49 if (GetPosition() != wxDefaultPosition
)
51 m_toolbar
->AddTool(GetID(),
52 GetBitmap(wxT("bitmap"), wxART_TOOLBAR
),
53 GetBitmap(wxT("bitmap2"), wxART_TOOLBAR
),
54 GetBool(wxT("toggle")),
58 GetText(wxT("tooltip")),
59 GetText(wxT("longhelp")));
63 wxItemKind kind
= wxITEM_NORMAL
;
64 if (GetBool(wxT("radio")))
66 if (GetBool(wxT("toggle")))
68 wxASSERT_MSG( kind
== wxITEM_NORMAL
,
69 _T("can't have both toggleable and radion button at once") );
72 m_toolbar
->AddTool(GetID(),
73 GetText(wxT("label")),
74 GetBitmap(wxT("bitmap"), wxART_TOOLBAR
),
75 GetBitmap(wxT("bitmap2"), wxART_TOOLBAR
),
77 GetText(wxT("tooltip")),
78 GetText(wxT("longhelp")));
80 if ( GetBool(wxT("disabled")) )
81 m_toolbar
->EnableTool(GetID(), false);
83 return m_toolbar
; // must return non-NULL
86 else if (m_class
== wxT("separator"))
88 wxCHECK_MSG(m_toolbar
, NULL
, wxT("Incorrect syntax of XRC resource: separator not within a toolbar!"));
89 m_toolbar
->AddSeparator();
90 return m_toolbar
; // must return non-NULL
93 else /*<object class="wxToolBar">*/
95 int style
= GetStyle(wxT("style"), wxNO_BORDER
| wxTB_HORIZONTAL
);
97 if (!(style
& wxNO_BORDER
)) style
|= wxNO_BORDER
;
100 XRC_MAKE_INSTANCE(toolbar
, wxToolBar
)
102 toolbar
->Create(m_parentAsWindow
,
109 wxSize bmpsize
= GetSize(wxT("bitmapsize"));
110 if (!(bmpsize
== wxDefaultSize
))
111 toolbar
->SetToolBitmapSize(bmpsize
);
112 wxSize margins
= GetSize(wxT("margins"));
113 if (!(margins
== wxDefaultSize
))
114 toolbar
->SetMargins(margins
.x
, margins
.y
);
115 long packing
= GetLong(wxT("packing"), -1);
117 toolbar
->SetToolPacking(packing
);
118 long separation
= GetLong(wxT("separation"), -1);
119 if (separation
!= -1)
120 toolbar
->SetToolSeparation(separation
);
121 if (HasParam(wxT("bg")))
122 toolbar
->SetBackgroundColour(GetColour(wxT("bg")));
124 wxXmlNode
*children_node
= GetParamNode(wxT("object"));
126 children_node
= GetParamNode(wxT("object_ref"));
128 if (children_node
== NULL
) return toolbar
;
133 wxXmlNode
*n
= children_node
;
137 if ((n
->GetType() == wxXML_ELEMENT_NODE
) &&
138 (n
->GetName() == wxT("object") || n
->GetName() == wxT("object_ref")))
140 wxObject
*created
= CreateResFromNode(n
, toolbar
, NULL
);
141 wxControl
*control
= wxDynamicCast(created
, wxControl
);
142 if (!IsOfClass(n
, wxT("tool")) &&
143 !IsOfClass(n
, wxT("separator")) &&
145 toolbar
->AddControl(control
);
155 if (m_parentAsWindow
&& !GetBool(wxT("dontattachtoframe")))
157 wxFrame
*parentFrame
= wxDynamicCast(m_parent
, wxFrame
);
159 parentFrame
->SetToolBar(toolbar
);
166 bool wxToolBarXmlHandler::CanHandle(wxXmlNode
*node
)
168 return ((!m_isInside
&& IsOfClass(node
, wxT("wxToolBar"))) ||
169 (m_isInside
&& IsOfClass(node
, wxT("tool"))) ||
170 (m_isInside
&& IsOfClass(node
, wxT("separator"))));
173 #endif // wxUSE_XRC && wxUSE_TOOLBAR