1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: ribbon/buttonbar.h
3 // Purpose: interface of wxRibbonButtonBar
4 // Author: Peter Cawley
6 // Licence: wxWindows licence
7 ///////////////////////////////////////////////////////////////////////////////
10 Flags for button bar button size and state.
12 Buttons on a ribbon button bar can each come in three sizes: small, medium,
13 and large. In some places this is called the size class, and the term size
14 used for the pixel width and height associated with a particular size
17 A button can also be in zero or more hovered or active states, or in the
20 enum wxRibbonButtonBarButtonState
23 Button is small (the interpretation of small is dependent upon the art
24 provider, but it will be smaller than medium).
26 wxRIBBON_BUTTONBAR_BUTTON_SMALL
= 0 << 0,
29 Button is medium sized (the interpretation of medium is dependent upon
30 the art provider, but it will be between small and large).
32 wxRIBBON_BUTTONBAR_BUTTON_MEDIUM
= 1 << 0,
35 Button is large (the interpretation of large is dependent upon the art
36 provider, but it will be larger than medium).
38 wxRIBBON_BUTTONBAR_BUTTON_LARGE
= 2 << 0,
41 A mask to extract button size from a combination of flags.
43 wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK
= 3 << 0,
46 The normal (non-dropdown) region of the button is being hovered over by
47 the mouse cursor. Only applicable to normal and hybrid buttons.
49 wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED
= 1 << 3,
52 The dropdown region of the button is being hovered over by the mouse
53 cursor. Only applicable to dropdown and hybrid buttons.
55 wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED
= 1 << 4,
58 A mask to extract button hover state from a combination of flags.
60 wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK
= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED
| wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED
,
63 The normal (non-dropdown) region of the button is being pressed.
64 Only applicable to normal and hybrid buttons.
66 wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE
= 1 << 5,
69 The dropdown region of the button is being pressed.
70 Only applicable to dropdown and hybrid buttons.
72 wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE
= 1 << 6,
75 The button is disabled. Hover flags may still be set when a button
76 is disabled, but should be ignored during drawing if the button is
79 wxRIBBON_BUTTONBAR_BUTTON_DISABLED
= 1 << 7,
82 The button is a toggle button which is currently in the toggled state.
84 wxRIBBON_BUTTONBAR_BUTTON_TOGGLED
= 1 << 8,
87 A mask to extract button state from a combination of flags.
89 wxRIBBON_BUTTONBAR_BUTTON_STATE_MASK
= 0x1F8,
93 @class wxRibbonButtonBar
95 A ribbon button bar is similar to a traditional toolbar. It contains one or
96 more buttons (button bar buttons, not wxButtons), each of which has a label
97 and an icon. It differs from a wxRibbonToolBar in several ways:
98 @li Individual buttons can grow and contract.
99 @li Buttons have labels as well as bitmaps.
100 @li Bitmaps are typically larger (at least 32x32 pixels) on a button bar
101 compared to a tool bar (which typically has 16x15).
102 @li There is no grouping of buttons on a button bar
103 @li A button bar typically has a border around each individual button,
104 whereas a tool bar typically has a border around each group of buttons.
106 @beginEventEmissionTable{wxRibbonButtonBarEvent}
107 @event{EVT_RIBBONBUTTONBAR_CLICKED(id, func)}
108 Triggered when the normal (non-dropdown) region of a button on the
109 button bar is clicked.
110 @event{EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(id, func)}
111 Triggered when the dropdown region of a button on the button bar is
112 clicked. wxRibbonButtonBarEvent::PopupMenu() should be called by the
113 event handler if it wants to display a popup menu (which is what most
114 dropdown buttons should be doing).
120 class wxRibbonButtonBar
: public wxRibbonControl
125 With this constructor, Create() should be called in order to create
131 Construct a ribbon button bar with the given parameters.
134 Parent window for the button bar (typically a wxRibbonPanel).
136 An identifier for the button bar. @c wxID_ANY is taken to mean a default.
138 Initial position of the button bar.
140 Initial size of the button bar.
142 Button bar style, currently unused.
144 wxRibbonButtonBar(wxWindow
* parent
,
145 wxWindowID id
= wxID_ANY
,
146 const wxPoint
& pos
= wxDefaultPosition
,
147 const wxSize
& size
= wxDefaultSize
,
153 virtual ~wxRibbonButtonBar();
156 Create a button bar in two-step button bar construction.
157 Should only be called when the default constructor is used, and
158 arguments have the same meaning as in the full constructor.
160 bool Create(wxWindow
* parent
,
161 wxWindowID id
= wxID_ANY
,
162 const wxPoint
& pos
= wxDefaultPosition
,
163 const wxSize
& size
= wxDefaultSize
,
167 Add a button to the button bar (simple version).
169 virtual wxRibbonButtonBarButtonBase
* AddButton(
171 const wxString
& label
,
172 const wxBitmap
& bitmap
,
173 const wxString
& help_string
,
174 wxRibbonButtonKind kind
= wxRIBBON_BUTTON_NORMAL
);
177 Add a dropdown button to the button bar (simple version).
181 virtual wxRibbonButtonBarButtonBase
* AddDropdownButton(
183 const wxString
& label
,
184 const wxBitmap
& bitmap
,
185 const wxString
& help_string
= wxEmptyString
);
188 Add a hybrid button to the button bar (simple version).
192 virtual wxRibbonButtonBarButtonBase
* AddHybridButton(
194 const wxString
& label
,
195 const wxBitmap
& bitmap
,
196 const wxString
& help_string
= wxEmptyString
);
199 Add a toggle button to the button bar (simple version).
203 virtual wxRibbonButtonBarButtonBase
* AddToggleButton(
205 const wxString
& label
,
206 const wxBitmap
& bitmap
,
207 const wxString
& help_string
= wxEmptyString
);
210 Add a button to the button bar.
213 ID of the new button (used for event callbacks).
215 Label of the new button.
217 Large bitmap of the new button. Must be the same size as all other
218 large bitmaps used on the button bar.
220 Small bitmap of the new button. If left as null, then a small
221 bitmap will be automatically generated. Must be the same size as
222 all other small bitmaps used on the button bar.
223 @param bitmap_disabled
224 Large bitmap of the new button when it is disabled. If left as
225 null, then a bitmap will be automatically generated from @a bitmap.
226 @param bitmap_small_disabled
227 Small bitmap of the new button when it is disabled. If left as
228 null, then a bitmap will be automatically generated from @a
231 The kind of button to add.
233 The UI help string to associate with the new button.
235 @return An opaque pointer which can be used only with other button bar
238 @see AddDropdownButton()
239 @see AddHybridButton()
240 @see AddToggleButton()
242 virtual wxRibbonButtonBarButtonBase
* AddButton(
244 const wxString
& label
,
245 const wxBitmap
& bitmap
,
246 const wxBitmap
& bitmap_small
= wxNullBitmap
,
247 const wxBitmap
& bitmap_disabled
= wxNullBitmap
,
248 const wxBitmap
& bitmap_small_disabled
= wxNullBitmap
,
249 wxRibbonButtonKind kind
= wxRIBBON_BUTTON_NORMAL
,
250 const wxString
& help_string
= wxEmptyString
);
253 Inserts a button to the button bar (simple version) at the given position.
259 virtual wxRibbonButtonBarButtonBase
* InsertButton(
262 const wxString
& label
,
263 const wxBitmap
& bitmap
,
264 const wxString
& help_string
,
265 wxRibbonButtonKind kind
= wxRIBBON_BUTTON_NORMAL
);
268 Inserts a dropdown button to the button bar (simple version) at the
272 @see AddDropdownButton()
277 virtual wxRibbonButtonBarButtonBase
* InsertDropdownButton(
280 const wxString
& label
,
281 const wxBitmap
& bitmap
,
282 const wxString
& help_string
= wxEmptyString
);
285 Inserts a hybrid button to the button bar (simple version) at the given
289 @see AddHybridButton()
294 virtual wxRibbonButtonBarButtonBase
* InsertHybridButton(
297 const wxString
& label
,
298 const wxBitmap
& bitmap
,
299 const wxString
& help_string
= wxEmptyString
);
302 Inserts a toggle button to the button bar (simple version) at the given
306 @see AddToggleButton()
311 virtual wxRibbonButtonBarButtonBase
* InsertToggleButton(
314 const wxString
& label
,
315 const wxBitmap
& bitmap
,
316 const wxString
& help_string
= wxEmptyString
);
319 Insert a button to the button bar at the given position.
322 Position of the new button in the button bar.
324 ID of the new button (used for event callbacks).
326 Label of the new button.
328 Large bitmap of the new button. Must be the same size as all other
329 large bitmaps used on the button bar.
331 Small bitmap of the new button. If left as null, then a small
332 bitmap will be automatically generated. Must be the same size as
333 all other small bitmaps used on the button bar.
334 @param bitmap_disabled
335 Large bitmap of the new button when it is disabled. If left as
336 null, then a bitmap will be automatically generated from @a bitmap.
337 @param bitmap_small_disabled
338 Small bitmap of the new button when it is disabled. If left as
339 null, then a bitmap will be automatically generated from @a
342 The kind of button to add.
344 The UI help string to associate with the new button.
346 @return An opaque pointer which can be used only with other button bar
349 @see InsertDropdownButton()
350 @see InsertHybridButton()
351 @see InsertToggleButton()
356 virtual wxRibbonButtonBarButtonBase
* InsertButton(
359 const wxString
& label
,
360 const wxBitmap
& bitmap
,
361 const wxBitmap
& bitmap_small
= wxNullBitmap
,
362 const wxBitmap
& bitmap_disabled
= wxNullBitmap
,
363 const wxBitmap
& bitmap_small_disabled
= wxNullBitmap
,
364 wxRibbonButtonKind kind
= wxRIBBON_BUTTON_NORMAL
,
365 const wxString
& help_string
= wxEmptyString
);
368 Returns the number of buttons in this button bar.
372 virtual size_t GetButtonCount() const;
375 Set the client object associated with a button. The button bar
376 owns the given object and takes care of its deletion.
377 Please, note that you cannot use both client object and client data.
381 void SetItemClientObject(wxRibbonButtonBarButtonBase
* item
, wxClientData
* data
);
384 Get the client object associated with a button.
388 wxClientData
* GetItemClientObject(const wxRibbonButtonBarButtonBase
* item
) const;
391 Set the client data associated with a button.
392 Please, note that you cannot use both client object and client data.
396 void SetItemClientData(wxRibbonButtonBarButtonBase
* item
, void* data
);
399 Get the client data associated with a button.
403 void* GetItemClientData(const wxRibbonButtonBarButtonBase
* item
) const;
406 Returns the N-th button of the bar.
408 @see GetButtonCount()
412 virtual wxRibbonButtonBarButtonBase
*GetItem(size_t n
) const;
415 Returns the first button having a given id or NULL if none matches.
419 virtual wxRibbonButtonBarButtonBase
*GetItemById(int id
) const;
422 Returns the id of a button.
426 virtual int GetItemId(wxRibbonButtonBarButtonBase
*) const;
429 Calculate button layouts and positions.
431 Must be called after buttons are added to the button bar, as otherwise
432 the newly added buttons will not be displayed. In normal situations, it
433 will be called automatically when wxRibbonBar::Realize() is called.
435 virtual bool Realize();
438 Delete all buttons from the button bar.
442 virtual void ClearButtons();
445 Delete a single button from the button bar.
449 virtual bool DeleteButton(int button_id
);
452 Enable or disable a single button on the bar.
455 ID of the button to enable or disable.
457 @true to enable the button, @false to disable it.
459 virtual void EnableButton(int button_id
, bool enable
= true);
462 Set a toggle button to the checked or unchecked state.
465 ID of the toggle button to manipulate.
467 @true to set the button to the toggled/pressed/checked state,
468 @false to set it to the untoggled/unpressed/unchecked state.
470 virtual void ToggleButton(int button_id
, bool checked
);
473 Returns the active item of the button bar or NULL if there is none.
474 The active button is the one being clicked.
478 virtual wxRibbonButtonBarButtonBase
*GetActiveItem() const;
481 Returns the hovered item of the button bar or NULL if there is none.
482 The hovered button is the one the mouse is over.
486 virtual wxRibbonButtonBarButtonBase
*GetHoveredItem() const;
489 Indicates whether tooltips are shown for disabled buttons.
491 By default they are not shown.
495 void SetShowToolTipsForDisabled(bool show
);
498 Sets whether tooltips should be shown for disabled buttons or not.
500 You may wish to show it to explain why a button is disabled or
501 what it normally does when enabled.
505 bool GetShowToolTipsForDisabled() const;
510 @class wxRibbonButtonBarEvent
512 Event used to indicate various actions relating to a button on a
513 wxRibbonButtonBar. For toggle buttons, IsChecked() can be used to test
514 the state of the button.
516 See wxRibbonButtonBar for available event types.
519 @category{events,ribbon}
523 class wxRibbonButtonBarEvent
: public wxCommandEvent
529 wxRibbonButtonBarEvent(wxEventType command_type
= wxEVT_NULL
,
531 wxRibbonButtonBar
* bar
= NULL
,
532 wxRibbonButtonBarButtonBase
* button
= NULL
);
535 Returns the bar which contains the button which the event relates to.
537 wxRibbonButtonBar
* GetBar();
540 Sets the button bar relating to this event.
542 void SetBar(wxRibbonButtonBar
* bar
);
545 Returns the button which the event relates to.
549 wxRibbonButtonBarButtonBase
* GetButton();
552 Sets the button relating to this event.
556 void SetButton(wxRibbonButtonBarButtonBase
* bar
);
559 Display a popup menu as a result of this (dropdown clicked) event.
561 bool PopupMenu(wxMenu
* menu
);