From 40df8a51f2d922237dd11a5ff14532ea744027b7 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Wed, 14 Nov 2012 00:16:16 +0000 Subject: [PATCH] Optionally allow showing tooltips for disabled ribbon buttons. Add wxRibbonButtonBar::SetShowToolTipsForDisabled() to allow enabling the tooltips even for the disabled buttons. Closes #14820. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72950 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 1 + include/wx/ribbon/buttonbar.h | 5 +++++ interface/wx/ribbon/buttonbar.h | 19 +++++++++++++++++++ src/ribbon/buttonbar.cpp | 26 ++++++++++++++++++++++---- 4 files changed, 47 insertions(+), 4 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index c8e1d6d10c..b3d18eac61 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -583,6 +583,7 @@ All (GUI): - Added wxDirCtrl::GetPath() (troelsk). - Added wxEVT_COMMAND_DIRCTRL_CHANGED event (troelsk). - Added wxControl::GetSizeFromTextSize() (Manuel Martin). +- Optionally allow showing tooltips for disabled ribbon buttons (wxBen). wxGTK: diff --git a/include/wx/ribbon/buttonbar.h b/include/wx/ribbon/buttonbar.h index 6dd002b0c2..38957d7c5c 100644 --- a/include/wx/ribbon/buttonbar.h +++ b/include/wx/ribbon/buttonbar.h @@ -147,6 +147,10 @@ public: virtual bool IsSizingContinuous() const; virtual wxSize GetMinSize() const; + + void SetShowToolTipsForDisabled(bool show); + bool GetShowToolTipsForDisabled() const; + protected: friend class wxRibbonButtonBarEvent; virtual wxSize DoGetBestSize() const; @@ -186,6 +190,7 @@ protected: int m_current_layout; bool m_layouts_valid; bool m_lock_active_state; + bool m_show_tooltips_for_disabled; #ifndef SWIG DECLARE_CLASS(wxRibbonButtonBar) diff --git a/interface/wx/ribbon/buttonbar.h b/interface/wx/ribbon/buttonbar.h index 08951900f2..8bc04b0893 100644 --- a/interface/wx/ribbon/buttonbar.h +++ b/interface/wx/ribbon/buttonbar.h @@ -485,6 +485,25 @@ public: */ virtual wxRibbonButtonBarButtonBase *GetHoveredItem() const; + /** + Indicates whether tooltips are shown for disabled buttons. + + By default they are not shown. + + @since 2.9.5 + */ + void SetShowToolTipsForDisabled(bool show); + + /** + Sets whether tooltips should be shown for disabled buttons or not. + + You may wish to show it to explain why a button is disabled or + what it normally does when enabled. + + @since 2.9.5 + */ + bool GetShowToolTipsForDisabled() const; + }; /** diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index 7e25278de3..5dcb021491 100644 --- a/src/ribbon/buttonbar.cpp +++ b/src/ribbon/buttonbar.cpp @@ -800,10 +800,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; @@ -979,6 +990,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); @@ -995,6 +1007,7 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) { if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0) { + tooltipButton = &instance; new_hovered = &instance; new_hovered_state = instance.base->state; new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; @@ -1010,14 +1023,22 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt) } break; } + else if (m_show_tooltips_for_disabled) + { + tooltipButton = &instance; + } } } #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 && @@ -1031,9 +1052,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); } -- 2.45.2