1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: ribbondemo.cpp
3 // Purpose: wxRibbon: Ribbon user interface - sample/test program
4 // Author: Peter Cawley
8 // Copyright: (C) Copyright 2009, Peter Cawley
9 // Licence: wxWindows Library Licence
10 ///////////////////////////////////////////////////////////////////////////////
12 #include "wx/wxprec.h"
20 #include "wx/textctrl.h"
21 #include "wx/ribbon/bar.h"
22 #include "wx/ribbon/buttonbar.h"
23 #include "wx/ribbon/gallery.h"
24 #include "wx/ribbon/toolbar.h"
27 #include "wx/dcbuffer.h"
28 #include "wx/colordlg.h"
29 #include "wx/artprov.h"
30 #include "wx/combobox.h"
31 #include "wx/wrapsizer.h"
35 class MyApp
: public wxApp
46 class MyFrame
: public wxFrame
54 ID_CIRCLE
= wxID_HIGHEST
+ 1,
59 ID_SELECTION_EXPAND_H
,
60 ID_SELECTION_EXPAND_V
,
61 ID_SELECTION_CONTRACT
,
69 ID_POSITION_TOP_ICONS
,
72 ID_POSITION_LEFT_LABELS
,
73 ID_POSITION_LEFT_BOTH
,
76 void OnCircleButton(wxRibbonButtonBarEvent
& evt
);
77 void OnCrossButton(wxRibbonButtonBarEvent
& evt
);
78 void OnTriangleButton(wxRibbonButtonBarEvent
& evt
);
79 void OnTriangleDropdown(wxRibbonButtonBarEvent
& evt
);
80 void OnSquareButton(wxRibbonButtonBarEvent
& evt
);
81 void OnPolygonDropdown(wxRibbonButtonBarEvent
& evt
);
82 void OnSelectionExpandVButton(wxRibbonButtonBarEvent
& evt
);
83 void OnSelectionExpandHButton(wxRibbonButtonBarEvent
& evt
);
84 void OnSelectionContractButton(wxRibbonButtonBarEvent
& evt
);
85 void OnHoveredColourChange(wxRibbonGalleryEvent
& evt
);
86 void OnPrimaryColourSelect(wxRibbonGalleryEvent
& evt
);
87 void OnSecondaryColourSelect(wxRibbonGalleryEvent
& evt
);
88 void OnColourGalleryButton(wxCommandEvent
& evt
);
89 void OnDefaultProvider(wxRibbonButtonBarEvent
& evt
);
90 void OnAUIProvider(wxRibbonButtonBarEvent
& evt
);
91 void OnMSWProvider(wxRibbonButtonBarEvent
& evt
);
92 void OnNew(wxRibbonToolBarEvent
& evt
);
93 void OnNewDropdown(wxRibbonToolBarEvent
& evt
);
94 void OnPrint(wxRibbonToolBarEvent
& evt
);
95 void OnPrintDropdown(wxRibbonToolBarEvent
& evt
);
96 void OnRedoDropdown(wxRibbonToolBarEvent
& evt
);
97 void OnUndoDropdown(wxRibbonToolBarEvent
& evt
);
98 void OnPositionTop(wxRibbonToolBarEvent
& evt
);
99 void OnPositionTopLabels(wxCommandEvent
& evt
);
100 void OnPositionTopIcons(wxCommandEvent
& evt
);
101 void OnPositionTopBoth(wxCommandEvent
& evt
);
102 void OnPositionTopDropdown(wxRibbonToolBarEvent
& evt
);
103 void OnPositionLeft(wxRibbonToolBarEvent
& evt
);
104 void OnPositionLeftLabels(wxCommandEvent
& evt
);
105 void OnPositionLeftIcons(wxCommandEvent
& evt
);
106 void OnPositionLeftBoth(wxCommandEvent
& evt
);
107 void OnPositionLeftDropdown(wxRibbonToolBarEvent
& evt
);
110 wxRibbonGallery
* PopulateColoursPanel(wxWindow
* panel
, wxColour def
,
112 void AddText(wxString msg
);
113 wxRibbonGalleryItem
* AddColourToGallery(wxRibbonGallery
*gallery
,
114 wxString name
, wxMemoryDC
& dc
, wxColour
* value
= NULL
);
115 wxColour
GetGalleryColour(wxRibbonGallery
*gallery
,
116 wxRibbonGalleryItem
* item
, wxString
* name
);
117 void ResetGalleryArtProviders();
118 void SetArtProvider(wxRibbonArtProvider
* prov
);
119 void SetBarStyle(long style
);
121 wxRibbonBar
* m_ribbon
;
122 wxRibbonGallery
* m_primary_gallery
;
123 wxRibbonGallery
* m_secondary_gallery
;
124 wxTextCtrl
* m_logwindow
;
125 wxColourData m_colour_data
;
126 wxColour m_default_primary
;
127 wxColour m_default_secondary
;
128 wxColour m_default_tertiary
;
129 wxMemoryDC m_bitmap_creation_dc
;
131 DECLARE_EVENT_TABLE()
134 // -- implementations --
141 wxFrame
* frame
= new MyFrame
;
148 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
149 EVT_RIBBONBUTTONBAR_CLICKED(ID_DEFAULT_PROVIDER
, MyFrame::OnDefaultProvider
)
150 EVT_RIBBONBUTTONBAR_CLICKED(ID_AUI_PROVIDER
, MyFrame::OnAUIProvider
)
151 EVT_RIBBONBUTTONBAR_CLICKED(ID_MSW_PROVIDER
, MyFrame::OnMSWProvider
)
152 EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_EXPAND_H
, MyFrame::OnSelectionExpandHButton
)
153 EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_EXPAND_V
, MyFrame::OnSelectionExpandVButton
)
154 EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_CONTRACT
, MyFrame::OnSelectionContractButton
)
155 EVT_RIBBONBUTTONBAR_CLICKED(ID_CIRCLE
, MyFrame::OnCircleButton
)
156 EVT_RIBBONBUTTONBAR_CLICKED(ID_CROSS
, MyFrame::OnCrossButton
)
157 EVT_RIBBONBUTTONBAR_CLICKED(ID_TRIANGLE
, MyFrame::OnTriangleButton
)
158 EVT_RIBBONBUTTONBAR_CLICKED(ID_SQUARE
, MyFrame::OnSquareButton
)
159 EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(ID_TRIANGLE
, MyFrame::OnTriangleDropdown
)
160 EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(ID_POLYGON
, MyFrame::OnPolygonDropdown
)
161 EVT_RIBBONGALLERY_HOVER_CHANGED(ID_PRIMARY_COLOUR
, MyFrame::OnHoveredColourChange
)
162 EVT_RIBBONGALLERY_HOVER_CHANGED(ID_SECONDARY_COLOUR
, MyFrame::OnHoveredColourChange
)
163 EVT_RIBBONGALLERY_SELECTED(ID_PRIMARY_COLOUR
, MyFrame::OnPrimaryColourSelect
)
164 EVT_RIBBONGALLERY_SELECTED(ID_SECONDARY_COLOUR
, MyFrame::OnSecondaryColourSelect
)
165 EVT_RIBBONTOOLBAR_CLICKED(wxID_NEW
, MyFrame::OnNew
)
166 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_NEW
, MyFrame::OnNewDropdown
)
167 EVT_RIBBONTOOLBAR_CLICKED(wxID_PRINT
, MyFrame::OnPrint
)
168 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_PRINT
, MyFrame::OnPrintDropdown
)
169 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_REDO
, MyFrame::OnRedoDropdown
)
170 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_UNDO
, MyFrame::OnUndoDropdown
)
171 EVT_RIBBONTOOLBAR_CLICKED(ID_POSITION_LEFT
, MyFrame::OnPositionLeft
)
172 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(ID_POSITION_LEFT
, MyFrame::OnPositionLeftDropdown
)
173 EVT_RIBBONTOOLBAR_CLICKED(ID_POSITION_TOP
, MyFrame::OnPositionTop
)
174 EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(ID_POSITION_TOP
, MyFrame::OnPositionTopDropdown
)
175 EVT_BUTTON(ID_PRIMARY_COLOUR
, MyFrame::OnColourGalleryButton
)
176 EVT_BUTTON(ID_SECONDARY_COLOUR
, MyFrame::OnColourGalleryButton
)
177 EVT_MENU(ID_POSITION_LEFT
, MyFrame::OnPositionLeftIcons
)
178 EVT_MENU(ID_POSITION_LEFT_LABELS
, MyFrame::OnPositionLeftLabels
)
179 EVT_MENU(ID_POSITION_LEFT_BOTH
, MyFrame::OnPositionLeftBoth
)
180 EVT_MENU(ID_POSITION_TOP
, MyFrame::OnPositionTopLabels
)
181 EVT_MENU(ID_POSITION_TOP_ICONS
, MyFrame::OnPositionTopIcons
)
182 EVT_MENU(ID_POSITION_TOP_BOTH
, MyFrame::OnPositionTopBoth
)
185 #include "align_center.xpm"
186 #include "align_left.xpm"
187 #include "align_right.xpm"
188 #include "aui_style.xpm"
189 #include "auto_crop_selection.xpm"
190 #include "auto_crop_selection_small.xpm"
191 #include "circle.xpm"
192 #include "circle_small.xpm"
193 #include "colours.xpm"
196 #include "expand_selection_v.xpm"
197 #include "expand_selection_h.xpm"
199 #include "hexagon.xpm"
200 #include "msw_style.xpm"
201 #include "position_left_small.xpm"
202 #include "position_top_small.xpm"
203 #include "ribbon.xpm"
204 #include "selection_panel.xpm"
205 #include "square.xpm"
206 #include "triangle.xpm"
209 : wxFrame(NULL
, wxID_ANY
, wxT("wxRibbon Sample Application"), wxDefaultPosition
, wxSize(800, 600), wxDEFAULT_FRAME_STYLE
)
211 m_ribbon
= new wxRibbonBar(this, wxID_ANY
);
214 wxRibbonPage
* home
= new wxRibbonPage(m_ribbon
, wxID_ANY
, wxT("Examples"), ribbon_xpm
);
215 wxRibbonPanel
*toolbar_panel
= new wxRibbonPanel(home
, wxID_ANY
, wxT("Toolbar"), wxNullBitmap
, wxDefaultPosition
, wxDefaultSize
, wxRIBBON_PANEL_NO_AUTO_MINIMISE
);
216 wxRibbonToolBar
*toolbar
= new wxRibbonToolBar(toolbar_panel
, ID_MAIN_TOOLBAR
);
217 toolbar
->AddTool(wxID_ANY
, align_left_xpm
);
218 toolbar
->AddTool(wxID_ANY
, align_center_xpm
);
219 toolbar
->AddTool(wxID_ANY
, align_right_xpm
);
220 toolbar
->AddSeparator();
221 toolbar
->AddHybridTool(wxID_NEW
, wxArtProvider::GetBitmap(wxART_NEW
, wxART_OTHER
, wxSize(16, 15)));
222 toolbar
->AddTool(wxID_ANY
, wxArtProvider::GetBitmap(wxART_FILE_OPEN
, wxART_OTHER
, wxSize(16, 15)));
223 toolbar
->AddTool(wxID_ANY
, wxArtProvider::GetBitmap(wxART_FILE_SAVE
, wxART_OTHER
, wxSize(16, 15)));
224 toolbar
->AddTool(wxID_ANY
, wxArtProvider::GetBitmap(wxART_FILE_SAVE_AS
, wxART_OTHER
, wxSize(16, 15)));
225 toolbar
->AddSeparator();
226 toolbar
->AddDropdownTool(wxID_UNDO
, wxArtProvider::GetBitmap(wxART_UNDO
, wxART_OTHER
, wxSize(16, 15)));
227 toolbar
->AddDropdownTool(wxID_REDO
, wxArtProvider::GetBitmap(wxART_REDO
, wxART_OTHER
, wxSize(16, 15)));
228 toolbar
->AddSeparator();
229 toolbar
->AddTool(wxID_ANY
, wxArtProvider::GetBitmap(wxART_REPORT_VIEW
, wxART_OTHER
, wxSize(16, 15)));
230 toolbar
->AddTool(wxID_ANY
, wxArtProvider::GetBitmap(wxART_LIST_VIEW
, wxART_OTHER
, wxSize(16, 15)));
231 toolbar
->AddSeparator();
232 toolbar
->AddHybridTool(ID_POSITION_LEFT
, position_left_xpm
);
233 toolbar
->AddHybridTool(ID_POSITION_TOP
, position_top_xpm
);
234 toolbar
->AddSeparator();
235 toolbar
->AddHybridTool(wxID_PRINT
, wxArtProvider::GetBitmap(wxART_PRINT
, wxART_OTHER
, wxSize(16, 15)));
236 toolbar
->SetRows(2, 3);
238 wxRibbonPanel
*selection_panel
= new wxRibbonPanel(home
, wxID_ANY
, wxT("Selection"), wxBitmap(selection_panel_xpm
));
239 wxRibbonButtonBar
*selection
= new wxRibbonButtonBar(selection_panel
);
240 selection
->AddButton(ID_SELECTION_EXPAND_V
, wxT("Expand Vertically"), wxBitmap(expand_selection_v_xpm
), wxEmptyString
);
241 selection
->AddButton(ID_SELECTION_EXPAND_H
, wxT("Expand Horizontally"), wxBitmap(expand_selection_h_xpm
), wxEmptyString
);
242 selection
->AddButton(ID_SELECTION_CONTRACT
, wxT("Contract"), wxBitmap(auto_crop_selection_xpm
), wxBitmap(auto_crop_selection_small_xpm
));
244 wxRibbonPanel
*shapes_panel
= new wxRibbonPanel(home
, wxID_ANY
, wxT("Shapes"), wxBitmap(circle_small_xpm
));
245 wxRibbonButtonBar
*shapes
= new wxRibbonButtonBar(shapes_panel
);
246 shapes
->AddButton(ID_CIRCLE
, wxT("Circle"), wxBitmap(circle_xpm
), wxBitmap(circle_small_xpm
));
247 shapes
->AddButton(ID_CROSS
, wxT("Cross"), wxBitmap(cross_xpm
), wxEmptyString
);
248 shapes
->AddHybridButton(ID_TRIANGLE
, wxT("Triangle"), wxBitmap(triangle_xpm
));
249 shapes
->AddButton(ID_SQUARE
, wxT("Square"), wxBitmap(square_xpm
), wxEmptyString
);
250 shapes
->AddDropdownButton(ID_POLYGON
, wxT("Other Polygon"), wxBitmap(hexagon_xpm
), wxEmptyString
);
252 wxRibbonPanel
*sizer_panel
= new wxRibbonPanel(home
, wxID_ANY
, wxT("Panel with Sizer"),
253 wxNullBitmap
, wxDefaultPosition
, wxDefaultSize
,
254 wxRIBBON_PANEL_EXT_BUTTON
);
259 wxComboBox
* sizer_panelcombo
= new wxComboBox(sizer_panel
, wxID_ANY
, wxEmptyString
,
260 wxDefaultPosition
, wxDefaultSize
, as
, wxCB_READONLY
);
261 wxComboBox
* sizer_panelcombo2
= new wxComboBox(sizer_panel
, wxID_ANY
, wxEmptyString
,
262 wxDefaultPosition
, wxDefaultSize
, as
, wxCB_READONLY
);
264 sizer_panelcombo
->SetMinSize(wxSize(150, -1));
265 sizer_panelcombo2
->SetMinSize(wxSize(150, -1));
267 wxSizer
* sizer_panelsizer
= new wxWrapSizer(wxHORIZONTAL
);
268 sizer_panelsizer
->Add(sizer_panelcombo
, 2, wxALL
|wxEXPAND
, 2);
269 sizer_panelsizer
->Add(sizer_panelcombo2
, 2, wxALL
|wxEXPAND
, 2);
270 sizer_panel
->SetSizer(sizer_panelsizer
);
272 wxFont
label_font(8, wxFONTFAMILY_DEFAULT
, wxFONTSTYLE_NORMAL
, wxFONTWEIGHT_LIGHT
);
273 m_bitmap_creation_dc
.SetFont(label_font
);
275 wxRibbonPage
* scheme
= new wxRibbonPage(m_ribbon
, wxID_ANY
, wxT("Appearance"), eye_xpm
);
276 m_ribbon
->GetArtProvider()->GetColourScheme(&m_default_primary
,
277 &m_default_secondary
, &m_default_tertiary
);
278 wxRibbonPanel
*provider_panel
= new wxRibbonPanel(scheme
, wxID_ANY
,
279 wxT("Art"), wxNullBitmap
, wxDefaultPosition
, wxDefaultSize
, wxRIBBON_PANEL_NO_AUTO_MINIMISE
);
280 wxRibbonButtonBar
*provider_bar
= new wxRibbonButtonBar(provider_panel
, wxID_ANY
);
281 provider_bar
->AddButton(ID_DEFAULT_PROVIDER
, wxT("Default Provider"),
282 wxArtProvider::GetBitmap(wxART_QUESTION
, wxART_OTHER
, wxSize(32, 32)));
283 provider_bar
->AddButton(ID_AUI_PROVIDER
, wxT("AUI Provider"), aui_style_xpm
);
284 provider_bar
->AddButton(ID_MSW_PROVIDER
, wxT("MSW Provider"), msw_style_xpm
);
285 wxRibbonPanel
*primary_panel
= new wxRibbonPanel(scheme
, wxID_ANY
,
286 wxT("Primary Colour"), colours_xpm
);
287 m_primary_gallery
= PopulateColoursPanel(primary_panel
,
288 m_default_primary
, ID_PRIMARY_COLOUR
);
289 wxRibbonPanel
*secondary_panel
= new wxRibbonPanel(scheme
, wxID_ANY
,
290 wxT("Secondary Colour"), colours_xpm
);
291 m_secondary_gallery
= PopulateColoursPanel(secondary_panel
,
292 m_default_secondary
, ID_SECONDARY_COLOUR
);
294 new wxRibbonPage(m_ribbon
, wxID_ANY
, wxT("Empty Page"), empty_xpm
);
295 new wxRibbonPage(m_ribbon
, wxID_ANY
, wxT("Another Page"), empty_xpm
);
299 m_logwindow
= new wxTextCtrl(this, wxID_ANY
, wxEmptyString
,
300 wxDefaultPosition
, wxDefaultSize
, wxTE_MULTILINE
| wxTE_READONLY
|
301 wxTE_LEFT
| wxTE_BESTWRAP
| wxBORDER_NONE
);
303 wxSizer
*s
= new wxBoxSizer(wxVERTICAL
);
305 s
->Add(m_ribbon
, 0, wxEXPAND
);
306 s
->Add(m_logwindow
, 1, wxEXPAND
);
311 void MyFrame::SetBarStyle(long style
)
314 m_ribbon
->SetWindowStyleFlag(style
);
315 wxBoxSizer
*pTopSize
= reinterpret_cast<wxBoxSizer
*>(GetSizer());
316 wxRibbonToolBar
*pToolbar
= wxDynamicCast(FindWindow(ID_MAIN_TOOLBAR
), wxRibbonToolBar
);
317 if(style
& wxRIBBON_BAR_FLOW_VERTICAL
)
319 m_ribbon
->SetTabCtrlMargins(10, 10);
320 pTopSize
->SetOrientation(wxHORIZONTAL
);
322 pToolbar
->SetRows(3, 5);
326 m_ribbon
->SetTabCtrlMargins(50, 20);
327 pTopSize
->SetOrientation(wxVERTICAL
);
329 pToolbar
->SetRows(2, 3);
340 class ColourClientData
: public wxClientData
343 ColourClientData(const wxString
& name
, const wxColour
& colour
)
344 : m_name(name
), m_colour(colour
) {}
346 const wxString
& GetName() const {return m_name
;}
347 const wxColour
& GetColour() const {return m_colour
;}
354 wxRibbonGallery
* MyFrame::PopulateColoursPanel(wxWindow
* panel
,
355 wxColour def
, int gallery_id
)
357 wxRibbonGallery
*gallery
= wxDynamicCast(panel
->FindWindow(gallery_id
), wxRibbonGallery
);
361 gallery
= new wxRibbonGallery(panel
, gallery_id
);
362 wxMemoryDC
& dc
= m_bitmap_creation_dc
;
363 wxRibbonGalleryItem
*def_item
=
364 AddColourToGallery(gallery
, wxT("Default"), dc
, &def
);
365 gallery
->SetSelection(def_item
);
366 AddColourToGallery(gallery
, wxT("BLUE"), dc
);
367 AddColourToGallery(gallery
, wxT("BLUE VIOLET"), dc
);
368 AddColourToGallery(gallery
, wxT("BROWN"), dc
);
369 AddColourToGallery(gallery
, wxT("CADET BLUE"), dc
);
370 AddColourToGallery(gallery
, wxT("CORAL"), dc
);
371 AddColourToGallery(gallery
, wxT("CYAN"), dc
);
372 AddColourToGallery(gallery
, wxT("DARK GREEN"), dc
);
373 AddColourToGallery(gallery
, wxT("DARK ORCHID"), dc
);
374 AddColourToGallery(gallery
, wxT("FIREBRICK"), dc
);
375 AddColourToGallery(gallery
, wxT("GOLD"), dc
);
376 AddColourToGallery(gallery
, wxT("GOLDENROD"), dc
);
377 AddColourToGallery(gallery
, wxT("GREEN"), dc
);
378 AddColourToGallery(gallery
, wxT("INDIAN RED"), dc
);
379 AddColourToGallery(gallery
, wxT("KHAKI"), dc
);
380 AddColourToGallery(gallery
, wxT("LIGHT BLUE"), dc
);
381 AddColourToGallery(gallery
, wxT("LIME GREEN"), dc
);
382 AddColourToGallery(gallery
, wxT("MAGENTA"), dc
);
383 AddColourToGallery(gallery
, wxT("MAROON"), dc
);
384 AddColourToGallery(gallery
, wxT("NAVY"), dc
);
385 AddColourToGallery(gallery
, wxT("ORANGE"), dc
);
386 AddColourToGallery(gallery
, wxT("ORCHID"), dc
);
387 AddColourToGallery(gallery
, wxT("PINK"), dc
);
388 AddColourToGallery(gallery
, wxT("PLUM"), dc
);
389 AddColourToGallery(gallery
, wxT("PURPLE"), dc
);
390 AddColourToGallery(gallery
, wxT("RED"), dc
);
391 AddColourToGallery(gallery
, wxT("SALMON"), dc
);
392 AddColourToGallery(gallery
, wxT("SEA GREEN"), dc
);
393 AddColourToGallery(gallery
, wxT("SIENNA"), dc
);
394 AddColourToGallery(gallery
, wxT("SKY BLUE"), dc
);
395 AddColourToGallery(gallery
, wxT("TAN"), dc
);
396 AddColourToGallery(gallery
, wxT("THISTLE"), dc
);
397 AddColourToGallery(gallery
, wxT("TURQUOISE"), dc
);
398 AddColourToGallery(gallery
, wxT("VIOLET"), dc
);
399 AddColourToGallery(gallery
, wxT("VIOLET RED"), dc
);
400 AddColourToGallery(gallery
, wxT("WHEAT"), dc
);
401 AddColourToGallery(gallery
, wxT("WHITE"), dc
);
402 AddColourToGallery(gallery
, wxT("YELLOW"), dc
);
407 wxColour
MyFrame::GetGalleryColour(wxRibbonGallery
*gallery
,
408 wxRibbonGalleryItem
* item
, wxString
* name
)
410 ColourClientData
*data
= (ColourClientData
*)gallery
->GetItemClientObject(item
);
412 *name
= data
->GetName();
413 return data
->GetColour();
416 void MyFrame::OnHoveredColourChange(wxRibbonGalleryEvent
& evt
)
418 // Set the background of the gallery to the hovered colour, or back to the
419 // default if there is no longer a hovered item.
421 wxRibbonGallery
*gallery
= evt
.GetGallery();
422 wxRibbonArtProvider
*provider
= gallery
->GetArtProvider();
424 if(evt
.GetGalleryItem() != NULL
)
426 if(provider
== m_ribbon
->GetArtProvider())
428 provider
= provider
->Clone();
429 gallery
->SetArtProvider(provider
);
431 provider
->SetColour(wxRIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR
,
432 GetGalleryColour(evt
.GetGallery(), evt
.GetGalleryItem(), NULL
));
436 if(provider
!= m_ribbon
->GetArtProvider())
438 gallery
->SetArtProvider(m_ribbon
->GetArtProvider());
444 void MyFrame::OnPrimaryColourSelect(wxRibbonGalleryEvent
& evt
)
447 wxColour colour
= GetGalleryColour(evt
.GetGallery(), evt
.GetGalleryItem(), &name
);
448 AddText(wxT("Colour \"") + name
+ wxT("\" selected as primary."));
449 wxColour secondary
, tertiary
;
450 m_ribbon
->GetArtProvider()->GetColourScheme(NULL
, &secondary
, &tertiary
);
451 m_ribbon
->GetArtProvider()->SetColourScheme(colour
, secondary
, tertiary
);
452 ResetGalleryArtProviders();
456 void MyFrame::OnSecondaryColourSelect(wxRibbonGalleryEvent
& evt
)
459 wxColour colour
= GetGalleryColour(evt
.GetGallery(), evt
.GetGalleryItem(), &name
);
460 AddText(wxT("Colour \"") + name
+ wxT("\" selected as secondary."));
461 wxColour primary
, tertiary
;
462 m_ribbon
->GetArtProvider()->GetColourScheme(&primary
, NULL
, &tertiary
);
463 m_ribbon
->GetArtProvider()->SetColourScheme(primary
, colour
, tertiary
);
464 ResetGalleryArtProviders();
468 void MyFrame::ResetGalleryArtProviders()
470 if(m_primary_gallery
->GetArtProvider() != m_ribbon
->GetArtProvider())
472 delete m_primary_gallery
->GetArtProvider();
473 m_primary_gallery
->SetArtProvider(m_ribbon
->GetArtProvider());
475 if(m_secondary_gallery
->GetArtProvider() != m_ribbon
->GetArtProvider())
477 delete m_secondary_gallery
->GetArtProvider();
478 m_secondary_gallery
->SetArtProvider(m_ribbon
->GetArtProvider());
482 void MyFrame::OnSelectionExpandHButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
484 AddText(wxT("Expand selection horizontally button clicked."));
487 void MyFrame::OnSelectionExpandVButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
489 AddText(wxT("Expand selection vertically button clicked."));
492 void MyFrame::OnSelectionContractButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
494 AddText(wxT("Contract selection button clicked."));
497 void MyFrame::OnCircleButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
499 AddText(wxT("Circle button clicked."));
502 void MyFrame::OnCrossButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
504 AddText(wxT("Cross button clicked."));
507 void MyFrame::OnTriangleButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
509 AddText(wxT("Triangle button clicked."));
512 void MyFrame::OnTriangleDropdown(wxRibbonButtonBarEvent
& evt
)
515 menu
.Append(wxID_ANY
, wxT("Equilateral"));
516 menu
.Append(wxID_ANY
, wxT("Isosceles"));
517 menu
.Append(wxID_ANY
, wxT("Scalene"));
519 evt
.PopupMenu(&menu
);
522 void MyFrame::OnSquareButton(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
524 AddText(wxT("Square button clicked."));
527 void MyFrame::OnPolygonDropdown(wxRibbonButtonBarEvent
& evt
)
530 menu
.Append(wxID_ANY
, wxT("Pentagon (5 sided)"));
531 menu
.Append(wxID_ANY
, wxT("Hexagon (6 sided)"));
532 menu
.Append(wxID_ANY
, wxT("Heptagon (7 sided)"));
533 menu
.Append(wxID_ANY
, wxT("Octogon (8 sided)"));
534 menu
.Append(wxID_ANY
, wxT("Nonagon (9 sided)"));
535 menu
.Append(wxID_ANY
, wxT("Decagon (10 sided)"));
537 evt
.PopupMenu(&menu
);
540 void MyFrame::OnNew(wxRibbonToolBarEvent
& WXUNUSED(evt
))
542 AddText(wxT("New button clicked."));
545 void MyFrame::OnNewDropdown(wxRibbonToolBarEvent
& evt
)
548 menu
.Append(wxID_ANY
, wxT("New Document"));
549 menu
.Append(wxID_ANY
, wxT("New Template"));
550 menu
.Append(wxID_ANY
, wxT("New Mail"));
552 evt
.PopupMenu(&menu
);
555 void MyFrame::OnPrint(wxRibbonToolBarEvent
& WXUNUSED(evt
))
557 AddText(wxT("Print button clicked."));
560 void MyFrame::OnPrintDropdown(wxRibbonToolBarEvent
& evt
)
563 menu
.Append(wxID_ANY
, wxT("Print"));
564 menu
.Append(wxID_ANY
, wxT("Preview"));
565 menu
.Append(wxID_ANY
, wxT("Options"));
567 evt
.PopupMenu(&menu
);
570 void MyFrame::OnRedoDropdown(wxRibbonToolBarEvent
& evt
)
573 menu
.Append(wxID_ANY
, wxT("Redo E"));
574 menu
.Append(wxID_ANY
, wxT("Redo F"));
575 menu
.Append(wxID_ANY
, wxT("Redo G"));
577 evt
.PopupMenu(&menu
);
580 void MyFrame::OnUndoDropdown(wxRibbonToolBarEvent
& evt
)
583 menu
.Append(wxID_ANY
, wxT("Undo C"));
584 menu
.Append(wxID_ANY
, wxT("Undo B"));
585 menu
.Append(wxID_ANY
, wxT("Undo A"));
587 evt
.PopupMenu(&menu
);
590 void MyFrame::OnPositionTopLabels(wxCommandEvent
& WXUNUSED(evt
))
592 SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE
);
595 void MyFrame::OnPositionTopIcons(wxCommandEvent
& WXUNUSED(evt
))
597 SetBarStyle((wxRIBBON_BAR_DEFAULT_STYLE
&~wxRIBBON_BAR_SHOW_PAGE_LABELS
)
598 | wxRIBBON_BAR_SHOW_PAGE_ICONS
);
601 void MyFrame::OnPositionTopBoth(wxCommandEvent
& WXUNUSED(evt
))
603 SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE
| wxRIBBON_BAR_SHOW_PAGE_ICONS
);
606 void MyFrame::OnPositionLeftLabels(wxCommandEvent
& WXUNUSED(evt
))
608 SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE
| wxRIBBON_BAR_FLOW_VERTICAL
);
611 void MyFrame::OnPositionLeftIcons(wxCommandEvent
& WXUNUSED(evt
))
613 SetBarStyle((wxRIBBON_BAR_DEFAULT_STYLE
&~wxRIBBON_BAR_SHOW_PAGE_LABELS
) |
614 wxRIBBON_BAR_SHOW_PAGE_ICONS
| wxRIBBON_BAR_FLOW_VERTICAL
);
617 void MyFrame::OnPositionLeftBoth(wxCommandEvent
& WXUNUSED(evt
))
619 SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE
| wxRIBBON_BAR_SHOW_PAGE_ICONS
|
620 wxRIBBON_BAR_FLOW_VERTICAL
);
623 void MyFrame::OnPositionTop(wxRibbonToolBarEvent
& evt
)
625 OnPositionTopLabels(evt
);
628 void MyFrame::OnPositionTopDropdown(wxRibbonToolBarEvent
& evt
)
631 menu
.Append(ID_POSITION_TOP
, wxT("Top with Labels"));
632 menu
.Append(ID_POSITION_TOP_ICONS
, wxT("Top with Icons"));
633 menu
.Append(ID_POSITION_TOP_BOTH
, wxT("Top with Both"));
634 evt
.PopupMenu(&menu
);
637 void MyFrame::OnPositionLeft(wxRibbonToolBarEvent
& evt
)
639 OnPositionLeftIcons(evt
);
642 void MyFrame::OnPositionLeftDropdown(wxRibbonToolBarEvent
& evt
)
645 menu
.Append(ID_POSITION_LEFT
, wxT("Left with Icons"));
646 menu
.Append(ID_POSITION_LEFT_LABELS
, wxT("Left with Labels"));
647 menu
.Append(ID_POSITION_LEFT_BOTH
, wxT("Left with Both"));
648 evt
.PopupMenu(&menu
);
651 void MyFrame::AddText(wxString msg
)
653 m_logwindow
->AppendText(msg
);
654 m_logwindow
->AppendText(wxT("\n"));
655 m_ribbon
->DismissExpandedPanel();
658 wxRibbonGalleryItem
* MyFrame::AddColourToGallery(wxRibbonGallery
*gallery
,
659 wxString colour
, wxMemoryDC
& dc
,
662 wxRibbonGalleryItem
* item
= NULL
;
664 if (colour
!= wxT("Default"))
665 c
= wxColour(colour
);
670 const int iWidth
= 64;
671 const int iHeight
= 40;
673 wxBitmap
bitmap(iWidth
, iHeight
);
674 dc
.SelectObject(bitmap
);
676 dc
.SetPen(*wxBLACK_PEN
);
678 dc
.DrawRectangle(0, 0, iWidth
, iHeight
);
680 colour
= colour
.Mid(0, 1) + colour
.Mid(1).Lower();
681 wxSize size
= dc
.GetTextExtent(colour
);
682 wxColour foreground
= wxColour(~c
.Red(), ~c
.Green(), ~c
.Blue());
683 if(abs(foreground
.Red() - c
.Red()) + abs(foreground
.Blue() - c
.Blue())
684 + abs(foreground
.Green() - c
.Green()) < 64)
686 // Foreground too similar to background - use a different
687 // strategy to find a contrasting colour
688 foreground
= wxColour((c
.Red() + 64) % 256, 255 - c
.Green(),
689 (c
.Blue() + 192) % 256);
691 dc
.SetTextForeground(foreground
);
692 dc
.DrawText(colour
, (iWidth
- size
.GetWidth() + 1) / 2,
693 (iHeight
- size
.GetHeight()) / 2);
694 dc
.SelectObjectAsSource(wxNullBitmap
);
696 item
= gallery
->Append(bitmap
, wxID_ANY
);
697 gallery
->SetItemClientObject(item
, new ColourClientData(colour
, c
));
702 void MyFrame::OnColourGalleryButton(wxCommandEvent
& evt
)
704 wxRibbonGallery
*gallery
= wxDynamicCast(evt
.GetEventObject(), wxRibbonGallery
);
708 m_ribbon
->DismissExpandedPanel();
709 if(gallery
->GetSelection())
710 m_colour_data
.SetColour(GetGalleryColour(gallery
, gallery
->GetSelection(), NULL
));
711 wxColourDialog
dlg(this, &m_colour_data
);
712 if(dlg
.ShowModal() == wxID_OK
)
714 m_colour_data
= dlg
.GetColourData();
715 wxColour clr
= m_colour_data
.GetColour();
717 // Try to find colour in gallery
718 wxRibbonGalleryItem
*item
= NULL
;
719 for(unsigned int i
= 0; i
< gallery
->GetCount(); ++i
)
721 item
= gallery
->GetItem(i
);
722 if(GetGalleryColour(gallery
, item
, NULL
) == clr
)
728 // Colour not in gallery - add it
731 item
= AddColourToGallery(gallery
,
732 clr
.GetAsString(wxC2S_HTML_SYNTAX
), m_bitmap_creation_dc
,
738 gallery
->EnsureVisible(item
);
739 gallery
->SetSelection(item
);
741 // Send an event to respond to the selection change
742 wxRibbonGalleryEvent
dummy(wxEVT_COMMAND_RIBBONGALLERY_SELECTED
, gallery
->GetId());
743 dummy
.SetEventObject(gallery
);
744 dummy
.SetGallery(gallery
);
745 dummy
.SetGalleryItem(item
);
746 ProcessWindowEvent(dummy
);
750 void MyFrame::OnDefaultProvider(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
752 m_ribbon
->DismissExpandedPanel();
753 SetArtProvider(new wxRibbonDefaultArtProvider
);
756 void MyFrame::OnAUIProvider(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
758 m_ribbon
->DismissExpandedPanel();
759 SetArtProvider(new wxRibbonAUIArtProvider
);
762 void MyFrame::OnMSWProvider(wxRibbonButtonBarEvent
& WXUNUSED(evt
))
764 m_ribbon
->DismissExpandedPanel();
765 SetArtProvider(new wxRibbonMSWArtProvider
);
768 void MyFrame::SetArtProvider(wxRibbonArtProvider
*prov
)
771 m_ribbon
->SetArtProvider(prov
);
773 prov
->GetColourScheme(&m_default_primary
, &m_default_secondary
,
774 &m_default_tertiary
);
775 PopulateColoursPanel(m_primary_gallery
->GetParent(), m_default_primary
,
777 PopulateColoursPanel(m_secondary_gallery
->GetParent(), m_default_secondary
,
778 ID_SECONDARY_COLOUR
);
782 GetSizer()->Layout();