X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/00491f99f4a1f19ac015fd072880093450e11b44..d9dd0c95df369be61d3dfa9314e87b589e50526a:/src/ribbon/gallery.cpp diff --git a/src/ribbon/gallery.cpp b/src/ribbon/gallery.cpp index 0a1aa02d03..429d5e8f93 100644 --- a/src/ribbon/gallery.cpp +++ b/src/ribbon/gallery.cpp @@ -4,7 +4,6 @@ // Author: Peter Cawley // Modified by: // Created: 2009-07-22 -// RCS-ID: $Id$ // Copyright: (C) Peter Cawley // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -15,10 +14,9 @@ #pragma hdrstop #endif -#include "wx/ribbon/gallery.h" - #if wxUSE_RIBBON +#include "wx/ribbon/gallery.h" #include "wx/ribbon/art.h" #include "wx/ribbon/bar.h" #include "wx/dcbuffer.h" @@ -31,8 +29,9 @@ #include "wx/msw/private.h" #endif -wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED, wxRibbonGalleryEvent); -wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONGALLERY_SELECTED, wxRibbonGalleryEvent); +wxDEFINE_EVENT(wxEVT_RIBBONGALLERY_HOVER_CHANGED, wxRibbonGalleryEvent); +wxDEFINE_EVENT(wxEVT_RIBBONGALLERY_SELECTED, wxRibbonGalleryEvent); +wxDEFINE_EVENT(wxEVT_RIBBONGALLERY_CLICKED, wxRibbonGalleryEvent); IMPLEMENT_DYNAMIC_CLASS(wxRibbonGalleryEvent, wxCommandEvent) IMPLEMENT_CLASS(wxRibbonGallery, wxRibbonControl) @@ -76,6 +75,7 @@ BEGIN_EVENT_TABLE(wxRibbonGallery, wxRibbonControl) EVT_LEAVE_WINDOW(wxRibbonGallery::OnMouseLeave) EVT_LEFT_DOWN(wxRibbonGallery::OnMouseDown) EVT_LEFT_UP(wxRibbonGallery::OnMouseUp) + EVT_LEFT_DCLICK(wxRibbonGallery::OnMouseDClick) EVT_MOTION(wxRibbonGallery::OnMouseMove) EVT_PAINT(wxRibbonGallery::OnPaint) EVT_SIZE(wxRibbonGallery::OnSize) @@ -196,7 +196,7 @@ void wxRibbonGallery::OnMouseMove(wxMouseEvent& evt) { m_hovered_item = hovered_item; wxRibbonGalleryEvent notification( - wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED, GetId()); + wxEVT_RIBBONGALLERY_HOVER_CHANGED, GetId()); notification.SetEventObject(this); notification.SetGallery(this); notification.SetGalleryItem(hovered_item); @@ -250,7 +250,7 @@ void wxRibbonGallery::OnMouseLeave(wxMouseEvent& WXUNUSED(evt)) { m_hovered_item = NULL; wxRibbonGalleryEvent notification( - wxEVT_COMMAND_RIBBONGALLERY_HOVER_CHANGED, GetId()); + wxEVT_RIBBONGALLERY_HOVER_CHANGED, GetId()); notification.SetEventObject(this); notification.SetGallery(this); ProcessWindowEvent(notification); @@ -340,7 +340,7 @@ void wxRibbonGallery::OnMouseUp(wxMouseEvent& evt) else if(m_mouse_active_rect == &m_extension_button_rect) { m_extension_button_state = wxRIBBON_GALLERY_BUTTON_HOVERED; - wxCommandEvent notification(wxEVT_COMMAND_BUTTON_CLICKED, + wxCommandEvent notification(wxEVT_BUTTON, GetId()); notification.SetEventObject(this); ProcessWindowEvent(notification); @@ -351,12 +351,19 @@ void wxRibbonGallery::OnMouseUp(wxMouseEvent& evt) { m_selected_item = m_active_item; wxRibbonGalleryEvent notification( - wxEVT_COMMAND_RIBBONGALLERY_SELECTED, GetId()); + wxEVT_RIBBONGALLERY_SELECTED, GetId()); notification.SetEventObject(this); notification.SetGallery(this); notification.SetGalleryItem(m_selected_item); ProcessWindowEvent(notification); } + + wxRibbonGalleryEvent notification( + wxEVT_RIBBONGALLERY_CLICKED, GetId()); + notification.SetEventObject(this); + notification.SetGallery(this); + notification.SetGalleryItem(m_selected_item); + ProcessWindowEvent(notification); } } m_mouse_active_rect = NULL; @@ -365,6 +372,15 @@ void wxRibbonGallery::OnMouseUp(wxMouseEvent& evt) } } +void wxRibbonGallery::OnMouseDClick(wxMouseEvent& evt) +{ + // The 2nd click of a double-click should be handled as a click in the + // same way as the 1st click of the double-click. This is useful for + // scrolling through the gallery. + OnMouseDown(evt); + OnMouseUp(evt); +} + void wxRibbonGallery::SetItemClientObject(wxRibbonGalleryItem* itm, wxClientData* data) { @@ -391,14 +407,31 @@ bool wxRibbonGallery::ScrollLines(int lines) if(m_scroll_limit == 0 || m_art == NULL) return false; + return ScrollPixels(lines * GetScrollLineSize()); +} + +int wxRibbonGallery::GetScrollLineSize() const +{ + if(m_art == NULL) + return 32; + int line_size = m_bitmap_padded_size.GetHeight(); if(m_art->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL) line_size = m_bitmap_padded_size.GetWidth(); - if(lines < 0) + + return line_size; +} + +bool wxRibbonGallery::ScrollPixels(int pixels) +{ + if(m_scroll_limit == 0 || m_art == NULL) + return false; + + if(pixels < 0) { if(m_scroll_amount > 0) { - m_scroll_amount += lines * line_size; + m_scroll_amount += pixels; if(m_scroll_amount <= 0) { m_scroll_amount = 0; @@ -411,11 +444,11 @@ bool wxRibbonGallery::ScrollLines(int lines) return true; } } - else if(lines > 0) + else if(pixels > 0) { if(m_scroll_amount < m_scroll_limit) { - m_scroll_amount += lines * line_size; + m_scroll_amount += pixels; if(m_scroll_amount >= m_scroll_limit) { m_scroll_amount = m_scroll_limit; @@ -436,10 +469,20 @@ void wxRibbonGallery::EnsureVisible(const wxRibbonGalleryItem* item) if(item == NULL || !item->IsVisible() || IsEmpty()) return; - int y = item->GetPosition().GetTop(); - int base_y = m_items.Item(0)->GetPosition().GetTop(); - int delta = y - base_y - m_scroll_amount; - ScrollLines(delta / m_bitmap_padded_size.GetHeight()); + if(m_art->GetFlags() & wxRIBBON_BAR_FLOW_VERTICAL) + { + int x = item->GetPosition().GetLeft(); + int base_x = m_items.Item(0)->GetPosition().GetLeft(); + int delta = x - base_x - m_scroll_amount; + ScrollLines(delta / m_bitmap_padded_size.GetWidth()); + } + else + { + int y = item->GetPosition().GetTop(); + int base_y = m_items.Item(0)->GetPosition().GetTop(); + int delta = y - base_y - m_scroll_amount; + ScrollLines(delta / m_bitmap_padded_size.GetHeight()); + } } bool wxRibbonGallery::IsHovered() const