#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"
};
WX_DECLARE_OBJARRAY(wxRibbonButtonBarButtonInstance, wxArrayRibbonButtonBarButtonInstance);
-#include <wx/arrimpl.cpp>
-WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance);
+#include "wx/arrimpl.cpp"
+WX_DEFINE_OBJARRAY(wxArrayRibbonButtonBarButtonInstance)
class wxRibbonButtonBarLayout
{
wxRibbonButtonBar::wxRibbonButtonBar()
{
m_layouts_valid = false;
+ CommonInit (0);
}
wxRibbonButtonBar::wxRibbonButtonBar(wxWindow* parent,
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,
return AddButton(button_id, label, bitmap, help_string,
wxRIBBON_BUTTON_HYBRID);
}
-
+
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::AddButton(
int button_id,
const wxString& label,
base->client_data = client_data;
base->state = 0;
- wxMemoryDC temp_dc;
+ wxClientDC temp_dc(this);
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc);
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc);
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_LARGE, temp_dc);
}
}
+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)
wxRibbonControl::SetArtProvider(art);
- wxMemoryDC temp_dc;
+ wxClientDC temp_dc(this);
size_t btn_count = m_buttons.Count();
size_t btn_i;
for(btn_i = 0; btn_i < btn_count; ++btn_i)
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);
}
m_lock_active_state = false;
SetBackgroundStyle(wxBG_STYLE_CUSTOM);
-};
+}
wxSize wxRibbonButtonBar::GetMinSize() const
{
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;
}
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;