Handle image lists in wxRibbonButtonBarButtonBase too

This makes more sense and also allows SetButtonIcon() to work with them.
This commit is contained in:
Vadim Zeitlin
2020-02-07 18:22:08 +01:00
parent 5a30886696
commit c6b3a6f2b4

View File

@@ -95,7 +95,8 @@ public:
barButtonSmallImageListPos = -1; barButtonSmallImageListPos = -1;
} }
void SetBitmaps(wxSize bitmap_size_large, void SetBitmaps(wxRibbonBar* ribbon,
wxSize bitmap_size_large,
wxSize bitmap_size_small, wxSize bitmap_size_small,
const wxBitmap& bitmap_large, const wxBitmap& bitmap_large,
const wxBitmap& bitmap_large_disabled, const wxBitmap& bitmap_large_disabled,
@@ -103,16 +104,17 @@ public:
const wxBitmap& bitmap_small_disabled) const wxBitmap& bitmap_small_disabled)
{ {
m_bitmap_large = bitmap_large; m_bitmap_large = bitmap_large;
if(!m_bitmap_large.IsOk()) if(!bitmap_large.IsOk())
{ {
m_bitmap_large = MakeResizedBitmap(m_bitmap_small, m_bitmap_large = MakeResizedBitmap(m_bitmap_small,
bitmap_size_large); bitmap_size_large);
} }
else if(m_bitmap_large.GetScaledSize() != bitmap_size_large) else if(bitmap_large.GetScaledSize() != bitmap_size_large)
{ {
m_bitmap_large = MakeResizedBitmap(m_bitmap_large, m_bitmap_large = MakeResizedBitmap(m_bitmap_large,
bitmap_size_large); bitmap_size_large);
} }
m_bitmap_small = bitmap_small; m_bitmap_small = bitmap_small;
if(!m_bitmap_small.IsOk()) if(!m_bitmap_small.IsOk())
{ {
@@ -134,6 +136,28 @@ public:
{ {
m_bitmap_small_disabled = MakeDisabledBitmap(m_bitmap_small); m_bitmap_small_disabled = MakeDisabledBitmap(m_bitmap_small);
} }
if ( ribbon )
{
if ( m_bitmap_large.IsOk() )
{
wxImageList* const
buttonImageList = ribbon->GetButtonImageList(bitmap_size_large);
barButtonImageListPos = buttonImageList->Add(m_bitmap_large);
m_bitmap_large = wxNullBitmap;
buttonImageList->Add(m_bitmap_large_disabled);
m_bitmap_large_disabled = wxNullBitmap;
}
wxImageList* const
buttonSmallImageList = ribbon->GetButtonSmallImageList(bitmap_size_small);
barButtonSmallImageListPos = buttonSmallImageList->Add(m_bitmap_small);
m_bitmap_small = wxNullBitmap;
buttonSmallImageList->Add(m_bitmap_small_disabled);
m_bitmap_small_disabled = wxNullBitmap;
}
} }
wxRibbonButtonBarButtonInstance NewInstance() wxRibbonButtonBarButtonInstance NewInstance()
@@ -412,7 +436,7 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
wxRibbonButtonBarButtonBase* base = new wxRibbonButtonBarButtonBase; wxRibbonButtonBarButtonBase* base = new wxRibbonButtonBarButtonBase;
base->id = button_id; base->id = button_id;
base->label = label; base->label = label;
base->SetBitmaps(m_bitmap_size_large, m_bitmap_size_small, base->SetBitmaps(GetAncestorRibbonBar(), m_bitmap_size_large, m_bitmap_size_small,
bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled); bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled);
base->kind = kind; base->kind = kind;
base->help_string = help_string; base->help_string = help_string;
@@ -423,26 +447,6 @@ wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton(
base->min_size_class = wxRIBBON_BUTTONBAR_BUTTON_SMALL; base->min_size_class = wxRIBBON_BUTTONBAR_BUTTON_SMALL;
base->max_size_class = wxRIBBON_BUTTONBAR_BUTTON_LARGE; base->max_size_class = wxRIBBON_BUTTONBAR_BUTTON_LARGE;
wxImageList* buttonImageList = NULL;
wxImageList* buttonSmallImageList = NULL;
if ( wxRibbonBar* const ribbon = GetAncestorRibbonBar() )
{
buttonImageList = ribbon->GetButtonImageList(m_bitmap_size_large);
buttonSmallImageList = ribbon->GetButtonSmallImageList(m_bitmap_size_small);
}
if (base->m_bitmap_large.IsOk() && buttonImageList)
{
base->barButtonImageListPos = buttonImageList->Add(base->m_bitmap_large);
base->m_bitmap_large = wxNullBitmap;
buttonImageList->Add(base->m_bitmap_large_disabled);
base->m_bitmap_large_disabled = wxNullBitmap;
base->barButtonSmallImageListPos = buttonSmallImageList->Add(base->m_bitmap_small);
base->m_bitmap_small = wxNullBitmap;
buttonSmallImageList->Add(base->m_bitmap_small_disabled);
base->m_bitmap_small_disabled = wxNullBitmap;
}
wxClientDC temp_dc(this); wxClientDC temp_dc(this);
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc); FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_SMALL, temp_dc);
FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc); FetchButtonSizeInfo(base, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM, temp_dc);
@@ -672,7 +676,7 @@ void wxRibbonButtonBar::SetButtonIcon(
wxRibbonButtonBarButtonBase* base = GetItemById(button_id); wxRibbonButtonBarButtonBase* base = GetItemById(button_id);
if(base == NULL) if(base == NULL)
return; return;
base->SetBitmaps(m_bitmap_size_large, m_bitmap_size_small, base->SetBitmaps(GetAncestorRibbonBar(), m_bitmap_size_large, m_bitmap_size_small,
bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled); bitmap, bitmap_disabled, bitmap_small, bitmap_small_disabled);
Refresh(); Refresh();
} }