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
@@ -14,6 +14,8 @@ module WXRuby3
14
14
 
15
15
  class ControlWithItems < Window
16
16
 
17
+ include Typemap::ClientData
18
+
17
19
  def setup
18
20
  super
19
21
  if spec.module_name == 'wxControlWithItems'
@@ -26,50 +28,127 @@ module WXRuby3
26
28
  wxEvtHandler
27
29
  wxObject])
28
30
  spec.ignore([
29
- 'wxItemContainer::Append(const wxString &, wxClientData *)',
31
+ 'wxItemContainer::Append(const wxString &, void *)',
30
32
  'wxItemContainer::Append(const std::vector< wxString > &)',
31
- 'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
33
+ 'wxItemContainer::Append(const wxArrayString &, void **)',
32
34
  'wxItemContainer::Append(unsigned int, const wxString *)',
33
35
  'wxItemContainer::Append(unsigned int, const wxString *, void **)',
34
36
  'wxItemContainer::Append(unsigned int, const wxString *, wxClientData **)',
35
- 'wxItemContainer::Insert(const wxString &, unsigned int, wxClientData *)',
37
+ 'wxItemContainer::Insert(const wxString &, unsigned int, void *)',
36
38
  'wxItemContainer::Insert(const std::vector< wxString > &)',
37
- 'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
39
+ 'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
38
40
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int)',
39
41
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, void **)',
40
42
  'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, wxClientData **)',
41
43
  'wxItemContainer::Set(const std::vector< wxString > &)',
42
- 'wxItemContainer::Set(const wxArrayString &, wxClientData **)',
44
+ 'wxItemContainer::Set(const wxArrayString &, void **)',
43
45
  'wxItemContainer::Set(unsigned int, const wxString *)',
44
46
  'wxItemContainer::Set(unsigned int, const wxString *, void **)',
45
47
  'wxItemContainer::Set(unsigned int, const wxString *, wxClientData **)',
46
- 'wxItemContainer::DetachClientObject',
47
- 'wxItemContainer::HasClientObjectData',
48
- 'wxItemContainer::GetClientObject',
49
- 'wxItemContainer::SetClientObject'])
48
+ 'wxItemContainer::HasClientUntypedData',
49
+ 'wxItemContainer::GetClientData',
50
+ 'wxItemContainer::SetClientData'])
51
+ # ignore these but keep docs; will add custom versions below
50
52
  spec.ignore([
51
- 'wxItemContainer::Append(const wxArrayString &, void **)',
52
- 'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
53
- 'wxItemContainer::Set(const wxArrayString &, void **)'], ignore_doc: false)
54
- # add undocumented method
55
- spec.extend_interface 'wxControlWithItems',
56
- 'bool IsSorted() const'
53
+ 'wxItemContainer::DetachClientObject',
54
+ 'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
55
+ 'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
56
+ 'wxItemContainer::Set(const wxArrayString &, wxClientData **)'], ignore_doc: false)
57
+ if Config.instance.wx_version < '3.3.0'
58
+ # add undocumented method
59
+ spec.extend_interface 'wxControlWithItems',
60
+ 'bool IsSorted() const'
61
+ end
57
62
  # for doc only
58
- spec.map 'void** clientData' => 'Array', swig: false do
63
+ spec.map 'wxClientData** clientData' => 'Array', swig: false do
59
64
  map_in code: ''
60
65
  end
