]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/ribbon/buttonbar.h
Merged GSOC Ribbon work from SOC2009_RIBBON branch into trunk.
[wxWidgets.git] / interface / wx / ribbon / buttonbar.h
diff --git a/interface/wx/ribbon/buttonbar.h b/interface/wx/ribbon/buttonbar.h
new file mode 100644 (file)
index 0000000..2b5ed45
--- /dev/null
@@ -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);
+};