wxruby3 0.9.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/INSTALL.md +35 -29
  4. data/README.md +24 -15
  5. data/ext/wxruby3/include/wxRubyApp.h +338 -0
  6. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  7. data/ext/wxruby3/include/wxruby-Config.h +6 -6
  8. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  9. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  10. data/ext/wxruby3/swig/common.i +1 -1
  11. data/ext/wxruby3/swig/custom/director.swg +8 -0
  12. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  13. data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
  14. data/lib/wx/aui/auinotebook.rb +6 -2
  15. data/lib/wx/aui/require.rb +1 -0
  16. data/lib/wx/core/app.rb +2 -2
  17. data/lib/wx/core/bitmap_combobox.rb +17 -21
  18. data/lib/wx/core/collapsible_pane.rb +1 -1
  19. data/lib/wx/core/combobox.rb +13 -3
  20. data/lib/wx/core/controlwithitems.rb +40 -128
  21. data/lib/wx/core/enum.rb +17 -1
  22. data/lib/wx/core/event.rb +6 -1
  23. data/lib/wx/core/evthandler.rb +8 -2
  24. data/lib/wx/core/generic_validator.rb +312 -0
  25. data/lib/wx/core/listbox.rb +2 -2
  26. data/lib/wx/core/log.rb +1 -1
  27. data/lib/wx/core/menu.rb +10 -0
  28. data/lib/wx/core/notebook.rb +6 -2
  29. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  30. data/lib/wx/core/size.rb +4 -0
  31. data/lib/wx/core/sizer.rb +12 -2
  32. data/lib/wx/core/standard_paths.rb +22 -0
  33. data/lib/wx/core/task_bar_button.rb +19 -0
  34. data/lib/wx/core/text_entry.rb +4 -1
  35. data/lib/wx/core/textctrl.rb +11 -1
  36. data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
  37. data/lib/wx/core/validator.rb +70 -5
  38. data/lib/wx/core/window.rb +13 -7
  39. data/lib/wx/doc/app.rb +48 -38
  40. data/lib/wx/doc/art_locator.rb +48 -43
  41. data/lib/wx/doc/aui/auimanager.rb +16 -8
  42. data/lib/wx/doc/aui/auinotebook.rb +20 -5
  43. data/lib/wx/doc/clipboard.rb +11 -7
  44. data/lib/wx/doc/colour_dialog.rb +14 -10
  45. data/lib/wx/doc/comboctrl.rb +18 -0
  46. data/lib/wx/doc/controlwithitems.rb +34 -8
  47. data/lib/wx/doc/data_object.rb +2 -2
  48. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  49. data/lib/wx/doc/editable_listbox.rb +44 -0
  50. data/lib/wx/doc/enum.rb +15 -0
  51. data/lib/wx/doc/event.rb +12 -0
  52. data/lib/wx/doc/evthandler.rb +113 -108
  53. data/lib/wx/doc/extra/12_client_data.md +89 -0
  54. data/lib/wx/doc/extra/13_validators.md +139 -0
  55. data/lib/wx/doc/font.rb +1 -0
  56. data/lib/wx/doc/gc_dc.rb +6 -1
  57. data/lib/wx/doc/gdi_common.rb +4 -0
  58. data/lib/wx/doc/generic_validator.rb +95 -0
  59. data/lib/wx/doc/graphics_context.rb +1 -0
  60. data/lib/wx/doc/grid/grid.rb +22 -1
  61. data/lib/wx/doc/help_controller.rb +11 -7
  62. data/lib/wx/doc/html/html_help_controller.rb +12 -4
  63. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  64. data/lib/wx/doc/list_ctrl.rb +33 -29
  65. data/lib/wx/doc/menu.rb +20 -0
  66. data/lib/wx/doc/notebook.rb +21 -0
  67. data/lib/wx/doc/num_validator.rb +387 -0
  68. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  69. data/lib/wx/doc/pg/events.rb +13 -9
  70. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  71. data/lib/wx/doc/pg/pg_property.rb +18 -0
  72. data/lib/wx/doc/progress_dialog.rb +36 -32
  73. data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
  74. data/lib/wx/doc/prt/print_data.rb +13 -5
  75. data/lib/wx/doc/prt/print_dialog.rb +31 -23
  76. data/lib/wx/doc/prt/printer.rb +20 -12
  77. data/lib/wx/doc/radio_box.rb +19 -15
  78. data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
  79. data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
  80. data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
  81. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
  82. data/lib/wx/doc/region_iterator.rb +32 -28
  83. data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
  84. data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
  85. data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
  86. data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
  87. data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
  88. data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
  89. data/lib/wx/doc/sizer.rb +20 -0
  90. data/lib/wx/doc/static_bitmap.rb +25 -0
  91. data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
  92. data/lib/wx/doc/stream.rb +39 -35
  93. data/lib/wx/doc/system_settings.rb +30 -26
  94. data/lib/wx/doc/text_validator.rb +23 -9
  95. data/lib/wx/doc/textctrl.rb +16 -0
  96. data/lib/wx/doc/tree_ctrl.rb +95 -0
  97. data/lib/wx/doc/treebook.rb +9 -5
  98. data/lib/wx/doc/v_list_box.rb +9 -5
  99. data/lib/wx/doc/validator.rb +113 -0
  100. data/lib/wx/doc/variant.rb +164 -160
  101. data/lib/wx/doc/window.rb +87 -47
  102. data/lib/wx/doc/window_disabler.rb +10 -6
  103. data/lib/wx/grid/grid.rb +27 -4
  104. data/lib/wx/html/simple_html_listbox.rb +24 -91
  105. data/lib/wx/keyword_defs.rb +34 -2
  106. data/lib/wx/pg/pg_property.rb +22 -0
  107. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  108. data/lib/wx/rtc/require.rb +3 -0
  109. data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
  110. data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
  111. data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
  112. data/lib/wx/stc/require.rb +1 -0
  113. data/lib/wx/stc/styled_text_ctrl.rb +25 -0
  114. data/lib/wx/version.rb +1 -1
  115. data/rakelib/lib/config/linux.rb +0 -3
  116. data/rakelib/lib/config/macosx.rb +2 -2
  117. data/rakelib/lib/config/mingw.rb +13 -1
  118. data/rakelib/lib/config/unixish.rb +1 -1
  119. data/rakelib/lib/config.rb +14 -4
  120. data/rakelib/lib/core/include/client_data.inc +65 -0
  121. data/rakelib/lib/core/include/funcall.inc +1 -1
  122. data/rakelib/lib/core/package.rb +31 -9
  123. data/rakelib/lib/core/parameter.rb +1 -1
  124. data/rakelib/lib/core/spec.rb +6 -1
  125. data/rakelib/lib/core/spec_helper.rb +7 -1
  126. data/rakelib/lib/director/accelerator.rb +2 -3
  127. data/rakelib/lib/director/accessible.rb +47 -0
  128. data/rakelib/lib/director/app.rb +30 -319
  129. data/rakelib/lib/director/app_traits.rb +13 -13
  130. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  131. data/rakelib/lib/director/combobox.rb +22 -0
  132. data/rakelib/lib/director/comboctrl.rb +1 -55
  133. data/rakelib/lib/director/ctrl_with_items.rb +105 -26
  134. data/rakelib/lib/director/data_format.rb +1 -1
  135. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  136. data/rakelib/lib/director/derived_dc.rb +1 -1
  137. data/rakelib/lib/director/dialog.rb +1 -0
  138. data/rakelib/lib/director/drag_image.rb +2 -3
  139. data/rakelib/lib/director/editable_listbox.rb +30 -0
  140. data/rakelib/lib/director/event.rb +104 -14
  141. data/rakelib/lib/director/event_handler.rb +3 -2
  142. data/rakelib/lib/director/frame.rb +1 -3
  143. data/rakelib/lib/director/functions.rb +4 -2
  144. data/rakelib/lib/director/gdicommon.rb +8 -10
  145. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  146. data/rakelib/lib/director/graphics_context.rb +2 -4
  147. data/rakelib/lib/director/grid_cell_attr.rb +0 -2
  148. data/rakelib/lib/director/grid_cell_editor.rb +0 -2
  149. data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
  150. data/rakelib/lib/director/grid_ctrl.rb +34 -3
  151. data/rakelib/lib/director/header_ctrl.rb +6 -1
  152. data/rakelib/lib/director/html_listbox.rb +96 -22
  153. data/rakelib/lib/director/icon.rb +5 -2
  154. data/rakelib/lib/director/list_ctrl.rb +5 -6
  155. data/rakelib/lib/director/locale.rb +1 -3
  156. data/rakelib/lib/director/log.rb +1 -4
  157. data/rakelib/lib/director/media_ctrl.rb +54 -0
  158. data/rakelib/lib/director/menu.rb +16 -1
  159. data/rakelib/lib/director/menu_item.rb +2 -2
  160. data/rakelib/lib/director/num_validator.rb +495 -0
  161. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  162. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  163. data/rakelib/lib/director/pgproperties.rb +1 -1
  164. data/rakelib/lib/director/pgproperty.rb +27 -30
  165. data/rakelib/lib/director/property_grid_interface.rb +5 -10
  166. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  167. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  168. data/rakelib/lib/director/richtext_composite_object.rb +25 -0
  169. data/rakelib/lib/director/richtext_ctrl.rb +14 -4
  170. data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
  171. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
  172. data/rakelib/lib/director/sizer.rb +30 -4
  173. data/rakelib/lib/director/sizer_item.rb +13 -0
  174. data/rakelib/lib/director/static_bitmap.rb +28 -0
  175. data/rakelib/lib/director/static_box.rb +4 -5
  176. data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
  177. data/rakelib/lib/director/task_bar_button.rb +30 -0
  178. data/rakelib/lib/director/task_bar_icon.rb +5 -13
  179. data/rakelib/lib/director/text_entry.rb +4 -0
  180. data/rakelib/lib/director/text_validator.rb +124 -13
  181. data/rakelib/lib/director/textctrl.rb +12 -1
  182. data/rakelib/lib/director/toggle_button.rb +1 -0
  183. data/rakelib/lib/director/tool_tip.rb +1 -1
  184. data/rakelib/lib/director/top_level_window.rb +4 -7
  185. data/rakelib/lib/director/tree_ctrl.rb +40 -6
  186. data/rakelib/lib/director/utils.rb +16 -2
  187. data/rakelib/lib/director/validator.rb +196 -21
  188. data/rakelib/lib/director/variant.rb +1 -1
  189. data/rakelib/lib/director/window.rb +40 -7
  190. data/rakelib/lib/director.rb +4 -4
  191. data/rakelib/lib/extractor/function.rb +8 -7
  192. data/rakelib/lib/extractor.rb +34 -5
  193. data/rakelib/lib/generate/analyzer.rb +9 -4
  194. data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
  195. data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
  196. data/rakelib/lib/generate/doc/cursor.yaml +0 -2
  197. data/rakelib/lib/generate/doc/panel.yaml +7 -0
  198. data/rakelib/lib/generate/doc.rb +85 -17
  199. data/rakelib/lib/specs/interfaces.rb +163 -160
  200. data/rakelib/lib/swig_runner.rb +55 -9
  201. data/rakelib/lib/typemap/client_data.rb +67 -0
  202. data/rakelib/lib/typemap/common.rb +33 -4
  203. data/rakelib/lib/typemap/datetime.rb +1 -1
  204. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  205. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
  206. data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
  207. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
  208. data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
  209. data/rakelib/yard/templates/default/tags/setup.rb +16 -0
  210. data/rakelib/yard/yard-custom-templates.rb +3 -0
  211. data/samples/aui/aui.rb +1237 -1233
  212. data/samples/calendar/calendar.rb +293 -289
  213. data/samples/controls/get_item_sample.rb +83 -79
  214. data/samples/controls/htlbox.rb +331 -327
  215. data/samples/dialogs/dialogs.rb +682 -694
  216. data/samples/dialogs/wizard.rb +52 -55
  217. data/samples/dragdrop/dragdrop.rb +146 -142
  218. data/samples/drawing/bitmap.rb +29 -26
  219. data/samples/drawing/bitmap_image.rb +84 -80
  220. data/samples/drawing/graphics_drawing.rb +209 -205
  221. data/samples/drawing/image_prt.rb +344 -340
  222. data/samples/drawing/maths_images.rb +18 -1
  223. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  224. data/samples/etc/caret.rb +306 -0
  225. data/samples/etc/miniframe.rb +65 -60
  226. data/samples/etc/sash.rb +109 -105
  227. data/samples/etc/scrollwin.rb +86 -80
  228. data/samples/etc/system_settings.rb +216 -209
  229. data/samples/event/activation.rb +72 -67
  230. data/samples/event/event.rb +160 -153
  231. data/samples/event/threaded.rb +8 -1
  232. data/samples/event/update_ui_event.rb +67 -60
  233. data/samples/grid/grid.rb +188 -181
  234. data/samples/grid/gridtablebase.rb +136 -129
  235. data/samples/html/html.rb +208 -204
  236. data/samples/mdi/mdi.rb +59 -54
  237. data/samples/minimal/minimal.rb +54 -51
  238. data/samples/minimal/nothing.rb +1 -0
  239. data/samples/printing/printing.rb +367 -377
  240. data/samples/printing/printing2.rb +203 -198
  241. data/samples/propgrid/propgrid.rb +2312 -2308
  242. data/samples/propgrid/propgrid_minimal.rb +57 -50
  243. data/samples/ribbon/ribbon.rb +780 -774
  244. data/samples/sampler/ext.rb +0 -33
  245. data/samples/sampler/sample.rb +4 -9
  246. data/samples/sampler.rb +1 -1
  247. data/samples/splash/splash.rb +118 -116
  248. data/samples/text/rich_textctrl.rb +207 -201
  249. data/samples/text/richtext.rb +1409 -1405
  250. data/samples/text/scintilla.rb +137 -128
  251. data/samples/text/textctrl.rb +89 -83
  252. data/samples/text/unicode.rb +175 -168
  253. data/samples/treectrl/treectrl.rb +1430 -1426
  254. data/samples/widgets/activityindicator.rb +95 -0
  255. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  256. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  257. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  258. data/samples/widgets/art/widgets/button.xpm +54 -0
  259. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  260. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  261. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  262. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  263. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  264. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  265. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  266. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  267. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  268. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  269. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  270. data/samples/widgets/art/widgets/header.xpm +54 -0
  271. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  272. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  273. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  274. data/samples/widgets/art/widgets/native.xpm +81 -0
  275. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  276. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  277. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  278. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  279. data/samples/widgets/art/widgets/slider.xpm +54 -0
  280. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  281. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  282. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  283. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  284. data/samples/widgets/art/widgets/text.xpm +54 -0
  285. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  286. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  287. data/samples/widgets/art/widgets/toucan.png +0 -0
  288. data/samples/widgets/bmpcombobox.rb +651 -0
  289. data/samples/widgets/button.rb +462 -0
  290. data/samples/widgets/checkbox.rb +211 -0
  291. data/samples/widgets/choice.rb +287 -0
  292. data/samples/widgets/clrpicker.rb +156 -0
  293. data/samples/widgets/combobox.rb +516 -0
  294. data/samples/widgets/datepick.rb +215 -0
  295. data/samples/widgets/dirctrl.rb +265 -0
  296. data/samples/widgets/dirpicker.rb +158 -0
  297. data/samples/widgets/editlbox.rb +122 -0
  298. data/samples/widgets/filectrl.rb +216 -0
  299. data/samples/widgets/filepicker.rb +214 -0
  300. data/samples/widgets/fontpicker.rb +135 -0
  301. data/samples/widgets/gauge.rb +311 -0
  302. data/samples/widgets/headerctrl.rb +236 -0
  303. data/samples/widgets/hyperlink.rb +203 -0
  304. data/samples/widgets/itemcontainer.rb +185 -0
  305. data/samples/widgets/listbox.rb +473 -0
  306. data/samples/widgets/notebook.rb +488 -0
  307. data/samples/widgets/odcombobox.rb +608 -0
  308. data/samples/widgets/radiobox.rb +328 -0
  309. data/samples/widgets/searchctrl.rb +159 -0
  310. data/samples/widgets/slider.rb +594 -0
  311. data/samples/widgets/spinbtn.rb +443 -0
  312. data/samples/widgets/statbmp.rb +130 -0
  313. data/samples/widgets/static.rb +436 -0
  314. data/samples/widgets/textctrl.rb +700 -0
  315. data/samples/widgets/timepick.rb +148 -0
  316. data/samples/widgets/tn_widgets.png +0 -0
  317. data/samples/widgets/toggle.rb +385 -0
  318. data/samples/widgets/widgets.rb +1233 -0
  319. data/samples/xrc/custom_xrc_sample.rb +47 -41
  320. data/samples/xrc/xrc_sample.rb +53 -47
  321. data/tests/media/beep_lo.wav +0 -0
  322. data/tests/test_event_handling.rb +52 -34
  323. data/tests/test_events.rb +7 -0
  324. data/tests/test_item_data.rb +24 -0
  325. data/tests/test_list_ctrl.rb +1 -1
  326. data/tests/test_media_ctrl.rb +38 -0
  327. data/tests/test_menu.rb +69 -0
  328. data/tests/test_pg.rb +27 -0
  329. data/tests/test_richtext.rb +45 -0
  330. data/tests/test_sizer.rb +59 -0
  331. data/tests/test_std_controls.rb +42 -1
  332. data/tests/test_styled_text_ctrl.rb +46 -0
  333. data/tests/test_tree_ctrl.rb +138 -0
  334. data/tests/test_validators.rb +805 -0
  335. data/tests/test_window.rb +12 -0
  336. data/tests/testapp_noframe.rb +1 -1
  337. metadata +121 -139
  338. data/lib/wx/core/choice.rb +0 -14
  339. data/lib/wx/core/combo_ctrl.rb +0 -110
  340. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  341. data/samples/bigdemo/About.rbw +0 -39
  342. data/samples/bigdemo/ColorPanel.rbw +0 -23
  343. data/samples/bigdemo/GridSimple.rbw +0 -78
  344. data/samples/bigdemo/MDIDemo.rbw +0 -57
  345. data/samples/bigdemo/PopupMenu.rbw +0 -146
  346. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  347. data/samples/bigdemo/Sizers.rbw +0 -541
  348. data/samples/bigdemo/bigdemo.rb +0 -817
  349. data/samples/bigdemo/demoTemplate.rbw +0 -33
  350. data/samples/bigdemo/helpfile.htb +0 -0
  351. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  352. data/samples/bigdemo/icons/Test 015.png +0 -0
  353. data/samples/bigdemo/icons/choice.bmp +0 -0
  354. data/samples/bigdemo/icons/combo.bmp +0 -0
  355. data/samples/bigdemo/icons/combo.xpm +0 -27
  356. data/samples/bigdemo/icons/copy.xpm +0 -25
  357. data/samples/bigdemo/icons/cut.xpm +0 -24
  358. data/samples/bigdemo/icons/gauge.bmp +0 -0
  359. data/samples/bigdemo/icons/gauge.xpm +0 -27
  360. data/samples/bigdemo/icons/help.xpm +0 -25
  361. data/samples/bigdemo/icons/list.bmp +0 -0
  362. data/samples/bigdemo/icons/list.xpm +0 -27
  363. data/samples/bigdemo/icons/mondrian.ico +0 -0
  364. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  365. data/samples/bigdemo/icons/new.xpm +0 -24
  366. data/samples/bigdemo/icons/ogl.ico +0 -0
  367. data/samples/bigdemo/icons/ogl.xpm +0 -45
  368. data/samples/bigdemo/icons/open.xpm +0 -26
  369. data/samples/bigdemo/icons/paste.bmp +0 -0
  370. data/samples/bigdemo/icons/paste.xpm +0 -38
  371. data/samples/bigdemo/icons/pointy.png +0 -0
  372. data/samples/bigdemo/icons/preview.xpm +0 -26
  373. data/samples/bigdemo/icons/print.xpm +0 -26
  374. data/samples/bigdemo/icons/radio.bmp +0 -0
  375. data/samples/bigdemo/icons/radio.xpm +0 -27
  376. data/samples/bigdemo/icons/robert.xpm +0 -415
  377. data/samples/bigdemo/icons/sashtest.ico +0 -0
  378. data/samples/bigdemo/icons/save.xpm +0 -25
  379. data/samples/bigdemo/icons/smiles.bmp +0 -0
  380. data/samples/bigdemo/icons/smiles.xpm +0 -39
  381. data/samples/bigdemo/icons/smiley.ico +0 -0
  382. data/samples/bigdemo/icons/smiley.xpm +0 -42
  383. data/samples/bigdemo/icons/stattext.xpm +0 -24
  384. data/samples/bigdemo/icons/test2.bmp +0 -0
  385. data/samples/bigdemo/icons/test2.png +0 -0
  386. data/samples/bigdemo/icons/test2.xpm +0 -79
  387. data/samples/bigdemo/icons/text.bmp +0 -0
  388. data/samples/bigdemo/icons/text.xpm +0 -27
  389. data/samples/bigdemo/icons/tog1.bmp +0 -0
  390. data/samples/bigdemo/icons/tog1.xpm +0 -38
  391. data/samples/bigdemo/icons/tog2.bmp +0 -0
  392. data/samples/bigdemo/icons/tog2.xpm +0 -38
  393. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  394. data/samples/bigdemo/icons/wxwin.ico +0 -0
  395. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  396. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  397. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  398. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  399. data/samples/bigdemo/run.rb +0 -98
  400. data/samples/bigdemo/tips.txt +0 -7
  401. data/samples/bigdemo/utils.rb +0 -20
  402. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  403. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  404. data/samples/bigdemo/wxButton.rbw +0 -64
  405. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  406. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  407. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  408. data/samples/bigdemo/wxChoice.rbw +0 -47
  409. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  410. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  411. data/samples/bigdemo/wxComboBox.rbw +0 -77
  412. data/samples/bigdemo/wxCursor.rbw +0 -136
  413. data/samples/bigdemo/wxDialog.rbw +0 -74
  414. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  415. data/samples/bigdemo/wxDragImage.rbw +0 -70
  416. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  417. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  418. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  419. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  420. data/samples/bigdemo/wxFrame.rbw +0 -53
  421. data/samples/bigdemo/wxGauge.rbw +0 -65
  422. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  423. data/samples/bigdemo/wxGrid.rbw +0 -66
  424. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  425. data/samples/bigdemo/wxListBox.rbw +0 -140
  426. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  427. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  428. data/samples/bigdemo/wxMenu.rbw +0 -247
  429. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  430. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  431. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  432. data/samples/bigdemo/wxNotebook.rbw +0 -136
  433. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  434. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  435. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  436. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  437. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  438. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  439. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  440. data/samples/bigdemo/wxSlider.rbw +0 -42
  441. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  442. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  443. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  444. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  445. data/samples/bigdemo/wxStaticText.rbw +0 -55
  446. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  447. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  448. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  449. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  450. data/samples/bigdemo/wxToolBar.rbw +0 -131
  451. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  452. data/samples/caret/caret.rb +0 -298
  453. data/samples/caret/mondrian.xpm +0 -44
  454. data/samples/controls/books.rb +0 -189
  455. data/samples/controls/choice.xpm +0 -27
  456. data/samples/controls/combo.xpm +0 -27
  457. data/samples/controls/controls.rb +0 -1099
  458. data/samples/controls/gauge.xpm +0 -27
  459. data/samples/controls/list.xpm +0 -27
  460. data/samples/controls/mondrian.ico +0 -0
  461. data/samples/controls/mondrian.xpm +0 -44
  462. data/samples/controls/radio.xpm +0 -27
  463. data/samples/controls/stattext.xpm +0 -24
  464. data/samples/controls/test2.bmp +0 -0
  465. data/samples/controls/text.xpm +0 -27
  466. data/samples/controls/tn_books.png +0 -0
  467. data/samples/controls/tn_controls.png +0 -0
  468. data/samples/etc/choice.rb +0 -87
  469. data/samples/etc/tn_choice.png +0 -0
  470. data/samples/text/mondrian.ico +0 -0
  471. data/samples/text/mondrian.xpm +0 -44
  472. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -9,112 +9,117 @@
