X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/089ca539acced38d70e750e4a9589cf8d175ec5d..aa3e374197e99d6362468dd821935050e5074065:/src/ribbon/buttonbar.cpp diff --git a/src/ribbon/buttonbar.cpp b/src/ribbon/buttonbar.cpp index 52d8e52e0a..a1404abbb8 100644 --- a/src/ribbon/buttonbar.cpp +++ b/src/ribbon/buttonbar.cpp @@ -15,10 +15,9 @@ #pragma hdrstop #endif -#include "wx/ribbon/buttonbar.h" - #if wxUSE_RIBBON +#include "wx/ribbon/buttonbar.h" #include "wx/ribbon/art.h" #include "wx/dcbuffer.h" @@ -124,8 +123,8 @@ public: }; WX_DECLARE_OBJARRAY(wxRibbonButtonBarButtonInstance, wxArrayRibbonButtonBarButtonInstance); -#include -WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance); +#include "wx/arrimpl.cpp" +WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance) class wxRibbonButtonBarLayout { @@ -179,6 +178,7 @@ public: wxRibbonButtonBar::wxRibbonButtonBar() { m_layouts_valid = false; + CommonInit (0); } wxRibbonButtonBar::wxRibbonButtonBar(wxWindow* parent, @@ -249,6 +249,16 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddDropdownButton( wxRIBBON_BUTTON_DROPDOWN); } +wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddToggleButton( + int button_id, + const wxString& label, + const wxBitmap& bitmap, + const wxString& help_string) +{ + return AddButton(button_id, label, bitmap, help_string, + wxRIBBON_BUTTON_TOGGLE); +} + wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton( int button_id, const wxString& label, @@ -258,7 +268,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddHybridButton( return AddButton(button_id, label, bitmap, help_string, wxRIBBON_BUTTON_HYBRID); } - + wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton( int button_id, const wxString& label, @@ -445,6 +455,36 @@ void wxRibbonButtonBar::EnableButton(int button_id, bool enable) } } +void wxRibbonButtonBar::ToggleButton(int button_id, bool checked) +{ + size_t count = m_buttons.GetCount(); + size_t i; + for(i = 0; i < count; ++i) + { + wxRibbonButtonBarButtonBase* button = m_buttons.Item(i); + if(button->id == button_id) + { + if(checked) + { + if((button->state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED) == 0) + { + button->state |= wxRIBBON_BUTTONBAR_BUTTON_TOGGLED; + Refresh(); + } + } + else + { + if(button->state & wxRIBBON_BUTTONBAR_BUTTON_TOGGLED) + { + button->state &= ~wxRIBBON_BUTTONBAR_BUTTON_TOGGLED; + Refresh(); + } + } + return; + } + } +} + void wxRibbonButtonBar::SetArtProvider(wxRibbonArtProvider* art) { if(art == m_art) @@ -585,7 +625,7 @@ void wxRibbonButtonBar::OnPaint(wxPaintEvent& WXUNUSED(evt)) bitmap_small = &base->bitmap_small_disabled; } wxRect rect(button.position + m_layout_offset, base->sizes[button.size].size); - + m_art->DrawButtonBarButton(dc, this, rect, base->kind, base->state | button.size, base->label, *bitmap, *bitmap_small); } @@ -627,7 +667,7 @@ void wxRibbonButtonBar::CommonInit(long WXUNUSED(style)) m_lock_active_state = false; SetBackgroundStyle(wxBG_STYLE_CUSTOM); -}; +} wxSize wxRibbonButtonBar::GetMinSize() const { @@ -787,7 +827,7 @@ bool wxRibbonButtonBar::TryCollapseLayout(wxRibbonButtonBarLayout* original, layout->overall_size.GetHeight() > original->overall_size.GetHeight()) { delete layout; - wxASSERT_MSG(false, wxT("Layout collapse resulted in increased size")); + wxFAIL_MSG("Layout collapse resulted in increased size"); return false; } @@ -936,6 +976,13 @@ void wxRibbonButtonBar::OnMouseUp(wxMouseEvent& evt) else break; wxRibbonButtonBarEvent notification(event_type, id); + if(m_active_button->base->kind == wxRIBBON_BUTTON_TOGGLE) + { + m_active_button->base->state ^= + wxRIBBON_BUTTONBAR_BUTTON_TOGGLED; + notification.SetInt(m_active_button->base->state & + wxRIBBON_BUTTONBAR_BUTTON_TOGGLED); + } notification.SetEventObject(this); notification.SetBar(this); m_lock_active_state = true;