wxruby3 0.9.2 → 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 (347) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +35 -29
  3. data/README.md +24 -15
  4. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  5. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  6. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  7. data/ext/wxruby3/swig/custom/director.swg +8 -0
  8. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  9. data/lib/wx/core/bitmap_combobox.rb +17 -21
  10. data/lib/wx/core/combobox.rb +13 -3
  11. data/lib/wx/core/controlwithitems.rb +40 -130
  12. data/lib/wx/core/enum.rb +17 -1
  13. data/lib/wx/core/event.rb +6 -1
  14. data/lib/wx/core/evthandler.rb +8 -2
  15. data/lib/wx/core/generic_validator.rb +312 -0
  16. data/lib/wx/core/listbox.rb +2 -2
  17. data/lib/wx/core/log.rb +1 -1
  18. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  19. data/lib/wx/core/size.rb +4 -0
  20. data/lib/wx/core/sizer.rb +1 -2
  21. data/lib/wx/core/standard_paths.rb +22 -0
  22. data/lib/wx/core/text_entry.rb +4 -1
  23. data/lib/wx/core/validator.rb +70 -5
  24. data/lib/wx/core/window.rb +3 -7
  25. data/lib/wx/doc/art_locator.rb +1 -0
  26. data/lib/wx/doc/comboctrl.rb +18 -0
  27. data/lib/wx/doc/controlwithitems.rb +16 -0
  28. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  29. data/lib/wx/doc/editable_listbox.rb +44 -0
  30. data/lib/wx/doc/enum.rb +15 -0
  31. data/lib/wx/doc/event.rb +12 -0
  32. data/lib/wx/doc/extra/12_client_data.md +89 -0
  33. data/lib/wx/doc/extra/13_validators.md +139 -0
  34. data/lib/wx/doc/gdi_common.rb +4 -0
  35. data/lib/wx/doc/generic_validator.rb +95 -0
  36. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  37. data/lib/wx/doc/num_validator.rb +387 -0
  38. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  39. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  40. data/lib/wx/doc/static_bitmap.rb +25 -0
  41. data/lib/wx/doc/text_validator.rb +10 -0
  42. data/lib/wx/doc/validator.rb +113 -0
  43. data/lib/wx/doc/window.rb +30 -0
  44. data/lib/wx/html/simple_html_listbox.rb +24 -91
  45. data/lib/wx/keyword_defs.rb +34 -2
  46. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  47. data/lib/wx/version.rb +1 -1
  48. data/rakelib/lib/config/mingw.rb +12 -0
  49. data/rakelib/lib/core/include/client_data.inc +65 -0
  50. data/rakelib/lib/core/include/funcall.inc +1 -1
  51. data/rakelib/lib/core/package.rb +17 -2
  52. data/rakelib/lib/core/parameter.rb +1 -1
  53. data/rakelib/lib/core/spec_helper.rb +7 -1
  54. data/rakelib/lib/director/app.rb +18 -0
  55. data/rakelib/lib/director/app_traits.rb +3 -1
  56. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  57. data/rakelib/lib/director/combobox.rb +22 -0
  58. data/rakelib/lib/director/comboctrl.rb +1 -55
  59. data/rakelib/lib/director/ctrl_with_items.rb +88 -21
  60. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  61. data/rakelib/lib/director/editable_listbox.rb +30 -0
  62. data/rakelib/lib/director/event.rb +102 -12
  63. data/rakelib/lib/director/event_handler.rb +3 -2
  64. data/rakelib/lib/director/functions.rb +4 -2
  65. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  66. data/rakelib/lib/director/grid_cell_attr.rb +0 -2
  67. data/rakelib/lib/director/grid_cell_editor.rb +0 -2
  68. data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
  69. data/rakelib/lib/director/header_ctrl.rb +6 -1
  70. data/rakelib/lib/director/html_listbox.rb +96 -22
  71. data/rakelib/lib/director/num_validator.rb +495 -0
  72. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  73. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  74. data/rakelib/lib/director/pgproperty.rb +3 -29
  75. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  76. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  77. data/rakelib/lib/director/sizer.rb +15 -4
  78. data/rakelib/lib/director/sizer_item.rb +13 -0
  79. data/rakelib/lib/director/static_bitmap.rb +28 -0
  80. data/rakelib/lib/director/text_entry.rb +4 -0
  81. data/rakelib/lib/director/text_validator.rb +124 -13
  82. data/rakelib/lib/director/toggle_button.rb +1 -0
  83. data/rakelib/lib/director/top_level_window.rb +0 -2
  84. data/rakelib/lib/director/tree_ctrl.rb +35 -0
  85. data/rakelib/lib/director/utils.rb +16 -2
  86. data/rakelib/lib/director/validator.rb +196 -21
  87. data/rakelib/lib/director/window.rb +16 -2
  88. data/rakelib/lib/extractor/function.rb +2 -1
  89. data/rakelib/lib/generate/analyzer.rb +1 -1
  90. data/rakelib/lib/generate/doc.rb +10 -4
  91. data/rakelib/lib/specs/interfaces.rb +2 -0
  92. data/rakelib/lib/swig_runner.rb +55 -9
  93. data/rakelib/lib/typemap/client_data.rb +67 -0
  94. data/rakelib/lib/typemap/common.rb +3 -3
  95. data/rakelib/lib/typemap/datetime.rb +1 -1
  96. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  97. data/samples/aui/aui.rb +1237 -1233
  98. data/samples/calendar/calendar.rb +293 -289
  99. data/samples/controls/get_item_sample.rb +83 -79
  100. data/samples/controls/htlbox.rb +331 -327
  101. data/samples/dialogs/dialogs.rb +682 -694
  102. data/samples/dialogs/wizard.rb +52 -55
  103. data/samples/dragdrop/dragdrop.rb +146 -142
  104. data/samples/drawing/bitmap.rb +29 -26
  105. data/samples/drawing/bitmap_image.rb +84 -80
  106. data/samples/drawing/graphics_drawing.rb +209 -205
  107. data/samples/drawing/image_prt.rb +344 -340
  108. data/samples/drawing/maths_images.rb +18 -1
  109. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  110. data/samples/etc/caret.rb +306 -0
  111. data/samples/etc/miniframe.rb +65 -60
  112. data/samples/etc/sash.rb +109 -105
  113. data/samples/etc/scrollwin.rb +86 -80
  114. data/samples/etc/system_settings.rb +216 -209
  115. data/samples/event/activation.rb +72 -67
  116. data/samples/event/event.rb +160 -153
  117. data/samples/event/threaded.rb +8 -1
  118. data/samples/event/update_ui_event.rb +67 -60
  119. data/samples/grid/grid.rb +188 -181
  120. data/samples/grid/gridtablebase.rb +136 -129
  121. data/samples/html/html.rb +208 -204
  122. data/samples/mdi/mdi.rb +59 -54
  123. data/samples/minimal/minimal.rb +54 -51
  124. data/samples/minimal/nothing.rb +1 -0
  125. data/samples/printing/printing.rb +367 -377
  126. data/samples/printing/printing2.rb +203 -198
  127. data/samples/propgrid/propgrid.rb +2312 -2308
  128. data/samples/propgrid/propgrid_minimal.rb +57 -50
  129. data/samples/ribbon/ribbon.rb +780 -774
  130. data/samples/sampler/ext.rb +0 -33
  131. data/samples/sampler/sample.rb +4 -9
  132. data/samples/sampler.rb +1 -1
  133. data/samples/splash/splash.rb +118 -116
  134. data/samples/text/rich_textctrl.rb +207 -201
  135. data/samples/text/richtext.rb +1409 -1405
  136. data/samples/text/scintilla.rb +137 -128
  137. data/samples/text/textctrl.rb +89 -83
  138. data/samples/text/unicode.rb +175 -168
  139. data/samples/treectrl/treectrl.rb +1430 -1426
  140. data/samples/widgets/activityindicator.rb +95 -0
  141. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  142. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  143. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  144. data/samples/widgets/art/widgets/button.xpm +54 -0
  145. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  146. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  147. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  148. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  149. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  150. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  151. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  152. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  153. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  154. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  155. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  156. data/samples/widgets/art/widgets/header.xpm +54 -0
  157. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  158. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  159. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  160. data/samples/widgets/art/widgets/native.xpm +81 -0
  161. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  162. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  163. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  164. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  165. data/samples/widgets/art/widgets/slider.xpm +54 -0
  166. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  167. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  168. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  169. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  170. data/samples/widgets/art/widgets/text.xpm +54 -0
  171. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  172. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  173. data/samples/widgets/art/widgets/toucan.png +0 -0
  174. data/samples/widgets/bmpcombobox.rb +651 -0
  175. data/samples/widgets/button.rb +462 -0
  176. data/samples/widgets/checkbox.rb +211 -0
  177. data/samples/widgets/choice.rb +287 -0
  178. data/samples/widgets/clrpicker.rb +156 -0
  179. data/samples/widgets/combobox.rb +516 -0
  180. data/samples/widgets/datepick.rb +215 -0
  181. data/samples/widgets/dirctrl.rb +265 -0
  182. data/samples/widgets/dirpicker.rb +158 -0
  183. data/samples/widgets/editlbox.rb +122 -0
  184. data/samples/widgets/filectrl.rb +216 -0
  185. data/samples/widgets/filepicker.rb +214 -0
  186. data/samples/widgets/fontpicker.rb +135 -0
  187. data/samples/widgets/gauge.rb +311 -0
  188. data/samples/widgets/headerctrl.rb +236 -0
  189. data/samples/widgets/hyperlink.rb +203 -0
  190. data/samples/widgets/itemcontainer.rb +185 -0
  191. data/samples/widgets/listbox.rb +473 -0
  192. data/samples/widgets/notebook.rb +488 -0
  193. data/samples/widgets/odcombobox.rb +608 -0
  194. data/samples/widgets/radiobox.rb +328 -0
  195. data/samples/widgets/searchctrl.rb +159 -0
  196. data/samples/widgets/slider.rb +594 -0
  197. data/samples/widgets/spinbtn.rb +443 -0
  198. data/samples/widgets/statbmp.rb +130 -0
  199. data/samples/widgets/static.rb +436 -0
  200. data/samples/widgets/textctrl.rb +700 -0
  201. data/samples/widgets/timepick.rb +148 -0
  202. data/samples/widgets/tn_widgets.png +0 -0
  203. data/samples/widgets/toggle.rb +385 -0
  204. data/samples/widgets/widgets.rb +1233 -0
  205. data/samples/xrc/custom_xrc_sample.rb +47 -41
  206. data/samples/xrc/xrc_sample.rb +53 -47
  207. data/tests/test_event_handling.rb +52 -34
  208. data/tests/test_events.rb +7 -0
  209. data/tests/test_item_data.rb +24 -0
  210. data/tests/test_sizer.rb +44 -1
  211. data/tests/test_validators.rb +805 -0
  212. metadata +92 -138
  213. data/lib/wx/core/choice.rb +0 -14
  214. data/lib/wx/core/combo_ctrl.rb +0 -110
  215. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  216. data/samples/bigdemo/About.rbw +0 -39
  217. data/samples/bigdemo/ColorPanel.rbw +0 -23
  218. data/samples/bigdemo/GridSimple.rbw +0 -78
  219. data/samples/bigdemo/MDIDemo.rbw +0 -57
  220. data/samples/bigdemo/PopupMenu.rbw +0 -146
  221. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  222. data/samples/bigdemo/Sizers.rbw +0 -541
  223. data/samples/bigdemo/bigdemo.rb +0 -817
  224. data/samples/bigdemo/demoTemplate.rbw +0 -33
  225. data/samples/bigdemo/helpfile.htb +0 -0
  226. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  227. data/samples/bigdemo/icons/Test 015.png +0 -0
  228. data/samples/bigdemo/icons/choice.bmp +0 -0
  229. data/samples/bigdemo/icons/combo.bmp +0 -0
  230. data/samples/bigdemo/icons/combo.xpm +0 -27
  231. data/samples/bigdemo/icons/copy.xpm +0 -25
  232. data/samples/bigdemo/icons/cut.xpm +0 -24
  233. data/samples/bigdemo/icons/gauge.bmp +0 -0
  234. data/samples/bigdemo/icons/gauge.xpm +0 -27
  235. data/samples/bigdemo/icons/help.xpm +0 -25
  236. data/samples/bigdemo/icons/list.bmp +0 -0
  237. data/samples/bigdemo/icons/list.xpm +0 -27
  238. data/samples/bigdemo/icons/mondrian.ico +0 -0
  239. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  240. data/samples/bigdemo/icons/new.xpm +0 -24
  241. data/samples/bigdemo/icons/ogl.ico +0 -0
  242. data/samples/bigdemo/icons/ogl.xpm +0 -45
  243. data/samples/bigdemo/icons/open.xpm +0 -26
  244. data/samples/bigdemo/icons/paste.bmp +0 -0
  245. data/samples/bigdemo/icons/paste.xpm +0 -38
  246. data/samples/bigdemo/icons/pointy.png +0 -0
  247. data/samples/bigdemo/icons/preview.xpm +0 -26
  248. data/samples/bigdemo/icons/print.xpm +0 -26
  249. data/samples/bigdemo/icons/radio.bmp +0 -0
  250. data/samples/bigdemo/icons/radio.xpm +0 -27
  251. data/samples/bigdemo/icons/robert.xpm +0 -415
  252. data/samples/bigdemo/icons/sashtest.ico +0 -0
  253. data/samples/bigdemo/icons/save.xpm +0 -25
  254. data/samples/bigdemo/icons/smiles.bmp +0 -0
  255. data/samples/bigdemo/icons/smiles.xpm +0 -39
  256. data/samples/bigdemo/icons/smiley.ico +0 -0
  257. data/samples/bigdemo/icons/smiley.xpm +0 -42
  258. data/samples/bigdemo/icons/stattext.xpm +0 -24
  259. data/samples/bigdemo/icons/test2.bmp +0 -0
  260. data/samples/bigdemo/icons/test2.png +0 -0
  261. data/samples/bigdemo/icons/test2.xpm +0 -79
  262. data/samples/bigdemo/icons/text.bmp +0 -0
  263. data/samples/bigdemo/icons/text.xpm +0 -27
  264. data/samples/bigdemo/icons/tog1.bmp +0 -0
  265. data/samples/bigdemo/icons/tog1.xpm +0 -38
  266. data/samples/bigdemo/icons/tog2.bmp +0 -0
  267. data/samples/bigdemo/icons/tog2.xpm +0 -38
  268. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  269. data/samples/bigdemo/icons/wxwin.ico +0 -0
  270. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  271. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  272. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  273. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  274. data/samples/bigdemo/run.rb +0 -98
  275. data/samples/bigdemo/tips.txt +0 -7
  276. data/samples/bigdemo/utils.rb +0 -20
  277. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  278. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  279. data/samples/bigdemo/wxButton.rbw +0 -64
  280. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  281. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  282. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  283. data/samples/bigdemo/wxChoice.rbw +0 -47
  284. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  285. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  286. data/samples/bigdemo/wxComboBox.rbw +0 -77
  287. data/samples/bigdemo/wxCursor.rbw +0 -136
  288. data/samples/bigdemo/wxDialog.rbw +0 -74
  289. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  290. data/samples/bigdemo/wxDragImage.rbw +0 -70
  291. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  292. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  293. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  294. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  295. data/samples/bigdemo/wxFrame.rbw +0 -53
  296. data/samples/bigdemo/wxGauge.rbw +0 -65
  297. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  298. data/samples/bigdemo/wxGrid.rbw +0 -66
  299. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  300. data/samples/bigdemo/wxListBox.rbw +0 -140
  301. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  302. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  303. data/samples/bigdemo/wxMenu.rbw +0 -247
  304. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  305. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  306. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  307. data/samples/bigdemo/wxNotebook.rbw +0 -136
  308. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  309. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  310. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  311. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  312. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  313. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  314. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  315. data/samples/bigdemo/wxSlider.rbw +0 -42
  316. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  317. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  318. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  319. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  320. data/samples/bigdemo/wxStaticText.rbw +0 -55
  321. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  322. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  323. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  324. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  325. data/samples/bigdemo/wxToolBar.rbw +0 -131
  326. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  327. data/samples/caret/caret.rb +0 -298
  328. data/samples/caret/mondrian.xpm +0 -44
  329. data/samples/controls/books.rb +0 -189
  330. data/samples/controls/choice.xpm +0 -27
  331. data/samples/controls/combo.xpm +0 -27
  332. data/samples/controls/controls.rb +0 -1099
  333. data/samples/controls/gauge.xpm +0 -27
  334. data/samples/controls/list.xpm +0 -27
  335. data/samples/controls/mondrian.ico +0 -0
  336. data/samples/controls/mondrian.xpm +0 -44
  337. data/samples/controls/radio.xpm +0 -27
  338. data/samples/controls/stattext.xpm +0 -24
  339. data/samples/controls/test2.bmp +0 -0
  340. data/samples/controls/text.xpm +0 -27
  341. data/samples/controls/tn_books.png +0 -0
  342. data/samples/controls/tn_controls.png +0 -0
  343. data/samples/etc/choice.rb +0 -87
  344. data/samples/etc/tn_choice.png +0 -0
  345. data/samples/text/mondrian.ico +0 -0
  346. data/samples/text/mondrian.xpm +0 -44
  347. /data/samples/{caret → etc}/tn_caret.png +0 -0
