1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/aui/toolbar.h
3 // Purpose: wxaui: wx advanced user interface - docking window manager
4 // Author: Benjamin I. Williams
8 // Copyright: (C) Copyright 2005, Kirix Corporation, All Rights Reserved.
9 // Licence: wxWindows Library Licence, Version 3.1
10 ///////////////////////////////////////////////////////////////////////////////
19 #include "wx/control.h"
23 //class WXDLLIMPEXP_FWD_CORE wxSizerItem;
25 enum wxAuiToolBarStyle
27 wxAUI_TB_TEXT
= 1 << 0,
28 wxAUI_TB_NO_TOOLTIPS
= 1 << 1,
29 wxAUI_TB_NO_AUTORESIZE
= 1 << 2,
30 wxAUI_TB_GRIPPER
= 1 << 3,
31 wxAUI_TB_OVERFLOW
= 1 << 4,
32 wxAUI_TB_VERTICAL
= 1 << 5,
33 wxAUI_TB_HORZ_LAYOUT
= 1 << 6,
34 wxAUI_TB_HORZ_TEXT
= (wxAUI_TB_HORZ_LAYOUT
| wxAUI_TB_TEXT
),
35 wxAUI_TB_DEFAULT_STYLE
= 0
38 enum wxAuiToolBarArtSetting
40 wxAUI_TBART_SEPARATOR_SIZE
= 0,
41 wxAUI_TBART_GRIPPER_SIZE
= 1,
42 wxAUI_TBART_OVERFLOW_SIZE
= 2
45 enum wxAuiToolBarToolTextOrientation
47 wxAUI_TBTOOL_TEXT_LEFT
= 0, // unused/unimplemented
48 wxAUI_TBTOOL_TEXT_RIGHT
= 1,
49 wxAUI_TBTOOL_TEXT_TOP
= 2, // unused/unimplemented
50 wxAUI_TBTOOL_TEXT_BOTTOM
= 3
54 // aui toolbar event class
56 class WXDLLIMPEXP_AUI wxAuiToolBarEvent
: public wxNotifyEvent
59 wxAuiToolBarEvent(wxEventType command_type
= wxEVT_NULL
,
61 : wxNotifyEvent(command_type
, win_id
)
63 is_dropdown_clicked
= false;
64 click_pt
= wxPoint(-1, -1);
65 rect
= wxRect(-1,-1, 0, 0);
69 wxAuiToolBarEvent(const wxAuiToolBarEvent
& c
) : wxNotifyEvent(c
)
71 is_dropdown_clicked
= c
.is_dropdown_clicked
;
72 click_pt
= c
.click_pt
;
77 wxEvent
*Clone() const { return new wxAuiToolBarEvent(*this); }
79 bool IsDropDownClicked() const { return is_dropdown_clicked
; }
80 void SetDropDownClicked(bool c
) { is_dropdown_clicked
= c
; }
82 wxPoint
GetClickPoint() const { return click_pt
; }
83 void SetClickPoint(const wxPoint
& p
) { click_pt
= p
; }
85 wxRect
GetItemRect() const { return rect
; }
86 void SetItemRect(const wxRect
& r
) { rect
= r
; }
88 int GetToolId() const { return tool_id
; }
89 void SetToolId(int id
) { tool_id
= id
; }
93 bool is_dropdown_clicked
;
99 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxAuiToolBarEvent
)
103 class WXDLLIMPEXP_AUI wxAuiToolBarItem
105 friend class wxAuiToolBar
;
115 kind
= wxITEM_NORMAL
;
116 state
= 0; // normal, enabled
124 wxAuiToolBarItem(const wxAuiToolBarItem
& c
)
129 wxAuiToolBarItem
& operator=(const wxAuiToolBarItem
& c
)
135 void Assign(const wxAuiToolBarItem
& c
)
140 disabled_bitmap
= c
.disabled_bitmap
;
141 hover_bitmap
= c
.hover_bitmap
;
142 short_help
= c
.short_help
;
143 long_help
= c
.long_help
;
144 sizer_item
= c
.sizer_item
;
145 min_size
= c
.min_size
;
146 spacer_pixels
= c
.spacer_pixels
;
150 proportion
= c
.proportion
;
152 dropdown
= c
.dropdown
;
154 user_data
= c
.user_data
;
158 void SetWindow(wxWindow
* w
) { window
= w
; }
159 wxWindow
* GetWindow() { return window
; }
161 void SetId(int new_id
) { id
= new_id
; }
162 int GetId() const { return id
; }
164 void SetKind(int new_kind
) { kind
= new_kind
; }
165 int GetKind() const { return kind
; }
167 void SetState(int new_state
) { state
= new_state
; }
168 int GetState() const { return state
; }
170 void SetSizerItem(wxSizerItem
* s
) { sizer_item
= s
; }
171 wxSizerItem
* GetSizerItem() const { return sizer_item
; }
173 void SetLabel(const wxString
& s
) { label
= s
; }
174 const wxString
& GetLabel() const { return label
; }
176 void SetBitmap(const wxBitmap
& bmp
) { bitmap
= bmp
; }
177 const wxBitmap
& GetBitmap() const { return bitmap
; }
179 void SetDisabledBitmap(const wxBitmap
& bmp
) { disabled_bitmap
= bmp
; }
180 const wxBitmap
& GetDisabledBitmap() const { return disabled_bitmap
; }
182 void SetHoverBitmap(const wxBitmap
& bmp
) { hover_bitmap
= bmp
; }
183 const wxBitmap
& GetHoverBitmap() const { return hover_bitmap
; }
185 void SetShortHelp(const wxString
& s
) { short_help
= s
; }
186 const wxString
& GetShortHelp() const { return short_help
; }
188 void SetLongHelp(const wxString
& s
) { long_help
= s
; }
189 const wxString
& GetLongHelp() const { return long_help
; }
191 void SetMinSize(const wxSize
& s
) { min_size
= s
; }
192 const wxSize
& GetMinSize() const { return min_size
; }
194 void SetSpacerPixels(int s
) { spacer_pixels
= s
; }
195 int GetSpacerPixels() const { return spacer_pixels
; }
197 void SetProportion(int p
) { proportion
= p
; }
198 int GetProportion() const { return proportion
; }
200 void SetActive(bool b
) { active
= b
; }
201 bool IsActive() const { return active
; }
203 void SetHasDropDown(bool b
) { dropdown
= b
; }
204 bool HasDropDown() const { return dropdown
; }
206 void SetSticky(bool b
) { sticky
= b
; }
207 bool IsSticky() const { return sticky
; }
209 void SetUserData(long l
) { user_data
= l
; }
210 long GetUserData() const { return user_data
; }
214 wxWindow
* window
; // item's associated window
215 wxString label
; // label displayed on the item
216 wxBitmap bitmap
; // item's bitmap
217 wxBitmap disabled_bitmap
; // item's disabled bitmap
218 wxBitmap hover_bitmap
; // item's hover bitmap
219 wxString short_help
; // short help (for tooltip)
220 wxString long_help
; // long help (for status bar)
221 wxSizerItem
* sizer_item
; // sizer item
222 wxSize min_size
; // item's minimum size
223 int spacer_pixels
; // size of a spacer
225 int kind
; // item's kind
227 int proportion
; // proportion
228 bool active
; // true if the item is currently active
229 bool dropdown
; // true if the item has a dropdown button
230 bool sticky
; // overrides button states if true (always active)
231 long user_data
; // user-specified data
235 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxAuiToolBarItem
, wxAuiToolBarItemArray
, WXDLLIMPEXP_AUI
);
243 class WXDLLIMPEXP_AUI wxAuiToolBarArt
247 wxAuiToolBarArt() { }
248 virtual ~wxAuiToolBarArt() { }
250 virtual wxAuiToolBarArt
* Clone() = 0;
251 virtual void SetFlags(unsigned int flags
) = 0;
252 virtual void SetFont(const wxFont
& font
) = 0;
253 virtual void SetTextOrientation(int orientation
) = 0;
255 virtual void DrawBackground(
258 const wxRect
& rect
) = 0;
260 virtual void DrawLabel(
263 const wxAuiToolBarItem
& item
,
264 const wxRect
& rect
) = 0;
266 virtual void DrawButton(
269 const wxAuiToolBarItem
& item
,
270 const wxRect
& rect
) = 0;
272 virtual void DrawDropDownButton(
275 const wxAuiToolBarItem
& item
,
276 const wxRect
& rect
) = 0;
278 virtual void DrawControlLabel(
281 const wxAuiToolBarItem
& item
,
282 const wxRect
& rect
) = 0;
284 virtual void DrawSeparator(
287 const wxRect
& rect
) = 0;
289 virtual void DrawGripper(
292 const wxRect
& rect
) = 0;
294 virtual void DrawOverflowButton(
300 virtual wxSize
GetLabelSize(
303 const wxAuiToolBarItem
& item
) = 0;
305 virtual wxSize
GetToolSize(
308 const wxAuiToolBarItem
& item
) = 0;
310 virtual int GetElementSize(int element_id
) = 0;
311 virtual void SetElementSize(int element_id
, int size
) = 0;
313 virtual int ShowDropDown(
315 const wxAuiToolBarItemArray
& items
) = 0;
320 class WXDLLIMPEXP_AUI wxAuiDefaultToolBarArt
: public wxAuiToolBarArt
325 wxAuiDefaultToolBarArt();
326 virtual ~wxAuiDefaultToolBarArt();
328 virtual wxAuiToolBarArt
* Clone();
329 virtual void SetFlags(unsigned int flags
);
330 virtual void SetFont(const wxFont
& font
);
331 virtual void SetTextOrientation(int orientation
);
333 virtual void DrawBackground(
338 virtual void DrawLabel(
341 const wxAuiToolBarItem
& item
,
344 virtual void DrawButton(
347 const wxAuiToolBarItem
& item
,
350 virtual void DrawDropDownButton(
353 const wxAuiToolBarItem
& item
,
356 virtual void DrawControlLabel(
359 const wxAuiToolBarItem
& item
,
362 virtual void DrawSeparator(
367 virtual void DrawGripper(
372 virtual void DrawOverflowButton(
378 virtual wxSize
GetLabelSize(
381 const wxAuiToolBarItem
& item
);
383 virtual wxSize
GetToolSize(
386 const wxAuiToolBarItem
& item
);
388 virtual int GetElementSize(int element
);
389 virtual void SetElementSize(int element_id
, int size
);
391 virtual int ShowDropDown(wxWindow
* wnd
,
392 const wxAuiToolBarItemArray
& items
);
396 wxBitmap m_button_dropdown_bmp
;
397 wxBitmap m_disabled_button_dropdown_bmp
;
398 wxBitmap m_overflow_bmp
;
399 wxBitmap m_disabled_overflow_bmp
;
400 wxColour m_base_colour
;
401 wxColour m_highlight_colour
;
403 unsigned int m_flags
;
404 int m_text_orientation
;
406 wxPen m_gripper_pen1
;
407 wxPen m_gripper_pen2
;
408 wxPen m_gripper_pen3
;
410 int m_separator_size
;
418 class WXDLLIMPEXP_AUI wxAuiToolBar
: public wxControl
422 wxAuiToolBar(wxWindow
* parent
,
424 const wxPoint
& position
= wxDefaultPosition
,
425 const wxSize
& size
= wxDefaultSize
,
426 long style
= wxAUI_TB_DEFAULT_STYLE
);
427 virtual ~wxAuiToolBar();
429 void SetWindowStyleFlag(long style
);
431 void SetArtProvider(wxAuiToolBarArt
* art
);
432 wxAuiToolBarArt
* GetArtProvider() const;
434 bool SetFont(const wxFont
& font
);
437 wxAuiToolBarItem
* AddTool(int tool_id
,
438 const wxString
& label
,
439 const wxBitmap
& bitmap
,
440 const wxString
& short_help_string
= wxEmptyString
,
441 wxItemKind kind
= wxITEM_NORMAL
);
443 wxAuiToolBarItem
* AddTool(int tool_id
,
444 const wxString
& label
,
445 const wxBitmap
& bitmap
,
446 const wxBitmap
& disabled_bitmap
,
448 const wxString
& short_help_string
,
449 const wxString
& long_help_string
,
450 wxObject
* client_data
);
452 wxAuiToolBarItem
* AddTool(int tool_id
,
453 const wxBitmap
& bitmap
,
454 const wxBitmap
& disabled_bitmap
,
456 wxObject
* client_data
= NULL
,
457 const wxString
& short_help_string
= wxEmptyString
,
458 const wxString
& long_help_string
= wxEmptyString
)
460 return AddTool(tool_id
,
464 toggle
? wxITEM_CHECK
: wxITEM_NORMAL
,
470 wxAuiToolBarItem
* AddLabel(int tool_id
,
471 const wxString
& label
= wxEmptyString
,
472 const int width
= -1);
473 wxAuiToolBarItem
* AddControl(wxControl
* control
,
474 const wxString
& label
= wxEmptyString
);
475 wxAuiToolBarItem
* AddSeparator();
476 wxAuiToolBarItem
* AddSpacer(int pixels
);
477 wxAuiToolBarItem
* AddStretchSpacer(int proportion
= 1);
481 wxControl
* FindControl(int window_id
);
482 wxAuiToolBarItem
* FindToolByPosition(wxCoord x
, wxCoord y
) const;
483 wxAuiToolBarItem
* FindToolByIndex(int idx
) const;
484 wxAuiToolBarItem
* FindTool(int tool_id
) const;
486 void ClearTools() { Clear() ; }
488 bool DeleteTool(int tool_id
);
489 bool DeleteByIndex(int tool_id
);
491 size_t GetToolCount() const;
492 int GetToolPos(int tool_id
) const { return GetToolIndex(tool_id
); }
493 int GetToolIndex(int tool_id
) const;
494 bool GetToolFits(int tool_id
) const;
495 wxRect
GetToolRect(int tool_id
) const;
496 bool GetToolFitsByIndex(int tool_id
) const;
497 bool GetToolBarFits() const;
499 void SetMargins(const wxSize
& size
) { SetMargins(size
.x
, size
.x
, size
.y
, size
.y
); }
500 void SetMargins(int x
, int y
) { SetMargins(x
, x
, y
, y
); }
501 void SetMargins(int left
, int right
, int top
, int bottom
);
503 void SetToolBitmapSize(const wxSize
& size
);
504 wxSize
GetToolBitmapSize() const;
506 bool GetOverflowVisible() const;
507 void SetOverflowVisible(bool visible
);
509 bool GetGripperVisible() const;
510 void SetGripperVisible(bool visible
);
512 void ToggleTool(int tool_id
, bool state
);
513 bool GetToolToggled(int tool_id
) const;
515 void EnableTool(int tool_id
, bool state
);
516 bool GetToolEnabled(int tool_id
) const;
518 void SetToolDropDown(int tool_id
, bool dropdown
);
519 bool GetToolDropDown(int tool_id
) const;
521 void SetToolBorderPadding(int padding
);
522 int GetToolBorderPadding() const;
524 void SetToolTextOrientation(int orientation
);
525 int GetToolTextOrientation() const;
527 void SetToolPacking(int packing
);
528 int GetToolPacking() const;
530 void SetToolProportion(int tool_id
, int proportion
);
531 int GetToolProportion(int tool_id
) const;
533 void SetToolSeparation(int separation
);
534 int GetToolSeparation() const;
536 void SetToolSticky(int tool_id
, bool sticky
);
537 bool GetToolSticky(int tool_id
) const;
539 wxString
GetToolLabel(int tool_id
) const;
540 void SetToolLabel(int tool_id
, const wxString
& label
);
542 wxBitmap
GetToolBitmap(int tool_id
) const;
543 void SetToolBitmap(int tool_id
, const wxBitmap
& bitmap
);
545 wxString
GetToolShortHelp(int tool_id
) const;
546 void SetToolShortHelp(int tool_id
, const wxString
& help_string
);
548 wxString
GetToolLongHelp(int tool_id
) const;
549 void SetToolLongHelp(int tool_id
, const wxString
& help_string
);
551 void SetCustomOverflowItems(const wxAuiToolBarItemArray
& prepend
,
552 const wxAuiToolBarItemArray
& append
);
556 virtual void OnCustomRender(wxDC
& WXUNUSED(dc
),
557 const wxAuiToolBarItem
& WXUNUSED(item
),
558 const wxRect
& WXUNUSED(rect
)) { }
563 void SetOrientation(int orientation
);
564 void SetHoverItem(wxAuiToolBarItem
* item
);
565 void SetPressedItem(wxAuiToolBarItem
* item
);
566 void RefreshOverflowState();
568 int GetOverflowState() const;
569 wxRect
GetOverflowRect() const;
570 wxSize
GetLabelSize(const wxString
& label
);
571 wxAuiToolBarItem
* FindToolByPositionWithPacking(wxCoord x
, wxCoord y
) const;
573 void DoSetSize(int x
,
577 int sizeFlags
= wxSIZE_AUTO
);
579 protected: // handlers
581 void OnSize(wxSizeEvent
& evt
);
582 void OnIdle(wxIdleEvent
& evt
);
583 void OnPaint(wxPaintEvent
& evt
);
584 void OnEraseBackground(wxEraseEvent
& evt
);
585 void OnLeftDown(wxMouseEvent
& evt
);
586 void OnLeftUp(wxMouseEvent
& evt
);
587 void OnRightDown(wxMouseEvent
& evt
);
588 void OnRightUp(wxMouseEvent
& evt
);
589 void OnMiddleDown(wxMouseEvent
& evt
);
590 void OnMiddleUp(wxMouseEvent
& evt
);
591 void OnMotion(wxMouseEvent
& evt
);
592 void OnLeaveWindow(wxMouseEvent
& evt
);
593 void OnSetCursor(wxSetCursorEvent
& evt
);
597 wxAuiToolBarItemArray m_items
; // array of toolbar items
598 wxAuiToolBarArt
* m_art
; // art provider
599 wxBoxSizer
* m_sizer
; // main sizer for toolbar
600 wxAuiToolBarItem
* m_action_item
; // item that's being acted upon (pressed)
601 wxAuiToolBarItem
* m_tip_item
; // item that has its tooltip shown
602 wxBitmap m_bitmap
; // double-buffer bitmap
603 wxSizerItem
* m_gripper_sizer_item
;
604 wxSizerItem
* m_overflow_sizer_item
;
605 wxSize m_absolute_min_size
;
606 wxPoint m_action_pos
; // position of left-mouse down
607 wxAuiToolBarItemArray m_custom_overflow_prepend
;
608 wxAuiToolBarItemArray m_custom_overflow_append
;
612 int m_sizer_element_count
;
616 int m_bottom_padding
;
618 int m_tool_border_padding
;
619 int m_tool_text_orientation
;
620 int m_overflow_state
;
622 bool m_gripper_visible
;
623 bool m_overflow_visible
;
626 DECLARE_EVENT_TABLE()
627 DECLARE_CLASS(wxAuiToolBar
)
633 // wx event machinery
637 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN
, wxAuiToolBarEvent
);
638 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK
, wxAuiToolBarEvent
);
639 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK
, wxAuiToolBarEvent
);
640 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK
, wxAuiToolBarEvent
);
641 wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_AUI
, wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG
, wxAuiToolBarEvent
);
643 typedef void (wxEvtHandler::*wxAuiToolBarEventFunction
)(wxAuiToolBarEvent
&);
645 #define wxAuiToolBarEventHandler(func) \
646 wxEVENT_HANDLER_CAST(wxAuiToolBarEventFunction, func)
648 #define EVT_AUITOOLBAR_TOOL_DROPDOWN(winid, fn) \
649 wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN, winid, wxAuiToolBarEventHandler(fn))
650 #define EVT_AUITOOLBAR_OVERFLOW_CLICK(winid, fn) \
651 wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK, winid, wxAuiToolBarEventHandler(fn))
652 #define EVT_AUITOOLBAR_RIGHT_CLICK(winid, fn) \
653 wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK, winid, wxAuiToolBarEventHandler(fn))
654 #define EVT_AUITOOLBAR_MIDDLE_CLICK(winid, fn) \
655 wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK, winid, wxAuiToolBarEventHandler(fn))
656 #define EVT_AUITOOLBAR_BEGIN_DRAG(winid, fn) \
657 wx__DECLARE_EVT1(wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG, winid, wxAuiToolBarEventHandler(fn))
661 // wxpython/swig event work
662 %constant wxEventType wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN
;
663 %constant wxEventType wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK
;
664 %constant wxEventType wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK
;
665 %constant wxEventType wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK
;
666 %constant wxEventType wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG
;
669 EVT_AUITOOLBAR_TOOL_DROPDOWN
= wx
.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_TOOL_DROPDOWN
, 1 )
670 EVT_AUITOOLBAR_OVERFLOW_CLICK
= wx
.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_OVERFLOW_CLICK
, 1 )
671 EVT_AUITOOLBAR_RIGHT_CLICK
= wx
.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_RIGHT_CLICK
, 1 )
672 EVT_AUITOOLBAR_MIDDLE_CLICK
= wx
.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_MIDDLE_CLICK
, 1 )
673 EVT_AUITOOLBAR_BEGIN_DRAG
= wx
.PyEventBinder( wxEVT_COMMAND_AUITOOLBAR_BEGIN_DRAG
, 1 )
678 #endif // _WX_AUIBAR_H_