ribbondemo.cpp 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Name: ribbondemo.cpp
  3. // Purpose: wxRibbon: Ribbon user interface - sample/test program
  4. // Author: Peter Cawley
  5. // Modified by:
  6. // Created: 2009-05-25
  7. // Copyright: (C) Copyright 2009, Peter Cawley
  8. // Licence: wxWindows Library Licence
  9. ///////////////////////////////////////////////////////////////////////////////
  10. #include "wx/wxprec.h"
  11. #ifdef __BORLANDC__
  12. #pragma hdrstop
  13. #endif
  14. #include "wx/app.h"
  15. #include "wx/frame.h"
  16. #include "wx/textctrl.h"
  17. #include "wx/ribbon/bar.h"
  18. #include "wx/ribbon/buttonbar.h"
  19. #include "wx/ribbon/gallery.h"
  20. #include "wx/ribbon/toolbar.h"
  21. #include "wx/sizer.h"
  22. #include "wx/menu.h"
  23. #include "wx/msgdlg.h"
  24. #include "wx/dcbuffer.h"
  25. #include "wx/colordlg.h"
  26. #include "wx/artprov.h"
  27. #include "wx/combobox.h"
  28. #include "wx/tglbtn.h"
  29. #include "wx/wrapsizer.h"
  30. // -- application --
  31. class MyApp : public wxApp
  32. {
  33. public:
  34. bool OnInit();
  35. };
  36. DECLARE_APP(MyApp)
  37. IMPLEMENT_APP(MyApp)
  38. // -- frame --
  39. class MyFrame : public wxFrame
  40. {
  41. public:
  42. MyFrame();
  43. ~MyFrame();
  44. enum
  45. {
  46. ID_CIRCLE = wxID_HIGHEST + 1,
  47. ID_CROSS,
  48. ID_TRIANGLE,
  49. ID_SQUARE,
  50. ID_POLYGON,
  51. ID_SELECTION_EXPAND_H,
  52. ID_SELECTION_EXPAND_V,
  53. ID_SELECTION_CONTRACT,
  54. ID_PRIMARY_COLOUR,
  55. ID_SECONDARY_COLOUR,
  56. ID_DEFAULT_PROVIDER,
  57. ID_AUI_PROVIDER,
  58. ID_MSW_PROVIDER,
  59. ID_MAIN_TOOLBAR,
  60. ID_POSITION_TOP,
  61. ID_POSITION_TOP_ICONS,
  62. ID_POSITION_TOP_BOTH,
  63. ID_POSITION_LEFT,
  64. ID_POSITION_LEFT_LABELS,
  65. ID_POSITION_LEFT_BOTH,
  66. ID_TOGGLE_PANELS,
  67. ID_ENABLE,
  68. ID_DISABLE,
  69. ID_DISABLED,
  70. ID_UI_ENABLE_UPDATED,
  71. ID_CHECK,
  72. ID_UI_CHECK_UPDATED,
  73. ID_CHANGE_TEXT1,
  74. ID_CHANGE_TEXT2,
  75. ID_UI_CHANGE_TEXT_UPDATED,
  76. ID_REMOVE_PAGE,
  77. ID_HIDE_PAGES,
  78. ID_SHOW_PAGES
  79. };
  80. void OnEnableUpdateUI(wxUpdateUIEvent& evt);
  81. void OnCheckUpdateUI(wxUpdateUIEvent& evt);
  82. void OnChangeTextUpdateUI(wxUpdateUIEvent& evt);
  83. void OnCheck(wxRibbonButtonBarEvent& evt);
  84. void OnEnable(wxRibbonButtonBarEvent& evt);
  85. void OnDisable(wxRibbonButtonBarEvent& evt);
  86. void OnDisabled(wxRibbonButtonBarEvent& evt);
  87. void OnEnableUpdated(wxRibbonButtonBarEvent& evt);
  88. void OnChangeText1(wxRibbonButtonBarEvent& evt);
  89. void OnChangeText2(wxRibbonButtonBarEvent& evt);
  90. void OnCircleButton(wxRibbonButtonBarEvent& evt);
  91. void OnCrossButton(wxRibbonButtonBarEvent& evt);
  92. void OnTriangleButton(wxRibbonButtonBarEvent& evt);
  93. void OnTriangleDropdown(wxRibbonButtonBarEvent& evt);
  94. void OnSquareButton(wxRibbonButtonBarEvent& evt);
  95. void OnPolygonDropdown(wxRibbonButtonBarEvent& evt);
  96. void OnSelectionExpandVButton(wxRibbonButtonBarEvent& evt);
  97. void OnSelectionExpandHButton(wxRibbonButtonBarEvent& evt);
  98. void OnSelectionContractButton(wxRibbonButtonBarEvent& evt);
  99. void OnHoveredColourChange(wxRibbonGalleryEvent& evt);
  100. void OnPrimaryColourSelect(wxRibbonGalleryEvent& evt);
  101. void OnSecondaryColourSelect(wxRibbonGalleryEvent& evt);
  102. void OnColourGalleryButton(wxCommandEvent& evt);
  103. void OnDefaultProvider(wxRibbonButtonBarEvent& evt);
  104. void OnAUIProvider(wxRibbonButtonBarEvent& evt);
  105. void OnMSWProvider(wxRibbonButtonBarEvent& evt);
  106. void OnJustify(wxRibbonToolBarEvent& evt);
  107. void OnJustifyUpdateUI(wxUpdateUIEvent& evt);
  108. void OnNew(wxRibbonToolBarEvent& evt);
  109. void OnNewDropdown(wxRibbonToolBarEvent& evt);
  110. void OnPrint(wxRibbonToolBarEvent& evt);
  111. void OnPrintDropdown(wxRibbonToolBarEvent& evt);
  112. void OnRedoDropdown(wxRibbonToolBarEvent& evt);
  113. void OnUndoDropdown(wxRibbonToolBarEvent& evt);
  114. void OnPositionTop(wxRibbonToolBarEvent& evt);
  115. void OnPositionTopLabels(wxCommandEvent& evt);
  116. void OnPositionTopIcons(wxCommandEvent& evt);
  117. void OnPositionTopBoth(wxCommandEvent& evt);
  118. void OnPositionTopDropdown(wxRibbonToolBarEvent& evt);
  119. void OnPositionLeft(wxRibbonToolBarEvent& evt);
  120. void OnPositionLeftLabels(wxCommandEvent& evt);
  121. void OnPositionLeftIcons(wxCommandEvent& evt);
  122. void OnPositionLeftBoth(wxCommandEvent& evt);
  123. void OnPositionLeftDropdown(wxRibbonToolBarEvent& evt);
  124. void OnRemovePage(wxRibbonButtonBarEvent& evt);
  125. void OnHidePages(wxRibbonButtonBarEvent& evt);
  126. void OnShowPages(wxRibbonButtonBarEvent& evt);
  127. void OnTogglePanels(wxCommandEvent& evt);
  128. void OnRibbonBarToggled(wxRibbonBarEvent& evt);
  129. void OnRibbonBarHelpClicked(wxRibbonBarEvent& evt);
  130. void OnSizeEvent(wxSizeEvent& evt);
  131. void OnExtButton(wxRibbonPanelEvent& evt);
  132. protected:
  133. wxRibbonGallery* PopulateColoursPanel(wxWindow* panel, wxColour def,
  134. int gallery_id);
  135. void AddText(wxString msg);
  136. wxRibbonGalleryItem* AddColourToGallery(wxRibbonGallery *gallery,
  137. wxString name, wxMemoryDC& dc, wxColour* value = NULL);
  138. wxColour GetGalleryColour(wxRibbonGallery *gallery,
  139. wxRibbonGalleryItem* item, wxString* name);
  140. void ResetGalleryArtProviders();
  141. void SetArtProvider(wxRibbonArtProvider* prov);
  142. void SetBarStyle(long style);
  143. wxRibbonBar* m_ribbon;
  144. wxRibbonGallery* m_primary_gallery;
  145. wxRibbonGallery* m_secondary_gallery;
  146. wxTextCtrl* m_logwindow;
  147. wxToggleButton* m_togglePanels;
  148. wxColourData m_colour_data;
  149. wxColour m_default_primary;
  150. wxColour m_default_secondary;
  151. wxColour m_default_tertiary;
  152. wxMemoryDC m_bitmap_creation_dc;
  153. bool m_bEnabled;
  154. bool m_bChecked;
  155. wxString m_new_text;
  156. wxDECLARE_EVENT_TABLE();
  157. };
  158. // -- implementations --
  159. bool MyApp::OnInit()
  160. {
  161. if(!wxApp::OnInit())
  162. return false;
  163. wxFrame* frame = new MyFrame;
  164. frame->Show();
  165. return true;
  166. }
  167. wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
  168. EVT_RIBBONBUTTONBAR_CLICKED(ID_ENABLE, MyFrame::OnEnable)
  169. EVT_RIBBONBUTTONBAR_CLICKED(ID_DISABLE, MyFrame::OnDisable)
  170. EVT_RIBBONBUTTONBAR_CLICKED(ID_DISABLED, MyFrame::OnDisabled)
  171. EVT_RIBBONBUTTONBAR_CLICKED(ID_UI_ENABLE_UPDATED, MyFrame::OnEnableUpdated)
  172. EVT_UPDATE_UI(ID_UI_ENABLE_UPDATED, MyFrame::OnEnableUpdateUI)
  173. EVT_RIBBONBUTTONBAR_CLICKED(ID_CHECK, MyFrame::OnCheck)
  174. EVT_UPDATE_UI(ID_UI_CHECK_UPDATED, MyFrame::OnCheckUpdateUI)
  175. EVT_RIBBONBUTTONBAR_CLICKED(ID_CHANGE_TEXT1, MyFrame::OnChangeText1)
  176. EVT_RIBBONBUTTONBAR_CLICKED(ID_CHANGE_TEXT2, MyFrame::OnChangeText2)
  177. EVT_UPDATE_UI(ID_UI_CHANGE_TEXT_UPDATED, MyFrame::OnChangeTextUpdateUI)
  178. EVT_RIBBONBUTTONBAR_CLICKED(ID_DEFAULT_PROVIDER, MyFrame::OnDefaultProvider)
  179. EVT_RIBBONBUTTONBAR_CLICKED(ID_AUI_PROVIDER, MyFrame::OnAUIProvider)
  180. EVT_RIBBONBUTTONBAR_CLICKED(ID_MSW_PROVIDER, MyFrame::OnMSWProvider)
  181. EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_EXPAND_H, MyFrame::OnSelectionExpandHButton)
  182. EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_EXPAND_V, MyFrame::OnSelectionExpandVButton)
  183. EVT_RIBBONBUTTONBAR_CLICKED(ID_SELECTION_CONTRACT, MyFrame::OnSelectionContractButton)
  184. EVT_RIBBONBUTTONBAR_CLICKED(ID_CIRCLE, MyFrame::OnCircleButton)
  185. EVT_RIBBONBUTTONBAR_CLICKED(ID_CROSS, MyFrame::OnCrossButton)
  186. EVT_RIBBONBUTTONBAR_CLICKED(ID_TRIANGLE, MyFrame::OnTriangleButton)
  187. EVT_RIBBONBUTTONBAR_CLICKED(ID_SQUARE, MyFrame::OnSquareButton)
  188. EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(ID_TRIANGLE, MyFrame::OnTriangleDropdown)
  189. EVT_RIBBONBUTTONBAR_DROPDOWN_CLICKED(ID_POLYGON, MyFrame::OnPolygonDropdown)
  190. EVT_RIBBONGALLERY_HOVER_CHANGED(ID_PRIMARY_COLOUR, MyFrame::OnHoveredColourChange)
  191. EVT_RIBBONGALLERY_HOVER_CHANGED(ID_SECONDARY_COLOUR, MyFrame::OnHoveredColourChange)
  192. EVT_RIBBONGALLERY_SELECTED(ID_PRIMARY_COLOUR, MyFrame::OnPrimaryColourSelect)
  193. EVT_RIBBONGALLERY_SELECTED(ID_SECONDARY_COLOUR, MyFrame::OnSecondaryColourSelect)
  194. EVT_RIBBONTOOLBAR_CLICKED(wxID_JUSTIFY_LEFT, MyFrame::OnJustify)
  195. EVT_RIBBONTOOLBAR_CLICKED(wxID_JUSTIFY_CENTER, MyFrame::OnJustify)
  196. EVT_RIBBONTOOLBAR_CLICKED(wxID_JUSTIFY_RIGHT, MyFrame::OnJustify)
  197. EVT_UPDATE_UI(wxID_JUSTIFY_LEFT, MyFrame::OnJustifyUpdateUI)
  198. EVT_UPDATE_UI(wxID_JUSTIFY_CENTER, MyFrame::OnJustifyUpdateUI)
  199. EVT_UPDATE_UI(wxID_JUSTIFY_RIGHT, MyFrame::OnJustifyUpdateUI)
  200. EVT_RIBBONTOOLBAR_CLICKED(wxID_NEW, MyFrame::OnNew)
  201. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_NEW, MyFrame::OnNewDropdown)
  202. EVT_RIBBONTOOLBAR_CLICKED(wxID_PRINT, MyFrame::OnPrint)
  203. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_PRINT, MyFrame::OnPrintDropdown)
  204. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_REDO, MyFrame::OnRedoDropdown)
  205. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(wxID_UNDO, MyFrame::OnUndoDropdown)
  206. EVT_RIBBONTOOLBAR_CLICKED(ID_POSITION_LEFT, MyFrame::OnPositionLeft)
  207. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(ID_POSITION_LEFT, MyFrame::OnPositionLeftDropdown)
  208. EVT_RIBBONTOOLBAR_CLICKED(ID_POSITION_TOP, MyFrame::OnPositionTop)
  209. EVT_RIBBONTOOLBAR_DROPDOWN_CLICKED(ID_POSITION_TOP, MyFrame::OnPositionTopDropdown)
  210. EVT_BUTTON(ID_PRIMARY_COLOUR, MyFrame::OnColourGalleryButton)
  211. EVT_BUTTON(ID_SECONDARY_COLOUR, MyFrame::OnColourGalleryButton)
  212. EVT_MENU(ID_POSITION_LEFT, MyFrame::OnPositionLeftIcons)
  213. EVT_MENU(ID_POSITION_LEFT_LABELS, MyFrame::OnPositionLeftLabels)
  214. EVT_MENU(ID_POSITION_LEFT_BOTH, MyFrame::OnPositionLeftBoth)
  215. EVT_MENU(ID_POSITION_TOP, MyFrame::OnPositionTopLabels)
  216. EVT_MENU(ID_POSITION_TOP_ICONS, MyFrame::OnPositionTopIcons)
  217. EVT_MENU(ID_POSITION_TOP_BOTH, MyFrame::OnPositionTopBoth)
  218. EVT_TOGGLEBUTTON(ID_TOGGLE_PANELS, MyFrame::OnTogglePanels)
  219. EVT_RIBBONPANEL_EXTBUTTON_ACTIVATED(wxID_ANY, MyFrame::OnExtButton)
  220. EVT_RIBBONBUTTONBAR_CLICKED(ID_REMOVE_PAGE, MyFrame::OnRemovePage)
  221. EVT_RIBBONBUTTONBAR_CLICKED(ID_HIDE_PAGES, MyFrame::OnHidePages)
  222. EVT_RIBBONBUTTONBAR_CLICKED(ID_SHOW_PAGES, MyFrame::OnShowPages)
  223. EVT_RIBBONBAR_TOGGLED(wxID_ANY, MyFrame::OnRibbonBarToggled)
  224. EVT_RIBBONBAR_HELP_CLICK(wxID_ANY, MyFrame::OnRibbonBarHelpClicked)
  225. EVT_SIZE(MyFrame::OnSizeEvent)
  226. wxEND_EVENT_TABLE()
  227. #include "align_center.xpm"
  228. #include "align_left.xpm"
  229. #include "align_right.xpm"
  230. #include "aui_style.xpm"
  231. #include "auto_crop_selection.xpm"
  232. #include "auto_crop_selection_small.xpm"
  233. #include "circle.xpm"
  234. #include "circle_small.xpm"
  235. #include "colours.xpm"
  236. #include "cross.xpm"
  237. #include "empty.xpm"
  238. #include "expand_selection_v.xpm"
  239. #include "expand_selection_h.xpm"
  240. #include "eye.xpm"
  241. #include "hexagon.xpm"
  242. #include "msw_style.xpm"
  243. #include "position_left_small.xpm"
  244. #include "position_top_small.xpm"
  245. #include "ribbon.xpm"
  246. #include "selection_panel.xpm"
  247. #include "square.xpm"
  248. #include "triangle.xpm"
  249. MyFrame::MyFrame()
  250. : wxFrame(NULL, wxID_ANY, wxT("wxRibbon Sample Application"), wxDefaultPosition, wxSize(800, 600), wxDEFAULT_FRAME_STYLE)
  251. {
  252. m_ribbon = new wxRibbonBar(this,-1,wxDefaultPosition, wxDefaultSize, wxRIBBON_BAR_FLOW_HORIZONTAL
  253. | wxRIBBON_BAR_SHOW_PAGE_LABELS
  254. | wxRIBBON_BAR_SHOW_PANEL_EXT_BUTTONS
  255. | wxRIBBON_BAR_SHOW_TOGGLE_BUTTON
  256. | wxRIBBON_BAR_SHOW_HELP_BUTTON
  257. );
  258. {
  259. wxRibbonPage* home = new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Examples"), ribbon_xpm);
  260. wxRibbonPanel *toolbar_panel = new wxRibbonPanel(home, wxID_ANY, wxT("Toolbar"),
  261. wxNullBitmap, wxDefaultPosition, wxDefaultSize,
  262. wxRIBBON_PANEL_NO_AUTO_MINIMISE |
  263. wxRIBBON_PANEL_EXT_BUTTON);
  264. wxRibbonToolBar *toolbar = new wxRibbonToolBar(toolbar_panel, ID_MAIN_TOOLBAR);
  265. toolbar->AddToggleTool(wxID_JUSTIFY_LEFT, align_left_xpm);
  266. toolbar->AddToggleTool(wxID_JUSTIFY_CENTER , align_center_xpm);
  267. toolbar->AddToggleTool(wxID_JUSTIFY_RIGHT, align_right_xpm);
  268. toolbar->AddSeparator();
  269. toolbar->AddHybridTool(wxID_NEW, wxArtProvider::GetBitmap(wxART_NEW, wxART_OTHER, wxSize(16, 15)));
  270. toolbar->AddTool(wxID_OPEN, wxArtProvider::GetBitmap(wxART_FILE_OPEN, wxART_OTHER, wxSize(16, 15)), "Open something");
  271. toolbar->AddTool(wxID_SAVE, wxArtProvider::GetBitmap(wxART_FILE_SAVE, wxART_OTHER, wxSize(16, 15)), "Save something");
  272. toolbar->AddTool(wxID_SAVEAS, wxArtProvider::GetBitmap(wxART_FILE_SAVE_AS, wxART_OTHER, wxSize(16, 15)), "Save something as ...");
  273. toolbar->EnableTool(wxID_OPEN, false);
  274. toolbar->EnableTool(wxID_SAVE, false);
  275. toolbar->EnableTool(wxID_SAVEAS, false);
  276. toolbar->AddSeparator();
  277. toolbar->AddDropdownTool(wxID_UNDO, wxArtProvider::GetBitmap(wxART_UNDO, wxART_OTHER, wxSize(16, 15)));
  278. toolbar->AddDropdownTool(wxID_REDO, wxArtProvider::GetBitmap(wxART_REDO, wxART_OTHER, wxSize(16, 15)));
  279. toolbar->AddSeparator();
  280. toolbar->AddTool(wxID_ANY, wxArtProvider::GetBitmap(wxART_REPORT_VIEW, wxART_OTHER, wxSize(16, 15)));
  281. toolbar->AddTool(wxID_ANY, wxArtProvider::GetBitmap(wxART_LIST_VIEW, wxART_OTHER, wxSize(16, 15)));
  282. toolbar->AddSeparator();
  283. toolbar->AddHybridTool(ID_POSITION_LEFT, position_left_xpm,
  284. "Align ribbonbar vertically\non the left\nfor demonstration purposes");
  285. toolbar->AddHybridTool(ID_POSITION_TOP, position_top_xpm,
  286. "Align the ribbonbar horizontally\nat the top\nfor demonstration purposes");
  287. toolbar->AddSeparator();
  288. toolbar->AddHybridTool(wxID_PRINT, wxArtProvider::GetBitmap(wxART_PRINT, wxART_OTHER, wxSize(16, 15)),
  289. "This is the Print button tooltip\ndemonstrating a tooltip");
  290. toolbar->SetRows(2, 3);
  291. wxRibbonPanel *selection_panel = new wxRibbonPanel(home, wxID_ANY, wxT("Selection"), wxBitmap(selection_panel_xpm));
  292. wxRibbonButtonBar *selection = new wxRibbonButtonBar(selection_panel);
  293. selection->AddButton(ID_SELECTION_EXPAND_V, wxT("Expand Vertically"), wxBitmap(expand_selection_v_xpm),
  294. "This is a tooltip for Expand Vertically\ndemonstrating a tooltip");
  295. selection->AddButton(ID_SELECTION_EXPAND_H, wxT("Expand Horizontally"), wxBitmap(expand_selection_h_xpm), wxEmptyString);
  296. selection->AddButton(ID_SELECTION_CONTRACT, wxT("Contract"), wxBitmap(auto_crop_selection_xpm), wxBitmap(auto_crop_selection_small_xpm));
  297. wxRibbonPanel *shapes_panel = new wxRibbonPanel(home, wxID_ANY, wxT("Shapes"), wxBitmap(circle_small_xpm));
  298. wxRibbonButtonBar *shapes = new wxRibbonButtonBar(shapes_panel);
  299. shapes->AddButton(ID_CIRCLE, wxT("Circle"), wxBitmap(circle_xpm), wxBitmap(circle_small_xpm),
  300. wxNullBitmap, wxNullBitmap, wxRIBBON_BUTTON_NORMAL,
  301. "This is a tooltip for the circle button\ndemonstrating another tooltip");
  302. shapes->AddButton(ID_CROSS, wxT("Cross"), wxBitmap(cross_xpm), wxEmptyString);
  303. shapes->AddHybridButton(ID_TRIANGLE, wxT("Triangle"), wxBitmap(triangle_xpm));
  304. shapes->AddButton(ID_SQUARE, wxT("Square"), wxBitmap(square_xpm), wxEmptyString);
  305. shapes->AddDropdownButton(ID_POLYGON, wxT("Other Polygon"), wxBitmap(hexagon_xpm), wxEmptyString);
  306. wxRibbonPanel *sizer_panel = new wxRibbonPanel(home, wxID_ANY, wxT("Panel with Sizer"),
  307. wxNullBitmap, wxDefaultPosition, wxDefaultSize,
  308. wxRIBBON_PANEL_DEFAULT_STYLE);
  309. wxArrayString as;
  310. as.Add("Item 1 using a box sizer now");
  311. as.Add("Item 2 using a box sizer now");
  312. wxComboBox* sizer_panelcombo = new wxComboBox(sizer_panel, wxID_ANY,
  313. wxEmptyString,
  314. wxDefaultPosition, wxDefaultSize,
  315. as, wxCB_READONLY);
  316. wxComboBox* sizer_panelcombo2 = new wxComboBox(sizer_panel, wxID_ANY,
  317. wxEmptyString,
  318. wxDefaultPosition, wxDefaultSize,
  319. as, wxCB_READONLY);
  320. sizer_panelcombo->Select(0);
  321. sizer_panelcombo2->Select(1);
  322. sizer_panelcombo->SetMinSize(wxSize(150, -1));
  323. sizer_panelcombo2->SetMinSize(wxSize(150, -1));
  324. //not using wxWrapSizer(wxHORIZONTAL) as it reports an incorrect min height
  325. wxSizer* sizer_panelsizer = new wxBoxSizer(wxVERTICAL);
  326. sizer_panelsizer->AddStretchSpacer(1);
  327. sizer_panelsizer->Add(sizer_panelcombo, 0, wxALL|wxEXPAND, 2);
  328. sizer_panelsizer->Add(sizer_panelcombo2, 0, wxALL|wxEXPAND, 2);
  329. sizer_panelsizer->AddStretchSpacer(1);
  330. sizer_panel->SetSizer(sizer_panelsizer);
  331. wxFont label_font(8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT);
  332. m_bitmap_creation_dc.SetFont(label_font);
  333. wxRibbonPage* scheme = new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Appearance"), eye_xpm);
  334. m_ribbon->GetArtProvider()->GetColourScheme(&m_default_primary,
  335. &m_default_secondary, &m_default_tertiary);
  336. wxRibbonPanel *provider_panel = new wxRibbonPanel(scheme, wxID_ANY,
  337. wxT("Art"), wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxRIBBON_PANEL_NO_AUTO_MINIMISE);
  338. wxRibbonButtonBar *provider_bar = new wxRibbonButtonBar(provider_panel, wxID_ANY);
  339. provider_bar->AddButton(ID_DEFAULT_PROVIDER, wxT("Default Provider"),
  340. wxArtProvider::GetBitmap(wxART_QUESTION, wxART_OTHER, wxSize(32, 32)));
  341. provider_bar->AddButton(ID_AUI_PROVIDER, wxT("AUI Provider"), aui_style_xpm);
  342. provider_bar->AddButton(ID_MSW_PROVIDER, wxT("MSW Provider"), msw_style_xpm);
  343. wxRibbonPanel *primary_panel = new wxRibbonPanel(scheme, wxID_ANY,
  344. wxT("Primary Colour"), colours_xpm);
  345. m_primary_gallery = PopulateColoursPanel(primary_panel,
  346. m_default_primary, ID_PRIMARY_COLOUR);
  347. wxRibbonPanel *secondary_panel = new wxRibbonPanel(scheme, wxID_ANY,
  348. wxT("Secondary Colour"), colours_xpm);
  349. m_secondary_gallery = PopulateColoursPanel(secondary_panel,
  350. m_default_secondary, ID_SECONDARY_COLOUR);
  351. }
  352. {
  353. wxRibbonPage* page = new wxRibbonPage(m_ribbon, wxID_ANY, wxT("UI Updated"), ribbon_xpm);
  354. wxRibbonPanel *panel = new wxRibbonPanel(page, wxID_ANY, wxT("Enable/Disable"), ribbon_xpm);
  355. wxRibbonButtonBar *bar = new wxRibbonButtonBar(panel, wxID_ANY);
  356. bar->AddButton(ID_DISABLED, wxT("Disabled"), ribbon_xpm);
  357. bar->AddButton(ID_ENABLE, wxT("Enable"), ribbon_xpm);
  358. bar->AddButton(ID_DISABLE, wxT("Disable"), ribbon_xpm);
  359. bar->AddButton(ID_UI_ENABLE_UPDATED, wxT("Enable UI updated"), ribbon_xpm);
  360. bar->EnableButton(ID_DISABLED, false);
  361. m_bEnabled = true;
  362. panel = new wxRibbonPanel(page, wxID_ANY, wxT("Toggle"), ribbon_xpm);
  363. bar = new wxRibbonButtonBar(panel, wxID_ANY);
  364. bar->AddButton(ID_CHECK, wxT("Toggle"), ribbon_xpm);
  365. bar->AddToggleButton(ID_UI_CHECK_UPDATED, wxT("Toggled UI updated"), ribbon_xpm);
  366. m_bChecked = true;
  367. panel = new wxRibbonPanel(page, wxID_ANY, wxT("Change text"), ribbon_xpm);
  368. bar = new wxRibbonButtonBar(panel, wxID_ANY);
  369. bar->AddButton(ID_CHANGE_TEXT1, wxT("One"), ribbon_xpm);
  370. bar->AddButton(ID_CHANGE_TEXT2, wxT("Two"), ribbon_xpm);
  371. bar->AddButton(ID_UI_CHANGE_TEXT_UPDATED, wxT("Zero"), ribbon_xpm);
  372. //Also set the general disabled text colour:
  373. wxRibbonArtProvider* artProvider = m_ribbon->GetArtProvider();
  374. wxColour tColour = artProvider->GetColor(wxRIBBON_ART_BUTTON_BAR_LABEL_COLOUR);
  375. artProvider->SetColor(wxRIBBON_ART_BUTTON_BAR_LABEL_DISABLED_COLOUR, tColour.MakeDisabled());
  376. }
  377. new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Empty Page"), empty_xpm);
  378. {
  379. wxRibbonPage* page = new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Another Page"), empty_xpm);
  380. wxRibbonPanel *panel = new wxRibbonPanel(page, wxID_ANY, wxT("Page manipulation"), ribbon_xpm);
  381. wxRibbonButtonBar *bar = new wxRibbonButtonBar(panel, wxID_ANY);
  382. bar->AddButton(ID_REMOVE_PAGE, wxT("Remove"), wxArtProvider::GetBitmap(wxART_DELETE, wxART_OTHER, wxSize(24, 24)));
  383. bar->AddButton(ID_HIDE_PAGES, wxT("Hide Pages"), ribbon_xpm);
  384. bar->AddButton(ID_SHOW_PAGES, wxT("Show Pages"), ribbon_xpm);
  385. }
  386. new wxRibbonPage(m_ribbon, wxID_ANY, wxT("Highlight Page"), empty_xpm);
  387. m_ribbon->AddPageHighlight(m_ribbon->GetPageCount()-1);
  388. m_ribbon->Realize();
  389. m_logwindow = new wxTextCtrl(this, wxID_ANY, wxEmptyString,
  390. wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY |
  391. wxTE_LEFT | wxTE_BESTWRAP | wxBORDER_NONE);
  392. m_togglePanels = new wxToggleButton(this, ID_TOGGLE_PANELS, "&Toggle panels");
  393. m_togglePanels->SetValue(true);
  394. wxSizer *s = new wxBoxSizer(wxVERTICAL);
  395. s->Add(m_ribbon, 0, wxEXPAND);
  396. s->Add(m_logwindow, 1, wxEXPAND);
  397. s->Add(m_togglePanels, wxSizerFlags().Border());
  398. SetSizer(s);
  399. }
  400. void MyFrame::SetBarStyle(long style)
  401. {
  402. m_ribbon->Freeze();
  403. m_ribbon->SetWindowStyleFlag(style);
  404. wxBoxSizer *pTopSize = reinterpret_cast<wxBoxSizer*>(GetSizer());
  405. wxRibbonToolBar *pToolbar = wxDynamicCast(FindWindow(ID_MAIN_TOOLBAR), wxRibbonToolBar);
  406. if(style & wxRIBBON_BAR_FLOW_VERTICAL)
  407. {
  408. m_ribbon->SetTabCtrlMargins(10, 10);
  409. pTopSize->SetOrientation(wxHORIZONTAL);
  410. if(pToolbar)
  411. pToolbar->SetRows(3, 5);
  412. }
  413. else
  414. {
  415. m_ribbon->SetTabCtrlMargins(50, 20);
  416. pTopSize->SetOrientation(wxVERTICAL);
  417. if(pToolbar)
  418. pToolbar->SetRows(2, 3);
  419. }
  420. m_ribbon->Realise();
  421. Layout();
  422. m_ribbon->Thaw();
  423. }
  424. MyFrame::~MyFrame()
  425. {
  426. }
  427. class ColourClientData : public wxClientData
  428. {
  429. public:
  430. ColourClientData(const wxString& name, const wxColour& colour)
  431. : m_name(name), m_colour(colour) {}
  432. const wxString& GetName() const {return m_name;}
  433. const wxColour& GetColour() const {return m_colour;}
  434. private:
  435. wxString m_name;
  436. wxColour m_colour;
  437. };
  438. wxRibbonGallery* MyFrame::PopulateColoursPanel(wxWindow* panel,
  439. wxColour def, int gallery_id)
  440. {
  441. wxRibbonGallery *gallery = wxDynamicCast(panel->FindWindow(gallery_id), wxRibbonGallery);
  442. if(gallery)
  443. gallery->Clear();
  444. else
  445. gallery = new wxRibbonGallery(panel, gallery_id);
  446. wxMemoryDC& dc = m_bitmap_creation_dc;
  447. wxRibbonGalleryItem *def_item =
  448. AddColourToGallery(gallery, wxT("Default"), dc, &def);
  449. gallery->SetSelection(def_item);
  450. AddColourToGallery(gallery, wxT("BLUE"), dc);
  451. AddColourToGallery(gallery, wxT("BLUE VIOLET"), dc);
  452. AddColourToGallery(gallery, wxT("BROWN"), dc);
  453. AddColourToGallery(gallery, wxT("CADET BLUE"), dc);
  454. AddColourToGallery(gallery, wxT("CORAL"), dc);
  455. AddColourToGallery(gallery, wxT("CYAN"), dc);
  456. AddColourToGallery(gallery, wxT("DARK GREEN"), dc);
  457. AddColourToGallery(gallery, wxT("DARK ORCHID"), dc);
  458. AddColourToGallery(gallery, wxT("FIREBRICK"), dc);
  459. AddColourToGallery(gallery, wxT("GOLD"), dc);
  460. AddColourToGallery(gallery, wxT("GOLDENROD"), dc);
  461. AddColourToGallery(gallery, wxT("GREEN"), dc);
  462. AddColourToGallery(gallery, wxT("INDIAN RED"), dc);
  463. AddColourToGallery(gallery, wxT("KHAKI"), dc);
  464. AddColourToGallery(gallery, wxT("LIGHT BLUE"), dc);
  465. AddColourToGallery(gallery, wxT("LIME GREEN"), dc);
  466. AddColourToGallery(gallery, wxT("MAGENTA"), dc);
  467. AddColourToGallery(gallery, wxT("MAROON"), dc);
  468. AddColourToGallery(gallery, wxT("NAVY"), dc);
  469. AddColourToGallery(gallery, wxT("ORANGE"), dc);
  470. AddColourToGallery(gallery, wxT("ORCHID"), dc);
  471. AddColourToGallery(gallery, wxT("PINK"), dc);
  472. AddColourToGallery(gallery, wxT("PLUM"), dc);
  473. AddColourToGallery(gallery, wxT("PURPLE"), dc);
  474. AddColourToGallery(gallery, wxT("RED"), dc);
  475. AddColourToGallery(gallery, wxT("SALMON"), dc);
  476. AddColourToGallery(gallery, wxT("SEA GREEN"), dc);
  477. AddColourToGallery(gallery, wxT("SIENNA"), dc);
  478. AddColourToGallery(gallery, wxT("SKY BLUE"), dc);
  479. AddColourToGallery(gallery, wxT("TAN"), dc);
  480. AddColourToGallery(gallery, wxT("THISTLE"), dc);
  481. AddColourToGallery(gallery, wxT("TURQUOISE"), dc);
  482. AddColourToGallery(gallery, wxT("VIOLET"), dc);
  483. AddColourToGallery(gallery, wxT("VIOLET RED"), dc);
  484. AddColourToGallery(gallery, wxT("WHEAT"), dc);
  485. AddColourToGallery(gallery, wxT("WHITE"), dc);
  486. AddColourToGallery(gallery, wxT("YELLOW"), dc);
  487. return gallery;
  488. }
  489. wxColour MyFrame::GetGalleryColour(wxRibbonGallery *gallery,
  490. wxRibbonGalleryItem* item, wxString* name)
  491. {
  492. ColourClientData *data = (ColourClientData*)gallery->GetItemClientObject(item);
  493. if(name != NULL)
  494. *name = data->GetName();
  495. return data->GetColour();
  496. }
  497. void MyFrame::OnHoveredColourChange(wxRibbonGalleryEvent& evt)
  498. {
  499. // Set the background of the gallery to the hovered colour, or back to the
  500. // default if there is no longer a hovered item.
  501. wxRibbonGallery *gallery = evt.GetGallery();
  502. wxRibbonArtProvider *provider = gallery->GetArtProvider();
  503. if(evt.GetGalleryItem() != NULL)
  504. {
  505. if(provider == m_ribbon->GetArtProvider())
  506. {
  507. provider = provider->Clone();
  508. gallery->SetArtProvider(provider);
  509. }
  510. provider->SetColour(wxRIBBON_ART_GALLERY_HOVER_BACKGROUND_COLOUR,
  511. GetGalleryColour(evt.GetGallery(), evt.GetGalleryItem(), NULL));
  512. }
  513. else
  514. {
  515. if(provider != m_ribbon->GetArtProvider())
  516. {
  517. gallery->SetArtProvider(m_ribbon->GetArtProvider());
  518. delete provider;
  519. }
  520. }
  521. }
  522. void MyFrame::OnPrimaryColourSelect(wxRibbonGalleryEvent& evt)
  523. {
  524. wxString name;
  525. wxColour colour = GetGalleryColour(evt.GetGallery(), evt.GetGalleryItem(), &name);
  526. AddText(wxT("Colour \"") + name + wxT("\" selected as primary."));
  527. wxColour secondary, tertiary;
  528. m_ribbon->GetArtProvider()->GetColourScheme(NULL, &secondary, &tertiary);
  529. m_ribbon->GetArtProvider()->SetColourScheme(colour, secondary, tertiary);
  530. ResetGalleryArtProviders();
  531. m_ribbon->Refresh();
  532. }
  533. void MyFrame::OnSecondaryColourSelect(wxRibbonGalleryEvent& evt)
  534. {
  535. wxString name;
  536. wxColour colour = GetGalleryColour(evt.GetGallery(), evt.GetGalleryItem(), &name);
  537. AddText(wxT("Colour \"") + name + wxT("\" selected as secondary."));
  538. wxColour primary, tertiary;
  539. m_ribbon->GetArtProvider()->GetColourScheme(&primary, NULL, &tertiary);
  540. m_ribbon->GetArtProvider()->SetColourScheme(primary, colour, tertiary);
  541. ResetGalleryArtProviders();
  542. m_ribbon->Refresh();
  543. }
  544. void MyFrame::ResetGalleryArtProviders()
  545. {
  546. if(m_primary_gallery->GetArtProvider() != m_ribbon->GetArtProvider())
  547. {
  548. delete m_primary_gallery->GetArtProvider();
  549. m_primary_gallery->SetArtProvider(m_ribbon->GetArtProvider());
  550. }
  551. if(m_secondary_gallery->GetArtProvider() != m_ribbon->GetArtProvider())
  552. {
  553. delete m_secondary_gallery->GetArtProvider();
  554. m_secondary_gallery->SetArtProvider(m_ribbon->GetArtProvider());
  555. }
  556. }
  557. void MyFrame::OnChangeText1(wxRibbonButtonBarEvent& WXUNUSED(evt))
  558. {
  559. m_new_text = wxT("One");
  560. }
  561. void MyFrame::OnChangeText2(wxRibbonButtonBarEvent& WXUNUSED(evt))
  562. {
  563. m_new_text = wxT("Two");
  564. }
  565. void MyFrame::OnEnable(wxRibbonButtonBarEvent& WXUNUSED(evt))
  566. {
  567. m_bEnabled = true;
  568. }
  569. void MyFrame::OnDisable(wxRibbonButtonBarEvent& WXUNUSED(evt))
  570. {
  571. m_bEnabled = false;
  572. }
  573. void MyFrame::OnDisabled(wxRibbonButtonBarEvent& WXUNUSED(evt))
  574. {
  575. AddText("ERROR: Disabled button activated (not supposed to happen)");
  576. }
  577. void MyFrame::OnEnableUpdated(wxRibbonButtonBarEvent& WXUNUSED(evt))
  578. {
  579. AddText("Button activated");
  580. }
  581. void MyFrame::OnCheck(wxRibbonButtonBarEvent& WXUNUSED(evt))
  582. {
  583. m_bChecked = !m_bChecked;
  584. }
  585. void MyFrame::OnEnableUpdateUI(wxUpdateUIEvent& evt)
  586. {
  587. evt.Enable(m_bEnabled);
  588. }
  589. void MyFrame::OnCheckUpdateUI(wxUpdateUIEvent& evt)
  590. {
  591. evt.Check(m_bChecked);
  592. }
  593. void MyFrame::OnChangeTextUpdateUI(wxUpdateUIEvent& evt)
  594. {
  595. if ( !m_new_text.IsEmpty() )
  596. {
  597. evt.SetText(m_new_text);
  598. m_new_text = wxT("");
  599. }
  600. }
  601. void MyFrame::OnSelectionExpandHButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  602. {
  603. AddText(wxT("Expand selection horizontally button clicked."));
  604. }
  605. void MyFrame::OnSelectionExpandVButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  606. {
  607. AddText(wxT("Expand selection vertically button clicked."));
  608. }
  609. void MyFrame::OnSelectionContractButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  610. {
  611. AddText(wxT("Contract selection button clicked."));
  612. }
  613. void MyFrame::OnCircleButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  614. {
  615. AddText(wxT("Circle button clicked."));
  616. }
  617. void MyFrame::OnCrossButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  618. {
  619. AddText(wxT("Cross button clicked."));
  620. }
  621. void MyFrame::OnTriangleButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  622. {
  623. AddText(wxT("Triangle button clicked."));
  624. }
  625. void MyFrame::OnTriangleDropdown(wxRibbonButtonBarEvent& evt)
  626. {
  627. wxMenu menu;
  628. menu.Append(wxID_ANY, wxT("Equilateral"));
  629. menu.Append(wxID_ANY, wxT("Isosceles"));
  630. menu.Append(wxID_ANY, wxT("Scalene"));
  631. evt.PopupMenu(&menu);
  632. }
  633. void MyFrame::OnSquareButton(wxRibbonButtonBarEvent& WXUNUSED(evt))
  634. {
  635. AddText(wxT("Square button clicked."));
  636. }
  637. void MyFrame::OnPolygonDropdown(wxRibbonButtonBarEvent& evt)
  638. {
  639. wxMenu menu;
  640. menu.Append(wxID_ANY, wxT("Pentagon (5 sided)"));
  641. menu.Append(wxID_ANY, wxT("Hexagon (6 sided)"));
  642. menu.Append(wxID_ANY, wxT("Heptagon (7 sided)"));
  643. menu.Append(wxID_ANY, wxT("Octogon (8 sided)"));
  644. menu.Append(wxID_ANY, wxT("Nonagon (9 sided)"));
  645. menu.Append(wxID_ANY, wxT("Decagon (10 sided)"));
  646. evt.PopupMenu(&menu);
  647. }
  648. void MyFrame::OnJustify(wxRibbonToolBarEvent& evt)
  649. {
  650. long style = m_logwindow->GetWindowStyle() &
  651. ~(wxTE_LEFT | wxTE_CENTER | wxTE_RIGHT);
  652. switch(evt.GetId())
  653. {
  654. case wxID_JUSTIFY_LEFT:
  655. m_logwindow->SetWindowStyle(style | wxTE_LEFT);
  656. break;
  657. case wxID_JUSTIFY_CENTER:
  658. m_logwindow->SetWindowStyle(style | wxTE_CENTER);
  659. break;
  660. case wxID_JUSTIFY_RIGHT:
  661. m_logwindow->SetWindowStyle(style | wxTE_RIGHT);
  662. break;
  663. }
  664. }
  665. void MyFrame::OnJustifyUpdateUI(wxUpdateUIEvent& evt)
  666. {
  667. switch(evt.GetId())
  668. {
  669. case wxID_JUSTIFY_LEFT:
  670. evt.Check(!m_logwindow->HasFlag(wxTE_CENTER | wxTE_RIGHT));
  671. break;
  672. case wxID_JUSTIFY_CENTER:
  673. evt.Check(m_logwindow->HasFlag(wxTE_CENTER));
  674. break;
  675. case wxID_JUSTIFY_RIGHT:
  676. evt.Check(m_logwindow->HasFlag(wxTE_RIGHT));
  677. break;
  678. }
  679. }
  680. void MyFrame::OnNew(wxRibbonToolBarEvent& WXUNUSED(evt))
  681. {
  682. AddText(wxT("New button clicked."));
  683. }
  684. void MyFrame::OnNewDropdown(wxRibbonToolBarEvent& evt)
  685. {
  686. wxMenu menu;
  687. menu.Append(wxID_ANY, wxT("New Document"));
  688. menu.Append(wxID_ANY, wxT("New Template"));
  689. menu.Append(wxID_ANY, wxT("New Mail"));
  690. evt.PopupMenu(&menu);
  691. }
  692. void MyFrame::OnPrint(wxRibbonToolBarEvent& WXUNUSED(evt))
  693. {
  694. AddText(wxT("Print button clicked."));
  695. }
  696. void MyFrame::OnPrintDropdown(wxRibbonToolBarEvent& evt)
  697. {
  698. wxMenu menu;
  699. menu.Append(wxID_ANY, wxT("Print"));
  700. menu.Append(wxID_ANY, wxT("Preview"));
  701. menu.Append(wxID_ANY, wxT("Options"));
  702. evt.PopupMenu(&menu);
  703. }
  704. void MyFrame::OnRedoDropdown(wxRibbonToolBarEvent& evt)
  705. {
  706. wxMenu menu;
  707. menu.Append(wxID_ANY, wxT("Redo E"));
  708. menu.Append(wxID_ANY, wxT("Redo F"));
  709. menu.Append(wxID_ANY, wxT("Redo G"));
  710. evt.PopupMenu(&menu);
  711. }
  712. void MyFrame::OnUndoDropdown(wxRibbonToolBarEvent& evt)
  713. {
  714. wxMenu menu;
  715. menu.Append(wxID_ANY, wxT("Undo C"));
  716. menu.Append(wxID_ANY, wxT("Undo B"));
  717. menu.Append(wxID_ANY, wxT("Undo A"));
  718. evt.PopupMenu(&menu);
  719. }
  720. void MyFrame::OnPositionTopLabels(wxCommandEvent& WXUNUSED(evt))
  721. {
  722. SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE);
  723. }
  724. void MyFrame::OnPositionTopIcons(wxCommandEvent& WXUNUSED(evt))
  725. {
  726. SetBarStyle((wxRIBBON_BAR_DEFAULT_STYLE &~wxRIBBON_BAR_SHOW_PAGE_LABELS)
  727. | wxRIBBON_BAR_SHOW_PAGE_ICONS);
  728. }
  729. void MyFrame::OnPositionTopBoth(wxCommandEvent& WXUNUSED(evt))
  730. {
  731. SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE | wxRIBBON_BAR_SHOW_PAGE_ICONS);
  732. }
  733. void MyFrame::OnPositionLeftLabels(wxCommandEvent& WXUNUSED(evt))
  734. {
  735. SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE | wxRIBBON_BAR_FLOW_VERTICAL);
  736. }
  737. void MyFrame::OnPositionLeftIcons(wxCommandEvent& WXUNUSED(evt))
  738. {
  739. SetBarStyle((wxRIBBON_BAR_DEFAULT_STYLE &~wxRIBBON_BAR_SHOW_PAGE_LABELS) |
  740. wxRIBBON_BAR_SHOW_PAGE_ICONS | wxRIBBON_BAR_FLOW_VERTICAL);
  741. }
  742. void MyFrame::OnPositionLeftBoth(wxCommandEvent& WXUNUSED(evt))
  743. {
  744. SetBarStyle(wxRIBBON_BAR_DEFAULT_STYLE | wxRIBBON_BAR_SHOW_PAGE_ICONS |
  745. wxRIBBON_BAR_FLOW_VERTICAL);
  746. }
  747. void MyFrame::OnPositionTop(wxRibbonToolBarEvent& evt)
  748. {
  749. OnPositionTopLabels(evt);
  750. }
  751. void MyFrame::OnPositionTopDropdown(wxRibbonToolBarEvent& evt)
  752. {
  753. wxMenu menu;
  754. menu.Append(ID_POSITION_TOP, wxT("Top with Labels"));
  755. menu.Append(ID_POSITION_TOP_ICONS, wxT("Top with Icons"));
  756. menu.Append(ID_POSITION_TOP_BOTH, wxT("Top with Both"));
  757. evt.PopupMenu(&menu);
  758. }
  759. void MyFrame::OnPositionLeft(wxRibbonToolBarEvent& evt)
  760. {
  761. OnPositionLeftIcons(evt);
  762. }
  763. void MyFrame::OnPositionLeftDropdown(wxRibbonToolBarEvent& evt)
  764. {
  765. wxMenu menu;
  766. menu.Append(ID_POSITION_LEFT, wxT("Left with Icons"));
  767. menu.Append(ID_POSITION_LEFT_LABELS, wxT("Left with Labels"));
  768. menu.Append(ID_POSITION_LEFT_BOTH, wxT("Left with Both"));
  769. evt.PopupMenu(&menu);
  770. }
  771. void MyFrame::OnTogglePanels(wxCommandEvent& WXUNUSED(evt))
  772. {
  773. m_ribbon->ShowPanels(m_togglePanels->GetValue());
  774. }
  775. void MyFrame::OnExtButton(wxRibbonPanelEvent& WXUNUSED(evt))
  776. {
  777. wxMessageBox("Extension button clicked");
  778. }
  779. void MyFrame::AddText(wxString msg)
  780. {
  781. m_logwindow->AppendText(msg);
  782. m_logwindow->AppendText(wxT("\n"));
  783. m_ribbon->DismissExpandedPanel();
  784. }
  785. wxRibbonGalleryItem* MyFrame::AddColourToGallery(wxRibbonGallery *gallery,
  786. wxString colour, wxMemoryDC& dc,
  787. wxColour* value)
  788. {
  789. wxRibbonGalleryItem* item = NULL;
  790. wxColour c;
  791. if (colour != wxT("Default"))
  792. c = wxColour(colour);
  793. if (!c.IsOk())
  794. c = *value;
  795. if(c.IsOk())
  796. {
  797. const int iWidth = 64;
  798. const int iHeight = 40;
  799. wxBitmap bitmap(iWidth, iHeight);
  800. dc.SelectObject(bitmap);
  801. wxBrush b(c);
  802. dc.SetPen(*wxBLACK_PEN);
  803. dc.SetBrush(b);
  804. dc.DrawRectangle(0, 0, iWidth, iHeight);
  805. colour = colour.Mid(0, 1) + colour.Mid(1).Lower();
  806. wxSize size = dc.GetTextExtent(colour);
  807. wxColour foreground = wxColour(~c.Red(), ~c.Green(), ~c.Blue());
  808. if(abs(foreground.Red() - c.Red()) + abs(foreground.Blue() - c.Blue())
  809. + abs(foreground.Green() - c.Green()) < 64)
  810. {
  811. // Foreground too similar to background - use a different
  812. // strategy to find a contrasting colour
  813. foreground = wxColour((c.Red() + 64) % 256, 255 - c.Green(),
  814. (c.Blue() + 192) % 256);
  815. }
  816. dc.SetTextForeground(foreground);
  817. dc.DrawText(colour, (iWidth - size.GetWidth() + 1) / 2,
  818. (iHeight - size.GetHeight()) / 2);
  819. dc.SelectObjectAsSource(wxNullBitmap);
  820. item = gallery->Append(bitmap, wxID_ANY);
  821. gallery->SetItemClientObject(item, new ColourClientData(colour, c));
  822. }
  823. return item;
  824. }
  825. void MyFrame::OnColourGalleryButton(wxCommandEvent& evt)
  826. {
  827. wxRibbonGallery *gallery = wxDynamicCast(evt.GetEventObject(), wxRibbonGallery);
  828. if(gallery == NULL)
  829. return;
  830. m_ribbon->DismissExpandedPanel();
  831. if(gallery->GetSelection())
  832. m_colour_data.SetColour(GetGalleryColour(gallery, gallery->GetSelection(), NULL));
  833. wxColourDialog dlg(this, &m_colour_data);
  834. if(dlg.ShowModal() == wxID_OK)
  835. {
  836. m_colour_data = dlg.GetColourData();
  837. wxColour clr = m_colour_data.GetColour();
  838. // Try to find colour in gallery
  839. wxRibbonGalleryItem *item = NULL;
  840. for(unsigned int i = 0; i < gallery->GetCount(); ++i)
  841. {
  842. item = gallery->GetItem(i);
  843. if(GetGalleryColour(gallery, item, NULL) == clr)
  844. break;
  845. else
  846. item = NULL;
  847. }
  848. // Colour not in gallery - add it
  849. if(item == NULL)
  850. {
  851. item = AddColourToGallery(gallery,
  852. clr.GetAsString(wxC2S_HTML_SYNTAX), m_bitmap_creation_dc,
  853. &clr);
  854. gallery->Realise();
  855. }
  856. // Set selection
  857. gallery->EnsureVisible(item);
  858. gallery->SetSelection(item);
  859. // Send an event to respond to the selection change
  860. wxRibbonGalleryEvent dummy(wxEVT_RIBBONGALLERY_SELECTED, gallery->GetId());
  861. dummy.SetEventObject(gallery);
  862. dummy.SetGallery(gallery);
  863. dummy.SetGalleryItem(item);
  864. ProcessWindowEvent(dummy);
  865. }
  866. }
  867. void MyFrame::OnDefaultProvider(wxRibbonButtonBarEvent& WXUNUSED(evt))
  868. {
  869. m_ribbon->DismissExpandedPanel();
  870. SetArtProvider(new wxRibbonDefaultArtProvider);
  871. }
  872. void MyFrame::OnAUIProvider(wxRibbonButtonBarEvent& WXUNUSED(evt))
  873. {
  874. m_ribbon->DismissExpandedPanel();
  875. SetArtProvider(new wxRibbonAUIArtProvider);
  876. }
  877. void MyFrame::OnMSWProvider(wxRibbonButtonBarEvent& WXUNUSED(evt))
  878. {
  879. m_ribbon->DismissExpandedPanel();
  880. SetArtProvider(new wxRibbonMSWArtProvider);
  881. }
  882. void MyFrame::SetArtProvider(wxRibbonArtProvider *prov)
  883. {
  884. m_ribbon->Freeze();
  885. m_ribbon->SetArtProvider(prov);
  886. prov->GetColourScheme(&m_default_primary, &m_default_secondary,
  887. &m_default_tertiary);
  888. PopulateColoursPanel(m_primary_gallery->GetParent(), m_default_primary,
  889. ID_PRIMARY_COLOUR);
  890. PopulateColoursPanel(m_secondary_gallery->GetParent(), m_default_secondary,
  891. ID_SECONDARY_COLOUR);
  892. m_ribbon->Realize();
  893. m_ribbon->Thaw();
  894. GetSizer()->Layout();
  895. }
  896. void MyFrame::OnRemovePage(wxRibbonButtonBarEvent& WXUNUSED(evt))
  897. {
  898. size_t n = m_ribbon->GetPageCount();
  899. if(n > 0)
  900. {
  901. m_ribbon->DeletePage(n-1);
  902. m_ribbon->Realize();
  903. }
  904. }
  905. void MyFrame::OnHidePages(wxRibbonButtonBarEvent& WXUNUSED(evt))
  906. {
  907. m_ribbon->HidePage(1);
  908. m_ribbon->HidePage(2);
  909. m_ribbon->HidePage(3);
  910. m_ribbon->Realize();
  911. }
  912. void MyFrame::OnShowPages(wxRibbonButtonBarEvent& WXUNUSED(evt))
  913. {
  914. m_ribbon->ShowPage(1);
  915. m_ribbon->ShowPage(2);
  916. m_ribbon->ShowPage(3);
  917. m_ribbon->Realize();
  918. }
  919. void MyFrame::OnRibbonBarToggled(wxRibbonBarEvent& WXUNUSED(evt))
  920. {
  921. AddText(wxString::Format("Ribbon bar %s.",
  922. m_ribbon->ArePanelsShown()
  923. ? "expanded"
  924. : "collapsed"));
  925. }
  926. void MyFrame::OnRibbonBarHelpClicked(wxRibbonBarEvent& WXUNUSED(evt))
  927. {
  928. AddText("Ribbon bar help clicked");
  929. }
  930. // This shows how to hide ribbon dynamically if there is not enough space.
  931. void MyFrame::OnSizeEvent(wxSizeEvent& evt)
  932. {
  933. if ( evt.GetSize().GetWidth() < 200 )
  934. m_ribbon->Hide();
  935. else
  936. m_ribbon->Show();
  937. evt.Skip();
  938. }