@@ -41,8 +41,22 @@ module WXRuby3
41
41
  wxNow
42
42
  wxDecToHex
43
43
  wxHexToDec
44
- wxStripMenuCodes
45
44
  ]
45
+ # ignore these enum(erator)s
46
+ spec.ignore %w[
47
+ wxSignal
48
+ wxKillError
49
+ wxKillFlags
50
+ wxShutdownFlags
51
+ @.wxEXEC_ASYNC
52
+ @.wxEXEC_SYNC
53
+ @.wxEXEC_SHOW_CONSOLE
54
+ @.wxEXEC_MAKE_GROUP_LEADER
55
+ @.wxEXEC_NODISABLE
56
+ @.wxEXEC_NOEVENTS
57
+ @.wxEXEC_HIDE_CONSOLE
58
+ @.wxEXEC_BLOCK
59
+ ]
46
60
  spec.ignore 'wxPostDelete' unless Config.instance.wx_version >= '3.3.0'
47
61
  spec.ignore 'wxGetEmailAddress(char *,int)',
48
62
  'wxGetUserId(char *,int)',
@@ -53,7 +67,7 @@ module WXRuby3
53
67
  __CODE
54
68
  end
55
69
  # we want only the functions that are not ignored
56
- spec.do_not_generate(:classes, :typedefs, :variables, :enums, :defines)
70
+ spec.do_not_generate(:classes, :typedefs, :variables, :defines)
57
71
  super
