wxRibbonToolBarToolBase* wxRibbonToolBar::InsertTool( size_t pos, int tool_id, const wxBitmap& bitmap, const wxBitmap& bitmap_disabled, const wxString& help_string, wxRibbonButtonKind kind, wxObject* client_data) { wxASSERT(bitmap.IsOk()); // Create the wxRibbonToolBarToolBase with parameters wxRibbonToolBarToolBase* tool = new wxRibbonToolBarToolBase; tool->id = tool_id; tool->bitmap = bitmap; if(bitmap_disabled.IsOk()) { wxASSERT(bitmap.GetSize() == bitmap_disabled.GetSize()); tool->bitmap_disabled = bitmap_disabled; } else tool->bitmap_disabled = MakeDisabledBitmap(bitmap); tool->help_string = help_string; tool->kind = kind; tool->client_data = client_data; tool->position = wxPoint(0, 0); tool->size = wxSize(0, 0); tool->state = 0; // Find the position where insert tool size_t group_count = m_groups.GetCount(); size_t g; for(g = 0; g < group_count; ++g) { wxRibbonToolBarToolGroup* group = m_groups.Item(g); size_t tool_count = group->tools.GetCount(); if(pos <= tool_count) { group->tools.Insert(tool, pos); return tool; } pos -= tool_count + 1; } wxFAIL_MSG("Tool position out of toolbar bounds."); return NULL; }
wxRibbonButtonBarButtonBase* wxRibbonButtonBar::InsertButton( size_t pos, int button_id, const wxString& label, const wxBitmap& bitmap, const wxBitmap& bitmap_small, const wxBitmap& bitmap_disabled, const wxBitmap& bitmap_small_disabled, wxRibbonButtonKind kind, const wxString& help_string) { wxASSERT(bitmap.IsOk() || bitmap_small.IsOk()); if(m_buttons.IsEmpty()) { if(bitmap.IsOk()) { m_bitmap_size_large = bitmap.GetSize(); if(!bitmap_small.IsOk()) { m_bitmap_size_small = m_bitmap_size_large; m_bitmap_size_small *= 0.5; } } if(bitmap_small.IsOk()) { m_bitmap_size_small = bitmap_small.GetSize(); if(!bitmap.IsOk()) { m_bitmap_size_large = m_bitmap_size_small; m_bitmap_size_large *= 2.0; } } } wxRibbonButtonBarButtonBase* base = new wxRibbonButtonBarButtonBase; base->id = button_id; base->label = label; base->bitmap_large = bitmap; if(!base->bitmap_large.IsOk()) { base->bitmap_large = MakeResizedBitmap(base->bitmap_small, m_bitmap_size_large); } else if(base->bitmap_large.GetSize() != m_bitmap_size_large) { base->bitmap_large = MakeResizedBitmap(base->bitmap_large, m_bitmap_size_large); } base->bitmap_small = bitmap_small; if(!base->bitmap_small.IsOk()) { base->bitmap_small = MakeResizedBitmap(base->bitmap_large, m_bitmap_size_small); } else if(base->bitmap_small.GetSize() != m_bitmap_size_small) { base->bitmap_small = MakeResizedBitmap(base->bitmap_small, m_bitmap_size_small); } base->bitmap_large_disabled = bitmap_disabled; if(!base->bitmap_large_disabled.IsOk()) { base->bitmap_large_disabled = MakeDisabledBitmap(base->bitmap_large); } base->bitmap_small_disabled = bitmap_small_disabled; if(!base->bitmap_small_disabled.IsOk()) { base->bitmap_small_disabled = MakeDisabledBitmap(base->bitmap_small); } base->kind = kind; base->help_string = help_string; base->state = 0; 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); m_buttons.Insert(base, pos); m_layouts_valid = false; return base; }