wxruby3 0.9.2 → 0.9.4

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 (379) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  5. data/ext/wxruby3/include/wxruby-Config.h +23 -5
  6. data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
  7. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  8. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  9. data/ext/wxruby3/swig/custom/director.swg +8 -0
  10. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  11. data/ext/wxruby3/swig/memory_management.i +6 -0
  12. data/lib/wx/core/bitmap_combobox.rb +17 -21
  13. data/lib/wx/core/book_ctrl_base.rb +16 -0
  14. data/lib/wx/core/combobox.rb +13 -3
  15. data/lib/wx/core/config.rb +454 -83
  16. data/lib/wx/core/controlwithitems.rb +40 -130
  17. data/lib/wx/core/enum.rb +17 -1
  18. data/lib/wx/core/event.rb +6 -1
  19. data/lib/wx/core/evthandler.rb +8 -2
  20. data/lib/wx/core/generic_validator.rb +312 -0
  21. data/lib/wx/core/listbox.rb +2 -2
  22. data/lib/wx/core/log.rb +1 -1
  23. data/lib/wx/core/notebook.rb +10 -8
  24. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  25. data/lib/wx/core/peristent_object.rb +15 -0
  26. data/lib/wx/core/persistence_manager.rb +39 -0
  27. data/lib/wx/core/persistent_window.rb +16 -0
  28. data/lib/wx/core/size.rb +4 -0
  29. data/lib/wx/core/sizer.rb +1 -2
  30. data/lib/wx/core/standard_paths.rb +22 -0
  31. data/lib/wx/core/text_entry.rb +4 -1
  32. data/lib/wx/core/top_level_window.rb +16 -0
  33. data/lib/wx/core/treebook.rb +18 -0
  34. data/lib/wx/core/validator.rb +70 -5
  35. data/lib/wx/core/window.rb +3 -7
  36. data/lib/wx/core.rb +4 -0
  37. data/lib/wx/doc/art_locator.rb +1 -0
  38. data/lib/wx/doc/book_ctrl_base.rb +19 -0
  39. data/lib/wx/doc/comboctrl.rb +18 -0
  40. data/lib/wx/doc/config.rb +101 -41
  41. data/lib/wx/doc/controlwithitems.rb +16 -0
  42. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  43. data/lib/wx/doc/editable_listbox.rb +44 -0
  44. data/lib/wx/doc/enum.rb +15 -0
  45. data/lib/wx/doc/event.rb +12 -0
  46. data/lib/wx/doc/extra/12_client_data.md +89 -0
  47. data/lib/wx/doc/extra/13_validators.md +139 -0
  48. data/lib/wx/doc/extra/14_config.md +101 -0
  49. data/lib/wx/doc/extra/15_persistence.md +148 -0
  50. data/lib/wx/doc/gdi_common.rb +4 -0
  51. data/lib/wx/doc/generic_validator.rb +95 -0
  52. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  53. data/lib/wx/doc/num_validator.rb +387 -0
  54. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  55. data/lib/wx/doc/persistence_manager.rb +36 -0
  56. data/lib/wx/doc/persistent_object.rb +27 -0
  57. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  58. data/lib/wx/doc/static_bitmap.rb +25 -0
  59. data/lib/wx/doc/text_validator.rb +10 -0
  60. data/lib/wx/doc/top_level_window.rb +19 -0
  61. data/lib/wx/doc/treebook.rb +6 -1
  62. data/lib/wx/doc/validator.rb +113 -0
  63. data/lib/wx/doc/window.rb +30 -0
  64. data/lib/wx/html/simple_html_listbox.rb +24 -91
  65. data/lib/wx/keyword_defs.rb +34 -2
  66. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  67. data/lib/wx/version.rb +1 -1
  68. data/rakelib/build.rb +1 -1
  69. data/rakelib/lib/config/mingw.rb +12 -0
  70. data/rakelib/lib/core/include/client_data.inc +65 -0
  71. data/rakelib/lib/core/include/funcall.inc +1 -1
  72. data/rakelib/lib/core/package.rb +39 -3
  73. data/rakelib/lib/core/parameter.rb +1 -1
  74. data/rakelib/lib/core/spec.rb +10 -0
  75. data/rakelib/lib/core/spec_helper.rb +8 -2
  76. data/rakelib/lib/director/app.rb +18 -0
  77. data/rakelib/lib/director/app_traits.rb +3 -1
  78. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  79. data/rakelib/lib/director/combobox.rb +22 -0
  80. data/rakelib/lib/director/comboctrl.rb +1 -55
  81. data/rakelib/lib/director/config_base.rb +490 -19
  82. data/rakelib/lib/director/ctrl_with_items.rb +88 -21
  83. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  84. data/rakelib/lib/director/editable_listbox.rb +30 -0
  85. data/rakelib/lib/director/event.rb +102 -12
  86. data/rakelib/lib/director/event_filter.rb +1 -1
  87. data/rakelib/lib/director/event_handler.rb +3 -2
  88. data/rakelib/lib/director/event_loop.rb +1 -1
  89. data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
  90. data/rakelib/lib/director/functions.rb +4 -2
  91. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  92. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  93. data/rakelib/lib/director/grid_cell_editor.rb +1 -3
  94. data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
  95. data/rakelib/lib/director/header_ctrl.rb +9 -1
  96. data/rakelib/lib/director/html_listbox.rb +97 -22
  97. data/rakelib/lib/director/num_validator.rb +495 -0
  98. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  99. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  100. data/rakelib/lib/director/persistence_manager.rb +410 -0
  101. data/rakelib/lib/director/persistent_object.rb +70 -0
  102. data/rakelib/lib/director/persistent_window.rb +73 -0
  103. data/rakelib/lib/director/pgproperty.rb +3 -29
  104. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  105. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  106. data/rakelib/lib/director/sizer.rb +15 -4
  107. data/rakelib/lib/director/sizer_item.rb +13 -0
  108. data/rakelib/lib/director/static_bitmap.rb +32 -0
  109. data/rakelib/lib/director/text_entry.rb +5 -1
  110. data/rakelib/lib/director/text_validator.rb +124 -13
  111. data/rakelib/lib/director/toggle_button.rb +1 -0
  112. data/rakelib/lib/director/top_level_window.rb +0 -2
  113. data/rakelib/lib/director/tree_ctrl.rb +35 -0
  114. data/rakelib/lib/director/utils.rb +16 -2
  115. data/rakelib/lib/director/validator.rb +196 -21
  116. data/rakelib/lib/director/window.rb +16 -2
  117. data/rakelib/lib/extractor/function.rb +2 -1
  118. data/rakelib/lib/generate/analyzer.rb +44 -44
  119. data/rakelib/lib/generate/doc.rb +11 -5
  120. data/rakelib/lib/specs/interfaces.rb +5 -0
  121. data/rakelib/lib/swig_runner.rb +55 -9
  122. data/rakelib/lib/typemap/client_data.rb +67 -0
  123. data/rakelib/lib/typemap/common.rb +3 -3
  124. data/rakelib/lib/typemap/config.rb +8 -0
  125. data/rakelib/lib/typemap/datetime.rb +1 -1
  126. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  127. data/samples/aui/aui.rb +1237 -1233
  128. data/samples/calendar/calendar.rb +293 -289
  129. data/samples/controls/get_item_sample.rb +83 -79
  130. data/samples/controls/htlbox.rb +331 -327
  131. data/samples/dialogs/dialogs.rb +682 -694
  132. data/samples/dialogs/wizard.rb +52 -55
  133. data/samples/dragdrop/dragdrop.rb +146 -142
  134. data/samples/drawing/bitmap.rb +29 -26
  135. data/samples/drawing/bitmap_image.rb +84 -80
  136. data/samples/drawing/graphics_drawing.rb +209 -205
  137. data/samples/drawing/image_prt.rb +344 -340
  138. data/samples/drawing/maths_images.rb +18 -1
  139. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  140. data/samples/etc/caret.rb +306 -0
  141. data/samples/etc/miniframe.rb +65 -60
  142. data/samples/etc/sash.rb +109 -105
  143. data/samples/etc/scrollwin.rb +86 -80
  144. data/samples/etc/system_settings.rb +216 -209
  145. data/samples/event/activation.rb +72 -67
  146. data/samples/event/event.rb +160 -153
  147. data/samples/event/threaded.rb +8 -1
  148. data/samples/event/update_ui_event.rb +67 -60
  149. data/samples/grid/grid.rb +188 -181
  150. data/samples/grid/gridtablebase.rb +136 -129
  151. data/samples/html/html.rb +208 -204
  152. data/samples/mdi/mdi.rb +59 -54
  153. data/samples/minimal/minimal.rb +54 -51
  154. data/samples/minimal/nothing.rb +1 -0
  155. data/samples/printing/printing.rb +367 -377
  156. data/samples/printing/printing2.rb +203 -198
  157. data/samples/propgrid/propgrid.rb +2312 -2308
  158. data/samples/propgrid/propgrid_minimal.rb +57 -50
  159. data/samples/ribbon/ribbon.rb +780 -774
  160. data/samples/sampler/ext.rb +0 -33
  161. data/samples/sampler/sample.rb +4 -9
  162. data/samples/sampler.rb +1 -1
  163. data/samples/splash/splash.rb +118 -116
  164. data/samples/text/rich_textctrl.rb +207 -201
  165. data/samples/text/richtext.rb +1409 -1405
  166. data/samples/text/scintilla.rb +137 -128
  167. data/samples/text/textctrl.rb +89 -83
  168. data/samples/text/unicode.rb +175 -168
  169. data/samples/treectrl/treectrl.rb +1430 -1426
  170. data/samples/widgets/activityindicator.rb +95 -0
  171. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  172. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  173. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  174. data/samples/widgets/art/widgets/button.xpm +54 -0
  175. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  176. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  177. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  178. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  179. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  180. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  181. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  182. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  183. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  184. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  185. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  186. data/samples/widgets/art/widgets/header.xpm +54 -0
  187. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  188. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  189. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  190. data/samples/widgets/art/widgets/native.xpm +81 -0
  191. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  192. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  193. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  194. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  195. data/samples/widgets/art/widgets/slider.xpm +54 -0
  196. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  197. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  198. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  199. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  200. data/samples/widgets/art/widgets/text.xpm +54 -0
  201. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  202. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  203. data/samples/widgets/art/widgets/toucan.png +0 -0
  204. data/samples/widgets/bmpcombobox.rb +651 -0
  205. data/samples/widgets/button.rb +462 -0
  206. data/samples/widgets/checkbox.rb +211 -0
  207. data/samples/widgets/choice.rb +287 -0
  208. data/samples/widgets/clrpicker.rb +156 -0
  209. data/samples/widgets/combobox.rb +516 -0
  210. data/samples/widgets/datepick.rb +215 -0
  211. data/samples/widgets/dirctrl.rb +265 -0
  212. data/samples/widgets/dirpicker.rb +158 -0
  213. data/samples/widgets/editlbox.rb +122 -0
  214. data/samples/widgets/filectrl.rb +216 -0
  215. data/samples/widgets/filepicker.rb +214 -0
  216. data/samples/widgets/fontpicker.rb +135 -0
  217. data/samples/widgets/gauge.rb +311 -0
  218. data/samples/widgets/headerctrl.rb +236 -0
  219. data/samples/widgets/hyperlink.rb +203 -0
  220. data/samples/widgets/itemcontainer.rb +185 -0
  221. data/samples/widgets/listbox.rb +473 -0
  222. data/samples/widgets/notebook.rb +488 -0
  223. data/samples/widgets/odcombobox.rb +608 -0
  224. data/samples/widgets/radiobox.rb +328 -0
  225. data/samples/widgets/searchctrl.rb +159 -0
  226. data/samples/widgets/slider.rb +594 -0
  227. data/samples/widgets/spinbtn.rb +443 -0
  228. data/samples/widgets/statbmp.rb +130 -0
  229. data/samples/widgets/static.rb +436 -0
  230. data/samples/widgets/textctrl.rb +700 -0
  231. data/samples/widgets/timepick.rb +148 -0
  232. data/samples/widgets/tn_widgets.png +0 -0
  233. data/samples/widgets/toggle.rb +385 -0
  234. data/samples/widgets/widgets.rb +1229 -0
  235. data/samples/xrc/custom_xrc_sample.rb +47 -41
  236. data/samples/xrc/xrc_sample.rb +53 -47
  237. data/tests/test_config.rb +207 -42
  238. data/tests/test_event_handling.rb +52 -34
  239. data/tests/test_events.rb +7 -0
  240. data/tests/test_item_data.rb +24 -0
  241. data/tests/test_persistence.rb +142 -0
  242. data/tests/test_sizer.rb +44 -1
  243. data/tests/test_validators.rb +805 -0
  244. metadata +109 -138
  245. data/lib/wx/core/choice.rb +0 -14
  246. data/lib/wx/core/combo_ctrl.rb +0 -110
  247. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  248. data/samples/bigdemo/About.rbw +0 -39
  249. data/samples/bigdemo/ColorPanel.rbw +0 -23
  250. data/samples/bigdemo/GridSimple.rbw +0 -78
  251. data/samples/bigdemo/MDIDemo.rbw +0 -57
  252. data/samples/bigdemo/PopupMenu.rbw +0 -146
  253. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  254. data/samples/bigdemo/Sizers.rbw +0 -541
  255. data/samples/bigdemo/bigdemo.rb +0 -817
  256. data/samples/bigdemo/demoTemplate.rbw +0 -33
  257. data/samples/bigdemo/helpfile.htb +0 -0
  258. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  259. data/samples/bigdemo/icons/Test 015.png +0 -0
  260. data/samples/bigdemo/icons/choice.bmp +0 -0
  261. data/samples/bigdemo/icons/combo.bmp +0 -0
  262. data/samples/bigdemo/icons/combo.xpm +0 -27
  263. data/samples/bigdemo/icons/copy.xpm +0 -25
  264. data/samples/bigdemo/icons/cut.xpm +0 -24
  265. data/samples/bigdemo/icons/gauge.bmp +0 -0
  266. data/samples/bigdemo/icons/gauge.xpm +0 -27
  267. data/samples/bigdemo/icons/help.xpm +0 -25
  268. data/samples/bigdemo/icons/list.bmp +0 -0
  269. data/samples/bigdemo/icons/list.xpm +0 -27
  270. data/samples/bigdemo/icons/mondrian.ico +0 -0
  271. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  272. data/samples/bigdemo/icons/new.xpm +0 -24
  273. data/samples/bigdemo/icons/ogl.ico +0 -0
  274. data/samples/bigdemo/icons/ogl.xpm +0 -45
  275. data/samples/bigdemo/icons/open.xpm +0 -26
  276. data/samples/bigdemo/icons/paste.bmp +0 -0
  277. data/samples/bigdemo/icons/paste.xpm +0 -38
  278. data/samples/bigdemo/icons/pointy.png +0 -0
  279. data/samples/bigdemo/icons/preview.xpm +0 -26
  280. data/samples/bigdemo/icons/print.xpm +0 -26
  281. data/samples/bigdemo/icons/radio.bmp +0 -0
  282. data/samples/bigdemo/icons/radio.xpm +0 -27
  283. data/samples/bigdemo/icons/robert.xpm +0 -415
  284. data/samples/bigdemo/icons/sashtest.ico +0 -0
  285. data/samples/bigdemo/icons/save.xpm +0 -25
  286. data/samples/bigdemo/icons/smiles.bmp +0 -0
  287. data/samples/bigdemo/icons/smiles.xpm +0 -39
  288. data/samples/bigdemo/icons/smiley.ico +0 -0
  289. data/samples/bigdemo/icons/smiley.xpm +0 -42
  290. data/samples/bigdemo/icons/stattext.xpm +0 -24
  291. data/samples/bigdemo/icons/test2.bmp +0 -0
  292. data/samples/bigdemo/icons/test2.png +0 -0
  293. data/samples/bigdemo/icons/test2.xpm +0 -79
  294. data/samples/bigdemo/icons/text.bmp +0 -0
  295. data/samples/bigdemo/icons/text.xpm +0 -27
  296. data/samples/bigdemo/icons/tog1.bmp +0 -0
  297. data/samples/bigdemo/icons/tog1.xpm +0 -38
  298. data/samples/bigdemo/icons/tog2.bmp +0 -0
  299. data/samples/bigdemo/icons/tog2.xpm +0 -38
  300. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  301. data/samples/bigdemo/icons/wxwin.ico +0 -0
  302. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  303. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  304. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  305. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  306. data/samples/bigdemo/run.rb +0 -98
  307. data/samples/bigdemo/tips.txt +0 -7
  308. data/samples/bigdemo/utils.rb +0 -20
  309. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  310. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  311. data/samples/bigdemo/wxButton.rbw +0 -64
  312. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  313. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  314. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  315. data/samples/bigdemo/wxChoice.rbw +0 -47
  316. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  317. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  318. data/samples/bigdemo/wxComboBox.rbw +0 -77
  319. data/samples/bigdemo/wxCursor.rbw +0 -136
  320. data/samples/bigdemo/wxDialog.rbw +0 -74
  321. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  322. data/samples/bigdemo/wxDragImage.rbw +0 -70
  323. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  324. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  325. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  326. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  327. data/samples/bigdemo/wxFrame.rbw +0 -53
  328. data/samples/bigdemo/wxGauge.rbw +0 -65
  329. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  330. data/samples/bigdemo/wxGrid.rbw +0 -66
  331. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  332. data/samples/bigdemo/wxListBox.rbw +0 -140
  333. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  334. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  335. data/samples/bigdemo/wxMenu.rbw +0 -247
  336. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  337. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  338. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  339. data/samples/bigdemo/wxNotebook.rbw +0 -136
  340. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  341. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  342. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  343. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  344. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  345. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  346. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  347. data/samples/bigdemo/wxSlider.rbw +0 -42
  348. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  349. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  350. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  351. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  352. data/samples/bigdemo/wxStaticText.rbw +0 -55
  353. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  354. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  355. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  356. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  357. data/samples/bigdemo/wxToolBar.rbw +0 -131
  358. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  359. data/samples/caret/caret.rb +0 -298
  360. data/samples/caret/mondrian.xpm +0 -44
  361. data/samples/controls/books.rb +0 -189
  362. data/samples/controls/choice.xpm +0 -27
  363. data/samples/controls/combo.xpm +0 -27
  364. data/samples/controls/controls.rb +0 -1099
  365. data/samples/controls/gauge.xpm +0 -27
  366. data/samples/controls/list.xpm +0 -27
  367. data/samples/controls/mondrian.ico +0 -0
  368. data/samples/controls/mondrian.xpm +0 -44
  369. data/samples/controls/radio.xpm +0 -27
  370. data/samples/controls/stattext.xpm +0 -24
  371. data/samples/controls/test2.bmp +0 -0
  372. data/samples/controls/text.xpm +0 -27
  373. data/samples/controls/tn_books.png +0 -0
  374. data/samples/controls/tn_controls.png +0 -0
  375. data/samples/etc/choice.rb +0 -87
  376. data/samples/etc/tn_choice.png +0 -0
  377. data/samples/text/mondrian.ico +0 -0
  378. data/samples/text/mondrian.xpm +0 -44
  379. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -14,6 +14,8 @@ module WXRuby3
