1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/ribbon/gallery.h 3 // Purpose: Ribbon control which displays a gallery of items to choose from 4 // Author: Peter Cawley 5 // Modified by: 6 // Created: 2009-07-22 7 // Copyright: (C) Peter Cawley 8 // Licence: wxWindows licence 9 /////////////////////////////////////////////////////////////////////////////// 10 #ifndef _WX_RIBBON_GALLERY_H_ 11 #define _WX_RIBBON_GALLERY_H_ 12 13 #include "wx/defs.h" 14 15 #if wxUSE_RIBBON 16 17 #include "wx/ribbon/art.h" 18 #include "wx/ribbon/control.h" 19 20 class wxRibbonGalleryItem; 21 22 WX_DEFINE_USER_EXPORTED_ARRAY_PTR(wxRibbonGalleryItem*, wxArrayRibbonGalleryItem, class WXDLLIMPEXP_RIBBON); 23 24 class WXDLLIMPEXP_RIBBON wxRibbonGallery : public wxRibbonControl 25 { 26 public: 27 wxRibbonGallery(); 28 29 wxRibbonGallery(wxWindow* parent, 30 wxWindowID id = wxID_ANY, 31 const wxPoint& pos = wxDefaultPosition, 32 const wxSize& size = wxDefaultSize, 33 long style = 0); 34 35 virtual ~wxRibbonGallery(); 36 37 bool Create(wxWindow* parent, 38 wxWindowID id = wxID_ANY, 39 const wxPoint& pos = wxDefaultPosition, 40 const wxSize& size = wxDefaultSize, 41 long style = 0); 42 43 void Clear(); 44 45 bool IsEmpty() const; 46 unsigned int GetCount() const; 47 wxRibbonGalleryItem* GetItem(unsigned int n); 48 wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id); 49 wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id, void* clientData); 50 wxRibbonGalleryItem* Append(const wxBitmap& bitmap, int id, wxClientData* clientData); 51 52 void SetItemClientObject(wxRibbonGalleryItem* item, wxClientData* data); 53 wxClientData* GetItemClientObject(const wxRibbonGalleryItem* item) const; 54 void SetItemClientData(wxRibbonGalleryItem* item, void* data); 55 void* GetItemClientData(const wxRibbonGalleryItem* item) const; 56 57 void SetSelection(wxRibbonGalleryItem* item); 58 wxRibbonGalleryItem* GetSelection() const; 59 wxRibbonGalleryItem* GetHoveredItem() const; 60 wxRibbonGalleryItem* GetActiveItem() const; 61 wxRibbonGalleryButtonState GetUpButtonState() const; 62 wxRibbonGalleryButtonState GetDownButtonState() const; 63 wxRibbonGalleryButtonState GetExtensionButtonState() const; 64 65 bool IsHovered() const; 66 virtual bool IsSizingContinuous() const; 67 virtual bool Realize(); 68 virtual bool Layout(); 69 70 virtual bool ScrollLines(int lines); 71 bool ScrollPixels(int pixels); 72 void EnsureVisible(const wxRibbonGalleryItem* item); 73 74 protected: GetDefaultBorder()75 wxBorder GetDefaultBorder() const { return wxBORDER_NONE; } 76 void CommonInit(long style); 77 void CalculateMinSize(); 78 bool TestButtonHover(const wxRect& rect, wxPoint pos, 79 wxRibbonGalleryButtonState* state); 80 81 void OnEraseBackground(wxEraseEvent& evt); 82 void OnMouseEnter(wxMouseEvent& evt); 83 void OnMouseMove(wxMouseEvent& evt); 84 void OnMouseLeave(wxMouseEvent& evt); 85 void OnMouseDown(wxMouseEvent& evt); 86 void OnMouseUp(wxMouseEvent& evt); 87 void OnMouseDClick(wxMouseEvent& evt); 88 void OnPaint(wxPaintEvent& evt); 89 void OnSize(wxSizeEvent& evt); 90 int GetScrollLineSize() const; 91 92 virtual wxSize DoGetBestSize() const; 93 virtual wxSize DoGetNextSmallerSize(wxOrientation direction, 94 wxSize relative_to) const; 95 virtual wxSize DoGetNextLargerSize(wxOrientation direction, 96 wxSize relative_to) const; 97 98 wxArrayRibbonGalleryItem m_items; 99 wxRibbonGalleryItem* m_selected_item; 100 wxRibbonGalleryItem* m_hovered_item; 101 wxRibbonGalleryItem* m_active_item; 102 wxSize m_bitmap_size; 103 wxSize m_bitmap_padded_size; 104 wxSize m_best_size; 105 wxRect m_client_rect; 106 wxRect m_scroll_up_button_rect; 107 wxRect m_scroll_down_button_rect; 108 wxRect m_extension_button_rect; 109 const wxRect* m_mouse_active_rect; 110 int m_item_separation_x; 111 int m_item_separation_y; 112 int m_scroll_amount; 113 int m_scroll_limit; 114 wxRibbonGalleryButtonState m_up_button_state; 115 wxRibbonGalleryButtonState m_down_button_state; 116 wxRibbonGalleryButtonState m_extension_button_state; 117 bool m_hovered; 118 119 #ifndef SWIG 120 DECLARE_CLASS(wxRibbonGallery) 121 DECLARE_EVENT_TABLE() 122 #endif 123 }; 124 125 class WXDLLIMPEXP_RIBBON wxRibbonGalleryEvent : public wxCommandEvent 126 { 127 public: 128 wxRibbonGalleryEvent(wxEventType command_type = wxEVT_NULL, 129 int win_id = 0, 130 wxRibbonGallery* gallery = NULL, 131 wxRibbonGalleryItem* item = NULL) wxCommandEvent(command_type,win_id)132 : wxCommandEvent(command_type, win_id) 133 , m_gallery(gallery), m_item(item) 134 { 135 } 136 #ifndef SWIG wxRibbonGalleryEvent(const wxRibbonGalleryEvent & e)137 wxRibbonGalleryEvent(const wxRibbonGalleryEvent& e) : wxCommandEvent(e) 138 { 139 m_gallery = e.m_gallery; 140 m_item = e.m_item; 141 } 142 #endif Clone()143 wxEvent *Clone() const { return new wxRibbonGalleryEvent(*this); } 144 GetGallery()145 wxRibbonGallery* GetGallery() {return m_gallery;} GetGalleryItem()146 wxRibbonGalleryItem* GetGalleryItem() {return m_item;} SetGallery(wxRibbonGallery * gallery)147 void SetGallery(wxRibbonGallery* gallery) {m_gallery = gallery;} SetGalleryItem(wxRibbonGalleryItem * item)148 void SetGalleryItem(wxRibbonGalleryItem* item) {m_item = item;} 149 150 protected: 151 wxRibbonGallery* m_gallery; 152 wxRibbonGalleryItem* m_item; 153 154 #ifndef SWIG 155 private: 156 DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxRibbonGalleryEvent) 157 #endif 158 }; 159 160 #ifndef SWIG 161 162 wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_RIBBON, wxEVT_RIBBONGALLERY_HOVER_CHANGED, wxRibbonGalleryEvent); 163 wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_RIBBON, wxEVT_RIBBONGALLERY_SELECTED, wxRibbonGalleryEvent); 164 wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_RIBBON, wxEVT_RIBBONGALLERY_CLICKED, wxRibbonGalleryEvent); 165 166 typedef void (wxEvtHandler::*wxRibbonGalleryEventFunction)(wxRibbonGalleryEvent&); 167 168 #define wxRibbonGalleryEventHandler(func) \ 169 wxEVENT_HANDLER_CAST(wxRibbonGalleryEventFunction, func) 170 171 #define EVT_RIBBONGALLERY_HOVER_CHANGED(winid, fn) \ 172 wx__DECLARE_EVT1(wxEVT_RIBBONGALLERY_HOVER_CHANGED, winid, wxRibbonGalleryEventHandler(fn)) 173 #define EVT_RIBBONGALLERY_SELECTED(winid, fn) \ 174 wx__DECLARE_EVT1(wxEVT_RIBBONGALLERY_SELECTED, winid, wxRibbonGalleryEventHandler(fn)) 175 #define EVT_RIBBONGALLERY_CLICKED(winid, fn) \ 176 wx__DECLARE_EVT1(wxEVT_RIBBONGALLERY_CLICKED, winid, wxRibbonGalleryEventHandler(fn)) 177 #else 178 179 // wxpython/swig event work 180 %constant wxEventType wxEVT_RIBBONGALLERY_HOVER_CHANGED; 181 %constant wxEventType wxEVT_RIBBONGALLERY_SELECTED; 182 %constant wxEventType wxEVT_RIBBONGALLERY_CLICKED; 183 184 185 %pythoncode { 186 EVT_RIBBONGALLERY_HOVER_CHANGED = wx.PyEventBinder( wxEVT_RIBBONGALLERY_HOVER_CHANGED, 1 ) 187 EVT_RIBBONGALLERY_SELECTED = wx.PyEventBinder( wxEVT_RIBBONGALLERY_SELECTED, 1 ) 188 EVT_RIBBONGALLERY_CLICKED = wx.PyEventBinder( wxEVT_RIBBONGALLERY_CLICKED, 1 ) 189 } 190 #endif // SWIG 191 192 // old wxEVT_COMMAND_* constants 193 #define wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED wxEVT_RIBBONGALLERY_HOVER_CHANGED 194 #define wxEVT_COMMAND_RIBBONGALLERY_SELECTED wxEVT_RIBBONGALLERY_SELECTED 195 #define wxEVT_COMMAND_RIBBONGALLERY_CLICKED wxEVT_RIBBONGALLERY_CLICKED 196 197 #endif // wxUSE_RIBBON 198 199 #endif // _WX_RIBBON_GALLERY_H_ 200