X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1a2df6a75b3d96b35e29b1cf392758cbeeef93e0..3c3ead1d1513a5eb79091a604f4e42b45d1bdf5d:/interface/wx/ribbon/buttonbar.h diff --git a/interface/wx/ribbon/buttonbar.h b/interface/wx/ribbon/buttonbar.h new file mode 100644 index 0000000000..2b5ed45e4d --- /dev/null +++ b/interface/wx/ribbon/buttonbar.h @@ -0,0 +1,306 @@ +/////////////////////////////////////////////////////////////////////////////// +// Name: ribbon/buttonbar.h +// Purpose: interface of wxRibbonButtonBar +// Author: Peter Cawley +// RCS-ID: $Id$ +// Licence: wxWindows licence +/////////////////////////////////////////////////////////////////////////////// + +/** + Flags for button bar button size and state. + + Buttons on a ribbon button bar can each come in three sizes: small, medium, + and large. In some places this is called the size class, and the term size + used for the pixel width and height associated with a particular size + class. + + A button can also be in zero or more hovered or active states, or in the + disabled state. +*/ +enum wxRibbonButtonBarButtonState +{ + /** + Button is small (the interpretation of small is dependant upon the art + provider, but it will be smaller than medium). + */ + wxRIBBON_BUTTONBAR_BUTTON_SMALL = 0 << 0, + + /** + Button is medium sized (the interpretation of medium is dependant upon + the art provider, but it will be between small and large). + */ + wxRIBBON_BUTTONBAR_BUTTON_MEDIUM = 1 << 0, + + /** + Button is large (the interpretation of large is dependant upon the art + provider, but it will be larger than medium). + */ + wxRIBBON_BUTTONBAR_BUTTON_LARGE = 2 << 0, + + /** + A mask to extract button size from a combination of flags. + */ + wxRIBBON_BUTTONBAR_BUTTON_SIZE_MASK = 3 << 0, + + /** + The normal (non-dropdown) region of the button is being hovered over by + the mouse cursor. Only applicable to normal and hybrid buttons. + */ + wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED = 1 << 3, + + /** + The dropdown region of the button is being hovered over by the mouse + cursor. Only applicable to dropdown and hybrid buttons. + */ + wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED = 1 << 4, + + /** + A mask to extract button hover state from a combination of flags. + */ + wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED | wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED, + + /** + The normal (non-dropdown) region of the button is being pressed. + Only applicable to normal and hybrid buttons. + */ + wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE = 1 << 5, + + /** + The dropdown region of the button is being pressed. + Only applicable to dropdown and hybrid buttons. + */ + wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE = 1 << 6, + + /** + The button is disabled. Hover flags may still be set when a button + is disabled, but should be ignored during drawing if the button is + disabled. + */ + wxRIBBON_BUTTONBAR_BUTTON_DISABLED = 1 << 7, + + /** + A mask to extract button state from a combination of flags. + */ + wxRIBBON_BUTTONBAR_BUTTON_STATE_MASK = 0xF8, +}; + +/** + @class wxRibbonButtonBar + + A ribbon button bar is similar to a traditional toolbar. It contains one or + more buttons (button bar buttons, not wxButtons), each of which has a label + and an icon. It differs from a wxRibbonToolBar in several ways: + @li Individual buttons can grow and contract. + @li Buttons have labels as well as bitmaps. + @li Bitmaps are typically larger (at least 32x32 pixels) on a button bar + compared to a tool bar (which typically has 16x15). + @li There is no grouping of buttons on a button bar + @li A button bar typically has a border around each individual button, + whereas a tool bar typically has a border around each group of buttons. + + @beginEventEmissionTable{wxRibbonButtonBarEvent} + @event{EVT_RIBBONBUTTONBAR_CLICKED(id, func)} + Triggered when the normal (non-dropdown) region of a button on the + button bar is clicked. + @event{EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(id, func)} + Triggered when the dropdown region of a button on the button bar is + clicked. wxRibbonButtonBarEvent::PopupMenu() should be called by the + event handler if it wants to display a popup menu (which is what most + dropdown buttons should be doing). + @endEventTable + + @library{wxribbon} + @category{ribbon} +*/ +class wxRibbonButtonBar : public wxRibbonControl +{ +public: + /** + Default constructor. + With this constructor, Create() should be called in order to create + the button bar. + */ + wxRibbonButtonBar(); + + /** + Construct a ribbon button bar with the given parameters. + @param parent + Parent window for the button bar (typically a wxRibbonPanel). + @param pos + Initial position of the button bar. + @param size + Initial size of the button bar. + @param style + Button bar style, currently unused. + */ + wxRibbonButtonBar(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + + /** + Destructor. + */ + virtual ~wxRibbonButtonBar(); + + /** + Create a button bar in two-step button bar construction. + Should only be called when the default constructor is used, and + arguments have the same meaning as in the full constructor. + */ + bool Create(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0); + + /** + Add a button to the button bar (simple version). + */ + virtual wxRibbonButtonBarButtonBase* AddButton( + int button_id, + const wxString& label, + const wxBitmap& bitmap, + const wxString& help_string, + wxRibbonButtonBarButtonKind kind = wxRIBBON_BUTTONBAR_BUTTON_NORMAL); + + /** + Add a dropdown button to the button bar (simple version). + + @see AddButton() + */ + virtual wxRibbonButtonBarButtonBase* AddDropdownButton( + int button_id, + const wxString& label, + const wxBitmap& bitmap, + const wxString& help_string = wxEmptyString); + + /** + Add a hybrid button to the button bar (simple version). + + @see AddButton() + */ + virtual wxRibbonButtonBarButtonBase* AddHybridButton( + int button_id, + const wxString& label, + const wxBitmap& bitmap, + const wxString& help_string = wxEmptyString); + + /** + Add a button to the button bar. + + @param button_id + ID of the new button (used for event callbacks). + @param label + Label of the new button. + @param bitmap + Large bitmap of the new button. Must be the same size as all other + large bitmaps used on the button bar. + @param bitmap_small + Small bitmap of the new button. If left as null, then a small + bitmap will be automatically generated. Must be the same size as + all other small bitmaps used on the button bar. + @param bitmap_disabled + Large bitmap of the new button when it is disabled. If left as + null, then a bitmap will be automatically generated from @a bitmap. + @param bitmap_small_disabled + Small bitmap of the new button when it is disabled. If left as + null, then a bitmap will be automatically generated from @a + bitmap_small. + @param kind + The kind of button to add. + @param help_string + The UI help string to associate with the new button. + @param client_data + Client data to associate with the new button. + + @return An opaque pointer which can be used only with other button bar + methods. + + @see AddDropdownButton() + @see AddHybridButton() + */ + virtual wxRibbonButtonBarButtonBase* AddButton( + int button_id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bitmap_small = wxNullBitmap, + const wxBitmap& bitmap_disabled = wxNullBitmap, + const wxBitmap& bitmap_small_disabled = wxNullBitmap, + wxRibbonButtonBarButtonKind kind = wxRIBBON_BUTTONBAR_BUTTON_NORMAL, + const wxString& help_string = wxEmptyString, + wxObject* client_data = NULL); + + /** + Calculate button layouts and positions. + + Must be called after buttons are added to the button bar, as otherwise + the newly added buttons will not be displayed. In normal situations, it + will be called automatically when wxRibbonBar::Realize() is called. + */ + virtual bool Realize(); + + /** + Delete all buttons from the button bar. + + @see DeleteButton() + */ + virtual void ClearButtons(); + + /** + Delete a single button from the button bar. + + @see ClearButtons() + */ + virtual bool DeleteButton(int button_id); + + /** + Enable or disable a single button on the bar. + + @param button_id + ID of the button to enable or disable. + @param enable + @true to enable the button, @false to disable it. + */ + virtual void EnableButton(int button_id, bool enable = true); +}; + +/** + @class wxRibbonButtonBarEvent + + Event used to indicate various actions relating to a button on a + wxRibbonButtonBar. + + See wxRibbonButtonBar for available event types. + + @library{wxribbon} + @category{events,ribbon} + + @see wxRibbonBar +*/ +class wxRibbonButtonBarEvent : public wxCommandEvent +{ +public: + /** + Constructor. + */ + wxRibbonButtonBarEvent(wxEventType command_type = wxEVT_NULL, + int win_id = 0, + wxRibbonButtonBar* bar = NULL); + + /** + Returns the bar which contains the button which the event relates to. + */ + wxRibbonButtonBar* GetBar(); + + /** + Sets the button bar relating to this event. + */ + void SetBar(wxRibbonButtonBar* bar); + + /** + Display a popup menu as a result of this (dropdown clicked) event. + */ + bool PopupMenu(wxMenu* menu); +};