wxruby3 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
@@ -0,0 +1,495 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ require_relative './validator'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class NumValidator < Validator
16
+
17
+ def setup
18
+ spec.items.replace ['valnum.h'] # enum from XML but only manually defined custom wxRuby classes
19
+ super
20
+ spec.initialize_at_end = true # no inheritance/XML info to analyze
21
+ spec.ignore 'wxMakeIntegerValidator', 'wxMakeFloatingPointValidator'
22
+ # need to explicitly declare this here as we do not have any XML extracted items
23
+ # so the post processing of the EvtHandler director does not work
24
+ spec.add_header_code <<~__HEREDOC
25
+ static WxRuby_ID __wxrb_try_before_id("try_before");
26
+ static WxRuby_ID __wxrb_try_after_id("try_after");
27
+ __HEREDOC
28
+ # provide custom wxRuby numeric validator classes
29
+ spec.add_header_code <<~__HEREDOC
30
+ #include <wx/valnum.h>
31
+
32
+ #ifdef wxLongLong_t
33
+ typedef wxLongLong_t LongestValueType;
34
+ typedef wxULongLong_t ULongestValueType;
35
+ #else
36
+ typedef long LongestValueType;
37
+ typedef unsigned long ULongestValueType;
38
+ #endif
39
+ class WXIntegerValidator : public wxIntegerValidator<LongestValueType>, public wxRubyValidatorBinding
40
+ {
41
+ public:
42
+ WXIntegerValidator(const WXIntegerValidator& v)
43
+ : wxIntegerValidator(v)
44
+ , wxRubyValidatorBinding(v)
45
+ {
46
+ // this is horrible but why they needed to explicitly declare this as a const member is beyond me
47
+ *reinterpret_cast<LongestValueType**> ((void*)&m_value) = &m_valueCache;
48
+ }
49
+ WXIntegerValidator(long style=wxNUM_VAL_DEFAULT)
50
+ : wxIntegerValidator(&m_valueCache, style)
51
+ {}
52
+ WXIntegerValidator(LongestValueType min, LongestValueType max, long style=wxFILTER_NONE)
53
+ : wxIntegerValidator(&m_valueCache, min, max, style)
54
+ {}
55
+ virtual ~WXIntegerValidator()
56
+ {
57
+ wxRuby_ReleaseEvtHandlerProcs(this);
58
+ }
59
+
60
+ virtual wxObject* Clone() const override
61
+ {
62
+ WXIntegerValidator* clone = new WXIntegerValidator(*this);
63
+ clone->m_valueCache = this->m_valueCache;
64
+ return clone;
65
+ }
66
+
67
+ virtual void SetWindow(wxWindow *win) override
68
+ {
69
+ this->wxIntegerValidator::SetWindow(win);
70
+ VALUE self = get_self();
71
+ // make sure Ruby does not own this validator instance anymore
72
+ RDATA(self)->dfree = SWIG_RubyRemoveTracking;
73
+ }
74
+
75
+ virtual bool TransferFromWindow () override
76
+ {
77
+ // call super
78
+ if (this->wxIntegerValidator::TransferFromWindow())
79
+ {
80
+ // ok, data is retrieved from window and cached
81
+ // now allow any defined binding handler to pass on the data
82
+ return this->DoOnTransferFromWindow(LL2NUM(m_valueCache));
83
+ }
84
+ return false;
85
+ }
86
+ virtual bool TransferToWindow () override
87
+ {
88
+ // collect data from any defined binding handler
89
+ VALUE data = this->DoOnTransferToWindow();
90
+ // if Qnil returned there is no data returned from handler so we just keep what's in the store
91
+ if (!NIL_P(data))
92
+ {
93
+ m_valueCache = NUM2LL(data);
94
+ }
95
+ // now allow standard functionality to transfer to window
96
+ return this->wxIntegerValidator::TransferToWindow();
97
+ }
98
+
99
+ LongestValueType GetValue () const
100
+ {
101
+ return m_valueCache;
102
+ }
103
+
104
+ void SetValue (LongestValueType val)
105
+ {
106
+ m_valueCache = val;
107
+ }
108
+
109
+ protected:
110
+ static VALUE c_IntegerValidator;
111
+
112
+ virtual VALUE get_self() override
113
+ {
114
+ if (NIL_P(this->self_))
115
+ {
116
+ this->self_ = SWIG_RubyInstanceFor(this);
117
+ // if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
118
+ if (NIL_P(this->self_))
119
+ {
120
+ if (NIL_P(c_IntegerValidator))
121
+ {
122
+ c_IntegerValidator = rb_const_get(mWxCore, rb_intern("IntegerValidator"));
123
+ }
124
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_IntegerValidator);
125
+ this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
126
+ }
127
+ }
128
+ return this->self_;
129
+ }
130
+
131
+ LongestValueType m_valueCache {};
132
+ };
133
+
134
+ VALUE WXIntegerValidator::c_IntegerValidator = Qnil;
135
+
136
+ static void GC_mark_wxIntegerValidator(void* ptr)
137
+ {
138
+ if (ptr)
139
+ {
140
+ wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
141
+ WXIntegerValidator* rbvp = dynamic_cast<WXIntegerValidator*> (vp);
142
+ // This might be a pointer to a non-customized validator (or clone thereof) created internally
143
+ // by wxWidgets C++ code
144
+ if (rbvp) rbvp->GC_Mark();
145
+ }
146
+ }
147
+
148
+ class WXUnsignedValidator : public wxIntegerValidator<ULongestValueType>, public wxRubyValidatorBinding
149
+ {
150
+ public:
151
+ WXUnsignedValidator(const WXUnsignedValidator& v)
152
+ : wxIntegerValidator(v)
153
+ , wxRubyValidatorBinding(v)
154
+ {
155
+ // this is horrible but why they needed to explicitly declare this as a const member is beyond me
156
+ *reinterpret_cast<ULongestValueType**> ((void*)&m_value) = &m_valueCache;
157
+ }
158
+ WXUnsignedValidator(long style=wxFILTER_NONE)
159
+ : wxIntegerValidator(&m_valueCache, style)
160
+ {}
161
+ WXUnsignedValidator(LongestValueType min, LongestValueType max, long style=wxFILTER_NONE)
162
+ : wxIntegerValidator(&m_valueCache, min, max, style)
163
+ {}
164
+ virtual ~WXUnsignedValidator()
165
+ {
166
+ wxRuby_ReleaseEvtHandlerProcs(this);
167
+ }
168
+
169
+ virtual wxObject* Clone() const override
170
+ {
171
+ WXUnsignedValidator* clone = new WXUnsignedValidator(*this);
172
+ clone->m_valueCache = this->m_valueCache;
173
+ return clone;
174
+ }
175
+
176
+ virtual void SetWindow(wxWindow *win) override
177
+ {
178
+ this->wxIntegerValidator::SetWindow(win);
179
+ VALUE self = get_self();
180
+ // make sure Ruby does not own this validator instance anymore
181
+ RDATA(self)->dfree = SWIG_RubyRemoveTracking;
182
+ }
183
+
184
+ virtual bool TransferFromWindow () override
185
+ {
186
+ // call super
187
+ if (this->wxIntegerValidator::TransferFromWindow())
188
+ {
189
+ // ok, data is retrieved from window and cached
190
+ // now allow any defined binding handler to pass on the data
191
+ return this->DoOnTransferFromWindow(ULL2NUM(m_valueCache));
192
+ }
193
+ return false;
194
+ }
195
+ virtual bool TransferToWindow () override
196
+ {
197
+ // collect data from any defined binding handler
198
+ VALUE data = this->DoOnTransferToWindow();
199
+ // if Qnil returned there is no data returned from handler so we just keep what's in the store
200
+ if (!NIL_P(data))
201
+ {
202
+ m_valueCache = NUM2ULL(data);
203
+ }
204
+ // now allow standard functionality to transfer to window
205
+ return this->wxIntegerValidator::TransferToWindow();
206
+ }
207
+
208
+ ULongestValueType GetValue () const
209
+ {
210
+ return m_valueCache;
211
+ }
212
+
213
+ void SetValue (ULongestValueType val)
214
+ {
215
+ m_valueCache = val;
216
+ }
217
+
218
+ protected:
219
+ static VALUE c_UnsignedValidator;
220
+
221
+ virtual VALUE get_self() override
222
+ {
223
+ if (NIL_P(this->self_))
224
+ {
225
+ this->self_ = SWIG_RubyInstanceFor(this);
226
+ // if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
227
+ if (NIL_P(this->self_))
228
+ {
229
+ if (NIL_P(c_UnsignedValidator))
230
+ {
231
+ c_UnsignedValidator = rb_const_get(mWxCore, rb_intern("UnsignedValidator"));
232
+ }
233
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_UnsignedValidator);
234
+ this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
235
+ }
236
+ }
237
+ return this->self_;
238
+ }
239
+
240
+ ULongestValueType m_valueCache {};
241
+ };
242
+
243
+ VALUE WXUnsignedValidator::c_UnsignedValidator = Qnil;
244
+
245
+ static void GC_mark_wxUnsignedValidator(void* ptr)
246
+ {
247
+ if (ptr)
248
+ {
249
+ wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
250
+ WXUnsignedValidator* rbvp = dynamic_cast<WXUnsignedValidator*> (vp);
251
+ // This might be a pointer to a non-customized validator (or clone thereof) created internally
252
+ // by wxWidgets C++ code
253
+ if (rbvp) rbvp->GC_Mark();
254
+ }
255
+ }
256
+
257
+ class WXFloatValidator : public wxFloatingPointValidator<double>, public wxRubyValidatorBinding
258
+ {
259
+ public:
260
+ WXFloatValidator(const WXFloatValidator& v)
261
+ : wxFloatingPointValidator(v)
262
+ , wxRubyValidatorBinding(v)
263
+ {
264
+ // this is horrible but why they needed to explicitly declare this as a const member is beyond me
265
+ *reinterpret_cast<double**> ((void*)&m_value) = &m_valueCache;
266
+ }
267
+ WXFloatValidator(long style=wxFILTER_NONE)
268
+ : wxFloatingPointValidator(&m_valueCache, style)
269
+ {}
270
+ WXFloatValidator(int precision, long style=wxFILTER_NONE)
271
+ : wxFloatingPointValidator(precision, &m_valueCache, style)
272
+ {}
273
+ virtual ~WXFloatValidator()
274
+ {
275
+ wxRuby_ReleaseEvtHandlerProcs(this);
276
+ }
277
+
278
+ virtual wxObject* Clone() const override
279
+ {
280
+ return new WXFloatValidator(*this);
281
+ }
282
+
283
+ virtual void SetWindow(wxWindow *win) override
284
+ {
285
+ this->wxFloatingPointValidator::SetWindow(win);
286
+ VALUE self = get_self();
287
+ // make sure Ruby does not own this validator instance anymore
288
+ RDATA(self)->dfree = SWIG_RubyRemoveTracking;
289
+ }
290
+
291
+ virtual bool TransferFromWindow () override
292
+ {
293
+ // call super
294
+ if (this->wxFloatingPointValidator::TransferFromWindow())
295
+ {
296
+ // ok, data is retrieved from window and cached
297
+ // now allow any defined binding handler to pass on the data
298
+ return this->DoOnTransferFromWindow(DBL2NUM(m_valueCache));
299
+ }
300
+ return false;
301
+ }
302
+ virtual bool TransferToWindow () override
303
+ {
304
+ // collect data from any defined binding handler
305
+ VALUE data = this->DoOnTransferToWindow();
306
+ // if Qnil returned there is no data returned from handler so we just keep what's in the store
307
+ if (!NIL_P(data))
308
+ {
309
+ m_valueCache = NUM2DBL(data);
310
+ }
311
+ // now allow standard functionality to transfer to window
312
+ return this->wxFloatingPointValidator::TransferToWindow();
313
+ }
314
+
315
+ double GetValue () const
316
+ {
317
+ return m_valueCache;
318
+ }
319
+
320
+ void SetValue (double val)
321
+ {
322
+ m_valueCache = val;
323
+ }
324
+
325
+ protected:
326
+ static VALUE c_FloatValidator;
327
+
328
+ virtual VALUE get_self() override
329
+ {
330
+ if (NIL_P(this->self_))
331
+ {
332
+ this->self_ = SWIG_RubyInstanceFor(this);
333
+ // if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
334
+ if (NIL_P(this->self_))
335
+ {
336
+ if (NIL_P(c_FloatValidator))
337
+ {
338
+ c_FloatValidator = rb_const_get(mWxCore, rb_intern("FloatValidator"));
339
+ }
340
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_FloatValidator);
341
+ this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
342
+ }
343
+ }
344
+ return this->self_;
345
+ }
346
+
347
+ double m_valueCache {};
348
+ };
349
+
350
+ VALUE WXFloatValidator::c_FloatValidator = Qnil;
351
+
352
+ static void GC_mark_wxFloatValidator(void* ptr)
353
+ {
354
+ if (ptr)
355
+ {
356
+ wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
357
+ WXFloatValidator* rbvp = dynamic_cast<WXFloatValidator*> (vp);
358
+ // This might be a pointer to a non-customized validator (or clone thereof) created internally
359
+ // by wxWidgets C++ code
360
+ if (rbvp) rbvp->GC_Mark();
361
+ }
362
+ }
363
+ __HEREDOC
364
+ spec.add_swig_code 'GC_MANAGE_AS_OBJECT(WXIntegerValidator);',
365
+ '%markfunc WXIntegerValidator "GC_mark_wxIntegerValidator";',
366
+ 'GC_MANAGE_AS_OBJECT(WXUnsignedValidator);',
367
+ '%markfunc WXUnsignedValidator "GC_mark_wxUnsignedValidator";',
368
+ 'GC_MANAGE_AS_OBJECT(WXFloatValidator);',
369
+ '%markfunc WXFloatValidator "GC_mark_wxFloatValidator";'
370
+ spec.new_object 'WXIntegerValidator::Clone',
371
+ 'WXUnsignedValidator::Clone',
372
+ 'WXFloatValidator::Clone'
373
+ spec.suppress_warning(473,
374
+ 'WXIntegerValidator::Clone',
375
+ 'WXUnsignedValidator::Clone',
376
+ 'WXFloatValidator::Clone')
377
+ spec.map_apply 'long long * OUTPUT' => ['wxLongLong_t& min', 'wxLongLong_t& max']
378
+ spec.map_apply 'unsigned long long * OUTPUT' => ['wxULongLong_t& min', 'wxULongLong_t& max']
379
+ spec.map_apply 'double * OUTPUT' => ['double& min', 'double& max']
380
+ spec.swig_import 'swig/classes/include/wxObject.h'
381
+ spec.swig_import 'swig/classes/include/wxEvtHandler.h'
382
+ spec.swig_import 'swig/classes/include/wxValidator.h'
383
+ # hardcoded interface declarations
384
+ spec.add_interface_code <<~__HEREDOC
385
+ // Bit masks used for numeric validator styles.
386
+ enum wxNumValidatorStyle
387
+ {
388
+ wxNUM_VAL_DEFAULT = 0x0,
389
+ wxNUM_VAL_THOUSANDS_SEPARATOR = 0x1,
390
+ wxNUM_VAL_ZERO_AS_BLANK = 0x2,
391
+ wxNUM_VAL_NO_TRAILING_ZEROES = 0x4
392
+ };
393
+
394
+ %alias WXIntegerValidator::GetMin "min";
395
+ %alias WXIntegerValidator::SetMin "min=";
396
+ %alias WXIntegerValidator::GetMax "max";
397
+ %alias WXIntegerValidator::SetMax "max=";
398
+ %alias WXIntegerValidator::SetStyle "style=";
399
+ %alias WXIntegerValidator::GetValue "value";
400
+ %alias WXIntegerValidator::SetValue "value=";
401
+
402
+ class WXIntegerValidator : public wxValidator
403
+ {
404
+ public:
405
+ WXIntegerValidator(const WXIntegerValidator& v);
406
+ WXIntegerValidator(long style=wxNUM_VAL_DEFAULT);
407
+ WXIntegerValidator(wxLongLong_t min, wxLongLong_t max, long style=wxFILTER_NONE);
408
+ virtual ~WXIntegerValidator();
409
+
410
+ virtual WXIntegerValidator* Clone() const;
411
+
412
+ void SetMin(wxLongLong_t min);
413
+ wxLongLong_t GetMin() const;
414
+ void SetMax(wxLongLong_t max);
415
+ wxLongLong_t GetMax() const;
416
+ void SetRange(wxLongLong_t min, wxLongLong_t max);
417
+ void GetRange(wxLongLong_t& min, wxLongLong_t& max) const;
418
+ void SetStyle(int style);
419
+
420
+ // wxRuby extensions
421
+ wxLongLong_t GetValue () const;
422
+ void SetValue (wxLongLong_t val);
423
+ };
424
+
425
+ %alias WXUnsignedValidator::GetMin "min";
426
+ %alias WXUnsignedValidator::SetMin "min=";
427
+ %alias WXUnsignedValidator::GetMax "max";
428
+ %alias WXUnsignedValidator::SetMax "max=";
429
+ %alias WXUnsignedValidator::SetStyle "style=";
430
+ %alias WXUnsignedValidator::GetValue "value";
431
+ %alias WXUnsignedValidator::SetValue "value=";
432
+
433
+ class WXUnsignedValidator : public wxValidator
434
+ {
435
+ public:
436
+ WXUnsignedValidator(const WXUnsignedValidator& v);
437
+ WXUnsignedValidator(long style=wxNUM_VAL_DEFAULT);
438
+ WXUnsignedValidator(wxULongLong_t min, wxULongLong_t max, long style=wxFILTER_NONE);
439
+ virtual ~WXUnsignedValidator();
440
+
441
+ virtual WXUnsignedValidator* Clone() const;
442
+
443
+ void SetMin(wxULongLong_t min);
444
+ wxULongLong_t GetMin() const;
445
+ void SetMax(wxULongLong_t max);
446
+ wxULongLong_t GetMax() const;
447
+ void SetRange(wxULongLong_t min, wxULongLong_t max);
448
+ void GetRange(wxULongLong_t& min, wxULongLong_t& max) const;
449
+ void SetStyle(int style);
450
+
451
+ // wxRuby extensions
452
+ wxULongLong_t GetValue () const;
453
+ void SetValue (wxULongLong_t val);
454
+ };
455
+
456
+ %alias WXFloatValidator::GetMin "min";
457
+ %alias WXFloatValidator::SetMin "min=";
458
+ %alias WXFloatValidator::GetMax "max";
459
+ %alias WXFloatValidator::SetMax "max=";
460
+ %alias WXFloatValidator::SetStyle "style=";
461
+ %alias WXFloatValidator::GetValue "value";
462
+ %alias WXFloatValidator::SetValue "value=";
463
+
464
+ class WXFloatValidator : public wxValidator
465
+ {
466
+ public:
467
+ WXFloatValidator(const WXFloatValidator& v);
468
+ WXFloatValidator(long style=wxNUM_VAL_DEFAULT);
469
+ WXFloatValidator(int precision, long style);
470
+ virtual ~WXFloatValidator();
471
+
472
+ virtual WXFloatValidator* Clone() const;
473
+
474
+ void SetMin(double min);
475
+ double GetMin() const;
476
+ void SetMax(double max);
477
+ double GetMax() const;
478
+ void SetRange(double min, double max);
479
+ void GetRange(double& min, double& max) const;
480
+ void SetStyle(int style);
481
+
482
+ void SetPrecision(unsigned precision);
483
+ void SetFactor(double factor);
484
+
485
+ // wxRuby extensions
486
+ double GetValue () const;
487
+ void SetValue (double val);
488
+ };
489
+ __HEREDOC
490
+ end
491
+ end # class NumValidator
492
+
493
+ end # class Director
494
+
495
+ end # module WXRuby3
@@ -6,31 +6,156 @@
6
6
  # wxRuby3 wxWidgets interface director