58
72
  end
59
73
  end # class Utils
@@ -16,29 +16,204 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
- # make Ruby director and wrappers use custom implementation
20
- spec.use_class_implementation('wxValidator', 'wxRubyValidator')
21
- # provide custom wxRuby derivative of validator
22
- spec.add_header_code <<~__HEREDOC
23
- class wxRubyValidator : public wxValidator
24
- {
25
- public:
26
- wxRubyValidator () : wxValidator () {}
27
- virtual ~wxRubyValidator ()
19
+ if spec.module_name == 'wxValidator'
20
+ # make Ruby director and wrappers use custom implementation
21
+ spec.use_class_implementation('wxValidator', 'wxRubyValidator')
22
+ # provide custom wxRuby derivative of validator
23
+ spec.add_header_code <<~__HEREDOC
24
+ #include "wxruby-Validator.h"
25
+
26
+ WxRuby_ID wxRubyValidator::do_transfer_from_window_id("do_transfer_from_window");
27
+ WxRuby_ID wxRubyValidator::do_transfer_to_window_id("do_transfer_to_window");
28
+ WxRuby_ID wxRubyValidator::clone_id("clone");
29
+
30
+ wxRubyValidator::wxRubyValidator ()
31
+ : wxValidator ()
32
+ , wxRubyValidatorBinding ()
33
+ {}
34
+ wxRubyValidator::wxRubyValidator (const wxRubyValidator& v)
35
+ : wxValidator (v)
36
+ , wxRubyValidatorBinding (v)
37
+ {}
38
+ wxRubyValidator::~wxRubyValidator ()
28
39
  {
29
40
  wxRuby_ReleaseEvtHandlerProcs(this);
30
- }
31
-
32
- // these two methods are noops in wxRuby (since we do not support C++ data transfer there)
33
- // but we want them to always return true to prevent wxWidgets from complaining
34
- bool TransferFromWindow () override { return true; }
35
- bool TransferToWindow () override { return true; }
36
- };
37
- __HEREDOC
38
- # will be provided as a pure Ruby method
39
- spec.ignore 'wxValidator::Clone'
40
- # not provided in Ruby
41
- spec.ignore %w[wxValidator::TransferFromWindow wxValidator::TransferToWindow]
41
+ }
42
+
43
+ wxObject* wxRubyValidator::Clone() const
44
+ {
45
+ bool ex_caught = false;
46
+ VALUE self = const_cast<wxRubyValidator*> (this)->get_self();
47
+ VALUE rc = wxRuby_Funcall(ex_caught, self, clone_id(), 0);
48
+ if (ex_caught)
49
+ {
50
+ throw Swig::DirectorRubyException(rc, self, clone_id());
51
+ }
52
+ void *ptr;
53
+ int res = SWIG_ConvertPtr(rc, &ptr, SWIGTYPE_p_wxValidator, 0);
54
+ if (!SWIG_IsOK(res))
55
+ {
56
+ Swig::DirectorTypeMismatchException::raise(self, "clone", SWIG_ErrorType(SWIG_ArgError(res)), "in output value of type '""Wx::Validator *""'");
57
+ }
58
+ return reinterpret_cast< wxValidator * >(ptr);
59
+ }
60
+
61
+ void wxRubyValidator::SetWindow(wxWindow *win)
62
+ {
63
+ this->wxValidator::SetWindow(win);
64
+ VALUE self = this->get_self();
65
+ // make sure Ruby does not own this validator instance anymore
66
+ RDATA(self)->dfree = SWIG_RubyRemoveTracking;
67
+ }
68
+
69
+ bool wxRubyValidator::TransferFromWindow()
70
+ {
71
+ return this->DoOnTransferFromWindow(this->DoTransferFromWindow());
72
+ }
73
+ bool wxRubyValidator::TransferToWindow()
74
+ {
75
+ return this->DoTransferToWindow(this->DoOnTransferToWindow());
76
+ }
77
+
78
+ VALUE wxRubyValidator::DoTransferFromWindow()
79
+ {
80
+ bool ex_caught = false;
81
+ VALUE rc = wxRuby_Funcall(ex_caught, this->get_self(), do_transfer_from_window_id(), 0);
82
+ if (ex_caught)
83
+ {
84
+ throw Swig::DirectorRubyException(rc, this->get_self(), do_transfer_from_window_id());
85
+ }
86
+ return rc;
87
+ }
88
+ bool wxRubyValidator::DoTransferToWindow(VALUE data)
89
+ {
90
+ bool ex_caught = false;
91
+ VALUE rc = wxRuby_Funcall(ex_caught, this->get_self(), do_transfer_to_window_id(), 1, data);
92
+ if (ex_caught)
93
+ {
94
+ throw Swig::DirectorRubyException(rc, this->get_self(), do_transfer_to_window_id());
95
+ }
96
+ return (rc == Qtrue);
97
+ }
98
+
99
+ VALUE wxRubyValidator::get_self()
100
+ {
101
+ if (NIL_P(this->self_))
102
+ {
103
+ this->self_ = SWIG_RubyInstanceFor(this);
104
+ }
105
+ return this->self_;
106
+ }
107
+
108
+ WxRuby_ID wxRubyValidatorBinding::do_on_transfer_from_window_id("do_on_transfer_from_window");
109
+ WxRuby_ID wxRubyValidatorBinding::do_on_transfer_to_window_id("do_on_transfer_to_window");
110
+ WxRuby_ID wxRubyValidatorBinding::call_id("call");
111
+
112
+ bool wxRubyValidatorBinding::DoOnTransferFromWindow(VALUE data)
113
+ {
114
+ bool ex_caught = false;
115
+ VALUE rc = wxRuby_Funcall(ex_caught, this->get_self(), do_on_transfer_from_window_id(), 1, data);
116
+ if (ex_caught)
117
+ {
118
+ throw Swig::DirectorRubyException(rc, this->get_self(), do_on_transfer_from_window_id());
119
+ }
120
+ return (rc == Qtrue);
121
+ }
122
+ VALUE wxRubyValidatorBinding::DoOnTransferToWindow()
123
+ {
124
+ bool ex_caught = false;
125
+ VALUE rc = wxRuby_Funcall(ex_caught, this->get_self(), do_on_transfer_to_window_id(), 0);
126
+ if (ex_caught)
127
+ {
128
+ throw Swig::DirectorRubyException(rc, this->get_self(), do_on_transfer_to_window_id());
129
+ }
130
+ return rc;
131
+ }
132
+
133
+ bool wxRubyValidatorBinding::OnTransferFromWindow(VALUE data)
134
+ {
135
+ if (!NIL_P(this->on_transfer_from_win_proc_))
136
+ {
137
+ bool ex_caught = false;
138
+ VALUE rc = wxRuby_Funcall(ex_caught, this->on_transfer_from_win_proc_, call_id(), 1, data);
139
+ if (ex_caught)
140
+ {
141
+ throw Swig::DirectorRubyException(rc, this->on_transfer_from_win_proc_, call_id());
142
+ }
143
+ }
144
+ return true;
145
+ }
146
+ VALUE wxRubyValidatorBinding::OnTransferToWindow()
147
+ {
148
+ if (!NIL_P(this->on_transfer_to_win_proc_))
149
+ {
150
+ bool ex_caught = false;
151
+ VALUE rc = wxRuby_Funcall(ex_caught, this->on_transfer_to_win_proc_, call_id(), 0);
152
+ if (ex_caught)
153
+ {
154
+ throw Swig::DirectorRubyException(rc, this->on_transfer_to_win_proc_, call_id());
155
+ }
156
+ return rc;
157
+ }
158
+ return Qnil;
159
+ }
160
+
161
+ void wxRubyValidatorBinding::CopyBindings(const wxRubyValidatorBinding* val_bind)
162
+ {
163
+ if (val_bind)
164
+ {
165
+ this->on_transfer_from_win_proc_ = val_bind->on_transfer_from_win_proc_;
166
+ this->on_transfer_to_win_proc_ = val_bind->on_transfer_to_win_proc_;
167
+ }
168
+ }
169
+
170
+ static void GC_mark_wxValidator(void* ptr)
171
+ {
172
+ if (ptr)
173
+ {
174
+ wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
175
+ wxRubyValidator* rbvp = dynamic_cast<wxRubyValidator*> (vp);
176
+ // This might be a pointer to the global constant wxDefaultValidator or one of it's clones
177
+ // which are not wxRubyValidator-s
178
+ if (rbvp) rbvp->GC_Mark();
179
+ }
180
+ }
181
+ __HEREDOC
182
+ spec.add_swig_code '%markfunc wxValidator "GC_mark_wxValidator";'
183
+ # will be provided as a pure Ruby method
184
+ spec.ignore 'wxValidator::Clone', ignore_doc: false
185
+ # add wxRuby specifics
186
+ spec.extend_interface 'wxValidator',
187
+ 'wxValidator(const wxValidator& other)'
188
+ spec.add_extend_code 'wxValidator', <<~__HEREDOC
189
+ void OnTransferFromWindow(VALUE proc)
190
+ {
191
+ dynamic_cast<wxRubyValidatorBinding *>($self)->SetOnTransferFromWindow(proc);
192
+ }
193
+ void OnTransferToWindow(VALUE proc)
194
+ {
195
+ dynamic_cast<wxRubyValidatorBinding *>($self)->SetOnTransferToWindow(proc);
196
+ }
197
+ bool DoOnTransferFromWindow(VALUE data)
198
+ {
199
+ return dynamic_cast<wxRubyValidatorBinding *>($self)->OnTransferFromWindow(data);
200
+ }
201
+ VALUE DoOnTransferToWindow()
202
+ {
203
+ return dynamic_cast<wxRubyValidatorBinding *>($self)->OnTransferToWindow();
204
+ }
205
+ __HEREDOC
206
+ # not provided in Ruby
207
+ spec.ignore %w[wxValidator::TransferFromWindow wxValidator::TransferToWindow wxValidator::SetWindow]
208
+ else
209
+ spec.add_header_code <<~__HEREDOC
210
+ #include "wxruby-ValidatorBinding.h"
211
+ __HEREDOC
212
+ end
213
+ # overrule common typemap for parent arg of Validate
214
+ spec.map 'wxWindow* parent' do
215
+ map_check code: ''
216
+ end
42
217
  end