14
14
 
15
15
  class HtmlListBox < Window
16
16
 
17
+ include Typemap::ClientData
18
+
17
19
  def setup
18
20
  spec.items << 'wxSimpleHtmlListBox' << 'wxItemContainer'
19
21
  super
@@ -72,47 +74,120 @@ module WXRuby3
72
74
  spec.extend_interface 'wxSimpleHtmlListBox',
73
75
  'virtual wxString GetString(unsigned int n) const',
74
76
  'virtual void SetString(unsigned int n, const wxString &string)'
75
- spec.ignore([ 'wxItemContainer::Append(const wxString &, wxClientData *)',
77
+ spec.ignore([ 'wxItemContainer::Append(const wxString &, void *)',
76
78
  'wxItemContainer::Append(const std::vector< wxString > &)',
77
- 'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
79
+ 'wxItemContainer::Append(const wxArrayString &, void **)',
78
80
  'wxItemContainer::Append(unsigned int, const wxString *)',
79
81
  'wxItemContainer::Append(unsigned int, const wxString *, void **)',
80
82
  'wxItemContainer::Append(unsigned int, const wxString *, wxClientData **)',
81
- 'wxItemContainer::Insert(const wxString &, unsigned int, wxClientData *)',
83
+ 'wxItemContainer::Insert(const wxString &, unsigned int, void *)',
82
84
  'wxItemContainer::Insert(const std::vector< wxString > &)',
83
- 'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
85
+ 'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
84
86
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int)',
85
87
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, void **)',
86
88
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, wxClientData **)',
87
89
  'wxItemContainer::Set(const std::vector< wxString > &)',
88
- 'wxItemContainer::Set(const wxArrayString &, wxClientData **)',
90
+ 'wxItemContainer::Set(const wxArrayString &, void **)',
89
91
  'wxItemContainer::Set(unsigned int, const wxString *)',
90
92
  'wxItemContainer::Set(unsigned int, const wxString *, void **)',
91
93
  'wxItemContainer::Set(unsigned int, const wxString *, wxClientData **)',
92
- 'wxItemContainer::DetachClientObject',
93
- 'wxItemContainer::HasClientObjectData',
94
- 'wxItemContainer::GetClientObject',
95
- 'wxItemContainer::SetClientObject',
94
+ 'wxItemContainer::GetClientData',
95
+ 'wxItemContainer::SetClientData',
96
96
  'wxItemContainer::HasClientUntypedData',
97
97
  'wxItemContainer::Clear'])