7
7
  ###
8
8
 
9
- require_relative './event_handler'
9
+ require_relative './validator'
10
10
 
11
11
  module WXRuby3
12
12
 
13
13
  class Director
14
14
 
15
- class NumericPropertyValidator < EvtHandler
15
+ class NumericPropertyValidator < Validator
16
16
 
17
17
  def setup
18
18
  super
19
19
  # need a custom implementation to handle event handler proc cleanup
20
20
  spec.add_header_code <<~__HEREDOC
21
- class WXRubyNumericPropertyValidator : public wxNumericPropertyValidator
21
+ class WXRubyNumericPropertyValidator : public wxNumericPropertyValidator, public wxRubyValidatorBinding
22
22
  {
23
23
  public:
24
24
  WXRubyNumericPropertyValidator(NumericType numericType, int base=10)
25
- : wxNumericPropertyValidator(numericType, base) {}
25
+ : wxNumericPropertyValidator(numericType, base)
26
+ {
27
+ m_stringValue = &m_valueCache;
28
+ }
29
+ WXRubyNumericPropertyValidator(const WXRubyNumericPropertyValidator& other)
30
+ : wxNumericPropertyValidator(other)
31
+ , wxRubyValidatorBinding(other)
32
+ {
33
+ m_stringValue = &m_valueCache;
34
+ }
26
35
  virtual ~WXRubyNumericPropertyValidator()
27
36
  {
28
37
  wxRuby_ReleaseEvtHandlerProcs(this);
29
38
  }
39
+
40
+ virtual wxObject* Clone() const override
41
+ {
42
+ WXRubyNumericPropertyValidator *clone = new WXRubyNumericPropertyValidator(*this);
43
+ clone->m_valueCache = this->m_valueCache;
44
+ return clone;
45
+ }
46
+
47
+ virtual void SetWindow(wxWindow *win) override
48
+ {
49
+ this->wxNumericPropertyValidator::SetWindow(win);
50
+ VALUE self = get_self();
51
+ // make sure Ruby does not own this validator instance anymore
52
+ RDATA(self)->dfree = SWIG_RubyRemoveTracking;
53
+ }
54
+
55
+ virtual bool TransferFromWindow () override
56
+ {
57
+ // call super
58
+ if (this->wxNumericPropertyValidator::TransferFromWindow())
59
+ {
60
+ // ok, data is retrieved from window and cached
61
+ // now allow any defined binding handler to pass on the data
62
+ return this->DoOnTransferFromWindow(WXSTR_TO_RSTR(m_valueCache));
63
+ }
64
+ return false;
65
+ }
66
+ virtual bool TransferToWindow () override
67
+ {
68
+ // collect data from any defined binding handler
69
+ VALUE data = this->DoOnTransferToWindow();
70
+ // if Qnil returned there is no data returned from handler so we just keep what's in the store
71
+ if (!NIL_P(data))
72
+ {
73
+ m_valueCache = RSTR_TO_WXSTR(data);
74
+ }
75
+ // now allow standard functionality to transfer to window
76
+ return this->wxNumericPropertyValidator::TransferToWindow();
77
+ }
78
+
79
+ const wxString& GetValue () const
80
+ {
81
+ return m_valueCache;
82
+ }
83
+
84
+ void SetValue (const wxString& val)
85
+ {
86
+ m_valueCache = val;
87
+ }
88
+
89
+ private:
90
+ static VALUE c_NumericPropertyValidator;
91
+
92
+ virtual VALUE get_self() override
93
+ {
94
+ if (NIL_P(this->self_))
95
+ {
96
+ this->self_ = SWIG_RubyInstanceFor(this);
97
+ // if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
98
+ if (NIL_P(this->self_))
99
+ {
100
+ if (NIL_P(c_NumericPropertyValidator))
101
+ {
102
+ c_NumericPropertyValidator = rb_eval_string("Wx::PG::NumericPropertyValidator");
103
+ }
104
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_NumericPropertyValidator);
105
+ this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
106
+ }
107
+ }
108
+ return this->self_;
109
+ }
110
+
111
+ wxString m_valueCache;
30
112
  };