43
218
  end # class Validator
44
219
 
@@ -66,8 +66,6 @@ module WXRuby3
66
66
  __CODE
67
67
  end
68
68
  spec.ignore [
69
- 'wxWindow::TransferDataFromWindow',
70
- 'wxWindow::TransferDataToWindow',
71
69
  'wxWindow::PopEventHandler',
72
70
  'wxWindow::SetConstraints',
73
71
  'wxWindow::GetHandle',
@@ -81,6 +79,9 @@ module WXRuby3
81
79
  'wxWindow::SendIdleEvents',
82
80
  'wxWindow::ClientToScreen(int*,int*)', # no need; prefer the wxPoint version
83
81
  'wxWindow::ScreenToClient(int*,int*)', # no need; prefer the wxPoint version
82
+ # provide (non-virtual) renamed alternatives (prevent Ruby keyword/standard clash)
83
+ 'wxWindow::Raise',
84
+ 'wxWindow::Lower'
84
85
  ]
85
86
  # no real docs and can't find actual examples of usage; ignore
86
87
  spec.ignore 'wxWindow::GetConstraints', 'wxWindow::SetConstraints'
@@ -91,6 +92,15 @@ module WXRuby3
91
92
  map_check code: ''
92
93
  end
93
94
  spec.add_extend_code 'wxWindow', <<~__HEREDOC
