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
This commit is contained in:
Vadim Zeitlin
2012-11-14 00:16:16 +00:00
parent 4d8209b907
commit 40df8a51f2
4 changed files with 47 additions and 4 deletions

View File

@@ -583,6 +583,7 @@ All (GUI):
- Added wxDirCtrl::GetPath() (troelsk). - Added wxDirCtrl::GetPath() (troelsk).
- Added wxEVT_COMMAND_DIRCTRL_CHANGED event (troelsk). - Added wxEVT_COMMAND_DIRCTRL_CHANGED event (troelsk).
- Added wxControl::GetSizeFromTextSize() (Manuel Martin). - Added wxControl::GetSizeFromTextSize() (Manuel Martin).
- Optionally allow showing tooltips for disabled ribbon buttons (wxBen).
wxGTK: wxGTK:

View File

@@ -147,6 +147,10 @@ public:
virtual bool IsSizingContinuous() const; virtual bool IsSizingContinuous() const;
virtual wxSize GetMinSize() const; virtual wxSize GetMinSize() const;
void SetShowToolTipsForDisabled(bool show);
bool GetShowToolTipsForDisabled() const;
protected: protected:
friend class wxRibbonButtonBarEvent; friend class wxRibbonButtonBarEvent;
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;
@@ -186,6 +190,7 @@ protected:
int m_current_layout; int m_current_layout;
bool m_layouts_valid; bool m_layouts_valid;
bool m_lock_active_state; bool m_lock_active_state;
bool m_show_tooltips_for_disabled;
#ifndef SWIG #ifndef SWIG
DECLARE_CLASS(wxRibbonButtonBar) DECLARE_CLASS(wxRibbonButtonBar)

View File

@@ -485,6 +485,25 @@ public:
*/ */
virtual wxRibbonButtonBarButtonBase *GetHoveredItem() const; 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;
}; };
/** /**

View File

@@ -800,10 +800,21 @@ void wxRibbonButtonBar::CommonInit(long WXUNUSED(style))
m_hovered_button = NULL; m_hovered_button = NULL;
m_active_button = NULL; m_active_button = NULL;
m_lock_active_state = false; m_lock_active_state = false;
m_show_tooltips_for_disabled = false;
SetBackgroundStyle(wxBG_STYLE_CUSTOM); 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 wxSize wxRibbonButtonBar::GetMinSize() const
{ {
return m_layouts.Last()->overall_size; return m_layouts.Last()->overall_size;
@@ -979,6 +990,7 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt)
{ {
wxPoint cursor(evt.GetPosition()); wxPoint cursor(evt.GetPosition());
wxRibbonButtonBarButtonInstance* new_hovered = NULL; wxRibbonButtonBarButtonInstance* new_hovered = NULL;
wxRibbonButtonBarButtonInstance* tooltipButton = NULL;
long new_hovered_state = 0; long new_hovered_state = 0;
wxRibbonButtonBarLayout* layout = m_layouts.Item(m_current_layout); 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) if((instance.base->state & wxRIBBON_BUTTONBAR_BUTTON_DISABLED) == 0)
{ {
tooltipButton = &instance;
new_hovered = &instance; new_hovered = &instance;
new_hovered_state = instance.base->state; new_hovered_state = instance.base->state;
new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK; new_hovered_state &= ~wxRIBBON_BUTTONBAR_BUTTON_HOVER_MASK;
@@ -1010,14 +1023,22 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt)
} }
break; break;
} }
else if (m_show_tooltips_for_disabled)
{
tooltipButton = &instance;
}
} }
} }
#if wxUSE_TOOLTIPS #if wxUSE_TOOLTIPS
if(new_hovered == NULL && GetToolTip()) if(tooltipButton == NULL && GetToolTip())
{ {
UnsetToolTip(); UnsetToolTip();
} }
if(tooltipButton)
{
SetToolTip(tooltipButton->base->help_string);
}
#endif #endif
if(new_hovered != m_hovered_button || (m_hovered_button != NULL && if(new_hovered != m_hovered_button || (m_hovered_button != NULL &&
@@ -1031,9 +1052,6 @@ void wxRibbonButtonBar::OnMouseMove(wxMouseEvent& evt)
if(m_hovered_button != NULL) if(m_hovered_button != NULL)
{ {
m_hovered_button->base->state = new_hovered_state; m_hovered_button->base->state = new_hovered_state;
#if wxUSE_TOOLTIPS
SetToolTip(m_hovered_button->base->help_string);
#endif
} }
Refresh(false); Refresh(false);
} }