wxruby3 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  5. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  6. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  7. data/ext/wxruby3/swig/custom/director.swg +8 -0
  8. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  9. data/lib/wx/core/bitmap_combobox.rb +17 -21
  10. data/lib/wx/core/combobox.rb +13 -3
  11. data/lib/wx/core/controlwithitems.rb +40 -130
  12. data/lib/wx/core/enum.rb +17 -1
  13. data/lib/wx/core/event.rb +6 -1
  14. data/lib/wx/core/evthandler.rb +8 -2
  15. data/lib/wx/core/generic_validator.rb +312 -0
  16. data/lib/wx/core/listbox.rb +2 -2
  17. data/lib/wx/core/log.rb +1 -1
  18. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  19. data/lib/wx/core/size.rb +4 -0
  20. data/lib/wx/core/sizer.rb +1 -2
  21. data/lib/wx/core/standard_paths.rb +22 -0
  22. data/lib/wx/core/text_entry.rb +4 -1
  23. data/lib/wx/core/validator.rb +70 -5
  24. data/lib/wx/core/window.rb +3 -7
  25. data/lib/wx/doc/art_locator.rb +1 -0
  26. data/lib/wx/doc/comboctrl.rb +18 -0
  27. data/lib/wx/doc/controlwithitems.rb +16 -0
  28. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  29. data/lib/wx/doc/editable_listbox.rb +44 -0
  30. data/lib/wx/doc/enum.rb +15 -0
  31. data/lib/wx/doc/event.rb +12 -0
  32. data/lib/wx/doc/extra/12_client_data.md +89 -0
  33. data/lib/wx/doc/extra/13_validators.md +139 -0
  34. data/lib/wx/doc/gdi_common.rb +4 -0
  35. data/lib/wx/doc/generic_validator.rb +95 -0
  36. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  37. data/lib/wx/doc/num_validator.rb +387 -0
  38. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  39. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  40. data/lib/wx/doc/static_bitmap.rb +25 -0
  41. data/lib/wx/doc/text_validator.rb +10 -0
  42. data/lib/wx/doc/validator.rb +113 -0
  43. data/lib/wx/doc/window.rb +30 -0
  44. data/lib/wx/html/simple_html_listbox.rb +24 -91
  45. data/lib/wx/keyword_defs.rb +34 -2
  46. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  47. data/lib/wx/version.rb +1 -1
  48. data/rakelib/lib/config/mingw.rb +12 -0
  49. data/rakelib/lib/core/include/client_data.inc +65 -0
  50. data/rakelib/lib/core/include/funcall.inc +1 -1
  51. data/rakelib/lib/core/package.rb +17 -2
  52. data/rakelib/lib/core/parameter.rb +1 -1
  53. data/rakelib/lib/core/spec_helper.rb +7 -1
  54. data/rakelib/lib/director/app.rb +18 -0
  55. data/rakelib/lib/director/app_traits.rb +3 -1
  56. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  57. data/rakelib/lib/director/combobox.rb +22 -0
  58. data/rakelib/lib/director/comboctrl.rb +1 -55
  59. data/rakelib/lib/director/ctrl_with_items.rb +88 -21
  60. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  61. data/rakelib/lib/director/editable_listbox.rb +30 -0
  62. data/rakelib/lib/director/event.rb +102 -12
  63. data/rakelib/lib/director/event_handler.rb +3 -2
  64. data/rakelib/lib/director/functions.rb +4 -2
  65. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  66. data/rakelib/lib/director/grid_cell_attr.rb +0 -2
  67. data/rakelib/lib/director/grid_cell_editor.rb +0 -2
  68. data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
  69. data/rakelib/lib/director/header_ctrl.rb +6 -1
  70. data/rakelib/lib/director/html_listbox.rb +96 -22
  71. data/rakelib/lib/director/num_validator.rb +495 -0
  72. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  73. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  74. data/rakelib/lib/director/pgproperty.rb +3 -29
  75. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  76. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  77. data/rakelib/lib/director/sizer.rb +15 -4
  78. data/rakelib/lib/director/sizer_item.rb +13 -0
  79. data/rakelib/lib/director/static_bitmap.rb +28 -0
  80. data/rakelib/lib/director/text_entry.rb +4 -0
  81. data/rakelib/lib/director/text_validator.rb +124 -13
  82. data/rakelib/lib/director/toggle_button.rb +1 -0
  83. data/rakelib/lib/director/top_level_window.rb +0 -2
  84. data/rakelib/lib/director/tree_ctrl.rb +35 -0
  85. data/rakelib/lib/director/utils.rb +16 -2
  86. data/rakelib/lib/director/validator.rb +196 -21
  87. data/rakelib/lib/director/window.rb +16 -2
  88. data/rakelib/lib/extractor/function.rb +2 -1
  89. data/rakelib/lib/generate/analyzer.rb +1 -1
  90. data/rakelib/lib/generate/doc.rb +10 -4
  91. data/rakelib/lib/specs/interfaces.rb +2 -0
  92. data/rakelib/lib/swig_runner.rb +55 -9
  93. data/rakelib/lib/typemap/client_data.rb +67 -0
  94. data/rakelib/lib/typemap/common.rb +3 -3
  95. data/rakelib/lib/typemap/datetime.rb +1 -1
  96. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  97. data/samples/aui/aui.rb +1237 -1233
  98. data/samples/calendar/calendar.rb +293 -289
  99. data/samples/controls/get_item_sample.rb +83 -79
  100. data/samples/controls/htlbox.rb +331 -327
  101. data/samples/dialogs/dialogs.rb +682 -694
  102. data/samples/dialogs/wizard.rb +52 -55
  103. data/samples/dragdrop/dragdrop.rb +146 -142
  104. data/samples/drawing/bitmap.rb +29 -26
  105. data/samples/drawing/bitmap_image.rb +84 -80
  106. data/samples/drawing/graphics_drawing.rb +209 -205
  107. data/samples/drawing/image_prt.rb +344 -340
  108. data/samples/drawing/maths_images.rb +18 -1
  109. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  110. data/samples/etc/caret.rb +306 -0
  111. data/samples/etc/miniframe.rb +65 -60
  112. data/samples/etc/sash.rb +109 -105
  113. data/samples/etc/scrollwin.rb +86 -80
  114. data/samples/etc/system_settings.rb +216 -209
  115. data/samples/event/activation.rb +72 -67
  116. data/samples/event/event.rb +160 -153
  117. data/samples/event/threaded.rb +8 -1
  118. data/samples/event/update_ui_event.rb +67 -60
  119. data/samples/grid/grid.rb +188 -181
  120. data/samples/grid/gridtablebase.rb +136 -129
  121. data/samples/html/html.rb +208 -204
  122. data/samples/mdi/mdi.rb +59 -54
  123. data/samples/minimal/minimal.rb +54 -51
  124. data/samples/minimal/nothing.rb +1 -0
  125. data/samples/printing/printing.rb +367 -377
  126. data/samples/printing/printing2.rb +203 -198
  127. data/samples/propgrid/propgrid.rb +2312 -2308
  128. data/samples/propgrid/propgrid_minimal.rb +57 -50
  129. data/samples/ribbon/ribbon.rb +780 -774
  130. data/samples/sampler/ext.rb +0 -33
  131. data/samples/sampler/sample.rb +4 -9
  132. data/samples/sampler.rb +1 -1
  133. data/samples/splash/splash.rb +118 -116
  134. data/samples/text/rich_textctrl.rb +207 -201
  135. data/samples/text/richtext.rb +1409 -1405
  136. data/samples/text/scintilla.rb +137 -128
  137. data/samples/text/textctrl.rb +89 -83
  138. data/samples/text/unicode.rb +175 -168
  139. data/samples/treectrl/treectrl.rb +1430 -1426
  140. data/samples/widgets/activityindicator.rb +95 -0
  141. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  142. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  143. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  144. data/samples/widgets/art/widgets/button.xpm +54 -0
  145. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  146. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  147. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  148. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  149. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  150. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  151. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  152. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  153. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  154. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  155. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  156. data/samples/widgets/art/widgets/header.xpm +54 -0
  157. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  158. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  159. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  160. data/samples/widgets/art/widgets/native.xpm +81 -0
  161. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  162. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  163. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  164. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  165. data/samples/widgets/art/widgets/slider.xpm +54 -0
  166. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  167. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  168. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  169. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  170. data/samples/widgets/art/widgets/text.xpm +54 -0
  171. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  172. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  173. data/samples/widgets/art/widgets/toucan.png +0 -0
  174. data/samples/widgets/bmpcombobox.rb +651 -0
  175. data/samples/widgets/button.rb +462 -0
  176. data/samples/widgets/checkbox.rb +211 -0
  177. data/samples/widgets/choice.rb +287 -0
  178. data/samples/widgets/clrpicker.rb +156 -0
  179. data/samples/widgets/combobox.rb +516 -0
  180. data/samples/widgets/datepick.rb +215 -0
  181. data/samples/widgets/dirctrl.rb +265 -0
  182. data/samples/widgets/dirpicker.rb +158 -0
  183. data/samples/widgets/editlbox.rb +122 -0
  184. data/samples/widgets/filectrl.rb +216 -0
  185. data/samples/widgets/filepicker.rb +214 -0
  186. data/samples/widgets/fontpicker.rb +135 -0
  187. data/samples/widgets/gauge.rb +311 -0
  188. data/samples/widgets/headerctrl.rb +236 -0
  189. data/samples/widgets/hyperlink.rb +203 -0
  190. data/samples/widgets/itemcontainer.rb +185 -0
  191. data/samples/widgets/listbox.rb +473 -0
  192. data/samples/widgets/notebook.rb +488 -0
  193. data/samples/widgets/odcombobox.rb +608 -0
  194. data/samples/widgets/radiobox.rb +328 -0
  195. data/samples/widgets/searchctrl.rb +159 -0
  196. data/samples/widgets/slider.rb +594 -0
  197. data/samples/widgets/spinbtn.rb +443 -0
  198. data/samples/widgets/statbmp.rb +130 -0
  199. data/samples/widgets/static.rb +436 -0
  200. data/samples/widgets/textctrl.rb +700 -0
  201. data/samples/widgets/timepick.rb +148 -0
  202. data/samples/widgets/tn_widgets.png +0 -0
  203. data/samples/widgets/toggle.rb +385 -0
  204. data/samples/widgets/widgets.rb +1233 -0
  205. data/samples/xrc/custom_xrc_sample.rb +47 -41
  206. data/samples/xrc/xrc_sample.rb +53 -47
  207. data/tests/test_event_handling.rb +52 -34
  208. data/tests/test_events.rb +7 -0
  209. data/tests/test_item_data.rb +24 -0
  210. data/tests/test_sizer.rb +44 -1
  211. data/tests/test_validators.rb +805 -0
  212. metadata +92 -138
  213. data/lib/wx/core/choice.rb +0 -14
  214. data/lib/wx/core/combo_ctrl.rb +0 -110
  215. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  216. data/samples/bigdemo/About.rbw +0 -39
  217. data/samples/bigdemo/ColorPanel.rbw +0 -23
  218. data/samples/bigdemo/GridSimple.rbw +0 -78
  219. data/samples/bigdemo/MDIDemo.rbw +0 -57
  220. data/samples/bigdemo/PopupMenu.rbw +0 -146
  221. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  222. data/samples/bigdemo/Sizers.rbw +0 -541
  223. data/samples/bigdemo/bigdemo.rb +0 -817
  224. data/samples/bigdemo/demoTemplate.rbw +0 -33
  225. data/samples/bigdemo/helpfile.htb +0 -0
  226. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  227. data/samples/bigdemo/icons/Test 015.png +0 -0
  228. data/samples/bigdemo/icons/choice.bmp +0 -0
  229. data/samples/bigdemo/icons/combo.bmp +0 -0
  230. data/samples/bigdemo/icons/combo.xpm +0 -27
  231. data/samples/bigdemo/icons/copy.xpm +0 -25
  232. data/samples/bigdemo/icons/cut.xpm +0 -24
  233. data/samples/bigdemo/icons/gauge.bmp +0 -0
  234. data/samples/bigdemo/icons/gauge.xpm +0 -27
  235. data/samples/bigdemo/icons/help.xpm +0 -25
  236. data/samples/bigdemo/icons/list.bmp +0 -0
  237. data/samples/bigdemo/icons/list.xpm +0 -27
  238. data/samples/bigdemo/icons/mondrian.ico +0 -0
  239. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  240. data/samples/bigdemo/icons/new.xpm +0 -24
  241. data/samples/bigdemo/icons/ogl.ico +0 -0
  242. data/samples/bigdemo/icons/ogl.xpm +0 -45
  243. data/samples/bigdemo/icons/open.xpm +0 -26
  244. data/samples/bigdemo/icons/paste.bmp +0 -0
  245. data/samples/bigdemo/icons/paste.xpm +0 -38
  246. data/samples/bigdemo/icons/pointy.png +0 -0
  247. data/samples/bigdemo/icons/preview.xpm +0 -26
  248. data/samples/bigdemo/icons/print.xpm +0 -26
  249. data/samples/bigdemo/icons/radio.bmp +0 -0
  250. data/samples/bigdemo/icons/radio.xpm +0 -27
  251. data/samples/bigdemo/icons/robert.xpm +0 -415
  252. data/samples/bigdemo/icons/sashtest.ico +0 -0
  253. data/samples/bigdemo/icons/save.xpm +0 -25
  254. data/samples/bigdemo/icons/smiles.bmp +0 -0
  255. data/samples/bigdemo/icons/smiles.xpm +0 -39
  256. data/samples/bigdemo/icons/smiley.ico +0 -0
  257. data/samples/bigdemo/icons/smiley.xpm +0 -42
  258. data/samples/bigdemo/icons/stattext.xpm +0 -24
  259. data/samples/bigdemo/icons/test2.bmp +0 -0
  260. data/samples/bigdemo/icons/test2.png +0 -0
  261. data/samples/bigdemo/icons/test2.xpm +0 -79
  262. data/samples/bigdemo/icons/text.bmp +0 -0
  263. data/samples/bigdemo/icons/text.xpm +0 -27
  264. data/samples/bigdemo/icons/tog1.bmp +0 -0
  265. data/samples/bigdemo/icons/tog1.xpm +0 -38
  266. data/samples/bigdemo/icons/tog2.bmp +0 -0
  267. data/samples/bigdemo/icons/tog2.xpm +0 -38
  268. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  269. data/samples/bigdemo/icons/wxwin.ico +0 -0
  270. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  271. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  272. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  273. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  274. data/samples/bigdemo/run.rb +0 -98
  275. data/samples/bigdemo/tips.txt +0 -7
  276. data/samples/bigdemo/utils.rb +0 -20
  277. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  278. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  279. data/samples/bigdemo/wxButton.rbw +0 -64
  280. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  281. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  282. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  283. data/samples/bigdemo/wxChoice.rbw +0 -47
  284. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  285. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  286. data/samples/bigdemo/wxComboBox.rbw +0 -77
  287. data/samples/bigdemo/wxCursor.rbw +0 -136
  288. data/samples/bigdemo/wxDialog.rbw +0 -74
  289. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  290. data/samples/bigdemo/wxDragImage.rbw +0 -70
  291. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  292. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  293. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  294. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  295. data/samples/bigdemo/wxFrame.rbw +0 -53
  296. data/samples/bigdemo/wxGauge.rbw +0 -65
  297. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  298. data/samples/bigdemo/wxGrid.rbw +0 -66
  299. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  300. data/samples/bigdemo/wxListBox.rbw +0 -140
  301. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  302. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  303. data/samples/bigdemo/wxMenu.rbw +0 -247
  304. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  305. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  306. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  307. data/samples/bigdemo/wxNotebook.rbw +0 -136
  308. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  309. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  310. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  311. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  312. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  313. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  314. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  315. data/samples/bigdemo/wxSlider.rbw +0 -42
  316. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  317. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  318. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  319. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  320. data/samples/bigdemo/wxStaticText.rbw +0 -55
  321. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  322. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  323. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  324. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  325. data/samples/bigdemo/wxToolBar.rbw +0 -131
  326. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  327. data/samples/caret/caret.rb +0 -298
  328. data/samples/caret/mondrian.xpm +0 -44
  329. data/samples/controls/books.rb +0 -189
  330. data/samples/controls/choice.xpm +0 -27
  331. data/samples/controls/combo.xpm +0 -27
  332. data/samples/controls/controls.rb +0 -1099
  333. data/samples/controls/gauge.xpm +0 -27
  334. data/samples/controls/list.xpm +0 -27
  335. data/samples/controls/mondrian.ico +0 -0
  336. data/samples/controls/mondrian.xpm +0 -44
  337. data/samples/controls/radio.xpm +0 -27
  338. data/samples/controls/stattext.xpm +0 -24
  339. data/samples/controls/test2.bmp +0 -0
  340. data/samples/controls/text.xpm +0 -27
  341. data/samples/controls/tn_books.png +0 -0
  342. data/samples/controls/tn_controls.png +0 -0
  343. data/samples/etc/choice.rb +0 -87
  344. data/samples/etc/tn_choice.png +0 -0
  345. data/samples/text/mondrian.ico +0 -0
  346. data/samples/text/mondrian.xpm +0 -44
  347. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -1,1099 +0,0 @@
