]> git.saurik.com Git - wxWidgets.git/blob - wxPython/src/_toolbar.i
Apply [ 1712381 ] CRASH: closing floating panel on GTK
[wxWidgets.git] / wxPython / src / _toolbar.i
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: _toolbar.i
3 // Purpose: SWIG interface defs for wxStatusBar
4 //
5 // Author: Robin Dunn
6 //
7 // Created: 24-Aug-1998
8 // RCS-ID: $Id$
9 // Copyright: (c) 2003 by Total Control Software
10 // Licence: wxWindows license
11 /////////////////////////////////////////////////////////////////////////////
12
13 // Not a %module
14
15
16 //---------------------------------------------------------------------------
17
18 MAKE_CONST_WXSTRING_NOSWIG(ToolBarNameStr);
19
20
21 //---------------------------------------------------------------------------
22 %newgroup;
23
24
25 class wxToolBarBase;
26
27 enum wxToolBarToolStyle
28 {
29 wxTOOL_STYLE_BUTTON = 1,
30 wxTOOL_STYLE_SEPARATOR = 2,
31 wxTOOL_STYLE_CONTROL
32 };
33
34 enum {
35 wxTB_HORIZONTAL,
36 wxTB_VERTICAL,
37 wxTB_TOP,
38 wxTB_LEFT,
39 wxTB_BOTTOM,
40 wxTB_RIGHT,
41
42 wxTB_3DBUTTONS,
43 wxTB_FLAT,
44 wxTB_DOCKABLE,
45 wxTB_NOICONS,
46 wxTB_TEXT,
47 wxTB_NODIVIDER,
48 wxTB_NOALIGN,
49 wxTB_HORZ_LAYOUT,
50 wxTB_HORZ_TEXT,
51 wxTB_NO_TOOLTIPS
52 };
53
54
55
56 // wxToolBarTool is a toolbar element.
57 //
58 // It has a unique id (except for the separators which always have id -1), the
59 // style (telling whether it is a normal button, separator or a control), the
60 // state (toggled or not, enabled or not) and short and long help strings. The
61 // default implementations use the short help string for the tooltip text which
62 // is popped up when the mouse pointer enters the tool and the long help string
63 // for the applications status bar.
64 class wxToolBarToolBase : public wxObject {
65 public:
66 // wxToolBarToolBase(wxToolBarBase *tbar = (wxToolBarBase *)NULL,
67 // int id = wxID_SEPARATOR,
68 // const wxString& label = wxPyEmptyString,
69 // const wxBitmap& bmpNormal = wxNullBitmap,
70 // const wxBitmap& bmpDisabled = wxNullBitmap,
71 // wxItemKind kind = wxITEM_NORMAL,
72 // wxObject *clientData = (wxObject *) NULL,
73 // const wxString& shortHelpString = wxPyEmptyString,
74 // const wxString& longHelpString = wxPyEmptyString)
75 // ~wxToolBarToolBase();
76
77 int GetId();
78 wxControl *GetControl();
79 wxToolBarBase *GetToolBar();
80 int IsButton();
81 int IsControl();
82 int IsSeparator();
83 int GetStyle();
84 wxItemKind GetKind();
85 bool IsEnabled();
86 bool IsToggled();
87 bool CanBeToggled();
88 const wxBitmap& GetNormalBitmap();
89 const wxBitmap& GetDisabledBitmap();
90 wxBitmap GetBitmap();
91 wxString GetLabel();
92 wxString GetShortHelp();
93 wxString GetLongHelp();
94 bool Enable(bool enable);
95 void Toggle();
96 bool SetToggle(bool toggle);
97 bool SetShortHelp(const wxString& help);
98 bool SetLongHelp(const wxString& help);
99 void SetNormalBitmap(const wxBitmap& bmp);
100 void SetDisabledBitmap(const wxBitmap& bmp);
101 void SetLabel(const wxString& label);
102 void Detach();
103 void Attach(wxToolBarBase *tbar);
104
105 //wxObject *GetClientData();
106 %extend {
107 // convert the ClientData back to a PyObject
108 PyObject* GetClientData() {
109 wxPyUserData* udata = (wxPyUserData*)self->GetClientData();
110 if (udata) {
111 Py_INCREF(udata->m_obj);
112 return udata->m_obj;
113 } else {
114 Py_INCREF(Py_None);
115 return Py_None;
116 }
117 }
118
119 void SetClientData(PyObject* clientData) {
120 self->SetClientData(new wxPyUserData(clientData));
121 }
122 }
123
124 %pythoncode {
125 GetBitmap1 = GetNormalBitmap
126 GetBitmap2 = GetDisabledBitmap
127 SetBitmap1 = SetNormalBitmap
128 SetBitmap2 = SetDisabledBitmap
129 }
130
131 %property(Bitmap, GetBitmap, doc="See `GetBitmap`");
132 %property(ClientData, GetClientData, SetClientData, doc="See `GetClientData` and `SetClientData`");
133 %property(Control, GetControl, doc="See `GetControl`");
134 %property(DisabledBitmap, GetDisabledBitmap, SetDisabledBitmap, doc="See `GetDisabledBitmap` and `SetDisabledBitmap`");
135 %property(Id, GetId, doc="See `GetId`");
136 %property(Kind, GetKind, doc="See `GetKind`");
137 %property(Label, GetLabel, SetLabel, doc="See `GetLabel` and `SetLabel`");
138 %property(LongHelp, GetLongHelp, SetLongHelp, doc="See `GetLongHelp` and `SetLongHelp`");
139 %property(NormalBitmap, GetNormalBitmap, SetNormalBitmap, doc="See `GetNormalBitmap` and `SetNormalBitmap`");
140 %property(ShortHelp, GetShortHelp, SetShortHelp, doc="See `GetShortHelp` and `SetShortHelp`");
141 %property(Style, GetStyle, doc="See `GetStyle`");
142 %property(ToolBar, GetToolBar, doc="See `GetToolBar`");
143 };
144
145
146
147
148 class wxToolBarBase : public wxControl {
149 public:
150
151 // This is an Abstract Base Class
152
153 %extend {
154
155 // The full AddTool() function. Call it DoAddTool in wxPython and
156 // implement the other Add methods by calling it.
157 //
158 // If bmpDisabled is wxNullBitmap, a shadowed version of the normal bitmap
159 // is created and used as the disabled image.
160 wxToolBarToolBase *DoAddTool(int id,
161 const wxString& label,
162 const wxBitmap& bitmap,
163 const wxBitmap& bmpDisabled = wxNullBitmap,
164 wxItemKind kind = wxITEM_NORMAL,
165 const wxString& shortHelp = wxPyEmptyString,
166 const wxString& longHelp = wxPyEmptyString,
167 PyObject *clientData = NULL)
168 {
169 wxPyUserData* udata = NULL;
170 if (clientData && clientData != Py_None)
171 udata = new wxPyUserData(clientData);
172 return self->AddTool(id, label, bitmap, bmpDisabled, kind,
173 shortHelp, longHelp, udata);
174 }
175
176
177 // Insert the new tool at the given position, if pos == GetToolsCount(), it
178 // is equivalent to DoAddTool()
179 wxToolBarToolBase *DoInsertTool(size_t pos,
180 int id,
181 const wxString& label,
182 const wxBitmap& bitmap,
183 const wxBitmap& bmpDisabled = wxNullBitmap,
184 wxItemKind kind = wxITEM_NORMAL,
185 const wxString& shortHelp = wxPyEmptyString,
186 const wxString& longHelp = wxPyEmptyString,
187 PyObject *clientData = NULL)
188 {
189 wxPyUserData* udata = NULL;
190 if (clientData && clientData != Py_None)
191 udata = new wxPyUserData(clientData);
192 return self->InsertTool(pos, id, label, bitmap, bmpDisabled, kind,
193 shortHelp, longHelp, udata);
194 }
195
196 }
197
198
199 %pythoncode {
200 %# These match the original Add methods for this class, kept for
201 %# backwards compatibility with versions < 2.3.3.
202
203
204 def AddTool(self, id, bitmap,
205 pushedBitmap = wx.NullBitmap,
206 isToggle = 0,
207 clientData = None,
208 shortHelpString = '',
209 longHelpString = '') :
210 '''Old style method to add a tool to the toolbar.'''
211 kind = wx.ITEM_NORMAL
212 if isToggle: kind = wx.ITEM_CHECK
213 return self.DoAddTool(id, '', bitmap, pushedBitmap, kind,
214 shortHelpString, longHelpString, clientData)
215
216 def AddSimpleTool(self, id, bitmap,
217 shortHelpString = '',
218 longHelpString = '',
219 isToggle = 0):
220 '''Old style method to add a tool to the toolbar.'''
221 kind = wx.ITEM_NORMAL
222 if isToggle: kind = wx.ITEM_CHECK
223 return self.DoAddTool(id, '', bitmap, wx.NullBitmap, kind,
224 shortHelpString, longHelpString, None)
225
226 def InsertTool(self, pos, id, bitmap,
227 pushedBitmap = wx.NullBitmap,
228 isToggle = 0,
229 clientData = None,
230 shortHelpString = '',
231 longHelpString = ''):
232 '''Old style method to insert a tool in the toolbar.'''
233 kind = wx.ITEM_NORMAL
234 if isToggle: kind = wx.ITEM_CHECK
235 return self.DoInsertTool(pos, id, '', bitmap, pushedBitmap, kind,
236 shortHelpString, longHelpString, clientData)
237
238 def InsertSimpleTool(self, pos, id, bitmap,
239 shortHelpString = '',
240 longHelpString = '',
241 isToggle = 0):
242 '''Old style method to insert a tool in the toolbar.'''
243 kind = wx.ITEM_NORMAL
244 if isToggle: kind = wx.ITEM_CHECK
245 return self.DoInsertTool(pos, id, '', bitmap, wx.NullBitmap, kind,
246 shortHelpString, longHelpString, None)
247
248
249 %# The following are the new toolbar Add methods starting with
250 %# 2.3.3. They are renamed to have 'Label' in the name so as to be
251 %# able to keep backwards compatibility with using the above
252 %# methods. Eventually these should migrate to be the methods used
253 %# primarily and lose the 'Label' in the name...
254
255 def AddLabelTool(self, id, label, bitmap,
256 bmpDisabled = wx.NullBitmap,
257 kind = wx.ITEM_NORMAL,
258 shortHelp = '', longHelp = '',
259 clientData = None):
260 '''
261 The full AddTool() function.
262
263 If bmpDisabled is wx.NullBitmap, a shadowed version of the normal bitmap
264 is created and used as the disabled image.
265 '''
266 return self.DoAddTool(id, label, bitmap, bmpDisabled, kind,
267 shortHelp, longHelp, clientData)
268
269
270 def InsertLabelTool(self, pos, id, label, bitmap,
271 bmpDisabled = wx.NullBitmap,
272 kind = wx.ITEM_NORMAL,
273 shortHelp = '', longHelp = '',
274 clientData = None):
275 '''
276 Insert the new tool at the given position, if pos == GetToolsCount(), it
277 is equivalent to AddTool()
278 '''
279 return self.DoInsertTool(pos, id, label, bitmap, bmpDisabled, kind,
280 shortHelp, longHelp, clientData)
281
282 def AddCheckLabelTool(self, id, label, bitmap,
283 bmpDisabled = wx.NullBitmap,
284 shortHelp = '', longHelp = '',
285 clientData = None):
286 '''Add a check tool, i.e. a tool which can be toggled'''
287 return self.DoAddTool(id, label, bitmap, bmpDisabled, wx.ITEM_CHECK,
288 shortHelp, longHelp, clientData)
289
290 def AddRadioLabelTool(self, id, label, bitmap,
291 bmpDisabled = wx.NullBitmap,
292 shortHelp = '', longHelp = '',
293 clientData = None):
294 '''
295 Add a radio tool, i.e. a tool which can be toggled and releases any
296 other toggled radio tools in the same group when it happens
297 '''
298 return self.DoAddTool(id, label, bitmap, bmpDisabled, wx.ITEM_RADIO,
299 shortHelp, longHelp, clientData)
300
301
302 %# For consistency with the backwards compatible methods above, here are
303 %# some non-'Label' versions of the Check and Radio methods
304
305 def AddCheckTool(self, id, bitmap,
306 bmpDisabled = wx.NullBitmap,
307 shortHelp = '', longHelp = '',
308 clientData = None):
309 '''Add a check tool, i.e. a tool which can be toggled'''
310 return self.DoAddTool(id, '', bitmap, bmpDisabled, wx.ITEM_CHECK,
311 shortHelp, longHelp, clientData)
312
313 def AddRadioTool(self, id, bitmap,
314 bmpDisabled = wx.NullBitmap,
315 shortHelp = '', longHelp = '',
316 clientData = None):
317 '''
318 Add a radio tool, i.e. a tool which can be toggled and releases any
319 other toggled radio tools in the same group when it happens
320 '''
321 return self.DoAddTool(id, '', bitmap, bmpDisabled, wx.ITEM_RADIO,
322 shortHelp, longHelp, clientData)
323 }
324
325 %Rename(AddToolItem, wxToolBarToolBase*, AddTool (wxToolBarToolBase *tool));
326 %Rename(InsertToolItem, wxToolBarToolBase*, InsertTool (size_t pos, wxToolBarToolBase *tool));
327
328 wxToolBarToolBase *AddControl(wxControl *control,
329 const wxString& label = wxEmptyString);
330 wxToolBarToolBase *InsertControl(size_t pos, wxControl *control,
331 const wxString& label = wxEmptyString);
332 wxControl *FindControl( int id );
333
334 wxToolBarToolBase *AddSeparator();
335 wxToolBarToolBase *InsertSeparator(size_t pos);
336
337 wxToolBarToolBase *RemoveTool(int id);
338
339 bool DeleteToolByPos(size_t pos);
340 bool DeleteTool(int id);
341 void ClearTools();
342 bool Realize();
343
344 void EnableTool(int id, bool enable);
345 void ToggleTool(int id, bool toggle);
346 void SetToggle(int id, bool toggle);
347
348
349 %extend {
350 // convert the ClientData back to a PyObject
351 PyObject* GetToolClientData(int id) {
352 wxPyUserData* udata = (wxPyUserData*)self->GetToolClientData(id);
353 if (udata) {
354 Py_INCREF(udata->m_obj);
355 return udata->m_obj;
356 } else {
357 Py_INCREF(Py_None);
358 return Py_None;
359 }
360 }
361
362 void SetToolClientData(int id, PyObject* clientData) {
363 self->SetToolClientData(id, new wxPyUserData(clientData));
364 }
365 }
366
367 // returns tool pos, or wxNOT_FOUND if tool isn't found
368 int GetToolPos(int id) const;
369
370 bool GetToolState(int id);
371 bool GetToolEnabled(int id);
372 void SetToolShortHelp(int id, const wxString& helpString);
373 wxString GetToolShortHelp(int id);
374 void SetToolLongHelp(int id, const wxString& helpString);
375 wxString GetToolLongHelp(int id);
376
377 %Rename(SetMarginsXY, void, SetMargins(int x, int y));
378 void SetMargins(const wxSize& size);
379 void SetToolPacking(int packing);
380 void SetToolSeparation(int separation);
381 wxSize GetToolMargins();
382 wxSize GetMargins();
383 int GetToolPacking();
384 int GetToolSeparation();
385
386 void SetRows(int nRows);
387 void SetMaxRowsCols(int rows, int cols);
388 int GetMaxRows();
389 int GetMaxCols();
390
391 void SetToolBitmapSize(const wxSize& size);
392 wxSize GetToolBitmapSize();
393 wxSize GetToolSize();
394
395 // returns a (non separator) tool containing the point (x, y) or NULL if
396 // there is no tool at this point (corrdinates are client)
397 wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y);
398
399 // find the tool by id
400 wxToolBarToolBase *FindById(int toolid) const;
401
402 // return True if this is a vertical toolbar, otherwise False
403 bool IsVertical();
404
405 size_t GetToolsCount() const;
406
407 %property(Margins, GetMargins, SetMargins, doc="See `GetMargins` and `SetMargins`");
408 %property(MaxCols, GetMaxCols, doc="See `GetMaxCols`");
409 %property(MaxRows, GetMaxRows, doc="See `GetMaxRows`");
410 %property(ToolBitmapSize, GetToolBitmapSize, SetToolBitmapSize, doc="See `GetToolBitmapSize` and `SetToolBitmapSize`");
411 %property(ToolMargins, GetToolMargins, doc="See `GetToolMargins`");
412 %property(ToolPacking, GetToolPacking, SetToolPacking, doc="See `GetToolPacking` and `SetToolPacking`");
413 %property(ToolSeparation, GetToolSeparation, SetToolSeparation, doc="See `GetToolSeparation` and `SetToolSeparation`");
414 %property(ToolSize, GetToolSize, doc="See `GetToolSize`");
415 %property(ToolsCount, GetToolsCount, doc="See `GetToolsCount`");
416 };
417
418
419
420
421 MustHaveApp(wxToolBar);
422
423 class wxToolBar : public wxToolBarBase {
424 public:
425 %pythonAppend wxToolBar "self._setOORInfo(self)"
426 %pythonAppend wxToolBar() ""
427 %typemap(out) wxToolBar*; // turn off this typemap
428
429 wxToolBar(wxWindow *parent,
430 wxWindowID id=-1,
431 const wxPoint& pos = wxDefaultPosition,
432 const wxSize& size = wxDefaultSize,
433 long style = wxNO_BORDER | wxTB_HORIZONTAL,
434 const wxString& name = wxPyToolBarNameStr);
435 %RenameCtor(PreToolBar, wxToolBar());
436
437 // Turn it back on again
438 %typemap(out) wxToolBar* { $result = wxPyMake_wxObject($1, $owner); }
439
440 bool Create(wxWindow *parent,
441 wxWindowID id=-1,
442 const wxPoint& pos = wxDefaultPosition,
443 const wxSize& size = wxDefaultSize,
444 long style = wxNO_BORDER | wxTB_HORIZONTAL,
445 const wxString& name = wxPyToolBarNameStr);
446
447 // TODO: In 2.9 move these to the base class...
448 void SetToolNormalBitmap(int id, const wxBitmap& bitmap);
449 void SetToolDisabledBitmap(int id, const wxBitmap& bitmap);
450
451 static wxVisualAttributes
452 GetClassDefaultAttributes(wxWindowVariant variant = wxWINDOW_VARIANT_NORMAL);
453 };
454
455 //---------------------------------------------------------------------------
456
457 #if 0
458 %{
459 #include <wx/generic/buttonbar.h>
460 %}
461
462 MustHaveApp(wxToolBar);
463 class wxButtonToolBar : public wxToolBarBase
464 {
465 public:
466 %pythonAppend wxButtonToolBar "self._setOORInfo(self)"
467 %pythonAppend wxButtonToolBar() ""
468
469 wxButtonToolBar(wxWindow *parent,
470 wxWindowID id=-1,
471 const wxPoint& pos = wxDefaultPosition,
472 const wxSize& size = wxDefaultSize,
473 long style = 0,
474 const wxString& name = wxPyToolBarNameStr);
475 %RenameCtor(PreButtonToolBar, wxButtonToolBar());
476
477
478 bool Create(wxWindow *parent,
479 wxWindowID id=-1,
480 const wxPoint& pos = wxDefaultPosition,
481 const wxSize& size = wxDefaultSize,
482 long style = 0,
483 const wxString& name = wxPyToolBarNameStr);
484 };
485
486 #endif
487 //---------------------------------------------------------------------------