31
- __HEREDOC
113
+
114
+ VALUE WXRubyNumericPropertyValidator::c_NumericPropertyValidator = Qnil;
115
+
116
+ static void GC_mark_wxNumericPropertyValidator(void* ptr)
117
+ {
118
+ if (ptr)
119
+ {
120
+ wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
121
+ WXRubyNumericPropertyValidator* rbvp = dynamic_cast<WXRubyNumericPropertyValidator*> (vp);
122
+ // This might be a pointer to a non-customized validator (or clone thereof) created internally
123
+ // by wxWidgets C++ code
124
+ if (rbvp) rbvp->GC_Mark();
125
+ }
126
+ }
127
+ __HEREDOC
128
+ spec.add_swig_code '%markfunc wxValidator "GC_mark_wxValidator";'
129
+ # make Ruby director and wrappers use custom implementation
32
130
  spec.use_class_implementation 'wxNumericPropertyValidator', 'WXRubyNumericPropertyValidator'
33
- spec.no_proxy 'wxNumericPropertyValidator::Clone'
131
+ spec.new_object 'wxNumericPropertyValidator::Clone'
132
+ # add wxRuby extensions
133
+ spec.add_extend_code 'wxNumericPropertyValidator', <<~__HEREDOC
134
+ VALUE GetValue()
135
+ {
136
+ WXRubyNumericPropertyValidator* rb_self = dynamic_cast<WXRubyNumericPropertyValidator*> ($self);
137
+ if (rb_self)
138
+ return WXSTR_TO_RSTR(rb_self->GetValue());
139
+ else
140
+ return Qnil;
141
+ }
142
+
143
+ void SetValue(const wxString& val)
144
+ {
145
+ WXRubyNumericPropertyValidator* rb_self = dynamic_cast<WXRubyNumericPropertyValidator*> ($self);
146
+ if (rb_self)
147
+ rb_self->SetValue(val);
148
+ }
149
+ __HEREDOC
150
+ # handle clone mapping
151
+ spec.map 'wxObject *' => 'Wx::PG::NumericPropertyValidator' do
152
+ map_out code: <<~__CODE
153
+ $result = SWIG_NewPointerObj(SWIG_as_voidptr($1), SWIGTYPE_p_wxTextValidator, SWIG_POINTER_OWN);
154
+ __CODE
155
+ end
156
+ spec.suppress_warning(473, 'wxNumericPropertyValidator::Clone')
157
+ spec.extend_interface 'wxNumericPropertyValidator',
158
+ 'wxNumericPropertyValidator(const wxNumericPropertyValidator &other)'
34
159
  spec.do_not_generate :variables, :defines, :enums, :functions
35
160
  end
36
161