1
- # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
- #
3
- # This software is released under the MIT license.
4
- #
5
- # Some parts are
6
- # Copyright 2004-2007, wxRuby development team
7
- # released under the MIT-like wxRuby2 license
8
-
9
- # Adapted for wxRuby3
10
- ###
11
-
12
- require 'wx'
13
-
14
- include Wx
15
-
16
- CONTROLS_QUIT = ID_EXIT
17
- CONTROLS_TEXT = 101
18
- CONTROLS_ABOUT = ID_ABOUT
19
- CONTROLS_CLEAR_LOG = 103
20
- # tooltip menu
21
- CONTROLS_SET_TOOLTIP_DELAY = 200
22
- CONTROLS_ENABLE_TOOLTIPS = 201
23
- # panel menu
24
- CONTROLS_ENABLE_ALL = 202
25
-
26
-
27
- ID_NOTEBOOK = 1000
28
-
29
- ID_LISTBOX = 130
30
- ID_LISTBOX_SEL_NUM = 131
31
- ID_LISTBOX_SEL_STR = 132
32
- ID_LISTBOX_CLEAR = 133
33
- ID_LISTBOX_APPEND = 134
34
- ID_LISTBOX_DELETE = 135
35
- ID_LISTBOX_FONT = 136
36
- ID_LISTBOX_ENABLE = 137
37
- ID_LISTBOX_SORTED = 138
38
-
39
- ID_CHOICE = 120
40
- ID_CHOICE_SEL_NUM = 121
41
- ID_CHOICE_SEL_STR = 122
42
- ID_CHOICE_CLEAR = 123
43
- ID_CHOICE_APPEND = 124
44
- ID_CHOICE_DELETE = 125
45
- ID_CHOICE_FONT = 126
46
- ID_CHOICE_ENABLE = 127
47
- ID_CHOICE_SORTED = 128
48
-
49
- ID_COMBO = 140
50
- ID_COMBO_SEL_NUM = 141
51
- ID_COMBO_SEL_STR = 142
52
- ID_COMBO_CLEAR = 143
53
- ID_COMBO_APPEND = 144
54
- ID_COMBO_DELETE = 145
55
- ID_COMBO_FONT = 146
56
- ID_COMBO_ENABLE = 147
57
-
58
- ID_RADIOBOX = 160
59
- ID_RADIOBOX_SEL_NUM = 161
60
- ID_RADIOBOX_SEL_STR = 162
61
- ID_RADIOBOX_FONT = 163
62
- ID_RADIOBOX_ENABLE = 164
63
-
64
- ID_RADIOBUTTON_1 = 166
65
- ID_RADIOBUTTON_2 = 167
66
-
67
- ID_SET_FONT = 170
68
-
69
- ID_GAUGE = 180
70
- ID_SLIDER = 181
71
-
72
- ID_SPIN = 182
73
- ID_BTNPROGRESS = 183
74
- ID_BUTTON_LABEL = 184
75
- ID_SPINCTRL = 185
76
-
77
- ID_BUTTON_TEST1 = 190
78
- ID_BUTTON_TEST2 = 191
79
- ID_BITMAP_BTN = 192
80
-
81
- ID_CHANGE_COLOUR = 200
82
-
83
- ID_SIZER_CHECK1 = 201
84
- ID_SIZER_CHECK2 = 202
85
- ID_SIZER_CHECK3 = 203
86
- ID_SIZER_CHECK4 = 204
87
- ID_SIZER_CHECK14 = 205
88
- ID_SIZER_CHECKBIG = 206
89
-
90
- Image_List, Image_Choice, Image_Combo, Image_Text, Image_Radio, Image_Gauge, Image_Max = (0..6).to_a
91
-
92
-
93
- # a button which intercepts double clicks (for testing...)
94
- class MyButton < Button
95
- def initialize(parent,id,label = EmptyString,pos = DEFAULT_POSITION,size = DEFAULT_SIZE)
96
- super(parent,id,label,pos,size)
97
-
98
- evt_left_dclick {|event| onDClick(event)}
99
- end
100
-
101
- def onDClick(event)
102
- log_message("MyButton::OnDClick")
103
- event.skip()
104
- end
105
-
106
- end
107
-
108
- # a combo which intercepts chars (to test Windows behaviour)
109
- class MyComboBox < ComboBox
110
- def initialize(parent,id,value = EmptyString,
111
- pos = DEFAULT_POSITION,
112
- size = DEFAULT_SIZE,
113
- choices = [],
114
- style = 0)
115
- super(parent, id, value, pos, size, choices)#, style)
116
-
117
- evt_char {|event| onChar(event)}
118
- evt_key_down {|event| onKeyDown(event)}
119
- evt_key_up {|event| onKeyUp(event)}
120
-
121
- evt_set_focus {|event| onFocusGot(event)}
122
- end
123
-
124
- def onChar(event)
125
- log_message("MyComboBox::OnChar : [#{event.get_unicode_key ? event.get_unicode_key.ord : 0}]")
126
- if event.get_unicode_key == ?w
127
- log_message("MyComboBox: 'w' will be ignored.")
128
- else
129
- event.skip()
130
- end
131
- end
132
-
133
- def onKeyDown(event)
134
- log_message("MyComboBox::OnKeyDown")
135
- if event.key_code() == ?w
136
- log_message("MyComboBox: 'w' will be ignored.")
137
- else
138
- event.skip()
139
- end
140
- end
141
-
142
- def onKeyUp(event)
143
- #log_message("MyComboBox::OnKeyUp")
144
- event.skip()
145
- end
146
-
147
- def onFocusGot(event)
148
- log_message("MyComboBox::OnFocusGot")
149
- event.skip()
150
- end
151
-
152
- end
153
-
154
- # a radiobox which handles focus set/kill (for testing)
155
- class MyRadioBox < RadioBox
156
- def initialize(parent,
157
- id,title = EmptyString,
158
- pos = DEFAULT_POSITION,
159
- size = DEFAULT_SIZE,
160
- choices = [],
161
- majorDim = 1,
162
- style = RA_HORIZONTAL)
163
- super(parent, id, title, pos, size, choices, majorDim,style)
164
- set_foreground_colour(RED)
165
-
166
- evt_set_focus {|event| onFocusGot(event)}
167
- evt_kill_focus {|event| onFocusLost(event)}
168
-
169
- end
170
-
171
- def onFocusGot(event)
172
- log_message("MyRadioBox::OnFocusGot")
173
- event.skip()
174
- end
175
-
176
- def onFocusLost(event)
177
- log_message("MyRadioBox::OnFocusLost")
178
- event.skip()
179
- end
180
-
181
- end
182
-
183
-
184
- class MyPanel < Panel
185
-
186
- attr_reader :m_text,:m_logTargetOld
187
-
188
- def initialize(frame,x,y,w,h)
189
- super( frame, -1, Point.new(x, y), Size.new(w, h) )
190
-
191
- @s_colOld = NULL_COLOUR
192
-
193
- @m_text = TextCtrl.new(self, -1, "This is the log window.\n",
194
- Point.new(0, 250), Size.new(100, 50), TE_MULTILINE)
195
- @m_text.set_background_colour(Colour.new("wheat"))
196
-
197
- @m_logTargetOld = Log::set_active_target(LogTextCtrl.new(@m_text))
198
-
199
- @m_notebook = Wx::Notebook.new(self, ID_NOTEBOOK, Point.new(0,0), Size.new(100,50))
200
-
201
- choices = [
202
- "This",
203
- "is one of my",
204
- "really",
205
- "wonderful",
206
- "examples."
207
- ]
208
-
209
- # fill the image list
210
-
211
- imagelist = ImageList.new(16, 16)
212
-
213
- imagelist.add( Bitmap.new( local_icon_file("list.xpm"),
214
- Wx::BITMAP_TYPE_XPM))
215
- imagelist.add( Bitmap.new( local_icon_file("choice.xpm"),
216
- Wx::BITMAP_TYPE_XPM))
217
- imagelist.add( Bitmap.new( local_icon_file("combo.xpm"),
218
- Wx::BITMAP_TYPE_XPM))
219
- imagelist.add( Bitmap.new( local_icon_file("text.xpm"),
220
- Wx::BITMAP_TYPE_XPM))
221
- imagelist.add( Bitmap.new( local_icon_file("radio.xpm"),
222
- Wx::BITMAP_TYPE_XPM))
223
- imagelist.add( Bitmap.new( local_icon_file("gauge.xpm"),
224
- Wx::BITMAP_TYPE_XPM))
225
-
226
- @m_notebook.set_image_list(imagelist)
227
-
228
- panel = Panel.new(@m_notebook)
229
- @m_listbox = ListBox.new( panel, ID_LISTBOX,
230
- Point.new(10,10), Size.new(120,70),
231
- choices, LB_ALWAYS_SB )
232
-
233
- @m_listboxSorted = ListBox.new( panel, ID_LISTBOX_SORTED,
234
- Point.new(10,90), Size.new(120,70),
235
- choices, LB_SORT )
236
-
237
-
238
- @m_listbox.set_cursor(CROSS_CURSOR)
239
-
240
- @m_listbox.set_tool_tip( "This is a list box" )
241
-
242
-
243
- @m_lbSelectNum = Button.new( panel, ID_LISTBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
244
- @m_lbSelectThis = Button.new( panel, ID_LISTBOX_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
245
- Button.new( panel, ID_LISTBOX_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
246
- MyButton.new( panel, ID_LISTBOX_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
247
- Button.new( panel, ID_LISTBOX_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
248
- button = MyButton.new( panel, ID_LISTBOX_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
249
-
250
- button.set_default()
251
-
252
- button.set_foreground_colour(BLUE)
253
-
254
- button.set_tool_tip( "Press here to set italic font" )
255
-
256
- @m_checkbox = CheckBox.new( panel, ID_LISTBOX_ENABLE, "&Disable", Point.new(20,170) )
257
- @m_checkbox.set_value(false)
258
- @m_checkbox.set_tool_tip( "Click here to disable the listbox" )
259
- @m_toggle_color = CheckBox.new( panel, ID_CHANGE_COLOUR, "&Toggle colour",
260
- Point.new(110,170) )
261
- panel.set_cursor(Cursor.new(CURSOR_HAND))
262
- @m_notebook.add_page(panel, "ListBox", true, Image_List)
263
-
264
- panel = Panel.new(@m_notebook)
265
- @m_choice = Choice.new( panel, ID_CHOICE, Point.new(10,10), Size.new(120,-1), choices )
266
- @m_choiceSorted = Choice.new( panel, ID_CHOICE_SORTED, Point.new(10,70), Size.new(120,-1),
267
- choices, CB_SORT )
268
-
269
- @m_choice.set_selection(2)
270
- @m_choice.set_background_colour(Colour.new("red"))
271
- Button.new( panel, ID_CHOICE_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
272
- Button.new( panel, ID_CHOICE_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
273
- Button.new( panel, ID_CHOICE_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
274
- Button.new( panel, ID_CHOICE_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
275
- Button.new( panel, ID_CHOICE_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
276
- Button.new( panel, ID_CHOICE_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
277
- CheckBox.new( panel, ID_CHOICE_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
278
-
279
- @m_notebook.add_page(panel, "Choice", false, Image_Choice)
280
-
281
- panel = Panel.new(@m_notebook)
282
- box = StaticBox.new( panel, -1, "&Box around combobox",
283
- Point.new(5, 5), Size.new(150, 100))
284
- @m_combo = MyComboBox.new( box, ID_COMBO, "This",
285
- Point.new(15,20), Size.new(120, -1),
286
- choices,TE_PROCESS_ENTER)
287
- # CB_READONLY | PROCESS_ENTER)
288
-
289
- @m_combo.set_tool_tip("This is a natural\ncombobox - can you believe me?")
290
-
291
- Button.new( panel, ID_COMBO_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
292
- Button.new( panel, ID_COMBO_SEL_STR, "&Select 'This'", Point.new(340,30), Size.new(140,30) )
293
- Button.new( panel, ID_COMBO_CLEAR, "&clear", Point.new(180,80), Size.new(140,30) )
294
- Button.new( panel, ID_COMBO_APPEND, "&append 'Hi!'", Point.new(340,80), Size.new(140,30) )
295
- Button.new( panel, ID_COMBO_DELETE, "D&elete selected item", Point.new(180,130), Size.new(140,30) )
296
- Button.new( panel, ID_COMBO_FONT, "Set &Italic font", Point.new(340,130), Size.new(140,30) )
297
- CheckBox.new( panel, ID_COMBO_ENABLE, "&Disable", Point.new(20,130), Size.new(140,30) )
298
- @m_notebook.add_page(panel, "ComboBox", false, Image_Combo)
299
-
300
- choices2 = ["First", "Second"]
301
- # "Third",
302
- #"Fourth", "Fifth", "Sixth",
303
- #"Seventh", "Eighth", "Nineth", "Tenth" */
304
-
305
- panel = Panel.new(@m_notebook)
306
- MyRadioBox.new( panel, ID_RADIOBOX, "&That", Point.new(10,160), Size.new(-1,-1), choices2, 1, RA_SPECIFY_ROWS )
307
- @m_radio = RadioBox.new( panel, ID_RADIOBOX, "T&his", Point.new(10,10), Size.new(-1,-1), choices, 1, RA_SPECIFY_COLS )
308
- @m_radio.set_foreground_colour(RED)
309
-
310
- @m_radio.set_tool_tip("Ever seen a radiobox?")
311
-
312
- Button.new( panel, ID_RADIOBOX_SEL_NUM, "Select #&2", Point.new(180,30), Size.new(140,30) )
313
- Button.new( panel, ID_RADIOBOX_SEL_STR, "&Select 'This'", Point.new(180,80), Size.new(140,30) )
314
- @m_fontButton = Button.new( panel, ID_SET_FONT, "Set &more Italic font", Point.new(340,30), Size.new(140,30) )
315
- Button.new( panel, ID_RADIOBOX_FONT, "Set &Italic font", Point.new(340,80), Size.new(140,30) )
316
- CheckBox.new( panel, ID_RADIOBOX_ENABLE, "&Disable", Point.new(340,130), DEFAULT_SIZE )
317
- rb = RadioButton.new( panel, ID_RADIOBUTTON_1, "Radiobutton1", Point.new(210,170), DEFAULT_SIZE, RB_GROUP )
318
- rb.set_value( false )
319
- RadioButton.new( panel, ID_RADIOBUTTON_2, "&Radiobutton2", Point.new(340,170), DEFAULT_SIZE )
320
- @m_notebook.add_page(panel, "RadioBox", false, Image_Radio)
321
-
322
- panel = Panel.new(@m_notebook)
323
- box = StaticBox.new( panel, -1, "&Gauge and Slider", Point.new(10,10), Size.new(240,170) )
324
- @m_gauge = Gauge.new( box, -1, 200, Point.new(10,30), Size.new(155, 30), GA_HORIZONTAL|NO_BORDER )
325
- @m_gauge.set_background_colour(GREEN)
326
- @m_gauge.set_foreground_colour(RED)
327
- @m_gaugeVert = Gauge.new( box, -1, 100,
328
- Point.new(185,25), Size.new(30, 90),
329
- GA_VERTICAL | GA_SMOOTH | NO_BORDER )
330
- @m_slider = Slider.new( box, ID_SLIDER, 0, 0, 200, Point.new(10,70), Size.new(155,-1),
331
- SL_AUTOTICKS | SL_LABELS )
332
- @m_slider.set_tick_freq(40) unless Wx::PLATFORM == 'WXOSX'
333
- @m_slider.set_tool_tip("This is a sliding slider")
334
-
335
- box = StaticBox.new(panel, -1, "&Explanation",
336
- Point.new(250,10), Size.new(310,170),
337
- ALIGN_CENTER )
338
-
339
- StaticText.new( box, -1,
340
- "In order see the gauge (aka progress bar)\n"+
341
- "control do something you have to drag the\n"+
342
- "handle of the slider to the right.\n"+
343
- "\n"+
344
- "This is also supposed to demonstrate how\n"+
345
- "to use static controls.\n",
346
- Point.new(10,10),
347
- DEFAULT_SIZE)
348
- #Size.new(240, 110))
349
- initialSpinValue = -5
350
- s = initialSpinValue.to_s
351
- @m_spintext = TextCtrl.new( panel, -1, s, Point.new(20,195), Size.new(80,-1) )
352
- @m_spinbutton = SpinButton.new( panel, ID_SPIN, Point.new(103,195), Size.new(80, @m_spintext.size.height) )
353
- @m_spinbutton.set_range(-40,30)
354
- @m_spinbutton.set_value(initialSpinValue)
355
-
356
- @m_btnProgress = Button.new( panel, ID_BTNPROGRESS, "&Show progress dialog",
357
- Point.new(300, 195) )
358
-
359
- @m_spinctrl = SpinCtrl.new( panel, ID_SPINCTRL, "", Point.new(200, 195), Size.new(95, @m_spintext.size.height) )
360
- @m_spinctrl.set_range(10,30)
361
- @m_spinctrl.set_value(15)
362
-
363
- @m_notebook.add_page(panel, "Gauge", false, Image_Gauge)
364
-
365
- panel = Panel.new(@m_notebook)
366
-
367
- icon = ArtProvider::get_icon(ART_INFORMATION)
368
- StaticBitmap.new( panel, -1, icon, Point.new(10, 10) )
369
-
370
- bitmap = Bitmap.new( 100, 100 )
371
- bitmap.draw do | dc |
372
- dc.clear()
373
- dc.set_pen(GREEN_PEN)
374
- dc.draw_ellipse(5, 5, 90, 90)
375
- dc.draw_text("Bitmap", 30, 40)
376
- end
377
-
378
- BitmapButton.new(panel, ID_BITMAP_BTN, bitmap, Point.new(100, 20))
379
-
380
- # test for masked bitmap display
381
- bitmap = Bitmap.new( File.join(File.dirname(__FILE__), "test2.bmp"),
382
- BITMAP_TYPE_BMP)
383
- if bitmap.is_ok()
384
- bitmap.set_mask(Mask.new(bitmap, BLUE))
385
- StaticBitmap.new(panel, -1, bitmap, Point.new(300, 120))
386
- end
387
-
388
- bmp1 = ArtProvider::get_bitmap(ART_INFORMATION)
389
- bmp2 = ArtProvider::get_bitmap(ART_WARNING)
390
- bmp3 = ArtProvider::get_bitmap(ART_QUESTION)
391
- bmpBtn = BitmapButton.new(panel, -1,
392
- bmp1,
393
- Point.new(30, 70))
394
-
395
- bmpBtn.set_bitmap_current(bmp2)
396
- bmpBtn.set_bitmap_pressed(bmp3)
397
-
398
- ToggleButton.new(panel, ID_BUTTON_LABEL,
399
- "&Toggle label", Point.new(250, 20))
400
- @m_label = StaticText.new(panel, -1, "Label with some long text",
401
- Point.new(250, 60), DEFAULT_SIZE,
402
- ALIGN_RIGHT)
403
- @m_label.set_foreground_colour(BLUE )
404
-
405
- @m_notebook.add_page(panel, "BitmapXXX")
406
-
407
- # sizer
408
-
409
- panel = Panel.new(@m_notebook)
410
- panel.set_auto_layout( true )
411
-
412
- sizer = BoxSizer.new( VERTICAL )
413
-
414
- csizer =
415
- StaticBoxSizer.new(sbox = StaticBox.new(panel, -1, "Show Buttons"),
416
- HORIZONTAL )
417
-
418
- check1 = CheckBox.new(sbox, ID_SIZER_CHECK1, "1")
419
- check1.set_value(true)
420
- csizer.add(check1)
421
- check2 = CheckBox.new(sbox, ID_SIZER_CHECK2, "2")
422
- check2.set_value(true)
423
- csizer.add(check2)
424
- check3 = CheckBox.new(sbox, ID_SIZER_CHECK3, "3")
425
- check3.set_value(true)
426
- csizer.add(check3)
427
- check4 = CheckBox.new(sbox, ID_SIZER_CHECK4, "4")
428
- check4.set_value(true)
429
- csizer.add(check4)
430
- check14 = CheckBox.new(sbox, ID_SIZER_CHECK14, "1-4")
431
- check14.set_value(true)
432
- csizer.add(check14)
433
- checkBig = CheckBox.new(sbox, ID_SIZER_CHECKBIG, "Big")
434
- checkBig.set_value(true)
435
- csizer.add(checkBig)
436
-
437
- sizer.add(csizer)
438
-
439
- @m_hsizer = BoxSizer.new( HORIZONTAL )
440
-
441
- @m_buttonSizer = BoxSizer.new(VERTICAL)
442
-
443
- @m_sizerBtn1 = Button.new(panel, -1, "Test Button &1" )
444
- @m_buttonSizer.add( @m_sizerBtn1, 0, ALL, 10 )
445
- @m_sizerBtn2 = Button.new(panel, -1, "Test Button &2" )
446
- @m_buttonSizer.add( @m_sizerBtn2, 0, ALL, 10 )
447
- @m_sizerBtn3 = Button.new(panel, -1, "Test Button &3" )
448
- @m_buttonSizer.add( @m_sizerBtn3, 0, ALL, 10 )
449
- @m_sizerBtn4 = Button.new(panel, -1, "Test Button &4" )
450
- @m_buttonSizer.add( @m_sizerBtn4, 0, ALL, 10 )
451
-
452
- @m_hsizer.add(@m_buttonSizer)
453
- @m_hsizer.add( 20,20, 1 )
454
- @m_bigBtn = Button.new(panel, -1, "Multiline\nbutton" )
455
- @m_hsizer.add( @m_bigBtn , 3, GROW|ALL, 10 )
456
-
457
- sizer.add(@m_hsizer, 1, GROW)
458
-
459
- panel.set_sizer( sizer )
460
-
461
- @m_notebook.add_page(panel, "Sizer")
462
-
463
- evt_size {|event| onSize(event) }
464
- evt_notebook_page_changing(ID_NOTEBOOK) {|event| onPageChanging(event) }
465
- evt_notebook_page_changed(ID_NOTEBOOK) {|event| onPageChanged(event) }
466
- evt_listbox(ID_LISTBOX) {|event| onListBox(event) }
467
- evt_listbox(ID_LISTBOX_SORTED) {|event| onListBox(event) }
468
- evt_listbox_dclick(ID_LISTBOX) {|event| onListBoxDoubleClick(event) }
469
- evt_button(ID_LISTBOX_SEL_NUM) {|event| onListBoxButtons(event) }
470
- evt_button(ID_LISTBOX_SEL_STR) {|event| onListBoxButtons(event) }
471
- evt_button(ID_LISTBOX_CLEAR) {|event| onListBoxButtons(event) }
472
- evt_button(ID_LISTBOX_APPEND) {|event| onListBoxButtons(event) }
473
- evt_button(ID_LISTBOX_DELETE) {|event| onListBoxButtons(event) }
474
- evt_button(ID_LISTBOX_FONT) {|event| onListBoxButtons(event) }
475
- evt_checkbox(ID_LISTBOX_ENABLE) {|event| onListBoxButtons(event) }
476
- evt_choice(ID_CHOICE) {|event| onChoice(event) }
477
- evt_choice(ID_CHOICE_SORTED) {|event| onChoice(event) }
478
- evt_button(ID_CHOICE_SEL_NUM) {|event| onChoiceButtons(event) }
479
- evt_button(ID_CHOICE_SEL_STR) {|event| onChoiceButtons(event) }
480
- evt_button(ID_CHOICE_CLEAR) {|event| onChoiceButtons(event) }
481
- evt_button(ID_CHOICE_APPEND) {|event| onChoiceButtons(event) }
482
- evt_button(ID_CHOICE_DELETE) {|event| onChoiceButtons(event) }
483
- evt_button(ID_CHOICE_FONT) {|event| onChoiceButtons(event) }
484
- evt_checkbox(ID_CHOICE_ENABLE) {|event| onChoiceButtons(event) }
485
- evt_combobox(ID_COMBO) {|event| onCombo(event) }
486
- evt_text(ID_COMBO) {|event| onComboTextChanged(event) }
487
- evt_text_enter(ID_COMBO) {|event| onComboTextEnter(event) }
488
- evt_button(ID_COMBO_SEL_NUM) {|event| onComboButtons(event) }
489
- evt_button(ID_COMBO_SEL_STR) {|event| onComboButtons(event) }
490
- evt_button(ID_COMBO_CLEAR) {|event| onComboButtons(event) }
491
- evt_button(ID_COMBO_APPEND) {|event| onComboButtons(event) }
492
- evt_button(ID_COMBO_DELETE) {|event| onComboButtons(event) }
493
- evt_button(ID_COMBO_FONT) {|event| onComboButtons(event) }
494
- evt_checkbox(ID_COMBO_ENABLE) {|event| onComboButtons(event) }
495
- evt_radiobox(ID_RADIOBOX) {|event| onRadio(event) }
496
- evt_button(ID_RADIOBOX_SEL_NUM) {|event| onRadioButtons(event) }
497
- evt_button(ID_RADIOBOX_SEL_STR) {|event| onRadioButtons(event) }
498
- evt_button(ID_RADIOBOX_FONT) {|event| onRadioButtons(event) }
499
- evt_checkbox(ID_RADIOBOX_ENABLE) {|event| onRadioButtons(event) }
500
- evt_button(ID_SET_FONT) {|event| onSetFont(event) }
501
- evt_slider(ID_SLIDER) {|event| onSliderupdate(event) }
502
- evt_spin(ID_SPIN) {|event| onSpinupdate(event) }
503
- evt_spin_up(ID_SPIN) {|event| onSpinUp(event) }
504
- evt_spin_down(ID_SPIN) {|event| onSpinDown(event) }
505
- evt_update_ui(ID_BTNPROGRESS) {|event| onupdateShowProgress(event) }
506
- evt_button(ID_BTNPROGRESS) {|event| onShowProgress(event) }
507
- evt_spinctrl(ID_SPINCTRL) {|event| onSpinCtrl(event) }
508
- evt_spin_up(ID_SPINCTRL) {|event| onSpinCtrlUp(event) }
509
- evt_spin_down(ID_SPINCTRL) {|event| onSpinCtrlDown(event) }
510
- evt_text(ID_SPINCTRL) {|event| onSpinCtrlText(event) }
511
- if (RUBY_PLATFORM =~ /mswin/)
512
- evt_togglebutton(ID_BUTTON_LABEL) {|event| onupdateLabel(event) }
513
- end
514
- evt_checkbox(ID_CHANGE_COLOUR) {|event| onChangeColour(event) }
515
- evt_button(ID_BUTTON_TEST1) {|event| onTestButton(event) }
516
- evt_button(ID_BUTTON_TEST2) {|event| onTestButton(event) }
517
- evt_button(ID_BITMAP_BTN) {|event| onBmpButton(event) }
518
-
519
- evt_checkbox(ID_SIZER_CHECK1) {|event| onSizerCheck(event) }
520
- evt_checkbox(ID_SIZER_CHECK2) {|event| onSizerCheck(event) }
521
- evt_checkbox(ID_SIZER_CHECK3) {|event| onSizerCheck(event) }
522
- evt_checkbox(ID_SIZER_CHECK4) {|event| onSizerCheck(event) }
523
- evt_checkbox(ID_SIZER_CHECK14) {|event| onSizerCheck(event) }
524
- evt_checkbox(ID_SIZER_CHECKBIG) {|event| onSizerCheck(event) }
525
-
526
- end
527
-
528
- # utility function to find an icon relative to this ruby script
529
- def local_icon_file(icon_name)
530
- File.join( __dir__, icon_name)
531
- end
532
-
533
-
534
- def onSize(event)
535
- size = get_client_size()
536
- x = size.get_width
537
- y = size.get_height
538
- if @m_notebook
539
- @m_notebook.set_size( 2, 2, x-4, y*2/3-4 )
540
- end
541
- if @m_text
542
- @m_text.set_size( 2, y*2/3+2, x-4, y/3-4 )
543
- end
544
- end
545
-
546
- def onPageChanging(event)
547
-
548
- selOld = event.get_old_selection()
549
- if selOld == 2
550
- if message_box("This demonstrates how a program may prevent the\n"+
551
- "page change from taking place - if you select\n"+
552
- "[No] the current page will stay the third one\n",
553
- "Control sample",
554
- ICON_QUESTION | YES_NO, self) != YES
555
- event.veto()
556
- return nil
557
- end
558
- end
559
- @m_text << "Notebook selection is being changed from " << selOld \
560
- << " to " << event.get_selection() \
561
- << " (current page from notebook is " \
562
- << @m_notebook.get_selection() << ")\n"
563
- end
564
-
565
- def onPageChanged(event)
566
- @m_text << "Notebook selection is now " << event.get_selection() \
567
- << " (from notebook: " << @m_notebook.get_selection() \
568
- << ")\n"
569
- end
570
-
571
- def onTestButton(event)
572
- log_message("Button %s clicked.",
573
- event.get_id() == ID_BUTTON_TEST1 ? '1' : '2')
574
- end
575
-
576
- def onBmpButton(event)
577
- log_message("Bitmap button clicked.")
578
- end
579
-
580
- def onChangeColour(event)
581
- # test panel colour changing and propagation to the subcontrols
582
- if @s_colOld.is_ok()
583
-
584
- set_background_colour(@s_colOld)
585
- @s_colOld = NULL_COLOUR
586
-
587
- @m_lbSelectThis.set_foreground_colour(Colour.new("red"))
588
- @m_lbSelectThis.set_background_colour(Colour.new("white"))
589
- else
590
- @s_colOld = Colour.new("red")
591
- set_background_colour(Colour.new("white"))
592
-
593
- @m_lbSelectThis.set_foreground_colour(Colour.new("white"))
594
- @m_lbSelectThis.set_background_colour(Colour.new("red"))
595
- end
596
-
597
- @m_lbSelectThis.refresh()
598
- refresh()
599
- end
600
-
601
- def onListBox(event)
602
- # GetParent().Move(100, 100)
603
- if event.get_int() == -1
604
- @m_text.append_text( "ListBox has no selections anymore\n" )
605
- return Qnil
606
- end
607
-
608
- listbox = (event.get_id() == ID_LISTBOX) ? @m_listbox : @m_listboxSorted
609
-
610
- @m_text.append_text( "ListBox event selection string is: '" )
611
- @m_text.append_text( event.get_string() )
612
- @m_text.append_text( "'\n" )
613
- @m_text.append_text( "ListBox control selection string is: '" )
614
- @m_text.append_text( listbox.get_string_selection() )
615
- @m_text.append_text( "'\n" )
616
- end
617
-
618
- def onListBoxDoubleClick(event)
619
- @m_text.append_text( "ListBox double click string is: " )
620
- @m_text.append_text( event.get_string() )
621
- @m_text.append_text( "\n" )
622
- end
623
-
624
- def onListBoxButtons(event)
625
- case event.get_id()
626
- when ID_LISTBOX_ENABLE
627
- @m_text.append_text("Checkbox clicked.\n")
628
- if event.get_int() != 0
629
- @m_checkbox.set_tool_tip( "Click to enable listbox" )
630
- @m_toggle_color.enable(false)
631
- else
632
- @m_checkbox.set_tool_tip( "Click to disable listbox" )
633
- @m_toggle_color.enable(true)
634
- end
635
- @m_listbox.enable( event.get_int() == 0 )
636
- @m_lbSelectThis.enable( event.get_int() == 0 )
637
- @m_lbSelectNum.enable( event.get_int() == 0 )
638
- @m_listboxSorted.enable( event.get_int() == 0 )
639
- when ID_LISTBOX_SEL_NUM
640
- @m_listbox.set_selection( 2 )
641
- @m_listboxSorted.set_selection( 2 )
642
- @m_lbSelectThis.warp_pointer( 40, 14 )
643
- when ID_LISTBOX_SEL_STR
644
- @m_listbox.set_string_selection( "This" )
645
- @m_listboxSorted.set_string_selection( "This" )
646
- @m_lbSelectNum.warp_pointer( 40, 14 )
647
- when ID_LISTBOX_CLEAR
648
- @m_listbox.clear()
649
- @m_listboxSorted.clear()
650
- when ID_LISTBOX_APPEND
651
- @m_listbox.append( "Hi!" )
652
- @m_listboxSorted.append( "Hi!" )
653
- when ID_LISTBOX_DELETE
654
- idx = @m_listbox.get_selection()
655
- if idx != NOT_FOUND
656
- @m_listbox.delete( idx )
657
- end
658
- idx = @m_listboxSorted.get_selection()
659
- if idx != NOT_FOUND
660
- @m_listboxSorted.delete( idx )
661
- end
662
- when ID_LISTBOX_FONT
663
- @m_listbox.set_font( ITALIC_FONT )
664
- @m_listboxSorted.set_font( ITALIC_FONT )
665
- @m_checkbox.set_font( ITALIC_FONT )
666
- end
667
- end
668
-
669
-
670
- def onChoice(event)
671
-
672
- choice = (event.get_id() == ID_CHOICE) ? @m_choice : @m_choiceSorted
673
-
674
- @m_text.append_text( "Choice event selection string is: '" )
675
- @m_text.append_text( event.get_string() )
676
- @m_text.append_text( "'\n" )
677
- @m_text.append_text( "Choice control selection string is: '" )
678
- @m_text.append_text( choice.get_string_selection() )
679
- @m_text.append_text( "'\n" )
680
- end
681
-
682
- def onChoiceButtons(event)
683
- case event.get_id()
684
- when ID_CHOICE_ENABLE
685
- @m_choice.enable( event.get_int() == 0 )
686
- @m_choiceSorted.enable( event.get_int() == 0 )
687
- when ID_CHOICE_SEL_NUM
688
- @m_choice.set_selection( 2 )
689
- @m_choiceSorted.set_selection( 2 )
690
- when ID_CHOICE_SEL_STR
691
- @m_choice.set_string_selection( "This" )
692
- @m_choiceSorted.set_string_selection( "This" )
693
- when ID_CHOICE_CLEAR
694
- @m_choice.clear()
695
- @m_choiceSorted.clear()
696
- when ID_CHOICE_APPEND
697
- @m_choice.append( "Hi!" )
698
- @m_choiceSorted.append( "Hi!" )
699
- when ID_CHOICE_DELETE
700
- idx = @m_choice.get_selection()
701
- if idx != NOT_FOUND
702
- @m_choice.delete( idx )
703
- end
704
- idx = @m_choiceSorted.get_selection()
705
- if idx != NOT_FOUND
706
- @m_choiceSorted.delete( idx )
707
- end
708
- when ID_CHOICE_FONT
709
- @m_choice.set_font( ITALIC_FONT )
710
- @m_choiceSorted.set_font( ITALIC_FONT )
711
- end
712
- end
713
-
714
- def onCombo(event)
715
- @m_text.append_text( "ComboBox event selection string is: " )
716
- @m_text.append_text( event.get_string() )
717
- @m_text.append_text( "\n" )
718
- @m_text.append_text( "ComboBox control selection string is: " )
719
- @m_text.append_text( @m_combo.get_string_selection() )
720
- @m_text.append_text( "\n" )
721
- end
722
-
723
- def onComboTextChanged(event)
724
- str = sprintf( "Text in the combobox changed: now is '%s'.",
725
- event.get_string())
726
- log_message( str )
727
- end
728
-
729
- def onComboTextEnter(event)
730
- log_message("Enter pressed in the combobox: value is '%s'.",
731
- @m_combo.get_value())
732
- end
733
-
734
- def onComboButtons(event)
735
- case event.get_id()
736
- when ID_COMBO_ENABLE
737
- @m_combo.enable( event.get_int() == 0 )
738
- when ID_COMBO_SEL_NUM
739
- @m_combo.set_selection( 2 )
740
- when ID_COMBO_SEL_STR
741
- @m_combo.set_string_selection( "This" )
742
- when ID_COMBO_CLEAR
743
- @m_combo.clear()
744
- when ID_COMBO_APPEND
745
- @m_combo.append( "Hi!" )
746
- when ID_COMBO_DELETE
747
- idx = @m_combo.get_selection()
748
- @m_combo.delete( idx )
749
- when ID_COMBO_FONT
750
- @m_combo.set_font( ITALIC_FONT )
751
- end
752
- end
753
-
754
- def onRadio(event)
755
- @m_text.append_text( "RadioBox selection string is: " )
756
- @m_text.append_text( event.get_string() )
757
- @m_text.append_text( "\n" )
758
- end
759
-
760
- def onRadioButtons(event)
761
- case event.get_id()
762
- when ID_RADIOBOX_ENABLE
763
- @m_radio.enable( event.get_int() == 0 )
764
- when ID_RADIOBOX_SEL_NUM
765
- @m_radio.set_selection( 2 )
766
- when ID_RADIOBOX_SEL_STR
767
- @m_radio.set_string_selection( "This" )
768
- when ID_RADIOBOX_FONT
769
- @m_radio.set_foreground_colour(GREEN)
770
- @m_radio.set_font( ITALIC_FONT )
771
- end
772
- end
773
-
774
- def onSetFont(event)
775
- @m_fontButton.set_font( ITALIC_FONT )
776
- @m_text.set_font( ITALIC_FONT )
777
- end
778
-
779
- def onupdateLabel(event)
780
- @m_label.set_label(event.get_int() != 0 ? "Very very very very very long text." : "Shorter text.")
781
- end
782
-
783
- def onSliderupdate(event)
784
- @m_gauge.set_value( @m_slider.get_value() )
785
- @m_gaugeVert.set_value( @m_slider.get_value() / 2 )
786
- end
787
-
788
-
789
- def onSpinCtrlText(event)
790
- if @m_spinctrl
791
- s = sprintf( "Spin ctrl text changed: now %d (from event: %s)\n",
792
- @m_spinctrl.get_value(), event.get_string() )
793
- @m_text.append_text(s)
794
- end
795
- end
796
-
797
- def onSpinCtrl(event)
798
- if @m_spinctrl
799
- s = sprintf( "Spin ctrl changed: now %d (from event: %d)\n",
800
- @m_spinctrl.get_value(), event.get_int() )
801
- @m_text.append_text(s)
802
- end
803
- end
804
-
805
- def onSpinCtrlUp(event)
806
- if @m_spinctrl
807
- @m_text.append_text( sprintf(
808
- "Spin up: %d (from event: %d)\n",
809
- @m_spinctrl.get_value(), event.get_int() ) )
810
- end
811
- end
812
-
813
- def onSpinCtrlDown(event)
814
- if @m_spinctrl
815
- @m_text.append_text( sprintf(
816
- "Spin down: %d (from event: %d)\n",
817
- @m_spinctrl.get_value(), event.get_int() ) )
818
- end
819
- end
820
-
821
-
822
- def onSpinUp(event)
823
- value = sprintf( "Spin control up: current = %d\n",
824
- @m_spinbutton.get_value())
825
-
826
- if event.get_position() > 17
827
- value += "Preventing the spin button from going above 17.\n"
828
- event.veto()
829
- end
830
-
831
- @m_text.append_text(value)
832
- end
833
-
834
- def onSpinDown(event)
835
- value = sprintf( "Spin control down: current = %d\n",
836
- @m_spinbutton.get_value())
837
-
838
- if event.get_position() < -17
839
- value += "Preventing the spin button from going below -17.\n"
840
- event.veto()
841
- end
842
-
843
- @m_text.append_text(value)
844
- end
845
-
846
- def onSpinupdate(event)
847
- value = sprintf( "%d", event.get_position() )
848
- @m_spintext.set_value( value )
849
-
850
- value = sprintf( "Spin control range: (%d, %d), current = %d\n",
851
- @m_spinbutton.get_min(), @m_spinbutton.get_max(),
852
- @m_spinbutton.get_value())
853
-
854
- @m_text.append_text(value)
855
- end
856
-
857
- def onupdateShowProgress(event)
858
- event.enable( @m_spinbutton.get_value() > 0 )
859
- end
860
-
861
- def onShowProgress(event)
862
- max = @m_spinbutton.get_value()
863
- if max <= 0
864
- log_error("You must set positive range!")
865
- return nil
866
- end
867
-
868
- cont = false
869
- Wx.ProgressDialog("Progress dialog example",
870
- "An informative message",
871
- max, # range
872
- self, # parent
873
- PD_CAN_ABORT |
874
- PD_AUTO_HIDE |
875
- PD_APP_MODAL |
876
- PD_ELAPSED_TIME |
877
- PD_ESTIMATED_TIME |
878
- PD_REMAINING_TIME) do |dialog|
879
- cont = true
880
- 0.upto(max) {|i|
881
- break if !cont
882
- sleep(1)
883
- if i == max
884
- cont = dialog.update(i, "That's all, folks!")
885
- elsif i == max / 2
886
- cont = dialog.update(i, "Only a half left (very long message)!")
887
- else
888
- cont = dialog.update(i)
889
- end
890
- }
891
- end
892
- if !cont
893
- @m_text << "Progress dialog aborted!\n"
894
- else
895
- @m_text << "Countdown from " << max << " finished.\n"
896
- end
897
- end
898
-
899
- def onSizerCheck(event)
900
- case event.get_id()
901
- when ID_SIZER_CHECK1
902
- @m_buttonSizer.show(@m_sizerBtn1, event.is_checked())
903
- @m_buttonSizer.layout()
904
- when ID_SIZER_CHECK2
905
- @m_buttonSizer.show(@m_sizerBtn2, event.is_checked())
906
- @m_buttonSizer.layout()
907
- when ID_SIZER_CHECK3
908
- @m_buttonSizer.show(@m_sizerBtn3, event.is_checked())
909
- @m_buttonSizer.layout()
910
- when ID_SIZER_CHECK4
911
- @m_buttonSizer.show(@m_sizerBtn4, event.is_checked())
912
- @m_buttonSizer.layout()
913
- when ID_SIZER_CHECK14
914
- @m_hsizer.show(@m_buttonSizer, event.is_checked())
915
- @m_hsizer.layout()
916
- when ID_SIZER_CHECKBIG
917
- @m_hsizer.show(@m_bigBtn, event.is_checked())
918
- @m_hsizer.layout()
919
- end
920
- end
921
- end
922
-
923
-
924
- class MyFrame < Frame
925
- def initialize(title,x,y)
926
- super(nil, -1, title, Point.new(x, y), Size.new(600, 500))
927
-
928
- @s_delay = 5000
929
- @s_enabled = true
930
- @s_enable2 = true
931
- @s_windowFocus = nil
932
- mondrian_icon =
933
- case Wx::PLATFORM
934
- when "WXMSW"
935
- Icon.new( File.join( File.dirname(__FILE__), "mondrian.ico"),
936
- Wx::BITMAP_TYPE_ICO )
937
- else
938
- Icon.new( File.join( File.dirname(__FILE__), "mondrian.xpm"),
939
- Wx::BITMAP_TYPE_XPM )
940
- end
941
-
942
- set_icon(mondrian_icon)
943
-
944
- file_menu = Menu.new
945
-
946
- file_menu.append(CONTROLS_CLEAR_LOG, "&clear log\tCtrl-L")
947
- file_menu.append_separator()
948
- file_menu.append(CONTROLS_ABOUT, "&About\tF1")
949
- file_menu.append_separator()
950
- file_menu.append(CONTROLS_QUIT, "E&xit\tAlt-X", "Quit controls sample")
951
-
952
- menu_bar = MenuBar.new
953
- menu_bar.append(file_menu, "&File")
954
-
955
- tooltip_menu = Menu.new
956
- tooltip_menu.append(CONTROLS_SET_TOOLTIP_DELAY, "Set &delay\tCtrl-D")
957
- tooltip_menu.append_separator()
958
- tooltip_menu.append(CONTROLS_ENABLE_TOOLTIPS, "&Toggle tooltips\tCtrl-T",
959
- "enable/disable tooltips", ITEM_CHECK)
960
- tooltip_menu.check(CONTROLS_ENABLE_TOOLTIPS, true)
961
- menu_bar.append(tooltip_menu, "&Tooltips")
962
-
963
- panel_menu = Menu.new
964
- panel_menu.append(CONTROLS_ENABLE_ALL, "&Disable all\tCtrl-E",
965
- "enable/disable all panel controls", ITEM_CHECK)
966
- menu_bar.append(panel_menu, "&Panel")
967
-
968
- set_menu_bar(menu_bar)
969
-
970
- create_status_bar(2)
971
-
972
- @m_panel = MyPanel.new( self, 10, 10, 300, 100 )
973
-
974
- set_size_hints( 500, 425 )
975
-
976
- evt_menu(CONTROLS_QUIT) {|event| onQuit(event) }
977
- evt_menu(CONTROLS_ABOUT) {|event| onAbout(event) }
978
- evt_menu(CONTROLS_CLEAR_LOG) {|event| onClearLog(event) }
979
- evt_menu(CONTROLS_SET_TOOLTIP_DELAY) {|event| onSetTooltipDelay(event) }
980
- evt_menu(CONTROLS_ENABLE_TOOLTIPS) {|event| onToggleTooltips(event) }
981
- evt_menu(CONTROLS_ENABLE_ALL) {|event| onenableAll(event) }
982
-
983
- evt_size() {|event| onSize(event) }
984
- evt_move() {|event| onMove(event) }
985
- evt_idle() {|event| onIdle(event) }
986
- evt_close() {|event| onClose(event) }
987
- end
988
-
989
- def onClose(event)
990
- Log::set_active_target(@m_panel.m_logTargetOld)
991
- destroy()
992
- end
993
-
994
- def onQuit(event)
995
- close(true)
996
- end
997
-
998
- def onAbout(event)
999
- BusyCursor.busy do
1000
- Wx.MessageDialog(self, "This is a control sample", "About Controls", OK) { |dlg| dlg.show_modal }
1001
- end
1002
- end
1003
-
1004
- def onClearLog(event)
1005
- @m_panel.m_text.clear()
1006
- end
1007
-
1008
- def onSetTooltipDelay(event)
1009
- delay = @s_delay.to_s
1010
-
1011
- delay = get_text_from_user("Enter delay (in milliseconds)",
1012
- "Set tooltip delay",
1013
- delay,
1014
- self)
1015
- if !delay
1016
- return Qnil # cancelled
1017
- end
1018
-
1019
- @s_delay = delay.to_i
1020
-
1021
- ToolTip::set_delay(@s_delay)
1022
-
1023
- log_status(self, "Tooltip delay set to %d milliseconds", @s_delay)
1024
- end
1025
-
1026
- def onToggleTooltips(event)
1027
- @s_enabled = ! @s_enabled
1028
- ToolTip::enable(@s_enabled)
1029
- log_status(self, "Tooltips %sabled", @s_enabled ? "en" : "dis" )
1030
- end
1031
-
1032
- def onenableAll(event)
1033
- @s_enable2 = ! @s_enable2
1034
- @m_panel.enable(@s_enable2)
1035
- end
1036
-
1037
- def onMove(event)
1038
- update_status_bar(event.get_position(), get_size())
1039
- event.skip()
1040
- end
1041
-
1042
- def onSize(event)
1043
- update_status_bar(get_position(), event.get_size())
1044
- event.skip()
1045
- end
1046
-
1047
- def onIdle(event)
1048
- # track the window which has the focus in the status bar
1049
- focus = Window::find_focus()
1050
- if focus && (focus != @s_windowFocus)
1051
- @s_windowFocus = focus
1052
- msg = sprintf( "Focus: %s @ %d",
1053
- @s_windowFocus.wx_class,
1054
- @s_windowFocus.object_id )
1055
- set_status_text(msg)
1056
- end
1057
- end
1058
-
1059
- def GetPanel()
1060
- @m_panel
1061
- end
1062
-
1063
- def update_status_bar(pos,size)
1064
- if get_status_bar()
1065
- sizeAll = get_size()
1066
- sizeCl = get_client_size()
1067
- msg = sprintf("pos=(%d, %d), size=%dx%d or %dx%d (client=%dx%d)",
1068
- pos.x, pos.y,
1069
- size.width, size.height,
1070
- sizeAll.width, sizeAll.height,
1071
- sizeCl.width, sizeCl.height)
1072
- set_status_text(msg, 1)
1073
- end
1074
- end
1075
-
1076
- end
1077
-
1078
- module ControlsSample
1079
-
1080
- include WxRuby::Sample if defined? WxRuby::Sample
1081
-
1082
- def self.describe
1083
- { file: __FILE__,
1084
- summary: 'wxRuby controls example.',
1085
- description: 'wxRuby example demonstrating various common controls.' }
1086
- end
1087
-
1088
- def self.activate
1089
- # Create the main frame window
1090
- frame = MyFrame.new("Controls Windows App", 50, 50)
1091
- frame.show(true)
1092
- frame
1093
- end
1094
-
1095
- if $0 == __FILE__
1096
- Wx::App.run { !!ControlsSample.activate }
1097
- end
1098
-
1099
- end