Updated ribbon example program

Added Ribbon SetButtonIcon(), SetButtonText(),
SetButtonMinSizeClass() and SetButtonMaxSizeClass() examples.
This commit is contained in:
Max Maisel
2018-03-15 16:34:50 +01:00
parent 2cbcf939df
commit 2be4724d53

View File

@@ -60,6 +60,8 @@ public:
ID_SELECTION_EXPAND_H, ID_SELECTION_EXPAND_H,
ID_SELECTION_EXPAND_V, ID_SELECTION_EXPAND_V,
ID_SELECTION_CONTRACT, ID_SELECTION_CONTRACT,
ID_BUTTON_XX,
ID_BUTTON_XY,
ID_PRIMARY_COLOUR, ID_PRIMARY_COLOUR,
ID_SECONDARY_COLOUR, ID_SECONDARY_COLOUR,
ID_DEFAULT_PROVIDER, ID_DEFAULT_PROVIDER,
@@ -84,7 +86,15 @@ public:
ID_UI_CHANGE_TEXT_UPDATED, ID_UI_CHANGE_TEXT_UPDATED,
ID_REMOVE_PAGE, ID_REMOVE_PAGE,
ID_HIDE_PAGES, ID_HIDE_PAGES,
ID_SHOW_PAGES ID_SHOW_PAGES,
ID_PLUS_MINUS,
ID_CHANGE_LABEL,
ID_SMALL_BUTTON_1,
ID_SMALL_BUTTON_2,
ID_SMALL_BUTTON_3,
ID_SMALL_BUTTON_4,
ID_SMALL_BUTTON_5,
ID_SMALL_BUTTON_6
}; };
void OnEnableUpdateUI(wxUpdateUIEvent& evt); void OnEnableUpdateUI(wxUpdateUIEvent& evt);
@@ -134,6 +144,8 @@ public:
void OnRemovePage(wxRibbonButtonBarEvent& evt); void OnRemovePage(wxRibbonButtonBarEvent& evt);
void OnHidePages(wxRibbonButtonBarEvent& evt); void OnHidePages(wxRibbonButtonBarEvent& evt);
void OnShowPages(wxRibbonButtonBarEvent& evt); void OnShowPages(wxRibbonButtonBarEvent& evt);
void OnPlusMinus(wxRibbonButtonBarEvent& evt);
void OnChangeLabel(wxRibbonButtonBarEvent& evt);
void OnTogglePanels(wxCommandEvent& evt); void OnTogglePanels(wxCommandEvent& evt);
void OnRibbonBarToggled(wxRibbonBarEvent& evt); void OnRibbonBarToggled(wxRibbonBarEvent& evt);
void OnRibbonBarHelpClicked(wxRibbonBarEvent& evt); void OnRibbonBarHelpClicked(wxRibbonBarEvent& evt);
@@ -169,6 +181,10 @@ protected:
bool m_bChecked; bool m_bChecked;
wxString m_new_text; wxString m_new_text;
wxRibbonButtonBar* m_mutable_button_bar;
bool m_plus_minus_state;
bool m_change_label_state;
wxDECLARE_EVENT_TABLE(); wxDECLARE_EVENT_TABLE();
}; };
@@ -241,6 +257,8 @@ EVT_RIBBONPANEL_EXTBUTTON_ACTIVATED(wxID_ANY, MyFrame::OnExtButton)
EVT_RIBBONBUTTONBAR_CLICKED(ID_REMOVE_PAGE, MyFrame::OnRemovePage) EVT_RIBBONBUTTONBAR_CLICKED(ID_REMOVE_PAGE, MyFrame::OnRemovePage)
EVT_RIBBONBUTTONBAR_CLICKED(ID_HIDE_PAGES, MyFrame::OnHidePages) EVT_RIBBONBUTTONBAR_CLICKED(ID_HIDE_PAGES, MyFrame::OnHidePages)
EVT_RIBBONBUTTONBAR_CLICKED(ID_SHOW_PAGES, MyFrame::OnShowPages) EVT_RIBBONBUTTONBAR_CLICKED(ID_SHOW_PAGES, MyFrame::OnShowPages)
EVT_RIBBONBUTTONBAR_CLICKED(ID_PLUS_MINUS, MyFrame::OnPlusMinus)
EVT_RIBBONBUTTONBAR_CLICKED(ID_CHANGE_LABEL, MyFrame::OnChangeLabel)
EVT_RIBBONBAR_TOGGLED(wxID_ANY, MyFrame::OnRibbonBarToggled) EVT_RIBBONBAR_TOGGLED(wxID_ANY, MyFrame::OnRibbonBarToggled)
EVT_RIBBONBAR_HELP_CLICK(wxID_ANY, MyFrame::OnRibbonBarHelpClicked) EVT_RIBBONBAR_HELP_CLICK(wxID_ANY, MyFrame::OnRibbonBarHelpClicked)
EVT_SIZE(MyFrame::OnSizeEvent) EVT_SIZE(MyFrame::OnSizeEvent)
@@ -352,13 +370,22 @@ MyFrame::MyFrame()
sizer_panelcombo->SetMinSize(wxSize(150, -1)); sizer_panelcombo->SetMinSize(wxSize(150, -1));
sizer_panelcombo2->SetMinSize(wxSize(150, -1)); sizer_panelcombo2->SetMinSize(wxSize(150, -1));
//not using wxWrapSizer(wxHORIZONTAL) as it reports an incorrect min height wxRibbonButtonBar* bar = new wxRibbonButtonBar(sizer_panel, wxID_ANY);
wxSizer* sizer_panelsizer = new wxBoxSizer(wxVERTICAL); bar->AddButton(ID_BUTTON_XX, wxT("xx"), ribbon_xpm);
sizer_panelsizer->AddStretchSpacer(1); bar->AddButton(ID_BUTTON_XY, wxT("xy"), ribbon_xpm);
sizer_panelsizer->Add(sizer_panelcombo, 0, wxALL|wxEXPAND, 2); // This prevents ribbon buttons in panels with sizer from collapsing.
sizer_panelsizer->Add(sizer_panelcombo2, 0, wxALL|wxEXPAND, 2); bar->SetButtonMinSizeClass(ID_BUTTON_XX, wxRIBBON_BUTTONBAR_BUTTON_LARGE);
sizer_panelsizer->AddStretchSpacer(1); bar->SetButtonMinSizeClass(ID_BUTTON_XY, wxRIBBON_BUTTONBAR_BUTTON_LARGE);
sizer_panel->SetSizer(sizer_panelsizer);
wxSizer* sizer_panelsizer_h = new wxBoxSizer(wxHORIZONTAL);
wxSizer* sizer_panelsizer_v = new wxBoxSizer(wxVERTICAL);
sizer_panelsizer_v->AddStretchSpacer(1);
sizer_panelsizer_v->Add(sizer_panelcombo, 0, wxALL|wxEXPAND, 2);
sizer_panelsizer_v->Add(sizer_panelcombo2, 0, wxALL|wxEXPAND, 2);
sizer_panelsizer_v->AddStretchSpacer(1);
sizer_panelsizer_h->Add(bar, 0, wxEXPAND);
sizer_panelsizer_h->Add(sizer_panelsizer_v, 0);
sizer_panel->SetSizer(sizer_panelsizer_h);
wxFont label_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT); wxFont label_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT);
m_bitmap_creation_dc.SetFont(label_font); m_bitmap_creation_dc.SetFont(label_font);
@@ -418,10 +445,57 @@ MyFrame::MyFrame()
bar->AddButton(ID_REMOVE_PAGE, wxT("Remove"), wxArtProvider::GetBitmap(wxART_DELETE, wxART_OTHER, wxSize(24, 24))); bar->AddButton(ID_REMOVE_PAGE, wxT("Remove"), wxArtProvider::GetBitmap(wxART_DELETE, wxART_OTHER, wxSize(24, 24)));
bar->AddButton(ID_HIDE_PAGES, wxT("Hide Pages"), ribbon_xpm); bar->AddButton(ID_HIDE_PAGES, wxT("Hide Pages"), ribbon_xpm);
bar->AddButton(ID_SHOW_PAGES, wxT("Show Pages"), ribbon_xpm); bar->AddButton(ID_SHOW_PAGES, wxT("Show Pages"), ribbon_xpm);
panel = new wxRibbonPanel(page, wxID_ANY, wxT("Button bar manipulation"), ribbon_xpm);
m_mutable_button_bar = new wxRibbonButtonBar(panel, wxID_ANY);
m_mutable_button_bar->AddButton(ID_PLUS_MINUS, wxT("+/-"),
wxArtProvider::GetBitmap(wxART_PLUS, wxART_OTHER, wxSize(24, 24)));
m_plus_minus_state = false;
m_mutable_button_bar->AddButton(ID_CHANGE_LABEL, wxT("short"), ribbon_xpm);
m_mutable_button_bar->SetButtonTextMinWidth(ID_CHANGE_LABEL, wxT("some long text"));
m_change_label_state = false;
panel = new wxRibbonPanel(page, wxID_ANY, wxT("Always medium buttons"), ribbon_xpm);
bar = new wxRibbonButtonBar(panel, wxID_ANY);
bar->AddButton(ID_SMALL_BUTTON_1, wxT("Button 1"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_1, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_2, wxT("Button 2"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_2, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_3, wxT("Button 3"), ribbon_xpm);
bar->AddButton(ID_SMALL_BUTTON_4, wxT("Button 4"), ribbon_xpm);
bar->AddButton(ID_SMALL_BUTTON_5, wxT("Button 5"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_5, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_6, wxT("Button 6"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_6, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
} }
new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Highlight Page"), empty_xpm); new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Highlight Page"), empty_xpm);
m_ribbon->AddPageHighlight(m_ribbon->GetPageCount()-1); m_ribbon->AddPageHighlight(m_ribbon->GetPageCount()-1);
{
wxRibbonPage* page = new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Advanced"), empty_xpm);
wxRibbonPanel* panel = new wxRibbonPanel(page, wxID_ANY, wxT("Button bar manipulation"), ribbon_xpm);
m_mutable_button_bar = new wxRibbonButtonBar(panel, wxID_ANY);
m_mutable_button_bar->AddButton(ID_PLUS_MINUS, wxT("+/-"),
wxArtProvider::GetBitmap(wxART_PLUS, wxART_OTHER, wxSize(24, 24)));
m_plus_minus_state = false;
m_mutable_button_bar->AddButton(ID_CHANGE_LABEL, wxT("short"), ribbon_xpm);
m_mutable_button_bar->SetButtonTextMinWidth(ID_CHANGE_LABEL, wxT("some long text"));
m_change_label_state = false;
panel = new wxRibbonPanel(page, wxID_ANY, wxT("Always medium buttons"), ribbon_xpm);
wxRibbonButtonBar* bar = new wxRibbonButtonBar(panel, wxID_ANY);
bar->AddButton(ID_SMALL_BUTTON_1, wxT("Button 1"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_1, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_2, wxT("Button 2"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_2, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_3, wxT("Button 3"), ribbon_xpm);
bar->AddButton(ID_SMALL_BUTTON_4, wxT("Button 4"), ribbon_xpm);
bar->AddButton(ID_SMALL_BUTTON_5, wxT("Button 5"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_5, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
bar->AddButton(ID_SMALL_BUTTON_6, wxT("Button 6"), ribbon_xpm);
bar->SetButtonMaxSizeClass(ID_SMALL_BUTTON_6, wxRIBBON_BUTTONBAR_BUTTON_MEDIUM);
}
m_ribbon->Realize(); m_ribbon->Realize();
m_logwindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString, m_logwindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
@@ -1038,6 +1112,36 @@ void MyFrame::OnShowPages(wxRibbonButtonBarEvent& WXUNUSED(evt))
m_ribbon->Realize(); m_ribbon->Realize();
} }
void MyFrame::OnPlusMinus(wxRibbonButtonBarEvent& WXUNUSED(evt))
{
if(m_plus_minus_state)
{
m_mutable_button_bar->SetButtonIcon(ID_PLUS_MINUS,
wxArtProvider::GetBitmap(wxART_PLUS, wxART_OTHER, wxSize(24, 24)));
m_plus_minus_state = false;
}
else
{
m_mutable_button_bar->SetButtonIcon(ID_PLUS_MINUS,
wxArtProvider::GetBitmap(wxART_MINUS, wxART_OTHER, wxSize(24, 24)));
m_plus_minus_state = true;
}
}
void MyFrame::OnChangeLabel(wxRibbonButtonBarEvent& WXUNUSED(evt))
{
if(m_change_label_state)
{
m_mutable_button_bar->SetButtonText(ID_CHANGE_LABEL, wxT("short"));
m_change_label_state = false;
}
else
{
m_mutable_button_bar->SetButtonText(ID_CHANGE_LABEL, wxT("some long text"));
m_change_label_state = true;
}
}
void MyFrame::OnRibbonBarToggled(wxRibbonBarEvent& WXUNUSED(evt)) void MyFrame::OnRibbonBarToggled(wxRibbonBarEvent& WXUNUSED(evt))
{ {
AddText(wxString::Format("Ribbon bar %s.", AddText(wxString::Format("Ribbon bar %s.",