X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/652aa9360f96449b56a572edd2c8dd35770a2a3d..6c0d5a69e9ced225343b3d79d4b2892013287c5f:/src/ribbon/buttonbar.cpp?ds=sidebyside diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index b04c83b27f..39e4c4f247 100644 --- a/src/ribbon/buttonbar.cpp +++ b/src/ribbon/buttonbar.cpp @@ -4,7 +4,6 @@ // Author: Peter Cawley // Modified by: // Created: 2009-07-01 -// RCS-ID: $Id$ // Copyright: (C) Peter Cawley // Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// @@ -29,8 +28,8 @@ #include "wx/msw/private.h" #endif -wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBUTTON_CLICKED, wxRibbonButtonBarEvent); -wxDEFINE_EVENT(wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED, wxRibbonButtonBarEvent); +wxDEFINE_EVENT(wxEVT_RIBBONBUTTONBAR_CLICKED, wxRibbonButtonBarEvent); +wxDEFINE_EVENT(wxEVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED, wxRibbonButtonBarEvent); IMPLEMENT_DYNAMIC_CLASS(wxRibbonButtonBarEvent, wxCommandEvent) IMPLEMENT_CLASS(wxRibbonButtonBar, wxRibbonControl) @@ -800,10 +799,21 @@ void wxRibbonButtonBar::CommonInit(long WXUNUSED(style)) m_hovered_button = NULL; m_active_button = NULL; m_lock_active_state = false; + m_show_tooltips_for_disabled = false; SetBackgroundStyle(wxBG_STYLE_CUSTOM); } +void wxRibbonButtonBar::SetShowToolTipsForDisabled(bool show) +{ + m_show_tooltips_for_disabled = show; +} + +bool wxRibbonButtonBar::GetShowToolTipsForDisabled() const +{ + return m_show_tooltips_for_disabled; +} + wxSize wxRibbonButtonBar::GetMinSize() const { return m_layouts.Last()->overall_size; @@ -934,7 +944,7 @@ bool wxRibbonButtonBar::TryCollapseLayout(wxRibbonButtonBarLayout* original, // If height isn't preserved (i.e. it is reduced), then the minimum // size for the button bar will decrease, preventing the original // layout from being used (in some cases). - // It may be a good idea to always preverse the height, but for now + // It may be a good idea to always preserve the height, but for now // it is only done when the first button is involved in a collapse. preserve_height = true; } @@ -979,6 +989,7 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) { wxPoint cursor(evt.GetPosition()); wxRibbonButtonBarButtonInstance* new_hovered = NULL; + wxRibbonButtonBarButtonInstance* tooltipButton = NULL; long new_hovered_state = 0; wxRibbonButtonBarLayout* layout = m_layouts.Item(m_current_layout); @@ -993,28 +1004,40 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) btn_rect.SetSize(size.size); if(btn_rect.Contains(cursor)) { - new_hovered = &instance; - new_hovered_state = instance.base->state; - new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; - wxPoint offset(cursor); - offset -= btn_rect.GetTopLeft(); - if(size.normal_region.Contains(offset)) + if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0) { - new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED; + tooltipButton = &instance; + new_hovered = &instance; + new_hovered_state = instance.base->state; + new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; + wxPoint offset(cursor); + offset -= btn_rect.GetTopLeft(); + if(size.normal_region.Contains(offset)) + { + new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_NORMAL_HOVERED; + } + if(size.dropdown_region.Contains(offset)) + { + new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED; + } + break; } - if(size.dropdown_region.Contains(offset)) + else if (m_show_tooltips_for_disabled) { - new_hovered_state |= wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_HOVERED; + tooltipButton = &instance; } - break; } } #if wxUSE_TOOLTIPS - if(new_hovered == NULL && GetToolTip()) + if(tooltipButton == NULL && GetToolTip()) { UnsetToolTip(); } + if(tooltipButton) + { + SetToolTip(tooltipButton->base->help_string); + } #endif if(new_hovered != m_hovered_button || (m_hovered_button != NULL && @@ -1028,9 +1051,6 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) if(m_hovered_button != NULL) { m_hovered_button->base->state = new_hovered_state; -#if wxUSE_TOOLTIPS - SetToolTip(m_hovered_button->base->help_string); -#endif } Refresh(false); } @@ -1082,16 +1102,19 @@ void wxRibbonButtonBar::OnMouseDown(wxMouseEvent& evt) btn_rect.SetSize(size.size); if(btn_rect.Contains(cursor)) { - m_active_button = &instance; - cursor -= btn_rect.GetTopLeft(); - long state = 0; - if(size.normal_region.Contains(cursor)) - state = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE; - else if(size.dropdown_region.Contains(cursor)) - state = wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE; - instance.base->state |= state; - Refresh(false); - break; + if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0) + { + m_active_button = &instance; + cursor -= btn_rect.GetTopLeft(); + long state = 0; + if(size.normal_region.Contains(cursor)) + state = wxRIBBON_BUTTONBAR_BUTTON_NORMAL_ACTIVE; + else if(size.dropdown_region.Contains(cursor)) + state = wxRIBBON_BUTTONBAR_BUTTON_DROPDOWN_ACTIVE; + instance.base->state |= state; + Refresh(false); + break; + } } } } @@ -1115,9 +1138,9 @@ void wxRibbonButtonBar::OnMouseUp(wxMouseEvent& evt) do { if(size.normal_region.Contains(cursor)) - event_type = wxEVT_COMMAND_RIBBONBUTTON_CLICKED; + event_type = wxEVT_RIBBONBUTTONBAR_CLICKED; else if(size.dropdown_region.Contains(cursor)) - event_type = wxEVT_COMMAND_RIBBONBUTTON_DROPDOWN_CLICKED; + event_type = wxEVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED; else break; wxRibbonButtonBarEvent notification(event_type, id); @@ -1187,7 +1210,7 @@ wxRibbonButtonBarButtonBase *wxRibbonButtonBar::GetHoveredItem() const wxRibbonButtonBarButtonBase *wxRibbonButtonBar::GetItem(size_t n) const { - wxCHECK_MSG(n >= 0 && n < m_buttons.GetCount(), NULL, "wxRibbonButtonBar item's index is out of bound"); + wxCHECK_MSG(n < m_buttons.GetCount(), NULL, "wxRibbonButtonBar item's index is out of bound"); return m_buttons.Item(n); }