98
- spec.ignore([ 'wxItemContainer::Append(const wxArrayString &, void **)',
99
- 'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
100
- 'wxItemContainer::Set(const wxArrayString &, void **)'], ignore_doc: false)
98
+ spec.ignore([ 'wxItemContainer::DetachClientObject',
99
+ 'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
100
+ 'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
101
+ 'wxItemContainer::Set(const wxArrayString &, wxClientData **)'], ignore_doc: false)
101
102
  # for doc only
102
103
  spec.map 'void** clientData' => 'Array', swig: false do
103
104
  map_in code: ''
104
105
  end
105
- spec.ignore(%w[wxItemContainer::GetClientData wxItemContainer::SetClientData], ignore_doc: false) # keep docs
106
- # Replace the old Wx definition of this method (which segfaults)
107
- # Only need the setter as we cache data in Ruby and the getter
108
- # therefor can be pure Ruby
109
- spec.add_extend_code('wxSimpleHtmlListBox', <<~__HEREDOC
110
- VALUE set_client_data(int n, VALUE item_data) {
111
- self->SetClientData(n, (void *)item_data);
112
- return item_data;
106
+ # Replace the old Wx definitions of these methods adding
107
+ # proper checks on the data arrays.
108
+ # Also add an item enumerator.
109
+ spec.add_extend_code 'wxSimpleHtmlListBox', <<~__HEREDOC
110
+ VALUE DetachClientObject(unsigned int n)
111
+ {
112
+ VALUE rc = Qnil;
113
+ wxClientData *wxcd = $self->DetachClientObject(n);
114
+ wxRubyClientData *rbcd = wxcd ? dynamic_cast<wxRubyClientData*> (wxcd) : nullptr;
115
+ if (rbcd)
116
+ {
117
+ rc = rbcd->GetData();
118
+ delete rbcd;
113
119
  }
114
- __HEREDOC
115
- )
120
+ return rc;
121
+ }
122
+
123
+ int Append(const wxArrayString &items, VALUE rb_clientData)
124
+ {
125
+ if (TYPE(rb_clientData) != T_ARRAY ||
126
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
127
+ {
128
+ rb_raise(rb_eArgError,
129
+ TYPE(rb_clientData) == T_ARRAY ?
130
+ "expected Array for client_data" :
131
+ "client_data Array needs to be equal in size to items Array");
132
+ }
133
+
134
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
135
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
136
+ {
137
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
138
+ }
139
+ return $self->Append(items, cd_arr.get());
140
+ }
141
+
142
+ int Insert(const wxArrayString &items, unsigned int pos, VALUE rb_clientData)
143
+ {
144
+ if (TYPE(rb_clientData) != T_ARRAY ||
145
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
146
+ {
147
+ rb_raise(rb_eArgError,
148
+ TYPE(rb_clientData) == T_ARRAY ?
149
+ "expected Array for client_data" :
150
+ "client_data Array needs to be equal in size to items Array");
151
+ }
152
+
153
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
154
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
155
+ {
156
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
157
+ }
158
+ return $self->Insert(items, pos, cd_arr.get());
159
+ }
160
+
161
+ void Set(const wxArrayString &items, VALUE rb_clientData)
162
+ {
163
+ if (TYPE(rb_clientData) != T_ARRAY ||
164
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
165
+ {
166
+ rb_raise(rb_eArgError,
167
+ TYPE(rb_clientData) == T_ARRAY ?
168
+ "expected Array for client_data" :
169
+ "client_data Array needs to be equal in size to items Array");
170
+ }
171
+
172
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
173
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
174
+ {
175
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
176
+ }
177
+ $self->Set(items, cd_arr.get());
178
+ }
179
+
180
+ VALUE each_string()
181
+ {
182
+ VALUE rc = Qnil;
183
+ for (unsigned int i=0; i<$self->GetCount() ;++i)
184
+ {
185
+ VALUE rb_s = WXSTR_TO_RSTR($self->GetString(i));
186
+ rc = rb_yield(rb_s);
187
+ }
188
+ return rc;
189
+ }
190
+ __HEREDOC
116
191
  end
117
192
  end # class HtmlListBox
118
193
 
@@ -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