9
9
 
10
10
 
11
11
 
12
- class Wx::EvtHandler
13
-
14
- # Removes all (Ruby) installed EventFilter-s.
15
- # @return [void]
16
- def self.clear_filters; end
17
-
18
- # Public method to register the mapping of a custom event type
19
- # +konstant+ (which should be a unique integer; one will be created if
20
- # not supplied) to a custom event class +klass+. If +meth+ and +arity+
21
- # are given, a convenience evt_handler method called +meth+ will be
22
- # created, which accepts +arity+ arguments (specify both or neither).
23
- # @param klass [Class] event class
24
- # @param konstant [Integer] unique event type id (if nil a unique value will be autogenerated)
25
- # @param meth [String,Symbol] optional event handler method name
26
- # @param arity [Integer] event handler method arity (should be 0, 1 or 2 if not nil)
27
- # @return [Integer] unique event type id
28
- def self.register_class(klass, konstant = nil, meth = nil, arity = nil) end
29
-
30
- def connect(first_id, last_id, evt_type, handler) end
31
-
32
- def disconnect(first_id, last_id, evt_spec) end
33
-
34
- # Processes an event, searching event tables and calling zero or more suitable event handler function(s).
35
- #
36
- # Normally, your application would not call this function: it is called in the wxWidgets implementation to
37
- # dispatch incoming user interface events to the framework (and application).
38
- #
39
- # However, you might need to call it if implementing new functionality (such as a new control) where you
40
- # define new event types, as opposed to allowing the user to override virtual functions.
41
- #
42
- # In wxRuby this method can not be effectively overridden.
43
- # In order to override default event processing define a try_before(event) or try_after(event) method
44
- # as member of a derived EvtHandler class.
45
- #
46
- # The normal order of event table searching is as follows:
47
- #
48
- # 1. {Wx::App#filter_event} is called. If it returns anything but -1 (default) the processing stops here.
49
- # 2. #try_before (if it exists, otherwise the C++ default implementation) is called (this is where {Wx::Validator} are taken into account for {Wx::Window} objects). If this returns true, the function exits.
50
- # 3. If the object is disabled (via a call to {Wx::EvtHandler#set_evt_handler_enabled}) the function skips to step (7).
51
- # 4. Dynamic event table of the handlers bound using Bind<>() is searched in the most-recently-bound to the most-early-bound order. If a handler is found, it is executed and the function returns true unless the handler used {Wx::Event#skip} to indicate that it didn't handle the event in which case the search continues.
52
- # 5. Static events table of the handlers bound using event table macros is searched for this event handler in the order of appearance of event table macros in the source code. If this fails, the base class event table is tried, and so on until no more tables exist or an appropriate function was found. If a handler is found, the same logic as in the previous step applies.
53
- # 6. The search is applied down the entire chain of event handlers (usually the chain has a length of one). This chain can be formed using {Wx::EvtHandler#set_next_handler}
54
- # Note that in the case of Wx::Window you can build a stack of event handlers (see {Wx::Window#push_event_handler} for more info). If any of the handlers of the chain return true, the function exits.
55
- # 7. #try_after (if it exists, otherwise the C++ default implementation) is called: for the {Wx::Window} object this may propagate the event to the window parent (recursively). If the event is still not processed, {#process_event} on the {Wx::THE_APP} object is called as the last step.
56
- #
57
- # Notice that steps (2)-(6) are performed in {#process_event_locally} which is called by this function.
58
- #
59
- # @param event [Wx::Event] Event to process.
60
- # @return [true,false] true if event has been processed
61
- def process_event(event) end
62
-
63
- # Process a command, supplying the window identifier, command event identifier, and member function or proc.
64
- # @param [Integer] id window identifier
65
- # @param [Integer] evt_id event type identifier
66
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
67
- # @yieldparam [Wx::CommandEvent] event event to handle
68
- def evt_command(id, evt_id, meth = nil, &block) end
69
-
70
- # Process a command for a range of window identifiers, supplying the minimum and maximum window identifiers, command event identifier, and member function or proc.
71
- # @param [Integer] id1 minimum window identifier
72
- # @param [Integer] id2 maximum window identifier
73
- # @param [Integer] evt_id event type identifier
74
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
75
- # @yieldparam [Wx::CommandEvent] event event to handle
76
- def evt_command_range(id1, id2, evt_id, meth = nil, &block) end
77
-
78
- # Convenience evt_handler to listen to all mouse events.
79
- # @yieldparam [Wx::MouseEvent] event event to handle
80
- def evt_mouse_events(*args, &block) end
81
-
82
- # Convenience evt handler to listen to all scrollwin events
83
- # (from Wx::ScrolledWindow).
84
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
85
- # @yieldparam [Wx::ScrollWinEvent] event event to handle
86
- def evt_scrollwin(meth = nil, &block) end
87
-
88
- # Convenience evt handler to listen to all scroll events
89
- # (from Wx::Slider and Wx::ScrollBar).
90
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
91
- # @yieldparam [Wx::ScrollWinEvent] event event to handle
92
- def evt_scroll(meth = nil, &block) end
93
-
94
- # Convenience evt handler to listen to all scroll events
95
- # (from Wx::Slider and Wx::ScrollBar) with an id.
96
- # @param [Integer] id window identifier
97
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
98
- # @yieldparam [Wx::ScrollWinEvent] event event to handle
99
- def evt_scroll_command(id, meth = nil, &block) end
100
-
101
- # Processes Wx::WindowDestroyEvent events.
102
- # In wxRuby Wx::Event#skipped will be forced to true after the provided
103
- # handler has finished to make sure the event is propagated as it is
104
- # required that Wx::App gets to handle the event in the end.
105
- # @yieldparam [Wx::WindowDestroyEvent] event event to handle
106
- def evt_window_destroy(&block) end
107
-
108
- # Processes {Wx::EVT_TIMER} events. See {Wx::TimerEvent}.
109
- # @param [Integer,Wx::Enum,Wx::Timer] id timer id
110
- # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
111
- # @yieldparam [Wx::TimerEvent] event the event to handle
112
- def evt_timer(id, meth = nil, &block) end
113
-
114
- # Schedule a call for asynchronous execution (at idle time).
115
- # @param meth [Symbol,String,Method,Proc] (name of) method or proc to call
116
- # @param args [Array<Object>] optional arguments to pass to the call
117
- # @return [void]
118
- # @yield [*args] optional arguments
119
- def call_after(meth = nil, *args, &block) end
12
+ module Wx
13
+
14
+ class EvtHandler
15
+
16
+ # Removes all (Ruby) installed EventFilter-s.
17
+ # @return [void]
18
+ def self.clear_filters; end
19
+
20
+ # Public method to register the mapping of a custom event type
21
+ # +konstant+ (which should be a unique integer; one will be created if
22
+ # not supplied) to a custom event class +klass+. If +meth+ and +arity+
23
+ # are given, a convenience evt_handler method called +meth+ will be
24
+ # created, which accepts +arity+ arguments (specify both or neither).
25
+ # @param klass [Class] event class
26
+ # @param konstant [Integer] unique event type id (if nil a unique value will be autogenerated)
27
+ # @param meth [String,Symbol] optional event handler method name
28
+ # @param arity [Integer] event handler method arity (should be 0, 1 or 2 if not nil)
29
+ # @return [Integer] unique event type id
30
+ def self.register_class(klass, konstant = nil, meth = nil, arity = nil) end
31
+
32
+ def connect(first_id, last_id, evt_type, handler) end
33
+
34
+ def disconnect(first_id, last_id, evt_spec) end
35
+
36
+ # Processes an event, searching event tables and calling zero or more suitable event handler function(s).
37
+ #
38
+ # Normally, your application would not call this function: it is called in the wxWidgets implementation to
39
+ # dispatch incoming user interface events to the framework (and application).
40
+ #
41
+ # However, you might need to call it if implementing new functionality (such as a new control) where you
42
+ # define new event types, as opposed to allowing the user to override virtual functions.
43
+ #
44
+ # In wxRuby this method can not be effectively overridden.
45
+ # In order to override default event processing define a try_before(event) or try_after(event) method
46
+ # as member of a derived EvtHandler class.
47
+ #
48
+ # The normal order of event table searching is as follows:
49
+ #
50
+ # 1. {Wx::App#filter_event} is called. If it returns anything but -1 (default) the processing stops here.
51
+ # 2. #try_before (if it exists, otherwise the C++ default implementation) is called (this is where {Wx::Validator} are taken into account for {Wx::Window} objects). If this returns true, the function exits.
52
+ # 3. If the object is disabled (via a call to {Wx::EvtHandler#set_evt_handler_enabled}) the function skips to step (7).
53
+ # 4. Dynamic event table of the handlers bound using Bind<>() is searched in the most-recently-bound to the most-early-bound order. If a handler is found, it is executed and the function returns true unless the handler used {Wx::Event#skip} to indicate that it didn't handle the event in which case the search continues.
54
+ # 5. Static events table of the handlers bound using event table macros is searched for this event handler in the order of appearance of event table macros in the source code. If this fails, the base class event table is tried, and so on until no more tables exist or an appropriate function was found. If a handler is found, the same logic as in the previous step applies.
55
+ # 6. The search is applied down the entire chain of event handlers (usually the chain has a length of one). This chain can be formed using {Wx::EvtHandler#set_next_handler}
56
+ # Note that in the case of Wx::Window you can build a stack of event handlers (see {Wx::Window#push_event_handler} for more info). If any of the handlers of the chain return true, the function exits.
57
+ # 7. #try_after (if it exists, otherwise the C++ default implementation) is called: for the {Wx::Window} object this may propagate the event to the window parent (recursively). If the event is still not processed, {#process_event} on the {Wx::THE_APP} object is called as the last step.
58
+ #
59
+ # Notice that steps (2)-(6) are performed in {#process_event_locally} which is called by this function.
60
+ #
61
+ # @param event [Wx::Event] Event to process.
62
+ # @return [true,false] true if event has been processed
63
+ def process_event(event) end
64
+
65
+ # Process a command, supplying the window identifier, command event identifier, and member function or proc.
66
+ # @param [Integer] id window identifier
67
+ # @param [Integer] evt_id event type identifier
68
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
69
+ # @yieldparam [Wx::CommandEvent] event event to handle
70
+ def evt_command(id, evt_id, meth = nil, &block) end
71
+
72
+ # Process a command for a range of window identifiers, supplying the minimum and maximum window identifiers, command event identifier, and member function or proc.
73
+ # @param [Integer] id1 minimum window identifier
74
+ # @param [Integer] id2 maximum window identifier
75
+ # @param [Integer] evt_id event type identifier
76
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
77
+ # @yieldparam [Wx::CommandEvent] event event to handle
78
+ def evt_command_range(id1, id2, evt_id, meth = nil, &block) end
79
+
80
+ # Convenience evt_handler to listen to all mouse events.
81
+ # @yieldparam [Wx::MouseEvent] event event to handle
82
+ def evt_mouse_events(*args, &block) end
83
+
84
+ # Convenience evt handler to listen to all scrollwin events
85
+ # (from Wx::ScrolledWindow).
86
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
87
+ # @yieldparam [Wx::ScrollWinEvent] event event to handle
88
+ def evt_scrollwin(meth = nil, &block) end
89
+
90
+ # Convenience evt handler to listen to all scroll events
91
+ # (from Wx::Slider and Wx::ScrollBar).
92
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
93
+ # @yieldparam [Wx::ScrollWinEvent] event event to handle
94
+ def evt_scroll(meth = nil, &block) end
95
+
96
+ # Convenience evt handler to listen to all scroll events
97
+ # (from Wx::Slider and Wx::ScrollBar) with an id.
98
+ # @param [Integer] id window identifier
99
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
100
+ # @yieldparam [Wx::ScrollWinEvent] event event to handle
101
+ def evt_scroll_command(id, meth = nil, &block) end
102
+
103
+ # Processes Wx::WindowDestroyEvent events.
104
+ # In wxRuby Wx::Event#skipped will be forced to true after the provided
105
+ # handler has finished to make sure the event is propagated as it is
106
+ # required that Wx::App gets to handle the event in the end.
107
+ # @yieldparam [Wx::WindowDestroyEvent] event event to handle
108
+ def evt_window_destroy(&block) end
109
+
110
+ # Processes {Wx::EVT_TIMER} events. See {Wx::TimerEvent}.
111
+ # @param [Integer,Wx::Enum,Wx::Timer] id timer id
112
+ # @param [String,Symbol,Method,Proc] meth (name of) method or event handling proc
113
+ # @yieldparam [Wx::TimerEvent] event the event to handle
114
+ def evt_timer(id, meth = nil, &block) end
115
+
116
+ # Schedule a call for asynchronous execution (at idle time).
117
+ # @param meth [Symbol,String,Method,Proc] (name of) method or proc to call
118
+ # @param args [Array<Object>] optional arguments to pass to the call
119
+ # @return [void]
120
+ # @yield [*args] optional arguments
121
+ def call_after(meth = nil, *args, &block) end
122
+
123
+ end
124
+
120
125
  end