61
- spec.ignore(%w[wxItemContainer::GetClientData wxItemContainer::SetClientData], ignore_doc: false) # keep docs
62
- # Replace the old Wx definition of this method (which segfaults)
63
- # Only need the setter as we cache data in Ruby and the getter
64
- # therefor can be pure Ruby
65
- spec.add_extend_code('wxControlWithItems', <<~__HEREDOC
66
- VALUE set_client_data(int n, VALUE item_data) {
67
- self->SetClientData(n, (void *)item_data);
68
- return item_data;
66
+ # Replace the old Wx definitions of these methods adding
67
+ # proper checks on the data arrays.
68
+ # Also add an item enumerator.
69
+ spec.add_extend_code 'wxControlWithItems', <<~__HEREDOC
70
+ VALUE DetachClientObject(unsigned int n)
71
+ {
72
+ VALUE rc = Qnil;
73
+ wxClientData *wxcd = $self->DetachClientObject(n);
74
+ wxRubyClientData *rbcd = wxcd ? dynamic_cast<wxRubyClientData*> (wxcd) : nullptr;
75
+ if (rbcd)
76
+ {
77
+ rc = rbcd->GetData();
78
+ delete rbcd;
79
+ }
80
+ return rc;
81
+ }
82
+
83
+ int Append(const wxArrayString &items, VALUE rb_clientData)
84
+ {
85
+ if (TYPE(rb_clientData) != T_ARRAY ||
86
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
87
+ {
88
+ rb_raise(rb_eArgError,
89
+ TYPE(rb_clientData) == T_ARRAY ?
90
+ "expected Array for client_data" :
91
+ "client_data Array needs to be equal in size to items Array");
92
+ }
93
+
94
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
95
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
96
+ {
97
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
98
+ }
99
+ return $self->Append(items, cd_arr.get());
100
+ }
101
+
102
+ int Insert(const wxArrayString &items, unsigned int pos, VALUE rb_clientData)
103
+ {
104
+ if (TYPE(rb_clientData) != T_ARRAY ||
105
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
106
+ {
107
+ rb_raise(rb_eArgError,
108
+ TYPE(rb_clientData) == T_ARRAY ?
109
+ "expected Array for client_data" :
110
+ "client_data Array needs to be equal in size to items Array");
111
+ }
112
+
113
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
114
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
115
+ {
116
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
117
+ }
118
+ return $self->Insert(items, pos, cd_arr.get());
119
+ }
120
+
121
+ void Set(const wxArrayString &items, VALUE rb_clientData)
122
+ {
123
+ if (TYPE(rb_clientData) != T_ARRAY ||
124
+ static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
125
+ {
126
+ rb_raise(rb_eArgError,
127
+ TYPE(rb_clientData) == T_ARRAY ?
128
+ "expected Array for client_data" :
129
+ "client_data Array needs to be equal in size to items Array");
130
+ }
131
+
132
+ std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
133
+ for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
134
+ {
135
+ cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
136
+ }
137
+ $self->Set(items, cd_arr.get());
138
+ }
139
+
140
+ VALUE each_string()
141
+ {
142
+ VALUE rc = Qnil;
143
+ for (unsigned int i=0; i<$self->GetCount() ;++i)
144
+ {
145
+ VALUE rb_s = WXSTR_TO_RSTR($self->GetString(i));
146
+ rc = rb_yield(rb_s);
147
+ }
148
+ return rc;
69
149
  }
70
150
  __HEREDOC
71
- )
72
- end
151
+ end
73
152
  end
74
153
 
75
154
  def setup_ctrl_with_items(clsnm)
@@ -20,7 +20,7 @@ module WXRuby3
20
20
  # The formal signature for these is NativeFormat; this is required on
21
21
  # MSVC as otherwise an impermissible implicit cast is tried, and so
22
22
  # doesn't compile
23
- spec.ignore 'wxDataFormat::GetType'
23
+ spec.ignore 'wxDataFormat::GetType', ignore_doc: false
24
24
  spec.extend_interface 'wxDataFormat',
25
25
  'typedef unsigned short NativeFormat',
26
26
  'wxDataFormat::NativeFormat GetType() const'
@@ -25,13 +25,15 @@ module WXRuby3
25
25
  VALUE get_range()
26
26
  {
27
27
  wxDateTime dt1, dt2;
28
- $self->GetRange(&dt1, &dt2);
29
-
30
- VALUE items = rb_ary_new();
31
- rb_ary_push(items, wxRuby_wxDateTimeToRuby(dt1));
32
- rb_ary_push(items, wxRuby_wxDateTimeToRuby(dt2));
28
+ if ($self->GetRange(&dt1, &dt2))
29
+ {
30
+ VALUE items = rb_ary_new();
31
+ rb_ary_push(items, wxRuby_wxDateTimeToRuby(dt1));
32
+ rb_ary_push(items, wxRuby_wxDateTimeToRuby(dt2));
33
33
 
34
- return items;
34
+ return items;
35
+ }
36
+ return Qnil;
35
37
  }
36
38
  __HEREDOC
37
39
  end
@@ -278,7 +278,7 @@ module WXRuby3
278
278
  # like all DC this should best always be a temporary stack object
279
279
  # we do not allow creation in Ruby but rather provide class
280
280
  # methods for block execution on a temp dc
281
- unless Config.platform == :linux
281
+ if Config.instance.features_set?('USE_PRINTING_ARCHITECTURE', Director.AnyOf(*%w[WXMSW WXOSX USE_GTKPRINT]))
282
282
  spec.add_extend_code 'wxGCDC', <<~__HEREDOC
283
283
  static VALUE draw_on(const wxPrinterDC& dc)
284
284
  {
@@ -24,6 +24,7 @@ module WXRuby3
24
24
  when 'wxDialog'
25
25
  spec.items << 'wxDialogLayoutAdapter'
26
26
  spec.gc_as_object 'wxDialogLayoutAdapter'
27
+ spec.suppress_warning(514, 'wxDialogLayoutAdapter')
27
28
  spec.disown 'wxDialogLayoutAdapter* adapter'
28
29
  spec.new_object 'wxDialog::SetLayoutAdapter'
29
30
  spec.ignore('wxDialog::GetContentWindow',
@@ -15,9 +15,8 @@ module WXRuby3
15
15
  include Typemap::TreeItemId
16
16
 
17
17
  def setup
18
- unless Config.instance.features_set?('__WXUNIVERSAL__')
19
- spec.ignore('wxDragImage::DoDrawImage', 'wxDragImage::GetImageRect', 'wxDragImage::UpdateBackingFromWindow')
20
- end
18
+ # If wxRuby ever supports WXUNIVERSAL this should change to #ignore_unless
19
+ spec.ignore('wxDragImage::DoDrawImage', 'wxDragImage::GetImageRect', 'wxDragImage::UpdateBackingFromWindow')
21
20
  super
22
21
  end
23
22
  end # class DragImage
@@ -16,6 +16,36 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
+ # methods missing from docs
20
+ spec.extend_interface 'wxEditableListBox',
21
+ 'wxListCtrl* GetListCtrl()',
22
+ 'wxBitmapButton* GetDelButton()',
23
+ 'wxBitmapButton* GetNewButton()',
24
+ 'wxBitmapButton* GetUpButton()',
25
+ 'wxBitmapButton* GetDownButton()',
26
+ 'wxBitmapButton* GetEditButton()'
27
+ # redefine this
28
+ spec.ignore 'wxEditableListBox::GetStrings', ignore_doc: false
29
+ spec.add_extend_code 'wxEditableListBox', <<~__HEREDOC
30
+ VALUE GetStrings()
31
+ {
32
+ VALUE rb_list = rb_ary_new();
33
+ wxArrayString list;
34
+ $self->GetStrings(list);
35
+ for (unsigned int i=0; i<list.GetCount() ;++i)
36
+ {
37
+ rb_ary_push(rb_list, WXSTR_TO_RSTR(list.Item(i)));
38
+ }
39
+ return rb_list;
40
+ }
41
+ __HEREDOC
42
+ # map for doc gen
43
+ spec.map 'wxArrayString& strings' => 'Array<String>', swig: false do
44
+ map_in ignore: true, code: ''
45
+ map_argout code: ''
46
+ end
47
+ # make sure GetStrings uses the right typemap
48
+ spec.map_apply 'wxArrayString&' => 'const wxArrayString& strings'
19
49
  end
20
50
  end # class EditableListBox
21
51
 
@@ -138,36 +138,46 @@ module WXRuby3
138
138
  return INT2NUM(event_type_id);
139
139
  }
140
140
  __HEREDOC
141
+ spec.map 'wxObject*' => 'Wx::Object' do
142
+ map_out code: '$result = wxRuby_WrapWxObjectInRuby($1);'
143
+ end
141
144
  # make Ruby director and wrappers use custom implementation
142
145
  spec.use_class_implementation('wxCommandEvent', 'wxRubyCommandEvent')
143
146
  spec.ignore %w{
144
- wxCommandEvent::GetClientObject
145
- wxCommandEvent::SetClientObject
147
+ wxCommandEvent::GetClientData
148
+ wxCommandEvent::SetClientData
146
149
  wxCommandEvent::GetExtraLong
147
150
  }
151
+ # ignore but keep doc; will replace with custom versions
152
+ spec.ignore %w[wxCommandEvent::GetClientObject wxCommandEvent::SetClientObject], ignore_doc: false
153
+ # for doc gen only
154
+ spec.map 'wxClientData*' => 'Object', swig: false do
155
+ map_in code: ''
156
+ map_out code: ''
157
+ end
148
158
  # need this to force alloc func
149
159
  spec.make_concrete 'wxCommandEvent'
150
160
  spec.add_header_code <<~__HEREDOC
151
161
  // Cf wxEvent - has to be written as a C+++ subclass to ensure correct
152
162
  // GC/thread protection of Ruby instance variables when user-written
153
163
  // event classes are queued.
154
- //
155
- //
156
- // FIXME : intermittent errors with CommandEvent losing the tracked
157
- // object before handling - though the same code works fine with Wx::Event
158
164
  class WXRUBY_EXPORT wxRubyCommandEvent : public wxCommandEvent
159
165
  {
160
166
  public:
161
167
  wxRubyCommandEvent(wxEventType commandType = wxEVT_NULL,
162
- int id = 0) :
163
- wxCommandEvent(commandType, id) { }
164
- wxRubyCommandEvent(const wxRubyCommandEvent& cev) :
165
- wxCommandEvent(cev) { }
168
+ int id = 0)
169
+ : wxCommandEvent(commandType, id)
170
+ { }
171
+ wxRubyCommandEvent(const wxRubyCommandEvent& cev)
172
+ : wxCommandEvent(cev)
173
+ , has_ruby_data_(cev.has_ruby_data_)
174
+ { }
166
175
 
167
176
  // When the C++ side event is destroyed, unlink from the Ruby object
168
177
  // and remove that object from the tracking hash so it can be
169
178
  // collected by GC.
170
- virtual ~wxRubyCommandEvent() {
179
+ virtual ~wxRubyCommandEvent()
180
+ {
171
181
  SWIG_RubyUnlinkObjects((void*)this);
172
182
  wxRuby_RemoveTracking((void*)this);
173
183
  }
@@ -176,7 +186,8 @@ module WXRuby3
176
186
  // (often when using Threads), because a clone is queued. So copy the
177
187
  // Wx C++ event, create a shallow (dup) of the Ruby event object, and
178
188
  // add to the tracking hash so that it is GC-protected
179
- virtual wxCommandEvent* Clone() const {
189
+ virtual wxCommandEvent* Clone() const
190
+ {
180
191
  wxRubyCommandEvent* wx_ev = new wxRubyCommandEvent(*this);
181
192
 
182
193
  VALUE r_obj = SWIG_RubyInstanceFor((void *)this);
@@ -186,7 +197,86 @@ module WXRuby3
186
197
  wxRuby_AddTracking( (void*)wx_ev, r_obj_dup );
187
198
  return wx_ev;
188
199
  }
200
+
201
+ bool has_ruby_data_ {};
189
202
  };
203
+
204
+
205
+ // wxRuby must preserve ruby objects attached as the ClientData of
206
+ // command events that have been user-defined in ruby. Some of the
207
+ // standard wxWidgets CommandEvent classes also use ClientData
208
+ // for their own purposes, and this must not be marked as the data is
209
+ // not a ruby object, and will thus crash.
210
+ WXRUBY_EXPORT void GC_mark_wxEvent(void *ptr)
211
+ {
212
+ #ifdef __WXRB_DEBUG__
213
+ if (wxRuby_TraceLevel()>1)
214
+ std::wcout << "> GC_mark_wxEvent : " << ptr << std::endl;
215
+ #endif
216
+
217
+ if ( ! ptr ) return;
218
+ wxEvent* wx_event = (wxEvent*)ptr;
219
+ #ifdef __WXRB_DEBUG__
220
+ if (wxRuby_TraceLevel()>2)
221
+ std::wcout << "* GC_mark_wxEvent(" << ptr << ":{" << wx_event->GetEventType() << "})" << std::endl;
222
+ #endif
223
+ if (wx_event->IsCommandEvent())
224
+ {
225
+ wxCommandEvent* wx_cm_event = (wxCommandEvent*)ptr;
226
+ if (wx_cm_event->GetClientObject() == nullptr && wx_cm_event->GetClientData() != nullptr)
227
+ {
228
+ wxRubyCommandEvent* rbcev = dynamic_cast<wxRubyCommandEvent*> (wx_cm_event);
229
+ if (rbcev && rbcev->has_ruby_data_)
230
+ {
231
+ VALUE rb_client_data = (VALUE)wx_cm_event->GetClientData();
232
+ rb_gc_mark(rb_client_data);
233
+ }
234
+ }
235
+ }
236
+
237
+ #ifdef __WXRB_DEBUG__
238
+ if (wxRuby_TraceLevel()>1)
239
+ std::wcout << "< GC_mark_wxEvent : " << ptr << std::endl;
240
+ #endif
241
+ }
242
+ __HEREDOC
243
+ # CommandEvent requires custom handling of client data.
244
+ # As command events do not 'own' their wxClientData objects we cannot use the regular support
245
+ # for setting client data from Ruby as that would cause memory leaks by creating wxRubyClientData
246
+ # instances that would never get deleted.
247
+ # On the other hand wxWidgets library code might still set wxClientData instances propagated from
248
+ # control or item client data which needs to be used for returning client data with GetClientObject.
249
+ # As wxRuby client data always is any arbitrary Ruby Object anyway we simply combine the two approaches wxWidgets
250
+ # offers here under 1 set of methods.
251
+ spec.include 'wxruby-ClientData.h'
252
+ spec.add_extend_code 'wxCommandEvent', <<~__HEREDOC
253
+ VALUE GetClientObject()
254
+ {
255
+ VALUE rc = Qnil;
256
+ // return Ruby client data depending on what's available
257
+ if ($self->GetClientObject())
258
+ {
259
+ wxRubyClientData* rbcd = dynamic_cast<wxRubyClientData*> ($self->GetClientObject());
260
+ if (rbcd) rc = rbcd->GetData();
261
+ }
262
+ else if ($self->GetClientData() != nullptr)
263
+ {
264
+ wxRubyCommandEvent* rbcev = dynamic_cast<wxRubyCommandEvent*> ($self);
265
+ if (rbcev && rbcev->has_ruby_data_) rc = (VALUE)$self->GetClientData();
266
+ }
267
+ return rc;
268
+ }
269
+
270
+ void SetClientObject(VALUE cd)
271
+ {
272
+ wxRubyCommandEvent* rbcev = dynamic_cast<wxRubyCommandEvent*> ($self);
273
+ if (rbcev)
274
+ {
275
+ // use SetClientData as not to create memory leaks; GC marker for events will keep it alive
276
+ $self->SetClientData(NIL_P(cd) ? nullptr : (void*)cd);
277
+ rbcev->has_ruby_data_ = !NIL_P(cd);
278
+ }
279
+ }
190
280
  __HEREDOC
191
281
  spec.add_wrapper_code <<~__HEREDOC
192
282
  extern VALUE wxRuby_GetDefaultEventClass()
@@ -195,8 +285,8 @@ module WXRuby3
195
285
  }
196
286
  __HEREDOC
197
287
  spec.ignore 'wxQueueEvent'
198
- spec.ignore('wxEVT_HOTKEY') unless Config.instance.features_set?('wxUSE_HOTKEY')
199
- spec.ignore('wxEVT_MOUSE_CAPTURE_CHANGED', 'wxEVT_MOUSE_CAPTURE_LOST', 'wxEVT_DISPLAY_CHANGED') unless Config.instance.features_set?('__WXMSW__')
288
+ spec.ignore_unless('USE_HOTKEY', 'wxEVT_HOTKEY')
289
+ spec.ignore_unless('WXMSW', 'wxEVT_MOUSE_CAPTURE_CHANGED', 'wxEVT_MOUSE_CAPTURE_LOST', 'wxEVT_DISPLAY_CHANGED')
200
290
  # make sure this event constant definition exists
201
291
  spec.add_swig_code %Q{%constant wxEventType wxEVT_MENU_HIGHLIGHT_ALL = wxEVT_MENU_HIGHLIGHT;}
202
292
  # add event type constant missing from interface defs
@@ -12,6 +12,8 @@ module WXRuby3
12
12
 
13
13
  class EvtHandler < Director
14
14
 
15
+ include Typemap::ClientData
16
+
15
17
  def setup
16
18
  super
17
19
  # update generated code for all event handlers
@@ -22,8 +24,7 @@ module WXRuby3
22
24
  'wxEvtHandler::Connect',
23
25
  'wxEvtHandler::Disconnect')
24
26
  spec.ignore(%w[wxEVT_HOTKEY])
25
- spec.ignore(%w[wxEvtHandler::SetClientData wxEvtHandler::GetClientData
26
- wxEvtHandler::SetClientObject wxEvtHandler::GetClientObject])
27
+ spec.ignore(%w[wxEvtHandler::SetClientData wxEvtHandler::GetClientData])
27
28
  # Do not see much point in allowing/supporting this to be overridden when we
28
29
  # have TryBefore and TryAfter to handle this much cleaner
29
30
  spec.no_proxy 'wxEvtHandler::ProcessEvent'
@@ -21,9 +21,7 @@ module WXRuby3
21
21
  when 'wxFrame'
22
22
  spec.ignore %w[
23
23
  wxFrame::OnCreateStatusBar wxFrame::OnCreateToolBar]
24
- unless Config.instance.features_set?(*%w[__WXMSW__ wxUSE_TASKBARBUTTON])
25
- spec.ignore('wxFrame::MSWGetTaskBarButton')
26
- end
24
+ spec.ignore_unless(%w[WXMSW USE_TASKBARBUTTON], 'wxFrame::MSWGetTaskBarButton')
27
25
  # this reimplemented window base method need to be properly wrapped but
28
26
  # is missing from the XML docs
29
27
  spec.extend_interface('wxFrame', 'virtual void OnInternalIdle()')
@@ -42,7 +42,7 @@ module WXRuby3
42
42
 
43
43
  // As the wxw logger will only make synchronous use of the filename, func and component pointers while
44
44
  // processing the log entry and never store them we simply gather pointers but no copies
45
- static void do_log(wxLogLevel lvl, int argc, VALUE *argv, ...)
45
+ static void do_log(wxLogLevel lvl, int argc, VALUE *argv)
46
46
  {
47
47
  const char* filename = nullptr;
48
48
  int line = 0;
@@ -66,7 +66,9 @@ module WXRuby3
66
66
  wxLog::IsLevelEnabled(lvl, wxASCII_STR(component)) )
67
67
  {
68
68
  VALUE log_msg = argc==1 ? argv[0] : rb_f_sprintf(argc, argv);
69
- wxLogger(lvl, filename, line, func, component).Log(RSTR_TO_WXSTR(log_msg));
69
+ wxLogRecordInfo info(filename, line, func, component);
70
+ info.timestampMS = wxGetUTCTimeMillis().GetValue();
71
+ wxLog::OnLog(lvl, RSTR_TO_WXSTR(log_msg), info);
70
72
  }
71
73
  }
72
74
 
@@ -78,16 +78,14 @@ module WXRuby3
78
78
  wxPoint::x wxPoint::y
79
79
  wxRealPoint::x wxRealPoint::y
80
80
  ]
81
- spec.ignore('wxStockCursor.wxCURSOR_DEFAULT') unless Config.instance.features_set?('__WXGTK__')
82
- unless Config.instance.features_set?('__X__')
83
- spec.ignore %w{
84
- wxStockCursor.wxCURSOR_CROSS_REVERSE
85
- wxStockCursor.wxCURSOR_DOUBLE_ARROW
86
- wxStockCursor.wxCURSOR_BASED_ARROW_UP
87
- wxStockCursor.wxCURSOR_BASED_ARROW_DOWN
88
- }
89
- end
90
- spec.ignore('wxStockCursor.wxCURSOR_COPY_ARROW') unless Config.instance.features_set?('__WXOSX__')
81
+ spec.ignore_unless('WXGTK', 'wxStockCursor.wxCURSOR_DEFAULT')
82
+ spec.ignore_unless 'WXX11', %w{
83
+ wxStockCursor.wxCURSOR_CROSS_REVERSE
84
+ wxStockCursor.wxCURSOR_DOUBLE_ARROW
85
+ wxStockCursor.wxCURSOR_BASED_ARROW_UP
86
+ wxStockCursor.wxCURSOR_BASED_ARROW_DOWN
87
+ }
88
+ spec.ignore_unless('WXOSX', 'wxStockCursor.wxCURSOR_COPY_ARROW')
91
89
  spec.add_extend_code 'wxRect', <<~__HEREDOC
92
90
  wxRect add(const wxRect &rect) const {
93
91
  return (*(const wxRect*)$self) + rect;
@@ -20,6 +20,23 @@ module WXRuby3
20
20
  spec.do_not_generate(:variables, :defines, :enums, :functions) # already with DirFilterListCtrl
21
21
  end
22
22
 
23
+ def process(gendoc: false)
24
+ defmod = super
25
+ # fix documentation errors for generic dirctrl events
26
+ def_item = defmod.find_item('wxGenericDirCtrl')
27
+ if def_item
28
+ def_item.event_types.each do |evt_spec|
29
+ case evt_spec.first
30
+ when 'EVT_DIRCTRL_SELECTIONCHANGED', 'EVT_DIRCTRL_FILEACTIVATED'
31
+ if evt_spec[3].nil?
32
+ evt_spec[3] = 'wxTreeEvent' # missing from docs
33
+ end
34
+ end
35
+ end
36
+ end
37
+ defmod
38
+ end
39
+
23
40
  end # class GenericDirCtrl
24
41
 
25
42
  end # class Director
@@ -34,9 +34,7 @@ module WXRuby3
34
34
  'wxGraphicsContext::DrawLines(size_t, const wxPoint2DDouble *, wxPolygonFillMode)',
35
35
  'wxGraphicsContext::StrokeLines(size_t, const wxPoint2DDouble *)',
36
36
  'wxGraphicsContext::StrokeLines (size_t, const wxPoint2DDouble *, const wxPoint2DDouble *)'
37
- if Config.platform == :linux
38
- spec.ignore 'wxGraphicsContext::Create(const wxPrinterDC &)'
39
- end
37
+ spec.ignore_unless(Config::AnyOf.new('WXMSW', 'WXOSX', 'USE_GTKPRINT'), 'wxGraphicsContext::Create(const wxPrinterDC &)')
40
38
  spec.add_header_code <<~__HEREDOC
41
39
  // special free funcs are needed to clean up Dashes array if it has been
42
40
  // set; wxWidgets does not do this automatically so will leak if not
@@ -229,7 +227,7 @@ module WXRuby3
229
227
  __CODE
230
228
  end
231
229
  # add convenience method providing efficient gc memory management
232
- unless Config.platform == :linux
230
+ if Config.instance.features_set?('USE_PRINTING_ARCHITECTURE', Director.AnyOf(*%w[WXMSW WXOSX USE_GTKPRINT]))
233
231
  spec.add_extend_code 'wxGraphicsContext', <<~__HEREDOC
234
232
  static VALUE draw_on(const wxPrinterDC& dc)
235
233
  {
@@ -12,8 +12,6 @@ module WXRuby3
12
12
 
13
13
  class GridCellAttr < Director
14
14
 
15
- include Typemap::GridClientData
16
-
17
15
  def setup
18
16
  super
19
17
  # exposing the mixin wxClientDataContainer/wxSharedClientDataContainer has no real upside
@@ -12,8 +12,6 @@ module WXRuby3
12
12
 
13
13
  class GridCellEditor < Director
14
14
 
15
- include Typemap::GridClientData
16
-
17
15
  def setup
18
16
  super
19
17
  spec.gc_as_untracked
@@ -12,8 +12,6 @@ module WXRuby3
12
12
 
13
13
  class GridCellRenderer < Director
14
14
 
15
- include Typemap::GridClientData
16
-
17
15
  def setup
18
16
  super
19
17
  spec.gc_as_untracked
@@ -87,10 +87,13 @@ module WXRuby3
87
87
  __CODE
88
88
  end
89
89
 
90
- spec.ignore 'wxGrid::GetSelectedBlocks' # ignore
90
+ spec.ignore 'wxGrid::GetSelectedBlocks', ignore_doc: false # ignore
91
+ spec.map 'wxGridBlocks' => 'Array<Wx::GRID::GridBlockCoords>', swig: false do
92
+ map_out code: ''
93
+ end
91
94
  # add rubified API (finish in pure Ruby)
92
95
  spec.add_extend_code 'wxGrid', <<~__HEREDOC
93
- VALUE selected_blocks()
96
+ VALUE each_selected_block()
94
97
  {
95
98
  VALUE rc = Qnil;
96
99
  if (rb_block_given_p())
@@ -103,6 +106,34 @@ module WXRuby3
103
106
  }
104
107
  return rc;
105
108
  }
109
+
110
+ VALUE each_selected_row_block()
111
+ {
112
+ VALUE rc = Qnil;
113
+ if (rb_block_given_p())
114
+ {
115
+ wxGridBlockCoordsVector sel = $self->GetSelectedRowBlocks();
116
+ for (const wxGridBlockCoords& gbc : sel)
117
+ {
118
+ rc = rb_yield (SWIG_NewPointerObj(new wxGridBlockCoords(gbc), SWIGTYPE_p_wxGridBlockCoords, SWIG_POINTER_OWN));
119
+ }
120
+ }
121
+ return rc;
122
+ }
123
+
124
+ VALUE each_selected_col_block()
125
+ {
126
+ VALUE rc = Qnil;
127
+ if (rb_block_given_p())
128
+ {
129
+ wxGridBlockCoordsVector sel = $self->GetSelectedColBlocks();
130
+ for (const wxGridBlockCoords& gbc : sel)
131
+ {
132
+ rc = rb_yield (SWIG_NewPointerObj(new wxGridBlockCoords(gbc), SWIGTYPE_p_wxGridBlockCoords, SWIG_POINTER_OWN));
133
+ }
134
+ }
135
+ return rc;
136
+ }
106
137
  __HEREDOC
107
138
 
108
139
  spec.ignore 'wxGrid::GetGridWindowOffset(const wxGridWindow *, int &, int &) const'
@@ -113,7 +144,7 @@ module WXRuby3
113
144
  typedef wxGrid::TabBehaviour TabBehaviour;
114
145
  __HEREDOC
115
146
 
116
- spec.map 'wxGridBlockCoordsVector' => 'Array<Wx::GRID::GridBlockCoords' do
147
+ spec.map 'wxGridBlockCoordsVector' => 'Array<Wx::GRID::GridBlockCoords>' do
117
148
  map_out code: <<~__CODE
118
149
  $result = rb_ary_new();
119
150
  for (const wxGridBlockCoords& gbc: $1)