1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: src/ribbon/gallery.cpp
3 // Purpose: Ribbon control which displays a gallery of items to choose from
4 // Author: Peter Cawley
8 // Copyright: (C) Peter Cawley
9 // Licence: wxWindows licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
20 #include "wx/ribbon/gallery.h"
21 #include "wx/ribbon/art.h"
22 #include "wx/ribbon/bar.h"
23 #include "wx/dcbuffer.h"
24 #include "wx/clntdata.h"
30 #include "wx/msw/private.h"
33 wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED
, wxRibbonGalleryEvent
);
34 wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONGALLERY_SELECTED
, wxRibbonGalleryEvent
);
35 wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONGALLERY_CLICKED
, wxRibbonGalleryEvent
);
37 IMPLEMENT_DYNAMIC_CLASS(wxRibbonGalleryEvent
, wxCommandEvent
)
38 IMPLEMENT_CLASS(wxRibbonGallery
, wxRibbonControl
)
40 class wxRibbonGalleryItem
49 void SetId(int id
) {m_id
= id
;}
50 void SetBitmap(const wxBitmap
& bitmap
) {m_bitmap
= bitmap
;}
51 const wxBitmap
& GetBitmap() const {return m_bitmap
;}
52 void SetIsVisible(bool visible
) {m_is_visible
= visible
;}
53 void SetPosition(int x
, int y
, const wxSize
& size
)
55 m_position
= wxRect(wxPoint(x
, y
), size
);
57 bool IsVisible() const {return m_is_visible
;}
58 const wxRect
& GetPosition() const {return m_position
;}
60 void SetClientObject(wxClientData
*data
) {m_client_data
.SetClientObject(data
);}
61 wxClientData
*GetClientObject() const {return m_client_data
.GetClientObject();}
62 void SetClientData(void *data
) {m_client_data
.SetClientData(data
);}
63 void *GetClientData() const {return m_client_data
.GetClientData();}
67 wxClientDataContainer m_client_data
;
73 BEGIN_EVENT_TABLE(wxRibbonGallery
, wxRibbonControl
)
74 EVT_ENTER_WINDOW(wxRibbonGallery::OnMouseEnter
)
75 EVT_ERASE_BACKGROUND(wxRibbonGallery::OnEraseBackground
)
76 EVT_LEAVE_WINDOW(wxRibbonGallery::OnMouseLeave
)
77 EVT_LEFT_DOWN(wxRibbonGallery::OnMouseDown
)
78 EVT_LEFT_UP(wxRibbonGallery::OnMouseUp
)
79 EVT_MOTION(wxRibbonGallery::OnMouseMove
)
80 EVT_PAINT(wxRibbonGallery::OnPaint
)
81 EVT_SIZE(wxRibbonGallery::OnSize
)
84 wxRibbonGallery::wxRibbonGallery()
88 wxRibbonGallery::wxRibbonGallery(wxWindow
* parent
,
93 : wxRibbonControl(parent
, id
, pos
, size
, wxBORDER_NONE
)
98 wxRibbonGallery::~wxRibbonGallery()
103 bool wxRibbonGallery::Create(wxWindow
* parent
,
109 if(!wxRibbonControl::Create(parent
, id
, pos
, size
, wxBORDER_NONE
))
118 void wxRibbonGallery::CommonInit(long WXUNUSED(style
))
120 m_selected_item
= NULL
;
121 m_hovered_item
= NULL
;
122 m_active_item
= NULL
;
123 m_scroll_up_button_rect
= wxRect(0, 0, 0, 0);
124 m_scroll_down_button_rect
= wxRect(0, 0, 0, 0);
125 m_extension_button_rect
= wxRect(0, 0, 0, 0);
126 m_mouse_active_rect
= NULL
;
127 m_bitmap_size
= wxSize(64, 32);
128 m_bitmap_padded_size
= m_bitmap_size
;
129 m_item_separation_x
= 0;
130 m_item_separation_y
= 0;
133 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_DISABLED
;
134 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
135 m_extension_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
138 SetBackgroundStyle(wxBG_STYLE_CUSTOM
);
141 void wxRibbonGallery::OnMouseEnter(wxMouseEvent
& evt
)
144 if(m_mouse_active_rect
!= NULL
&& !evt
.LeftIsDown())
146 m_mouse_active_rect
= NULL
;
147 m_active_item
= NULL
;
152 void wxRibbonGallery::OnMouseMove(wxMouseEvent
& evt
)
154 bool refresh
= false;
155 wxPoint pos
= evt
.GetPosition();
157 if(TestButtonHover(m_scroll_up_button_rect
, pos
, &m_up_button_state
))
159 if(TestButtonHover(m_scroll_down_button_rect
, pos
, &m_down_button_state
))
161 if(TestButtonHover(m_extension_button_rect
, pos
, &m_extension_button_state
))
164 wxRibbonGalleryItem
*hovered_item
= NULL
;
165 wxRibbonGalleryItem
*active_item
= NULL
;
166 if(m_client_rect
.Contains(pos
))
168 if(m_art
&& m_art
->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL
)
169 pos
.x
+= m_scroll_amount
;
171 pos
.y
+= m_scroll_amount
;
173 size_t item_count
= m_items
.Count();
175 for(item_i
= 0; item_i
< item_count
; ++item_i
)
177 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
178 if(!item
->IsVisible())
181 if(item
->GetPosition().Contains(pos
))
183 if(m_mouse_active_rect
== &item
->GetPosition())
190 if(active_item
!= m_active_item
)
192 m_active_item
= active_item
;
195 if(hovered_item
!= m_hovered_item
)
197 m_hovered_item
= hovered_item
;
198 wxRibbonGalleryEvent
notification(
199 wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED
, GetId());
200 notification
.SetEventObject(this);
201 notification
.SetGallery(this);
202 notification
.SetGalleryItem(hovered_item
);
203 ProcessWindowEvent(notification
);
211 bool wxRibbonGallery::TestButtonHover(const wxRect
& rect
, wxPoint pos
,
212 wxRibbonGalleryButtonState
* state
)
214 if(*state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
217 wxRibbonGalleryButtonState new_state
;
218 if(rect
.Contains(pos
))
220 if(m_mouse_active_rect
== &rect
)
221 new_state
= wxRIBBON_GALLERY_BUTTON_ACTIVE
;
223 new_state
= wxRIBBON_GALLERY_BUTTON_HOVERED
;
226 new_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
228 if(new_state
!= *state
)
239 void wxRibbonGallery::OnMouseLeave(wxMouseEvent
& WXUNUSED(evt
))
242 m_active_item
= NULL
;
243 if(m_up_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
244 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
245 if(m_down_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
246 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
247 if(m_extension_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
248 m_extension_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
249 if(m_hovered_item
!= NULL
)
251 m_hovered_item
= NULL
;
252 wxRibbonGalleryEvent
notification(
253 wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED
, GetId());
254 notification
.SetEventObject(this);
255 notification
.SetGallery(this);
256 ProcessWindowEvent(notification
);
261 void wxRibbonGallery::OnMouseDown(wxMouseEvent
& evt
)
263 wxPoint pos
= evt
.GetPosition();
264 m_mouse_active_rect
= NULL
;
265 if(m_client_rect
.Contains(pos
))
267 if(m_art
&& m_art
->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL
)
268 pos
.x
+= m_scroll_amount
;
270 pos
.y
+= m_scroll_amount
;
271 size_t item_count
= m_items
.Count();
273 for(item_i
= 0; item_i
< item_count
; ++item_i
)
275 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
276 if(!item
->IsVisible())
279 const wxRect
& rect
= item
->GetPosition();
280 if(rect
.Contains(pos
))
282 m_active_item
= item
;
283 m_mouse_active_rect
= &rect
;
288 else if(m_scroll_up_button_rect
.Contains(pos
))
290 if(m_up_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
292 m_mouse_active_rect
= &m_scroll_up_button_rect
;
293 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_ACTIVE
;
296 else if(m_scroll_down_button_rect
.Contains(pos
))
298 if(m_down_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
300 m_mouse_active_rect
= &m_scroll_down_button_rect
;
301 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_ACTIVE
;
304 else if(m_extension_button_rect
.Contains(pos
))
306 if(m_extension_button_state
!= wxRIBBON_GALLERY_BUTTON_DISABLED
)
308 m_mouse_active_rect
= &m_extension_button_rect
;
309 m_extension_button_state
= wxRIBBON_GALLERY_BUTTON_ACTIVE
;
312 if(m_mouse_active_rect
!= NULL
)
316 void wxRibbonGallery::OnMouseUp(wxMouseEvent
& evt
)
318 if(m_mouse_active_rect
!= NULL
)
320 wxPoint pos
= evt
.GetPosition();
323 if(m_art
&& m_art
->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL
)
324 pos
.x
+= m_scroll_amount
;
326 pos
.y
+= m_scroll_amount
;
328 if(m_mouse_active_rect
->Contains(pos
))
330 if(m_mouse_active_rect
== &m_scroll_up_button_rect
)
332 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_HOVERED
;
335 else if(m_mouse_active_rect
== &m_scroll_down_button_rect
)
337 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_HOVERED
;
340 else if(m_mouse_active_rect
== &m_extension_button_rect
)
342 m_extension_button_state
= wxRIBBON_GALLERY_BUTTON_HOVERED
;
343 wxCommandEvent
notification(wxEVT_COMMAND_BUTTON_CLICKED
,
345 notification
.SetEventObject(this);
346 ProcessWindowEvent(notification
);
348 else if(m_active_item
!= NULL
)
350 if(m_selected_item
!= m_active_item
)
352 m_selected_item
= m_active_item
;
353 wxRibbonGalleryEvent
notification(
354 wxEVT_COMMAND_RIBBONGALLERY_SELECTED
, GetId());
355 notification
.SetEventObject(this);
356 notification
.SetGallery(this);
357 notification
.SetGalleryItem(m_selected_item
);
358 ProcessWindowEvent(notification
);
361 wxRibbonGalleryEvent
notification(
362 wxEVT_COMMAND_RIBBONGALLERY_CLICKED
, GetId());
363 notification
.SetEventObject(this);
364 notification
.SetGallery(this);
365 notification
.SetGalleryItem(m_selected_item
);
366 ProcessWindowEvent(notification
);
369 m_mouse_active_rect
= NULL
;
370 m_active_item
= NULL
;
375 void wxRibbonGallery::SetItemClientObject(wxRibbonGalleryItem
* itm
,
378 itm
->SetClientObject(data
);
381 wxClientData
* wxRibbonGallery::GetItemClientObject(const wxRibbonGalleryItem
* itm
) const
383 return itm
->GetClientObject();
386 void wxRibbonGallery::SetItemClientData(wxRibbonGalleryItem
* itm
, void* data
)
388 itm
->SetClientData(data
);
391 void* wxRibbonGallery::GetItemClientData(const wxRibbonGalleryItem
* itm
) const
393 return itm
->GetClientData();
396 bool wxRibbonGallery::ScrollLines(int lines
)
398 if(m_scroll_limit
== 0 || m_art
== NULL
)
401 int line_size
= m_bitmap_padded_size
.GetHeight();
402 if(m_art
->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL
)
403 line_size
= m_bitmap_padded_size
.GetWidth();
406 if(m_scroll_amount
> 0)
408 m_scroll_amount
+= lines
* line_size
;
409 if(m_scroll_amount
<= 0)
412 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_DISABLED
;
414 else if(m_up_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
415 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
416 if(m_down_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
417 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
423 if(m_scroll_amount
< m_scroll_limit
)
425 m_scroll_amount
+= lines
* line_size
;
426 if(m_scroll_amount
>= m_scroll_limit
)
428 m_scroll_amount
= m_scroll_limit
;
429 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_DISABLED
;
431 else if(m_down_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
432 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
433 if(m_up_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
434 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
441 void wxRibbonGallery::EnsureVisible(const wxRibbonGalleryItem
* item
)
443 if(item
== NULL
|| !item
->IsVisible() || IsEmpty())
446 int y
= item
->GetPosition().GetTop();
447 int base_y
= m_items
.Item(0)->GetPosition().GetTop();
448 int delta
= y
- base_y
- m_scroll_amount
;
449 ScrollLines(delta
/ m_bitmap_padded_size
.GetHeight());
452 bool wxRibbonGallery::IsHovered() const
457 void wxRibbonGallery::OnEraseBackground(wxEraseEvent
& WXUNUSED(evt
))
459 // All painting done in main paint handler to minimise flicker
462 void wxRibbonGallery::OnPaint(wxPaintEvent
& WXUNUSED(evt
))
464 wxAutoBufferedPaintDC
dc(this);
468 m_art
->DrawGalleryBackground(dc
, this, GetSize());
470 int padding_top
= m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_TOP_SIZE
);
471 int padding_left
= m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_LEFT_SIZE
);
473 dc
.SetClippingRegion(m_client_rect
);
475 bool offset_vertical
= true;
476 if(m_art
->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL
)
477 offset_vertical
= false;
478 size_t item_count
= m_items
.Count();
480 for(item_i
= 0; item_i
< item_count
; ++item_i
)
482 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
483 if(!item
->IsVisible())
486 const wxRect
& pos
= item
->GetPosition();
487 wxRect
offset_pos(pos
);
489 offset_pos
.SetTop(offset_pos
.GetTop() - m_scroll_amount
);
491 offset_pos
.SetLeft(offset_pos
.GetLeft() - m_scroll_amount
);
492 m_art
->DrawGalleryItemBackground(dc
, this, offset_pos
, item
);
493 dc
.DrawBitmap(item
->GetBitmap(), offset_pos
.GetLeft() + padding_left
,
494 offset_pos
.GetTop() + padding_top
);
498 void wxRibbonGallery::OnSize(wxSizeEvent
& WXUNUSED(evt
))
503 wxRibbonGalleryItem
* wxRibbonGallery::Append(const wxBitmap
& bitmap
, int id
)
505 wxASSERT(bitmap
.IsOk());
506 if(m_items
.IsEmpty())
508 m_bitmap_size
= bitmap
.GetSize();
513 wxASSERT(bitmap
.GetSize() == m_bitmap_size
);
516 wxRibbonGalleryItem
*item
= new wxRibbonGalleryItem
;
518 item
->SetBitmap(bitmap
);
523 wxRibbonGalleryItem
* wxRibbonGallery::Append(const wxBitmap
& bitmap
, int id
,
526 wxRibbonGalleryItem
*item
= Append(bitmap
, id
);
527 item
->SetClientData(clientData
);
531 wxRibbonGalleryItem
* wxRibbonGallery::Append(const wxBitmap
& bitmap
, int id
,
532 wxClientData
* clientData
)
534 wxRibbonGalleryItem
*item
= Append(bitmap
, id
);
535 item
->SetClientObject(clientData
);
539 void wxRibbonGallery::Clear()
541 size_t item_count
= m_items
.Count();
543 for(item_i
= 0; item_i
< item_count
; ++item_i
)
545 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
551 bool wxRibbonGallery::IsSizingContinuous() const
556 void wxRibbonGallery::CalculateMinSize()
558 if(m_art
== NULL
|| !m_bitmap_size
.IsFullySpecified())
560 SetMinSize(wxSize(20, 20));
564 m_bitmap_padded_size
= m_bitmap_size
;
565 m_bitmap_padded_size
.IncBy(
566 m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_LEFT_SIZE
) +
567 m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_RIGHT_SIZE
),
568 m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_TOP_SIZE
) +
569 m_art
->GetMetric(wxRIBBON_ART_GALLERY_BITMAP_PADDING_BOTTOM_SIZE
));
572 SetMinSize(m_art
->GetGallerySize(dc
, this, m_bitmap_padded_size
));
574 // The best size is displaying several items
575 m_best_size
= m_bitmap_padded_size
;
577 m_best_size
= m_art
->GetGallerySize(dc
, this, m_best_size
);
581 bool wxRibbonGallery::Realize()
587 bool wxRibbonGallery::Layout()
594 wxSize client_size
= m_art
->GetGalleryClientSize(dc
, this, GetSize(),
595 &origin
, &m_scroll_up_button_rect
, &m_scroll_down_button_rect
,
596 &m_extension_button_rect
);
597 m_client_rect
= wxRect(origin
, client_size
);
602 size_t item_count
= m_items
.Count();
604 long art_flags
= m_art
->GetFlags();
605 for(item_i
= 0; item_i
< item_count
; ++item_i
)
607 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
608 item
->SetIsVisible(true);
609 if(art_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
611 if(y_cursor
+ m_bitmap_padded_size
.y
> client_size
.GetHeight())
616 x_cursor
+= m_bitmap_padded_size
.x
;
618 item
->SetPosition(origin
.x
+ x_cursor
, origin
.y
+ y_cursor
,
619 m_bitmap_padded_size
);
620 y_cursor
+= m_bitmap_padded_size
.y
;
624 if(x_cursor
+ m_bitmap_padded_size
.x
> client_size
.GetWidth())
629 y_cursor
+= m_bitmap_padded_size
.y
;
631 item
->SetPosition(origin
.x
+ x_cursor
, origin
.y
+ y_cursor
,
632 m_bitmap_padded_size
);
633 x_cursor
+= m_bitmap_padded_size
.x
;
636 for(; item_i
< item_count
; ++item_i
)
638 wxRibbonGalleryItem
*item
= m_items
.Item(item_i
);
639 item
->SetIsVisible(false);
641 if(art_flags
& wxRIBBON_BAR_FLOW_VERTICAL
)
642 m_scroll_limit
= x_cursor
;
644 m_scroll_limit
= y_cursor
;
645 if(m_scroll_amount
>= m_scroll_limit
)
647 m_scroll_amount
= m_scroll_limit
;
648 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_DISABLED
;
650 else if(m_down_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
651 m_down_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
653 if(m_scroll_amount
<= 0)
656 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_DISABLED
;
658 else if(m_up_button_state
== wxRIBBON_GALLERY_BUTTON_DISABLED
)
659 m_up_button_state
= wxRIBBON_GALLERY_BUTTON_NORMAL
;
664 wxSize
wxRibbonGallery::DoGetBestSize() const
669 wxSize
wxRibbonGallery::DoGetNextSmallerSize(wxOrientation direction
,
670 wxSize relative_to
) const
677 wxSize client
= m_art
->GetGalleryClientSize(dc
, this, relative_to
, NULL
,
691 if(client
.GetWidth() < 0 || client
.GetHeight() < 0)
694 client
.x
= (client
.x
/ m_bitmap_padded_size
.x
) * m_bitmap_padded_size
.x
;
695 client
.y
= (client
.y
/ m_bitmap_padded_size
.y
) * m_bitmap_padded_size
.y
;
697 wxSize size
= m_art
->GetGallerySize(dc
, this, client
);
698 wxSize minimum
= GetMinSize();
700 if(size
.GetWidth() < minimum
.GetWidth() ||
701 size
.GetHeight() < minimum
.GetHeight())
709 size
.SetHeight(relative_to
.GetHeight());
712 size
.SetWidth(relative_to
.GetWidth());
721 wxSize
wxRibbonGallery::DoGetNextLargerSize(wxOrientation direction
,
722 wxSize relative_to
) const
729 wxSize client
= m_art
->GetGalleryClientSize(dc
, this, relative_to
, NULL
,
732 // No need to grow if the given size can already display every item
733 int nitems
= (client
.GetWidth() / m_bitmap_padded_size
.x
) *
734 (client
.GetHeight() / m_bitmap_padded_size
.y
);
735 if(nitems
>= (int)m_items
.GetCount())
741 client
.IncBy(m_bitmap_padded_size
.x
, 0);
744 client
.IncBy(0, m_bitmap_padded_size
.y
);
747 client
.IncBy(m_bitmap_padded_size
);
751 client
.x
= (client
.x
/ m_bitmap_padded_size
.x
) * m_bitmap_padded_size
.x
;
752 client
.y
= (client
.y
/ m_bitmap_padded_size
.y
) * m_bitmap_padded_size
.y
;
754 wxSize size
= m_art
->GetGallerySize(dc
, this, client
);
755 wxSize minimum
= GetMinSize();
757 if(size
.GetWidth() < minimum
.GetWidth() ||
758 size
.GetHeight() < minimum
.GetHeight())
766 size
.SetHeight(relative_to
.GetHeight());
769 size
.SetWidth(relative_to
.GetWidth());
778 bool wxRibbonGallery::IsEmpty() const
780 return m_items
.IsEmpty();
783 unsigned int wxRibbonGallery::GetCount() const
785 return (unsigned int)m_items
.GetCount();
788 wxRibbonGalleryItem
* wxRibbonGallery::GetItem(unsigned int n
)
792 return m_items
.Item(n
);
795 void wxRibbonGallery::SetSelection(wxRibbonGalleryItem
* item
)
797 if(item
!= m_selected_item
)
799 m_selected_item
= item
;
804 wxRibbonGalleryItem
* wxRibbonGallery::GetSelection() const
806 return m_selected_item
;
809 wxRibbonGalleryItem
* wxRibbonGallery::GetHoveredItem() const
811 return m_hovered_item
;
814 wxRibbonGalleryItem
* wxRibbonGallery::GetActiveItem() const
816 return m_active_item
;
819 wxRibbonGalleryButtonState
wxRibbonGallery::GetUpButtonState() const
821 return m_up_button_state
;
824 wxRibbonGalleryButtonState
wxRibbonGallery::GetDownButtonState() const
826 return m_down_button_state
;
829 wxRibbonGalleryButtonState
wxRibbonGallery::GetExtensionButtonState() const
831 return m_extension_button_state
;
834 #endif // wxUSE_RIBBON