@@ -0,0 +1,89 @@
1
+ <!--
2
+ # @markup markdown
3
+ # @title 12. Client/User data with wxRuby
4
+ -->
5
+
6
+ # 12. Client/User data with wxRuby
7
+
8
+ ## Introduction
9
+
10
+ The wxWidgets library has widespread support for attaching arbitrary client (or user) data to GUI elements like
11
+ windows (all event handlers actually), window items, sizer items etc.
12
+ To cater to various C++ use cases in most instances this support covers both specific wxWidgets defined types (like
13
+ wxClientData and wxObject instances) and untyped data pointers (represented as `void *`) with subtle but essential
14
+ differences.
15
+
16
+ wxRuby implements a fully compatible version of this support.
17
+
18
+ ## Everything is an Object
19
+
20
+ As Ruby does not do untyped data (everything is an Object), and having two different options is confusing anyway,
21
+ wxRuby provides only a single option and more or less unifies the interface across the entire library.
22
+ In Ruby anywhere the original wxWidgets library supports some type of client (or user) data attachment wxRuby will
23
+ support the attachment of any arbitrary Ruby `Object` by either the method `#set_client_object` (where C++ supports
24
+ `SetClientData` and `SetClientObject`) or `#set_user_data` (where C++ supports `SetUserData`). Data retrieval
25
+ is supported by complementary `#get_client_object` or `#get_user_data` methods in all cases.
26
+ Wherever C++ supports `SetClientObject` wxRuby also provides the method aliases `#set_client_data` and `#get_client_data`.
27
+
28
+ Another difference with C++ is that for typed client data in wxWidgets developers could leverage object destruction as
29
+ callback trigger (through the implementation of virtual destructors) to handle any required 'unlinking' logic. This
30
+ obviously does not apply to untyped data (one of the 'subtle' differences).
31
+ As Ruby does not provide any usable object destruction hooks this does not work there.
32
+ Ruby however has 'Duck-typing' which is what wxRuby uses to provide support for a unlinking callback 'hook' for attached
33
+ client data.
34
+
35
+ > Any attached Ruby Object implementing (responding to) the method `#client_data_unlinked` will have that method called after the
36
+ > attached object has been detached from the element it was attached to (either because of data replacement or element
37
+ > deletion).
38
+
39
+ Regard the following example.
40
+
41
+ ```ruby
42
+ frame = Wx::Frame.new(nil, Wx::ID_ANY)
43
+
44
+ # attach a hash with user data
45
+ frame.set_client_data({ text: 'A string', float: 3.14 })
46
+
47
+ # ... do something with frame
48
+
49
+ # replace the user data
50
+ frame.set_client_data([1,2,3,4])
51
+
52
+ # ... do something else with frame
53
+ ```
54
+
55
+ In this case standard Ruby object are attached. After attachment the object can be retrieved using a call to `get_client_data`
56
+ anywhere access to the frame instance is available.
57
+
58
+ Using a specially derived (or adapted) object a developer can handle specific logic after the object has been unlinked
59
+ like in this example:
60
+
61
+ ```ruby
62
+ # define a user data class
63
+ class MyUserData
64
+ def initialize(payload)
65
+ @payload = payload
66
+ end
67
+ attr_reader :payload
68
+
69
+ def client_data_unlinked
70
+ # handle some logic
71
+ end
72
+ end
73
+
74
+ # ...
75
+
76
+ # attach data to some window
77
+ win.set_client_data(MyUserData.new(some_payload_data))
78
+
79
+ # ...
80
+
81
+ # reset user data for some reason (will call MyUserData#client_data_unlinked after replacement)
82
+ win.set_client_data(nil)
83
+ ```
84
+
85
+ # CommandEvent data
86
+
87
+ wxRuby also fully supports the propagation of attached client data to Wx::CommandEvent objects (see
88
+ {Wx::CommandEvent#get_client_object} and {Wx::CommandEvent#set_client_object}).
89
+ As mentioned above wxRuby provides the method aliases `#set_client_data` and `#get_client_data` here also.
@@ -0,0 +1,139 @@
1
+ <!--
2
+ # @markup markdown
3
+ # @title 13. Validators and data binding
4
+ -->
5
+
6
+ # 13. Validators and data binding
7
+
8
+ ## Introduction
9
+
10
+ wxRuby fully supports validator classes offering input validation and/or data binding and/or event filtering.
11
+
12
+ ## Validation
13
+
14
+ The base Wx::Validator class defines the method {Wx::Validator#validate} which is called when validation of the
15
+ value or content of the associated window is required.
16
+
17
+ The implementation of this method should (somehow) retrieve the value of the associated window and validate that
18
+ value, returning `true` if valid or `false` otherwise. The default implementation always returns `false`.
19
+
20
+ An example would be:
21
+
22
+ ```ruby
23
+ # define custom validator
24
+ class MyTextValidator < Wx::Validator
25
+
26
+ def validate(_parent)
27
+ txt = get_window.value
28
+ # validate that the control text starts with a capital if not empty
29
+ txt.empty? || (?A..?Z).include?(txt[0])
30
+ end
31
+
32
+ end
33
+
34
+ # ...
35
+
36
+ # assign custom validator to text control
37
+ text = Wx::TextCtrl.new(parent, MY_TEXT_ID)
38
+ text.set_validator(MyTextValidator.new)
39
+ ```
40
+
41
+ The derived, specialized, validator classes {Wx::TextValidator}, {Wx::IntegerValidator}, {Wx::IntegerValidator} and
42
+ {Wx::FloatValidator} all have implementations that can be configured through specific options and do not
43
+ normally require an override to be defined.
44
+
45
+ Examples of using the standard validators would be:
46
+
47
+ ```ruby
48
+ text = Wx::TextCtrl.new(parent, MY_TEXT_ID)
49
+
50
+ # accept only hexadecimal characters
51
+ text.set_validator(Wx::TextValidator.new(Wx::TextValidatorStyle::FILTER_XDIGITS))
52
+
53
+ # or only numbers between -20 and 20
54
+ text.set_validator(Wx::IntegerValidator.new(-20, 20))
55
+ ```
56
+
57
+ ## Event filtering
58
+
59
+ All validator classes are event handlers and can have event handling routines defined (see
60
+ [Event Handling](05_event-handling.md)).
61
+ When processing events the core implementation will allow any validator associated with a window to handle an event
62
+ before the associated window itself thereby allowing it to filter events (see {Wx::EvtHandler#process_event} for more
63
+ details).
64
+
65
+ The standard specialized validators use this functionality to filter entry of allowable characters (by handling
66
+ Wx::EVT_CHAR events).
67
+
68
+ ## Data binding
69
+
70
+ Data binding concerns the transfer of a validator's associated window's value to or from a user definable storage (a
71
+ variable, memory cache entry, persistent storage ...).
72
+
73
+ To integrate with the core C++ implementation but allow for Ruby specific differences the scheme implemented for this
74
+ differs somewhat (in naming and functionality) from the original wxWidgets interface.
75
+
76
+ The responsibilities of the standard wxRuby interface for handling validator data binding is distributed over 2 base
77
+ methods and a mixin module.
78
+
79
+ - The protected {Wx::Validator#do_transfer_from_window} and {Wx::Validator#do_transfer_to_window} methods are
80
+ responsible for collecting and transferring data from/to the associated window (possibly applying conversions).<br>
81
+ <br>
82
+ These methods have default implementations in all of the derived validator classes and should not be overridden for
83
+ specializations of these as they will be ignored.<br>
84
+ Overriding these methods is necessary to implement data binding for any user defined specialization of the base
85
+ {Wx::Validator} class.<br>
86
+ <br>
87
+ - The methods the {Wx::Validator::Binding} mixin module provide the means to store data after collection from or retrieve data
88
+ before transfer to the associated window.<br>
89
+ <br>
90
+ The methods {Wx::Validator::Binding#on_transfer_from_window} and {Wx::Validator::Binding#on_transfer_to_window} provide
91
+ the means to specify user defined binding handlers for storing the data transferred from the associated window or retrieving the
92
+ data to transfer to the associated window. Like with event handling the handlers can be specified using a `String` or
93
+ `Symbol`, a `Proc` or a `Method`.<br>
94
+ <br>
95
+ The methods {Wx::Validator::Binding#do_on_transfer_from_window} and {Wx::Validator::Binding#do_on_transfer_to_window} by
96
+ default call the binding handlers if defined.
97
+ These methods can be overridden to create derived validator classes with dedicated data binding functionality like
98
+ with {Wx::GenericValidator}.
99
+
100
+ An example of a custom validator providing data binding would be:
101
+
102
+ ```ruby
103
+ class MyTextValidator < Wx::Validator
104
+
105
+ def do_transfer_from_window
106
+ get_window.get_value
107
+ end
108
+
109
+ def do_transfer_to_window(val)
110
+ get_window.set_value(val)
111
+ true
112
+ end
113
+
114
+ end
115
+
116
+ # ...
117
+
118
+ # use custom validator
119
+ @data = nil # attribute to store data
120
+ text.set_validator(MyTextValidator.new)
121
+ text.get_validator.on_transfer_to_window { @data }
122
+ text.get_validator.on_transfer_from_window { |v| @data = v }
123
+ ```
124
+
125
+ All derived, specialized, validators implement a dedicated value cache which can be accessed through the `#value` attribute
126
+ accessor. Through this accessor the data collected from the associated window can get retrieved or the data to be transferred
127
+ to the associated window set.
128
+ With these classes it is therefor not necessary to define binding handlers. Defining binding handlers can however still be
129
+ useful to implement a custom, persistent, storage solution.
130
+
131
+ ### Wx::GenericValidator
132
+
133
+ The {Wx::GenericValidator} class provides an extendable standard implementation for data binding in combination with a
134
+ large collection of controls (see class documentation).
135
+ The implementation provides a standard accessor {Wx::GenericValidator#value} to get the data value collected
136
+ from the associated window or set the data to transfer to the associated window.
137
+
138
+ To add support for any control unsupported by the standard implementation the method {Wx::GenericValidator.define_handler}
139
+ is provided (see documentation for an example).
data/lib/wx/doc/font.rb CHANGED
@@ -6,6 +6,7 @@
6
6
 
7
7
 
8
8
  module Wx
9
+
9
10
  class Font
10
11
 
11
12
  # @overload find_or_create_font(point_size, family, style, weight, underline=false, facename='', encoding=Wx::FontEncoding::FONTENCODING_DEFAULT)
data/lib/wx/doc/gc_dc.rb CHANGED
@@ -14,10 +14,15 @@ module Wx
14
14
  # Creates a Wx::GCDC instance for target and
15
15
  # passes the instance to the given block to draw on.
16
16
  # @overload draw_on(dc)
17
- # @param [Wx::WindowDC,Wx::MemoryDC,Wx::PrinterDC] target DC to draw on
17
+ # @param [Wx::WindowDC,Wx::MemoryDC] target DC to draw on
18
18
  # @yieldparam [Wx::GCDC] dc GCDC instance to draw on
19
19
  # @return [Object] result from block
20
20
  # @overload draw_on(dc)
21
+ # @param [Wx::PrinterDC] target DC to draw on
22
+ # @yieldparam [Wx::GCDC] dc GCDC instance to draw on
23
+ # @return [Object] result from block
24
+ # @wxrb_require USE_PRINTING_ARCHITECTURE,WXMSW|WXOSX|USE_GTKPRINT
25
+ # @overload draw_on(gc)
21
26
  # @param [Wx::GraphicsContext] gc GraphicsContext to draw on
22
27
  # @yieldparam [Wx::GCDC] dc GCDC instance to draw on
23
28
  # @return [Object] result from block
@@ -61,8 +61,12 @@ module Wx
61
61
 
62
62
  alias :get_x :get_width
63
63
  alias :x :get_width
64
+ alias :set_x :set_width
65
+ alias :x= :set_width
64
66
  alias :get_y :get_height
65
67
  alias :y :get_height
68
+ alias :set_y :set_height
69
+ alias :y= :set_height
66
70
 
67
71
  # Set this size to the given size's width,height values
68
72
  # @param [Wx::Size] sz
@@ -0,0 +1,95 @@
1
+ # :stopdoc:
2
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
3
+ #
4
+ # This software is released under the MIT license.
5
+ # :startdoc:
6
+
7
+
8
+ module Wx
9
+
10
+ # Wx::GenericValidator performs data transfer (but not validation or filtering)
11
+ # for many type of controls.
12
+ #
13
+ # Wx::GenericValidator supports:
14
+ # - boolean type controls
15
+ # - Wx::CheckBox, Wx::RadioButton, Wx::ToggleButton, Wx::BitmapToggleButton
16
+ # - string type controls
17
+ # - Wx::Button, Wx::StaticText, Wx::TextCtrl
18
+ # - Wx::ComboBox in case it does not have style Wx::CB_READONLY
19
+ # - integer type controls
20
+ # - Wx::RadioBox, Wx::SpinButton, Wx::SpinCtrl, Wx::Gauge, Wx::Slider, Wx::ScrollBar, Wx::Choice
21
+ # - Wx::ComboBox in case it has style Wx::CB_READONLY
22
+ # - Wx::ListBox and Wx::CheckListBox in case of style Wx::LB_SINGLE
23
+ # - integer array type controls
24
+ # - Wx::ListBox and Wx::CheckListBox in case of style Wx::LB_MULTIPLE or Wx::LB_EXTENDED
25
+ # - date/time type controls
26
+ # - Wx::DatePickerCtrl, Wx::TimePickerCtrl
27
+ #
28
+ # It checks the type of the window and uses an appropriate type for it.
29
+ # For example, Wx::Button and Wx::TextCtrl transfer data to and from a
30
+ # String variable; Wx::ListBox uses an Array of Integer (in case of multiple
31
+ # selection list) or an Integer (in case of a single choice list); Wx::CheckBox
32
+ # uses a boolean.
33
+ #
34
+ # In wxRuby this is a pure Ruby implementation derived from Wx::Validator and
35
+ # **not** a wrapper for the C++ wxGenericValidator class although the functionality
36
+ # is virtually identical.
37
+ #
38
+ # @see Wx::Validator
39
+ # @see Wx::TextValidator
40
+ # @see Wx::IntegerValidator
41
+ # @see Wx::UnsignedValidator
42
+ # @see Wx::FloatValidator
43
+ #
44
+ # @wxrb_require USE_VALIDATORS
45
+ class GenericValidator < Wx::Validator
46
+
47
+ # Returns a Hash of handlers for the various control types this class supports.
48
+ # User defined extension (or re-definition) of these handlers is possible.
49
+ # @see GenericValidator.define_handler
50
+ # @return [Hash]
51
+ def self.handlers; end
52
+
53
+ # Defines a new handler for a control type (class).
54
+ #
55
+ # When called it should be supplied the control Class and either a Proc or Method
56
+ # instance or a block which should accept a single Wx::Window argument and an optional
57
+ # second argument.
58
+ # The handler will be called when transferring data from or to the associated window.
59
+ # The associated window is always passed as the first argument.
60
+ # In case of a transfer from the associated window that is the only argument and the
61
+ # handler should retrieve and return the data typical for the type of control window.
62
+ # In case of a transfer to the associated window the second argument will be the data
63
+ # to transfer to the associated control window.
64
+ #
65
+ # @example Definition of Wx::TextCtrl handler
66
+ # GenericValidator.define_handler(Wx::TextCtrl) do |win, *val|
67
+ # if val.empty?
68
+ # win.get_value
69
+ # else
70
+ # win.set_value(val.shift)
71
+ # end
72
+ # end
73
+ #
74
+ # @param [Class] klass control window class
75
+ # @param [Proc,Method,nil] meth
76
+ # @return [void]
77
+ def self.define_handler(klass, meth=nil, &block) end
78
+
79
+ # @overload initialize
80
+ # Default constructor.
81
+ # @return [Wx::GenericValidator]
82
+ # @overload initialize(other)
83
+ # Copy constructor.
84
+ # @param [Wx::GenericValidator] other
85
+ # @return [Wx::GenericValidator]
86
+ def initialize(*arg)end
87
+
88
+ # The value store attribute. Initially nil. When set the type should
89
+ # be appropriate for the associated control type.
90
+ # No forced conversions will be applied.
91
+ attr_accessor :value
92
+
93
+ end
94
+
95
+ end
@@ -35,6 +35,7 @@ module Wx
35
35
  # @see Printing Under Unix (GTK+)
36
36
  # @param printerDC [Wx::PrinterDC]
37
37
  # @return [Wx::GraphicsContext]
38
+ # @wxrb_require USE_PRINTING_ARCHITECTURE,WXMSW|WXOSX|USE_GTKPRINT
38
39
  # @overload self.draw_on(image)
39
40
  # Creates a {Wx::GraphicsContext} associated with a {Wx::Image} and passes that object to the given block.
40
41
  # Deletes the gc object after the block returns.