95
+ void raise_window()
96
+ {
97
+ $self->Raise();
98
+ }
99
+ void lower_window()
100
+ {
101
+ $self->Lower();
102
+ }
103
+
94
104
  static wxWindow* find_window_by_id(long id, const wxWindow *find_from_parent=0)
95
105
  {
96
106
  return wxWindow::FindWindowById(id, find_from_parent);
@@ -269,9 +279,13 @@ module WXRuby3
269
279
  "#{spec.class_name(citem)}::SetAcceleratorTable",
270
280
  "#{spec.class_name(citem)}::SetBackgroundColour",
271
281
  "#{spec.class_name(citem)}::SetBackgroundStyle",
282
+ "#{spec.class_name(citem)}::HasTransparentBackground",
272
283
  "#{spec.class_name(citem)}::SetCursor",
273
284
  "#{spec.class_name(citem)}::SetFocus",
274
285
  "#{spec.class_name(citem)}::SetFocusFromKbd",
286
+ "#{spec.class_name(citem)}::AcceptsFocus",
287
+ "#{spec.class_name(citem)}::AcceptsFocusRecursively",
288
+ "#{spec.class_name(citem)}::AcceptsFocusFromKeyboard",
275
289
  "#{spec.class_name(citem)}::SetFont",
276
290
  "#{spec.class_name(citem)}::SetForegroundColour",
277
291
  "#{spec.class_name(citem)}::SetHelpText",
@@ -95,8 +95,9 @@ module WXRuby3
95
95
  params_doc.unlink if params_doc
96
96
  # get brief doc
97
97
  doc = xml_trans.to_doc(@brief_doc, item: self)
98
+ doc << "\n" if @detailed_doc # force empty line (paragraph break) between summary and detail
98
99
  # add detailed doc text without params doc
99
- doc << xml_trans.to_doc(@detailed_doc, item: self, desc: :detail)
100
+ doc << xml_trans.to_doc(@detailed_doc, item: self, desc: :detail) if @detailed_doc
100
101
  # get mapped ruby parameter list
101
102
  params = []
102
103
  mapped_ret_args = nil
@@ -366,7 +366,7 @@ module WXRuby3
366
366
  type_list = [type]
367
367
  type_list << "#{enum_scope}::#{type.split('::').pop}" unless enum_scope.empty?
368
368
  rb_enum_name = if !enum_scope.empty?
369
- "#{enum_scope}::#{rb_wx_name(type.split('::').pop)}"
369
+ "#{rb_wx_name(enum_scope)}::#{rb_wx_name(type.split('::').pop)}"
370
370
  else
371
371
  rb_wx_name(type)
372
372
  end
@@ -253,7 +253,7 @@ module WXRuby3
253
253
  <div class="wxrb-remark">
254
254
  <b>Remark:</b>
255
255
  <p>#{node_to_doc(node)}</p>
256
- </div>>
256
+ </div>
257
257
  __NOTE
258
258
  else
259
259
  node_to_doc(node)
@@ -861,6 +861,7 @@ module WXRuby3
861
861
 
862
862
  def get_class_doc(cls)
863
863
  doc = @xml_trans.to_doc(cls.brief_doc, item: cls)
864
+ doc << "\n" if cls.detailed_doc # force empty line (paragraph break) between summary and detail
864
865
  doc << @xml_trans.to_doc(cls.detailed_doc, item: cls, desc: :detail) if cls.detailed_doc
865
866
  doc
866
867
  end
@@ -900,6 +901,8 @@ module WXRuby3
900
901
  fdoc.doc.indent { gen_item_requirements(fdoc, ovl) }
901
902
  end
902
903
  fdoc.puts "def #{name}(*args) end"
904
+ # in case all overloads were ignored there will be no SWIG generated alias
905
+ no_gen_alias = docs.all? { |ovl, _, _| ovl.ignored }
903
906
  else
904
907
  mtd, params, doc = docs.shift
905
908
  fdoc.doc.puts doc
@@ -909,9 +912,11 @@ module WXRuby3
909
912
  else
910
913
  fdoc.puts "def #{name}(#{params}) end"
911
914
  end
915
+ # in case the documented method was ignored there will be no SWIG generated alias
916
+ no_gen_alias = mtd.ignored
912
917
  end
913
- # check for SWIG generated aliases
914
- if alias_methods.has_key?(cm.name)
918
+ # check for SWIG generated aliases (skip ignored method defs as these will not have SWIG generated aliases)
919
+ if !no_gen_alias && alias_methods.has_key?(cm.name)
915
920
  fdoc.puts "alias_method :#{alias_methods[cm.name]}, :#{name}"
916
921
  else
917
922
  # check for aliases that will be available from WxRubyStyleAccessors at runtime
@@ -920,7 +925,8 @@ module WXRuby3
920
925
  when /\Aget_(\w+)/
921
926
  $1
922
927
  when /\Aset_(\w+)/
923
- if mtd_head.all.any? { |ovl| ovl.parameter_count > 0 && ovl.required_param_count < 2 }
928
+ # only document alias if at least 1 method overload has a single required argument
929
+ if docs.any? { |ovl, _, _| ovl.parameter_count > 0 && ovl.required_param_count < 2 }
924
930
  "#{$1}="
925
931
  else
926
932
  nil
@@ -56,6 +56,7 @@ module WXRuby3
56
56
  Director.Spec(pkg, 'wxCaret')
57
57
  Director.Spec(pkg, 'wxValidator', requirements: %[USE_VALIDATORS])
58
58
  Director.Spec(pkg, 'wxTextValidator', requirements: %[USE_VALIDATORS])
59
+ Director.Spec(pkg, 'wxNumValidator', requirements: %[USE_VALIDATORS])
59
60
  Director.Spec(pkg, 'wxAccelerator', requirements: %w[USE_ACCEL])
60
61
  Director.Spec(pkg, 'wxMenuItem', requirements: %w[USE_MENUS])
61
62
  Director.Spec(pkg, 'wxMenuBar', requirements: %w[USE_MENUBAR])
@@ -80,6 +81,7 @@ module WXRuby3
80
81
  Director.Spec(pkg, 'wxComboBox', requirements: %w[USE_COMBOBOX])
81
82
  Director.Spec(pkg, 'wxBitmapComboBox', requirements: %w[USE_BITMAPCOMBOBOX])
82
83
  Director.Spec(pkg, 'wxComboCtrl', requirements: %w[USE_COMBOCTRL])
84
+ Director.Spec(pkg, 'wxOwnerDrawnComboBox', requirements: %w[USE_ODCOMBOBOX ])
83
85
  Director.Spec(pkg, 'wxRadioBox', requirements: %w[USE_RADIOBOX])
84
86
  Director.Spec(pkg, 'wxPanel')
85
87
  Director.Spec(pkg, 'wxWithImages')
@@ -404,29 +404,63 @@ module WXRuby3
404
404
  dir_cls_re_txt = class_list.select { |clsdef| has_proxy?(clsdef) }.collect { |cd| cd.name }.join('|')
405
405
  # create regexp for Director constructors (may not exist if no proxies are enabled)
406
406
  dir_ctor_re = /SwigDirector_\w+::SwigDirector_\w+\(.*\)\s*:\s*(#{dir_cls_re_txt})\(.*\)\s*,\s*Swig::Director.*{/
407
+ # create regexp for method wrappers other than 'initialize' wrappers
408
+ wrap_mtd_re = /_wrap_(#{cls_re_txt})_(\w+)\(.*\)/
407
409
  end
408
410
  found_new = false
409
411
  cpp_class = nil
410
412
  cpp_new_re = nil
413
+ found_wrap_mtd = false
414
+ wrap_mtd_name = nil
415
+ wrap_mtd_upcall_re = nil
411
416
  update_source do |line|
412
417
  if found_new # inside 'initialize' wrapper?
413
418
  if cpp_new_re =~ line # at C++ allocation of class instance?
414
- # replace with the registered implementation class
415
- line.sub!(/new\s+#{cpp_class}\(/, "new #{class_implementation(cpp_class)}(")
416
- found_new = false # only 1 line will match per wrapper function so stop matching
419
+ if $1 # director allocation for derived class
420
+ # in case of copy ctor replace type of argument
421
+ # for director copy ctor
422
+ line.sub!(/\((\w+),\s*\(#{cpp_class}\s+const\s+\&\)/, "(\\1,(#{class_implementation(cpp_class)} const &)")
423
+ else # allocation for actual class
424
+ # replace with the registered implementation class
425
+ line.sub!(/new\s+#{cpp_class}\(/, "new #{class_implementation(cpp_class)}(")
426
+ # in case of copy ctor also replace type of argument
427
+ # for class copy ctor
428
+ line.sub!(/\(\(#{cpp_class}\s+const\s+\&\)/, "((#{class_implementation(cpp_class)} const &)")
429
+ end
417
430
  elsif /\A}/ =~ line # end of wrapper function?
418
431
  # stop matching (in case of overloads there will be one matching wrapper function
419
432
  # that does no actual allocation but just acts as a front for the overload wrappers)
420
433
  found_new = false
421
434
  end
435
+ elsif found_wrap_mtd
436
+ if wrap_mtd_upcall_re =~ line # at upcall for possibly proxied wrapper?
437
+ line.gsub!(cpp_class, class_implementation(cpp_class))
438
+ # if the upcall does not yet cast the receiver instance to the correct implementation class
439
+ if /\((\w+)\)->/ =~ line
440
+ # add required cast
441
+ line.sub!(/\((\w+)\)->/, "((#{class_implementation(cpp_class)} *)\\1)->")
442
+ end
443
+ found_wrap_mtd = false # upcall found
444
+ elsif /\A}/ =~ line
445
+ found_wrap_mtd = false # end of wrapper method
446
+ end
422
447
  elsif new_re =~ line # are we at an 'initialize' wrapper?
423
448
  found_new = true
424
449
  cpp_class = $1
425
- cpp_new_re = /new\s+#{cpp_class}\(.*\)/ # regexp for C++ new expression for this specific class
426
- elsif proxies_enabled && dir_ctor_re =~ line # at director ctor?
427
- # replace base class name by implementation name
428
- cpp_class = $1
429
- line.sub!(/:\s*#{cpp_class}\(/, ": #{class_implementation(cpp_class)}(")
450
+ cpp_new_re = /new\s+(SwigDirector_)?#{cpp_class}\(.*\)/ # regexp for C++ new expression for this specific class
451
+ elsif proxies_enabled
452
+ if dir_ctor_re =~ line # at director ctor?
453
+ # replace base class name by implementation name
454
+ cpp_class = $1
455
+ line.sub!(/:\s*#{cpp_class}\(/, ": #{class_implementation(cpp_class)}(")
456
+ # in case of copy ctor also replace type of argument
457
+ line.sub!(/\(VALUE\s+self,\s*#{cpp_class}\s+const\s+\&(\w+)\)/, "(VALUE self, #{class_implementation(cpp_class)} const &\\1)")
458
+ elsif wrap_mtd_re =~ line # at wrapper method other than 'initialize' wrapper
459
+ cpp_class = $1
460
+ wrap_mtd_name = $2
461
+ wrap_mtd_upcall_re = /-\>#{cpp_class}::#{wrap_mtd_name}\(/
462
+ found_wrap_mtd = true
463
+ end
430
464
  end
431
465
  line
432
466
  end
@@ -435,11 +469,23 @@ module WXRuby3
435
469
  # if so, we also need to update the header code (Director class declaration)
436
470
  # create regexp for 'initialize' wrappers (due to overloads this could be more than one per class)
437
471
  dir_re = /class\s+SwigDirector_\w+\s*:\s*public\s+(#{dir_cls_re_txt})\s*,\s*public\s+Swig::Director\s*{/
472
+ found_dir = false
473
+ copy_ctor_re = nil
438
474
  update_header do |line|
439
- if dir_re =~ line # at Director class declaration?
475
+ if found_dir
476
+ if copy_ctor_re =~ line
477
+ # replace copy ctor arg type
478
+ arg = $1
479
+ line.sub!(/#{cpp_class}\s+const\s+&#{arg}/, "#{class_implementation(cpp_class)} const &#{arg}")
480
+ elsif /\A};/ =~ line
481
+ found_dir = false
482
+ end
483
+ elsif dir_re =~ line # at Director class declaration?
440
484
  # replace base class name by implementation name
441
485
  cpp_class = $1
442
486
  line.sub!(/public\s+#{cpp_class}/, "public #{class_implementation(cpp_class)}")
487
+ copy_ctor_re = /SwigDirector_#{cpp_class}\(VALUE\s+self,\s*#{cpp_class}\s+const\s+&(\w+)\);/
488
+ found_dir = true
443
489
  end
444
490
  line
445
491
  end
@@ -0,0 +1,67 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 client data typemap definition
7
+ ###
8
+
9
+ require_relative '../core/mapping'
10
+
11
+ module WXRuby3
12
+
13
+ module Typemap
14
+
15
+ module ClientData
16
+
17
+ include Typemap::Module
18
+
19
+ define do
20
+
21
+ map 'wxClientData *' => 'Object' do
22
+ add_header_code <<~__CODE
23
+ #include "wxruby-ClientData.h"
24
+ __CODE
25
+ map_in code: '$1 = NIL_P($input) ? nullptr : new wxRubyClientData($input);'
26
+ map_out code: <<~__CODE
27
+ $result = Qnil;
28
+ if ($1)
29
+ {
30
+ wxRubyClientData* rbcd = dynamic_cast<wxRubyClientData*> ($1);
31
+ if (rbcd) $result = rbcd->GetData();
32
+ }
33
+ __CODE
34
+
35
+ map_typecheck precedence: 'POINTER', code: '$1 = true;'
36
+ end
37
+
38
+ map 'wxObject *userData' => 'Object' do
39
+ add_header_code <<~__CODE
40
+ #include "wxruby-ClientData.h"
41
+ __CODE
42
+ map_in code: '$1 = NIL_P($input) ? nullptr : new wxRubyUserData($input);'
43
+
44
+ map_typecheck precedence: 'POINTER', code: '$1 = true;'
45
+ end
46
+
47
+ # WxUserDataObject must be typedef for wxObject*
48
+ map 'WxUserDataObject' => 'Object' do
49
+
50
+ map_out code: <<~__CODE
51
+ $result = Qnil;
52
+ if ($1)
53
+ {
54
+ wxRubyUserData* rbud = dynamic_cast<wxRubyUserData*> ($1);
55
+ if (rbud) $result = rbud->GetData();
56
+ }
57
+ __CODE
58
+
59
+ end
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ end
@@ -211,7 +211,8 @@ module WXRuby3
211
211
 
212
212
  map 'wxSize&' => 'Array(Integer, Integer), Wx::Size',
213
213
  'wxPoint&' => 'Array(Integer, Integer), Wx::Point' do
214
- map_in code: <<~__CODE
214
+ add_header_code '#include <memory>'
215
+ map_in temp: 'std::unique_ptr<$1_basetype> tmp', code: <<~__CODE
215
216
  if ( TYPE($input) == T_DATA )
216
217
  {
217
218
  void* argp$argnum;
@@ -222,8 +223,7 @@ module WXRuby3
222
223
  {
223
224
  $1 = new $1_basetype( NUM2INT( rb_ary_entry($input, 0) ),
224
225
  NUM2INT( rb_ary_entry($input, 1) ) );
225
- // Create a ruby object so the C++ obj is freed when GC runs
226
- SWIG_NewPointerObj($1, $1_descriptor, 1);
226
+ tmp.reset($1); // auto destruct when method scope ends
227
227
  }
228
228
  else
229
229
  {
@@ -42,7 +42,7 @@ module WXRuby3
42
42
  map_directorin code: '$input = wxRuby_wxDateTimeToRuby($1);'
43
43
 
44
44
  map_typecheck precedence: 'SWIGOBJECT', code: <<~__CODE
45
- $1 = rb_obj_is_kind_of($input, rb_cTime) || rb_respond_to($input, rb_intern ("to_time"));
45
+ $1 = NIL_P($input) || rb_obj_is_kind_of($input, rb_cTime) || rb_respond_to($input, rb_intern ("to_time"));
46
46
  __CODE
47
47
  end
48
48
 
@@ -50,7 +50,7 @@ module WXRuby3
50
50
 
51
51
  map_in temp: 'wxTreeItemId tmpId', code: <<~__CODE
52
52
  if ($input != Qnil) tmpId = _wxRuby_Unwrap_wxTreeItemId($input);
53
- $1 = &tmpId;
53
+ $1 = tmpId;
54
54
  __CODE
55
55
 
56
56
  map_directorin code: '$input = _wxRuby_Wrap_wxTreeItemId($1);'
@@ -59,7 +59,7 @@ module WXRuby3
59
59
 
60
60
  map_directorout temp: 'wxTreeItemId tmpId', code: <<~__CODE
61
61
  if ($input != Qnil) tmpId = _wxRuby_Unwrap_wxTreeItemId($input);
62
- $result = &tmpId;
62
+ $result = tmpId;
63
63
  __CODE
64
64
 
65
65
  map_typecheck precedence: 'POINTER', code: '$1 = _wxRuby_Is_wxTreeItemId($input);'