X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/652aa9360f96449b56a572edd2c8dd35770a2a3d..b31d6326beda3790b63564cc43aa36226268ae2c:/src/ribbon/buttonbar.cpp diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index b04c83b27f..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); @@ -993,28 +1005,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 +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); } @@ -1082,16 +1103,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; + } } } } @@ -1187,7 +1211,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); }