195 lines
6.8 KiB
C
195 lines
6.8 KiB
C
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
// Name: wx/ribbon/buttonbar.h
|
||
|
// Purpose: Ribbon control similar to a tool bar
|
||
|
// Author: Peter Cawley
|
||
|
// Modified by:
|
||
|
// Created: 2009-07-01
|
||
|
// RCS-ID: $Id$
|
||
|
// Copyright: (C) Peter Cawley
|
||
|
// Licence: wxWindows licence
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
#ifndef _WX_RIBBON_BUTTON_BAR_H_
|
||
|
#define _WX_RIBBON_BUTTON_BAR_H_
|
||
|
|
||
|
#include "wx/defs.h"
|
||
|
|
||
|
#if wxUSE_RIBBON
|
||
|
|
||
|
#include "wx/ribbon/art.h"
|
||
|
#include "wx/ribbon/control.h"
|
||
|
#include "wx/dynarray.h"
|
||
|
|
||
|
class wxRibbonButtonBarButtonBase;
|
||
|
class wxRibbonButtonBarLayout;
|
||
|
class wxRibbonButtonBarButtonInstance;
|
||
|
|
||
|
WX_DEFINE_USER_EXPORTED_ARRAY(wxRibbonButtonBarLayout*, wxArrayRibbonButtonBarLayout, class WXDLLIMPEXP_RIBBON);
|
||
|
WX_DEFINE_USER_EXPORTED_ARRAY(wxRibbonButtonBarButtonBase*, wxArrayRibbonButtonBarButtonBase, class WXDLLIMPEXP_RIBBON);
|
||
|
|
||
|
class WXDLLIMPEXP_RIBBON wxRibbonButtonBar : public wxRibbonControl
|
||
|
{
|
||
|
public:
|
||
|
wxRibbonButtonBar();
|
||
|
|
||
|
wxRibbonButtonBar(wxWindow* parent,
|
||
|
wxWindowID id = wxID_ANY,
|
||
|
const wxPoint& pos = wxDefaultPosition,
|
||
|
const wxSize& size = wxDefaultSize,
|
||
|
long style = 0);
|
||
|
|
||
|
virtual ~wxRibbonButtonBar();
|
||
|
|
||
|
bool Create(wxWindow* parent,
|
||
|
wxWindowID id = wxID_ANY,
|
||
|
const wxPoint& pos = wxDefaultPosition,
|
||
|
const wxSize& size = wxDefaultSize,
|
||
|
long style = 0);
|
||
|
|
||
|
virtual wxRibbonButtonBarButtonBase* AddButton(
|
||
|
int button_id,
|
||
|
const wxString& label,
|
||
|
const wxBitmap& bitmap,
|
||
|
const wxString& help_string,
|
||
|
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL);
|
||
|
// NB: help_string cannot be optional as that would cause the signature
|
||
|
// to be identical to the full version of AddButton when 3 arguments are
|
||
|
// given.
|
||
|
|
||
|
virtual wxRibbonButtonBarButtonBase* AddDropdownButton(
|
||
|
int button_id,
|
||
|
const wxString& label,
|
||
|
const wxBitmap& bitmap,
|
||
|
const wxString& help_string = wxEmptyString);
|
||
|
|
||
|
virtual wxRibbonButtonBarButtonBase* AddHybridButton(
|
||
|
int button_id,
|
||
|
const wxString& label,
|
||
|
const wxBitmap& bitmap,
|
||
|
const wxString& help_string = wxEmptyString);
|
||
|
|
||
|
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,
|
||
|
wxRibbonButtonKind kind = wxRIBBON_BUTTON_NORMAL,
|
||
|
const wxString& help_string = wxEmptyString,
|
||
|
wxObject* client_data = NULL);
|
||
|
|
||
|
virtual bool Realize();
|
||
|
virtual void ClearButtons();
|
||
|
virtual bool DeleteButton(int button_id);
|
||
|
virtual void EnableButton(int button_id, bool enable = true);
|
||
|
|
||
|
virtual void SetArtProvider(wxRibbonArtProvider* art);
|
||
|
virtual bool IsSizingContinuous() const;
|
||
|
|
||
|
virtual wxSize GetMinSize() const;
|
||
|
virtual wxSize DoGetBestSize() const;
|
||
|
protected:
|
||
|
friend class wxRibbonButtonBarEvent;
|
||
|
wxBorder GetDefaultBorder() const { return wxBORDER_NONE; }
|
||
|
|
||
|
void OnEraseBackground(wxEraseEvent& evt);
|
||
|
void OnPaint(wxPaintEvent& evt);
|
||
|
void OnSize(wxSizeEvent& evt);
|
||
|
void OnMouseMove(wxMouseEvent& evt);
|
||
|
void OnMouseEnter(wxMouseEvent& evt);
|
||
|
void OnMouseLeave(wxMouseEvent& evt);
|
||
|
void OnMouseDown(wxMouseEvent& evt);
|
||
|
void OnMouseUp(wxMouseEvent& evt);
|
||
|
|
||
|
virtual wxSize DoGetNextSmallerSize(wxOrientation direction,
|
||
|
wxSize relative_to) const;
|
||
|
virtual wxSize DoGetNextLargerSize(wxOrientation direction,
|
||
|
wxSize relative_to) const;
|
||
|
|
||
|
void CommonInit(long style);
|
||
|
void MakeLayouts();
|
||
|
bool TryCollapseLayout(wxRibbonButtonBarLayout* original, size_t first_btn, size_t* last_button);
|
||
|
static wxBitmap MakeResizedBitmap(const wxBitmap& original, wxSize size);
|
||
|
static wxBitmap MakeDisabledBitmap(const wxBitmap& original);
|
||
|
void FetchButtonSizeInfo(wxRibbonButtonBarButtonBase* button,
|
||
|
wxRibbonButtonBarButtonState size, wxDC& dc);
|
||
|
|
||
|
wxArrayRibbonButtonBarLayout m_layouts;
|
||
|
wxArrayRibbonButtonBarButtonBase m_buttons;
|
||
|
wxRibbonButtonBarButtonInstance* m_hovered_button;
|
||
|
wxRibbonButtonBarButtonInstance* m_active_button;
|
||
|
|
||
|
wxPoint m_layout_offset;
|
||
|
wxSize m_bitmap_size_large;
|
||
|
wxSize m_bitmap_size_small;
|
||
|
int m_current_layout;
|
||
|
bool m_layouts_valid;
|
||
|
bool m_lock_active_state;
|
||
|
|
||
|
#ifndef SWIG
|
||
|
DECLARE_CLASS(wxRibbonButtonBar)
|
||
|
DECLARE_EVENT_TABLE()
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
class WXDLLIMPEXP_RIBBON wxRibbonButtonBarEvent : public wxCommandEvent
|
||
|
{
|
||
|
public:
|
||
|
wxRibbonButtonBarEvent(wxEventType command_type = wxEVT_NULL,
|
||
|
int win_id = 0,
|
||
|
wxRibbonButtonBar* bar = NULL)
|
||
|
: wxCommandEvent(command_type, win_id)
|
||
|
, m_bar(bar)
|
||
|
{
|
||
|
}
|
||
|
#ifndef SWIG
|
||
|
wxRibbonButtonBarEvent(const wxRibbonButtonBarEvent& e) : wxCommandEvent(e)
|
||
|
{
|
||
|
m_bar = e.m_bar;
|
||
|
}
|
||
|
#endif
|
||
|
wxEvent *Clone() const { return new wxRibbonButtonBarEvent(*this); }
|
||
|
|
||
|
wxRibbonButtonBar* GetBar() {return m_bar;}
|
||
|
void SetBar(wxRibbonButtonBar* bar) {m_bar = bar;}
|
||
|
bool PopupMenu(wxMenu* menu);
|
||
|
|
||
|
protected:
|
||
|
wxRibbonButtonBar* m_bar;
|
||
|
|
||
|
#ifndef SWIG
|
||
|
private:
|
||
|
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxRibbonButtonBarEvent)
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
#ifndef SWIG
|
||
|
|
||
|
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_RIBBON, wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEvent);
|
||
|
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_RIBBON, wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, wxRibbonButtonBarEvent);
|
||
|
|
||
|
typedef void (wxEvtHandler::*wxRibbonButtonBarEventFunction)(wxRibbonButtonBarEvent&);
|
||
|
|
||
|
#define wxRibbonButtonBarEventHandler(func) \
|
||
|
wxEVENT_HANDLER_CAST(wxRibbonButtonBarEventFunction, func)
|
||
|
|
||
|
#define EVT_RIBBONBUTTONBAR_CLICKED(winid, fn) \
|
||
|
wx__DECLARE_EVT1(wxEVT_COMMAND_RIBBONBUTTON_CLICKED, winid, wxRibbonButtonBarEventHandler(fn))
|
||
|
#define EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(winid, fn) \
|
||
|
wx__DECLARE_EVT1(wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, winid, wxRibbonButtonBarEventHandler(fn))
|
||
|
#else
|
||
|
|
||
|
// wxpython/swig event work
|
||
|
%constant wxEventType wxEVT_COMMAND_RIBBONBUTTON_CLICKED;
|
||
|
%constant wxEventType wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED;
|
||
|
|
||
|
%pythoncode {
|
||
|
EVT_RIBBONBUTTONBAR_CLICKED = wx.PyEventBinder( wxEVT_COMMAND_RIBBONBUTTON_CLICKED, 1 )
|
||
|
EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED = wx.PyEventBinder( wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, 1 )
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif // wxUSE_RIBBON
|
||
|
|
||
|
#endif // _WX_RIBBON_BUTTON_BAR_H_
|