wxruby3 0.9.1 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (472) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/INSTALL.md +35 -29
  4. data/README.md +24 -15
  5. data/ext/wxruby3/include/wxRubyApp.h +338 -0
  6. data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
  7. data/ext/wxruby3/include/wxruby-Config.h +6 -6
  8. data/ext/wxruby3/include/wxruby-Validator.h +39 -0
  9. data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
  10. data/ext/wxruby3/swig/common.i +1 -1
  11. data/ext/wxruby3/swig/custom/director.swg +8 -0
  12. data/ext/wxruby3/swig/mark_free_impl.i +0 -33
  13. data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
  14. data/lib/wx/aui/auinotebook.rb +6 -2
  15. data/lib/wx/aui/require.rb +1 -0
  16. data/lib/wx/core/app.rb +2 -2
  17. data/lib/wx/core/bitmap_combobox.rb +17 -21
  18. data/lib/wx/core/collapsible_pane.rb +1 -1
  19. data/lib/wx/core/combobox.rb +13 -3
  20. data/lib/wx/core/controlwithitems.rb +40 -128
  21. data/lib/wx/core/enum.rb +17 -1
  22. data/lib/wx/core/event.rb +6 -1
  23. data/lib/wx/core/evthandler.rb +8 -2
  24. data/lib/wx/core/generic_validator.rb +312 -0
  25. data/lib/wx/core/listbox.rb +2 -2
  26. data/lib/wx/core/log.rb +1 -1
  27. data/lib/wx/core/menu.rb +10 -0
  28. data/lib/wx/core/notebook.rb +6 -2
  29. data/lib/wx/core/owner_drawn_combobox.rb +45 -0
  30. data/lib/wx/core/size.rb +4 -0
  31. data/lib/wx/core/sizer.rb +12 -2
  32. data/lib/wx/core/standard_paths.rb +22 -0
  33. data/lib/wx/core/task_bar_button.rb +19 -0
  34. data/lib/wx/core/text_entry.rb +4 -1
  35. data/lib/wx/core/textctrl.rb +11 -1
  36. data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
  37. data/lib/wx/core/validator.rb +70 -5
  38. data/lib/wx/core/window.rb +13 -7
  39. data/lib/wx/doc/app.rb +48 -38
  40. data/lib/wx/doc/art_locator.rb +48 -43
  41. data/lib/wx/doc/aui/auimanager.rb +16 -8
  42. data/lib/wx/doc/aui/auinotebook.rb +20 -5
  43. data/lib/wx/doc/clipboard.rb +11 -7
  44. data/lib/wx/doc/colour_dialog.rb +14 -10
  45. data/lib/wx/doc/comboctrl.rb +18 -0
  46. data/lib/wx/doc/controlwithitems.rb +34 -8
  47. data/lib/wx/doc/data_object.rb +2 -2
  48. data/lib/wx/doc/date_picker_ctrl.rb +23 -0
  49. data/lib/wx/doc/editable_listbox.rb +44 -0
  50. data/lib/wx/doc/enum.rb +15 -0
  51. data/lib/wx/doc/event.rb +12 -0
  52. data/lib/wx/doc/evthandler.rb +113 -108
  53. data/lib/wx/doc/extra/12_client_data.md +89 -0
  54. data/lib/wx/doc/extra/13_validators.md +139 -0
  55. data/lib/wx/doc/font.rb +1 -0
  56. data/lib/wx/doc/gc_dc.rb +6 -1
  57. data/lib/wx/doc/gdi_common.rb +4 -0
  58. data/lib/wx/doc/generic_validator.rb +95 -0
  59. data/lib/wx/doc/graphics_context.rb +1 -0
  60. data/lib/wx/doc/grid/grid.rb +22 -1
  61. data/lib/wx/doc/help_controller.rb +11 -7
  62. data/lib/wx/doc/html/html_help_controller.rb +12 -4
  63. data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
  64. data/lib/wx/doc/list_ctrl.rb +33 -29
  65. data/lib/wx/doc/menu.rb +20 -0
  66. data/lib/wx/doc/notebook.rb +21 -0
  67. data/lib/wx/doc/num_validator.rb +387 -0
  68. data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
  69. data/lib/wx/doc/pg/events.rb +13 -9
  70. data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
  71. data/lib/wx/doc/pg/pg_property.rb +18 -0
  72. data/lib/wx/doc/progress_dialog.rb +36 -32
  73. data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
  74. data/lib/wx/doc/prt/print_data.rb +13 -5
  75. data/lib/wx/doc/prt/print_dialog.rb +31 -23
  76. data/lib/wx/doc/prt/printer.rb +20 -12
  77. data/lib/wx/doc/radio_box.rb +19 -15
  78. data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
  79. data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
  80. data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
  81. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
  82. data/lib/wx/doc/region_iterator.rb +32 -28
  83. data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
  84. data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
  85. data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
  86. data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
  87. data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
  88. data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
  89. data/lib/wx/doc/sizer.rb +20 -0
  90. data/lib/wx/doc/static_bitmap.rb +25 -0
  91. data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
  92. data/lib/wx/doc/stream.rb +39 -35
  93. data/lib/wx/doc/system_settings.rb +30 -26
  94. data/lib/wx/doc/text_validator.rb +23 -9
  95. data/lib/wx/doc/textctrl.rb +16 -0
  96. data/lib/wx/doc/tree_ctrl.rb +95 -0
  97. data/lib/wx/doc/treebook.rb +9 -5
  98. data/lib/wx/doc/v_list_box.rb +9 -5
  99. data/lib/wx/doc/validator.rb +113 -0
  100. data/lib/wx/doc/variant.rb +164 -160
  101. data/lib/wx/doc/window.rb +87 -47
  102. data/lib/wx/doc/window_disabler.rb +10 -6
  103. data/lib/wx/grid/grid.rb +27 -4
  104. data/lib/wx/html/simple_html_listbox.rb +24 -91
  105. data/lib/wx/keyword_defs.rb +34 -2
  106. data/lib/wx/pg/pg_property.rb +22 -0
  107. data/lib/wx/rbn/ribbon_gallery.rb +0 -21
  108. data/lib/wx/rtc/require.rb +3 -0
  109. data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
  110. data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
  111. data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
  112. data/lib/wx/stc/require.rb +1 -0
  113. data/lib/wx/stc/styled_text_ctrl.rb +25 -0
  114. data/lib/wx/version.rb +1 -1
  115. data/rakelib/lib/config/linux.rb +0 -3
  116. data/rakelib/lib/config/macosx.rb +2 -2
  117. data/rakelib/lib/config/mingw.rb +13 -1
  118. data/rakelib/lib/config/unixish.rb +1 -1
  119. data/rakelib/lib/config.rb +14 -4
  120. data/rakelib/lib/core/include/client_data.inc +65 -0
  121. data/rakelib/lib/core/include/funcall.inc +1 -1
  122. data/rakelib/lib/core/package.rb +31 -9
  123. data/rakelib/lib/core/parameter.rb +1 -1
  124. data/rakelib/lib/core/spec.rb +6 -1
  125. data/rakelib/lib/core/spec_helper.rb +7 -1
  126. data/rakelib/lib/director/accelerator.rb +2 -3
  127. data/rakelib/lib/director/accessible.rb +47 -0
  128. data/rakelib/lib/director/app.rb +30 -319
  129. data/rakelib/lib/director/app_traits.rb +13 -13
  130. data/rakelib/lib/director/bitmap_combobox.rb +2 -2
  131. data/rakelib/lib/director/combobox.rb +22 -0
  132. data/rakelib/lib/director/comboctrl.rb +1 -55
  133. data/rakelib/lib/director/ctrl_with_items.rb +105 -26
  134. data/rakelib/lib/director/data_format.rb +1 -1
  135. data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
  136. data/rakelib/lib/director/derived_dc.rb +1 -1
  137. data/rakelib/lib/director/dialog.rb +1 -0
  138. data/rakelib/lib/director/drag_image.rb +2 -3
  139. data/rakelib/lib/director/editable_listbox.rb +30 -0
  140. data/rakelib/lib/director/event.rb +104 -14
  141. data/rakelib/lib/director/event_handler.rb +3 -2
  142. data/rakelib/lib/director/frame.rb +1 -3
  143. data/rakelib/lib/director/functions.rb +4 -2
  144. data/rakelib/lib/director/gdicommon.rb +8 -10
  145. data/rakelib/lib/director/generic_dirctrl.rb +17 -0
  146. data/rakelib/lib/director/graphics_context.rb +2 -4
  147. data/rakelib/lib/director/grid_cell_attr.rb +0 -2
  148. data/rakelib/lib/director/grid_cell_editor.rb +0 -2
  149. data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
  150. data/rakelib/lib/director/grid_ctrl.rb +34 -3
  151. data/rakelib/lib/director/header_ctrl.rb +6 -1
  152. data/rakelib/lib/director/html_listbox.rb +96 -22
  153. data/rakelib/lib/director/icon.rb +5 -2
  154. data/rakelib/lib/director/list_ctrl.rb +5 -6
  155. data/rakelib/lib/director/locale.rb +1 -3
  156. data/rakelib/lib/director/log.rb +1 -4
  157. data/rakelib/lib/director/media_ctrl.rb +54 -0
  158. data/rakelib/lib/director/menu.rb +16 -1
  159. data/rakelib/lib/director/menu_item.rb +2 -2
  160. data/rakelib/lib/director/num_validator.rb +495 -0
  161. data/rakelib/lib/director/numeric_property_validator.rb +131 -6
  162. data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
  163. data/rakelib/lib/director/pgproperties.rb +1 -1
  164. data/rakelib/lib/director/pgproperty.rb +27 -30
  165. data/rakelib/lib/director/property_grid_interface.rb +5 -10
  166. data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
  167. data/rakelib/lib/director/ribbon_gallery.rb +3 -5
  168. data/rakelib/lib/director/richtext_composite_object.rb +25 -0
  169. data/rakelib/lib/director/richtext_ctrl.rb +14 -4
  170. data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
  171. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
  172. data/rakelib/lib/director/sizer.rb +30 -4
  173. data/rakelib/lib/director/sizer_item.rb +13 -0
  174. data/rakelib/lib/director/static_bitmap.rb +28 -0
  175. data/rakelib/lib/director/static_box.rb +4 -5
  176. data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
  177. data/rakelib/lib/director/task_bar_button.rb +30 -0
  178. data/rakelib/lib/director/task_bar_icon.rb +5 -13
  179. data/rakelib/lib/director/text_entry.rb +4 -0
  180. data/rakelib/lib/director/text_validator.rb +124 -13
  181. data/rakelib/lib/director/textctrl.rb +12 -1
  182. data/rakelib/lib/director/toggle_button.rb +1 -0
  183. data/rakelib/lib/director/tool_tip.rb +1 -1
  184. data/rakelib/lib/director/top_level_window.rb +4 -7
  185. data/rakelib/lib/director/tree_ctrl.rb +40 -6
  186. data/rakelib/lib/director/utils.rb +16 -2
  187. data/rakelib/lib/director/validator.rb +196 -21
  188. data/rakelib/lib/director/variant.rb +1 -1
  189. data/rakelib/lib/director/window.rb +40 -7
  190. data/rakelib/lib/director.rb +4 -4
  191. data/rakelib/lib/extractor/function.rb +8 -7
  192. data/rakelib/lib/extractor.rb +34 -5
  193. data/rakelib/lib/generate/analyzer.rb +9 -4
  194. data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
  195. data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
  196. data/rakelib/lib/generate/doc/cursor.yaml +0 -2
  197. data/rakelib/lib/generate/doc/panel.yaml +7 -0
  198. data/rakelib/lib/generate/doc.rb +85 -17
  199. data/rakelib/lib/specs/interfaces.rb +163 -160
  200. data/rakelib/lib/swig_runner.rb +55 -9
  201. data/rakelib/lib/typemap/client_data.rb +67 -0
  202. data/rakelib/lib/typemap/common.rb +33 -4
  203. data/rakelib/lib/typemap/datetime.rb +1 -1
  204. data/rakelib/lib/typemap/tree_itemid.rb +2 -2
  205. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
  206. data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
  207. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
  208. data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
  209. data/rakelib/yard/templates/default/tags/setup.rb +16 -0
  210. data/rakelib/yard/yard-custom-templates.rb +3 -0
  211. data/samples/aui/aui.rb +1237 -1233
  212. data/samples/calendar/calendar.rb +293 -289
  213. data/samples/controls/get_item_sample.rb +83 -79
  214. data/samples/controls/htlbox.rb +331 -327
  215. data/samples/dialogs/dialogs.rb +682 -694
  216. data/samples/dialogs/wizard.rb +52 -55
  217. data/samples/dragdrop/dragdrop.rb +146 -142
  218. data/samples/drawing/bitmap.rb +29 -26
  219. data/samples/drawing/bitmap_image.rb +84 -80
  220. data/samples/drawing/graphics_drawing.rb +209 -205
  221. data/samples/drawing/image_prt.rb +344 -340
  222. data/samples/drawing/maths_images.rb +18 -1
  223. data/samples/drawing/rmagic_bitmap_image.rb +88 -84
  224. data/samples/etc/caret.rb +306 -0
  225. data/samples/etc/miniframe.rb +65 -60
  226. data/samples/etc/sash.rb +109 -105
  227. data/samples/etc/scrollwin.rb +86 -80
  228. data/samples/etc/system_settings.rb +216 -209
  229. data/samples/event/activation.rb +72 -67
  230. data/samples/event/event.rb +160 -153
  231. data/samples/event/threaded.rb +8 -1
  232. data/samples/event/update_ui_event.rb +67 -60
  233. data/samples/grid/grid.rb +188 -181
  234. data/samples/grid/gridtablebase.rb +136 -129
  235. data/samples/html/html.rb +208 -204
  236. data/samples/mdi/mdi.rb +59 -54
  237. data/samples/minimal/minimal.rb +54 -51
  238. data/samples/minimal/nothing.rb +1 -0
  239. data/samples/printing/printing.rb +367 -377
  240. data/samples/printing/printing2.rb +203 -198
  241. data/samples/propgrid/propgrid.rb +2312 -2308
  242. data/samples/propgrid/propgrid_minimal.rb +57 -50
  243. data/samples/ribbon/ribbon.rb +780 -774
  244. data/samples/sampler/ext.rb +0 -33
  245. data/samples/sampler/sample.rb +4 -9
  246. data/samples/sampler.rb +1 -1
  247. data/samples/splash/splash.rb +118 -116
  248. data/samples/text/rich_textctrl.rb +207 -201
  249. data/samples/text/richtext.rb +1409 -1405
  250. data/samples/text/scintilla.rb +137 -128
  251. data/samples/text/textctrl.rb +89 -83
  252. data/samples/text/unicode.rb +175 -168
  253. data/samples/treectrl/treectrl.rb +1430 -1426
  254. data/samples/widgets/activityindicator.rb +95 -0
  255. data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
  256. data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
  257. data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
  258. data/samples/widgets/art/widgets/button.xpm +54 -0
  259. data/samples/widgets/art/widgets/checkbox.xpm +54 -0
  260. data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
  261. data/samples/widgets/art/widgets/choicebk.xpm +54 -0
  262. data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
  263. data/samples/widgets/art/widgets/combobox.xpm +54 -0
  264. data/samples/widgets/art/widgets/datepick.xpm +200 -0
  265. data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
  266. data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
  267. data/samples/widgets/art/widgets/filepicker.xpm +214 -0
  268. data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
  269. data/samples/widgets/art/widgets/gauge.xpm +54 -0
  270. data/samples/widgets/art/widgets/header.xpm +54 -0
  271. data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
  272. data/samples/widgets/art/widgets/listbook.xpm +54 -0
  273. data/samples/widgets/art/widgets/listbox.xpm +54 -0
  274. data/samples/widgets/art/widgets/native.xpm +81 -0
  275. data/samples/widgets/art/widgets/notebook.xpm +54 -0
  276. data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
  277. data/samples/widgets/art/widgets/radiobox.xpm +54 -0
  278. data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
  279. data/samples/widgets/art/widgets/slider.xpm +54 -0
  280. data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
  281. data/samples/widgets/art/widgets/statbmp.xpm +40 -0
  282. data/samples/widgets/art/widgets/statbox.xpm +54 -0
  283. data/samples/widgets/art/widgets/stattext.xpm +54 -0
  284. data/samples/widgets/art/widgets/text.xpm +54 -0
  285. data/samples/widgets/art/widgets/timepick.xpm +207 -0
  286. data/samples/widgets/art/widgets/toggle.xpm +54 -0
  287. data/samples/widgets/art/widgets/toucan.png +0 -0
  288. data/samples/widgets/bmpcombobox.rb +651 -0
  289. data/samples/widgets/button.rb +462 -0
  290. data/samples/widgets/checkbox.rb +211 -0
  291. data/samples/widgets/choice.rb +287 -0
  292. data/samples/widgets/clrpicker.rb +156 -0
  293. data/samples/widgets/combobox.rb +516 -0
  294. data/samples/widgets/datepick.rb +215 -0
  295. data/samples/widgets/dirctrl.rb +265 -0
  296. data/samples/widgets/dirpicker.rb +158 -0
  297. data/samples/widgets/editlbox.rb +122 -0
  298. data/samples/widgets/filectrl.rb +216 -0
  299. data/samples/widgets/filepicker.rb +214 -0
  300. data/samples/widgets/fontpicker.rb +135 -0
  301. data/samples/widgets/gauge.rb +311 -0
  302. data/samples/widgets/headerctrl.rb +236 -0
  303. data/samples/widgets/hyperlink.rb +203 -0
  304. data/samples/widgets/itemcontainer.rb +185 -0
  305. data/samples/widgets/listbox.rb +473 -0
  306. data/samples/widgets/notebook.rb +488 -0
  307. data/samples/widgets/odcombobox.rb +608 -0
  308. data/samples/widgets/radiobox.rb +328 -0
  309. data/samples/widgets/searchctrl.rb +159 -0
  310. data/samples/widgets/slider.rb +594 -0
  311. data/samples/widgets/spinbtn.rb +443 -0
  312. data/samples/widgets/statbmp.rb +130 -0
  313. data/samples/widgets/static.rb +436 -0
  314. data/samples/widgets/textctrl.rb +700 -0
  315. data/samples/widgets/timepick.rb +148 -0
  316. data/samples/widgets/tn_widgets.png +0 -0
  317. data/samples/widgets/toggle.rb +385 -0
  318. data/samples/widgets/widgets.rb +1233 -0
  319. data/samples/xrc/custom_xrc_sample.rb +47 -41
  320. data/samples/xrc/xrc_sample.rb +53 -47
  321. data/tests/media/beep_lo.wav +0 -0
  322. data/tests/test_event_handling.rb +52 -34
  323. data/tests/test_events.rb +7 -0
  324. data/tests/test_item_data.rb +24 -0
  325. data/tests/test_list_ctrl.rb +1 -1
  326. data/tests/test_media_ctrl.rb +38 -0
  327. data/tests/test_menu.rb +69 -0
  328. data/tests/test_pg.rb +27 -0
  329. data/tests/test_richtext.rb +45 -0
  330. data/tests/test_sizer.rb +59 -0
  331. data/tests/test_std_controls.rb +42 -1
  332. data/tests/test_styled_text_ctrl.rb +46 -0
  333. data/tests/test_tree_ctrl.rb +138 -0
  334. data/tests/test_validators.rb +805 -0
  335. data/tests/test_window.rb +12 -0
  336. data/tests/testapp_noframe.rb +1 -1
  337. metadata +121 -139
  338. data/lib/wx/core/choice.rb +0 -14
  339. data/lib/wx/core/combo_ctrl.rb +0 -110
  340. data/rakelib/lib/typemap/grid_client_data.rb +0 -58
  341. data/samples/bigdemo/About.rbw +0 -39
  342. data/samples/bigdemo/ColorPanel.rbw +0 -23
  343. data/samples/bigdemo/GridSimple.rbw +0 -78
  344. data/samples/bigdemo/MDIDemo.rbw +0 -57
  345. data/samples/bigdemo/PopupMenu.rbw +0 -146
  346. data/samples/bigdemo/ShapedWindow.rbw +0 -128
  347. data/samples/bigdemo/Sizers.rbw +0 -541
  348. data/samples/bigdemo/bigdemo.rb +0 -817
  349. data/samples/bigdemo/demoTemplate.rbw +0 -33
  350. data/samples/bigdemo/helpfile.htb +0 -0
  351. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  352. data/samples/bigdemo/icons/Test 015.png +0 -0
  353. data/samples/bigdemo/icons/choice.bmp +0 -0
  354. data/samples/bigdemo/icons/combo.bmp +0 -0
  355. data/samples/bigdemo/icons/combo.xpm +0 -27
  356. data/samples/bigdemo/icons/copy.xpm +0 -25
  357. data/samples/bigdemo/icons/cut.xpm +0 -24
  358. data/samples/bigdemo/icons/gauge.bmp +0 -0
  359. data/samples/bigdemo/icons/gauge.xpm +0 -27
  360. data/samples/bigdemo/icons/help.xpm +0 -25
  361. data/samples/bigdemo/icons/list.bmp +0 -0
  362. data/samples/bigdemo/icons/list.xpm +0 -27
  363. data/samples/bigdemo/icons/mondrian.ico +0 -0
  364. data/samples/bigdemo/icons/mondrian.xpm +0 -44
  365. data/samples/bigdemo/icons/new.xpm +0 -24
  366. data/samples/bigdemo/icons/ogl.ico +0 -0
  367. data/samples/bigdemo/icons/ogl.xpm +0 -45
  368. data/samples/bigdemo/icons/open.xpm +0 -26
  369. data/samples/bigdemo/icons/paste.bmp +0 -0
  370. data/samples/bigdemo/icons/paste.xpm +0 -38
  371. data/samples/bigdemo/icons/pointy.png +0 -0
  372. data/samples/bigdemo/icons/preview.xpm +0 -26
  373. data/samples/bigdemo/icons/print.xpm +0 -26
  374. data/samples/bigdemo/icons/radio.bmp +0 -0
  375. data/samples/bigdemo/icons/radio.xpm +0 -27
  376. data/samples/bigdemo/icons/robert.xpm +0 -415
  377. data/samples/bigdemo/icons/sashtest.ico +0 -0
  378. data/samples/bigdemo/icons/save.xpm +0 -25
  379. data/samples/bigdemo/icons/smiles.bmp +0 -0
  380. data/samples/bigdemo/icons/smiles.xpm +0 -39
  381. data/samples/bigdemo/icons/smiley.ico +0 -0
  382. data/samples/bigdemo/icons/smiley.xpm +0 -42
  383. data/samples/bigdemo/icons/stattext.xpm +0 -24
  384. data/samples/bigdemo/icons/test2.bmp +0 -0
  385. data/samples/bigdemo/icons/test2.png +0 -0
  386. data/samples/bigdemo/icons/test2.xpm +0 -79
  387. data/samples/bigdemo/icons/text.bmp +0 -0
  388. data/samples/bigdemo/icons/text.xpm +0 -27
  389. data/samples/bigdemo/icons/tog1.bmp +0 -0
  390. data/samples/bigdemo/icons/tog1.xpm +0 -38
  391. data/samples/bigdemo/icons/tog2.bmp +0 -0
  392. data/samples/bigdemo/icons/tog2.xpm +0 -38
  393. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  394. data/samples/bigdemo/icons/wxwin.ico +0 -0
  395. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  396. data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
  397. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  398. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  399. data/samples/bigdemo/run.rb +0 -98
  400. data/samples/bigdemo/tips.txt +0 -7
  401. data/samples/bigdemo/utils.rb +0 -20
  402. data/samples/bigdemo/wxArtProvider.rbw +0 -282
  403. data/samples/bigdemo/wxBitmapButton.rbw +0 -65
  404. data/samples/bigdemo/wxButton.rbw +0 -64
  405. data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
  406. data/samples/bigdemo/wxCheckBox.rbw +0 -50
  407. data/samples/bigdemo/wxCheckListBox.rbw +0 -65
  408. data/samples/bigdemo/wxChoice.rbw +0 -47
  409. data/samples/bigdemo/wxChoicebook.rbw +0 -78
  410. data/samples/bigdemo/wxColourDialog.rbw +0 -33
  411. data/samples/bigdemo/wxComboBox.rbw +0 -77
  412. data/samples/bigdemo/wxCursor.rbw +0 -136
  413. data/samples/bigdemo/wxDialog.rbw +0 -74
  414. data/samples/bigdemo/wxDirDialog.rbw +0 -29
  415. data/samples/bigdemo/wxDragImage.rbw +0 -70
  416. data/samples/bigdemo/wxFileDialog.rbw +0 -37
  417. data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
  418. data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
  419. data/samples/bigdemo/wxFontDialog.rbw +0 -200
  420. data/samples/bigdemo/wxFrame.rbw +0 -53
  421. data/samples/bigdemo/wxGauge.rbw +0 -65
  422. data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
  423. data/samples/bigdemo/wxGrid.rbw +0 -66
  424. data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
  425. data/samples/bigdemo/wxListBox.rbw +0 -140
  426. data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
  427. data/samples/bigdemo/wxMDIWindows.rbw +0 -50
  428. data/samples/bigdemo/wxMenu.rbw +0 -247
  429. data/samples/bigdemo/wxMessageDialog.rbw +0 -27
  430. data/samples/bigdemo/wxMiniFrame.rbw +0 -70
  431. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
  432. data/samples/bigdemo/wxNotebook.rbw +0 -136
  433. data/samples/bigdemo/wxProgressDialog.rbw +0 -43
  434. data/samples/bigdemo/wxRadioBox.rbw +0 -72
  435. data/samples/bigdemo/wxRadioButton.rbw +0 -125
  436. data/samples/bigdemo/wxSashWindow.rbw +0 -141
  437. data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
  438. data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
  439. data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
  440. data/samples/bigdemo/wxSlider.rbw +0 -42
  441. data/samples/bigdemo/wxSpinButton.rbw +0 -50
  442. data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
  443. data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
  444. data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
  445. data/samples/bigdemo/wxStaticText.rbw +0 -55
  446. data/samples/bigdemo/wxStatusBar.rbw +0 -126
  447. data/samples/bigdemo/wxTextCtrl.rbw +0 -149
  448. data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
  449. data/samples/bigdemo/wxToggleButton.rbw +0 -49
  450. data/samples/bigdemo/wxToolBar.rbw +0 -131
  451. data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
  452. data/samples/caret/caret.rb +0 -298
  453. data/samples/caret/mondrian.xpm +0 -44
  454. data/samples/controls/books.rb +0 -189
  455. data/samples/controls/choice.xpm +0 -27
  456. data/samples/controls/combo.xpm +0 -27
  457. data/samples/controls/controls.rb +0 -1099
  458. data/samples/controls/gauge.xpm +0 -27
  459. data/samples/controls/list.xpm +0 -27
  460. data/samples/controls/mondrian.ico +0 -0
  461. data/samples/controls/mondrian.xpm +0 -44
  462. data/samples/controls/radio.xpm +0 -27
  463. data/samples/controls/stattext.xpm +0 -24
  464. data/samples/controls/test2.bmp +0 -0
  465. data/samples/controls/text.xpm +0 -27
  466. data/samples/controls/tn_books.png +0 -0
  467. data/samples/controls/tn_controls.png +0 -0
  468. data/samples/etc/choice.rb +0 -87
  469. data/samples/etc/tn_choice.png +0 -0
  470. data/samples/text/mondrian.ico +0 -0
  471. data/samples/text/mondrian.xpm +0 -44
  472. /data/samples/{caret → etc}/tn_caret.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b5236fc5965ca7cb7f44f6ffa69c74af04529217c2ac85178b04b719781407c
4
- data.tar.gz: 745d4f4b7b6168a764d47dfa640128666a57922bf90c9d43757a7726ae4d3c75
3
+ metadata.gz: ef007e75aefb2b02a91a0818c8ef2d5191075e280c4dbd01bda827cdd65f9957
4
+ data.tar.gz: d52b47712bd0d0d9705270e8c1487e2a1d797bcc52a46253b866e0fe4c6a1617
5
5
  SHA512:
6
- metadata.gz: 613f0bce684a98834ddc99031b1dbe0cb4aa04448d8f88aa20dd1cf71c938d3539e0e26ec46a096373a83fc2c542f73d9163ca0e1be2428c3854a583f3e974da
7
- data.tar.gz: 888271b35ed4a18bd776c8249ae5bc83ec51ec7930d1b58954e829da508ceb500fcf14e0340009a0410c2e009a5ffbf99109a5a22a447ca52b00982d722800e3
6
+ metadata.gz: ba7a127d408a2ab7ce745b0ad1d6d88eee710953ecceaa42a7880c6fb258a4b684cbc9f8bf11d36b1473bb99a55fd219a8fd434475f7352c238b1c2d03bdce9e
7
+ data.tar.gz: 2d99560d20e4d04a1b5c6abacba8579e0973bca2251fb402caa1a301e8a99317eed6a864892a47b8740a87a3861aeb6692791e97fc61c0a57e20d8b41727e930
data/.yardopts CHANGED
@@ -3,6 +3,7 @@
3
3
  --charset UTF-8
4
4
  --markup markdown
5
5
  --readme README.md
6
+ --asset assets
6
7
  --title "wxRuby3 API Documentation"
7
8
  --output-dir rdoc
8
9
  --protected
data/INSTALL.md CHANGED
@@ -10,14 +10,14 @@ Below are installation instructions for Linux, Windows, and Mac (both AMD64 and
10
10
 
11
11
  The minimal requirements for installing any source based setup (gem, source package or Github clone) of wxRuby3 are:
12
12
 
13
- | Sofware | Notes |
14
- |-----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
15
- | Ruby | A supported version of the Ruby interpreter needs to be installed. |
16
- | C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed via `sudo xcode-select --install` |
17
- | Git version control toolkit | |
18
- | SWIG >= 3.0.12 | On MacOS install [Homebrew](https://brew.sh/) and than `brew install swig` |
19
- | Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files.<br>On MacOS: `brew tap mcorino/wxruby3` and than `brew install doxygen@1.9.6` (default brew recipe installs 1.9.7) |
20
- | wxWidgets (>= 3.2) | See [wxWidgets installation](#wxwidgets-installation) |
13
+ | Sofware | Notes |
14
+ |-----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
15
+ | Ruby | A supported version of the Ruby interpreter needs to be installed. |
16
+ | C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed via <code>sudo xcode-select --install</code> |
17
+ | Git version control toolkit | |
18
+ | SWIG >= 3.0.12 | On MacOS install Homebrew (https://brew.sh) and than <code>brew install swig</code> |
19
+ | Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files.<br>On MacOS: <code>brew tap mcorino/wxruby3</code> and than `brew install doxygen@1.9.6` (default brew recipe installs 1.9.7) |
20
+ | wxWidgets (>= 3.2) | See the <b>wxWidgets installation</b> section below. |
21
21
 
22
22
  The wxRuby3 build process requires `git` to clone a copy of the wxWidgets Github repository to extract the interface
23
23
  specifications from.<br>
@@ -57,46 +57,41 @@ gem install wxruby3 -- WITH_WXWIN=1
57
57
 
58
58
  Also a wxWidgets installation (version 3.2 or later) is required for which there are multiple options.
59
59
 
60
- 1. System installed wxWidgets version (including development package)<br>
61
- <br>
60
+ 1. System installed wxWidgets version (including development package)<br/>
61
+ <br/>
62
62
  This is the default method used when installing the source gem without any options.<br>
63
63
  The wxRuby build procedure will determine the availability and version of wxWidgets by locating and calling
64
64
  the `wx-config` utility script. In case no (compatible) wxWidgets version is found installation ends with an error.<br>
65
65
  Please note that even with this method a copy of the wxWidgets project will be checked out from GitHUb as the wxRuby3
66
66
  build procedure requires access to the wxWidgets interface specification sources which are not normally part of any of
67
- the standard distribution packages.
68
-
69
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;On MacOS, you can install wxWidgets via [Homebrew](https://brew.sh/):
70
-
71
- ```shell
67
+ the standard distribution packages.<br/>
68
+ <br/>
69
+ On MacOS, you can install wxWidgets via [Homebrew](https://brew.sh/):
70
+ ```shell
72
71
  brew install wxwidgets
73
- ```
74
-
75
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Afterwards, you can install the Ruby gem and it will detect wxWidgets in the system automatically:
76
-
77
- ```shell
72
+ ```
73
+ Afterwards, you can install the Ruby gem and it will detect wxWidgets in the system automatically:
74
+ ```shell
78
75
  gem install wxruby3
79
- ```
76
+ ```
80
77
 
81
78
  2. User installed wxWidgets version<br>
82
79
  <br>
83
80
  In case the system being installed on does not provide (a compatible) wxWidgets version or a specific (possibly updated)
84
81
  wxWidgets version is required the source gem can be installed using a user installed version like this (where the
85
82
  `WXWIN` path should provide the location where the wxWidgets binaries are installed under `<wxwin path>/bin`):<br>
86
-
87
- ```shell
83
+ ```shell
88
84
  gem install wxruby3 -- WXWIN=/path/to/wx/install
89
- ```
85
+ ```
90
86
 
91
87
  3. Automatic installed, embedded, wxWidgets version<br>
92
88
  <br>
93
89
  This is the easiest method when the system being installed on does not provide (a compatible) wxWidgets version (and
94
90
  no specific user defined version is required) and can be used by installing the source gem like this (which will
95
91
  cause automatic checkout and building of the latest stable wxWidgets release (>= 3.2) from GitHub:
96
-
97
- ```shell
92
+ ```shell
98
93
  gem install wxruby3 -- WITH_WXWIN=1
99
- ```
94
+ ```
100
95
 
101
96
  In case of option **2** it is also possible to do the doxygen XML generation as part of the wxWidgets user installation
102
97
  and use that for the gem installation. In that case the user is required to generate the XML interface specs using the
@@ -104,16 +99,27 @@ and use that for the gem installation. In that case the user is required to gene
104
99
  provided to the gem installation as follows:
105
100
 
106
101
  ```shell
107
- gem install wxruby3 -- WXWIN=/path/to/wx/install WXXML=/path/to/wx/doxygen/xml
102
+ gem install wxruby3 -- WXWIN=/path/to/wx/install WXXML=/path/to/wx/doxygen/xml
108
103
  ```
109
104
 
110
- Please also not that in case of option two the user is responsible to make sure the wxWidgets shared libraries can be
105
+ Please also not that in case of option **2** the user is responsible to make sure the wxWidgets shared libraries can be
111
106
  found by the system's dynamic loader at runtime.
112
107
 
113
108
  > **NOTE:** Be patient when installing the source gem. Building wxRuby3 takes a while and when wxWidgets is included event more.
114
109
 
115
110
  > **NOTE:** Be aware that for prerelease versions of the gem you should add the `--pre` argument to the `gem install` command.
116
111
 
112
+ ### Bundled CLI
113
+
114
+ Installing the wxRuby3 gem will also install the bundled `wxruby` CLI binary.
115
+
116
+ Currently this binary can be used to run the bundled regression tests and access (run or copy) the bundled examples.
117
+ Run the following command to see the options:
118
+
119
+ ```shell
120
+ wxruby --help
121
+ ```
122
+
117
123
  ## Building from source
118
124
 
119
125
  Checkout the wxRuby3 sources from [GitHub](https://github.com/mcorino/wxRuby3) or download and unpack a release package.
data/README.md CHANGED
@@ -96,11 +96,11 @@ of these products.
96
96
 
97
97
  Currently the following are fully supported:
98
98
 
99
- | Platform | Ruby version(s) | wxWidgets version(s) |
100
- |----------------------------------------------------------------------------|-----------------| --- |
101
- | Windows 10 (tested)<br>(most likely also Windows 11) | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2 |
102
- | Linux (tested; any AMD-64 distribution)<br>(most likely also i686 and ARM) | Ruby >= 2.5 | wxWidgets >= 3.2 |
103
- | MacOS >= 10.10 using Cocoa (tested on AMD-64 and ARM64 M2 Chip) | Ruby >= 2.5 | wxWidgets >= 3.2 |
99
+ | Platform | Ruby version(s) | wxWidgets version(s) |
100
+ |----------------------------------------------------------------------------|---------------------------------------------|----------------------|
101
+ | Windows 10 (tested)<br>(most likely also Windows 11) | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2 |
102
+ | Linux (tested; any AMD-64 distribution)<br>(most likely also i686 and ARM) | Ruby >= 2.5 | wxWidgets >= 3.2 |
103
+ | MacOS >= 10.10 using Cocoa (tested on AMD-64 and ARM64 M2 Chip) | Ruby >= 2.5 | wxWidgets >= 3.2 |
104
104
 
105
105
  Support for other platforms is not being actively developed at present,
106
106
  but patches are welcome. It is likely to be much simpler to get wxRuby
@@ -118,14 +118,16 @@ Installing the binary gem version on Windows requires no additional software to
118
118
  version of the Ruby interpreter.<br>
119
119
  To install the source-only gem the following software is required:
120
120
 
121
- | Sofware | Notes |
122
- |-----------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
123
- | Ruby | A supported version of the Ruby interpreter needs to be installed. |
124
- | C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed |
125
- | Git version control toolkit | |
126
- | SWIG >= 3.0.12 | On MacOS install [Homebrew](https://brew.sh/) and than `brew install swig` |
127
- | Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files.<br>On MacOS: `brew tap mcorino/wxruby3` and than `brew install doxygen@1.9.6` (default brew recipe installs 1.9.7) |
128
- | wxWidgets >= 3.2 (*OPTIONAL*) | On Linux most distributions provide system installable (development) packages for wxWidgets providing a supported version. Alternatively you can fairly easily install your own preferred version manually (see the [wxWidgets](https://wxwidgets.org) project for details).<br>On Windows and MacOS the process is less straightforward (also here see the [wxWidgets](https://wxwidgets.org) project for details).<br>The wxRuby3 source-only gem can also be installed using a private local wxWidgets installation or an embedded installation (most likely preferred on Windows and MacOS). See [INSTALL](INSTALL.md) for more details. |
121
+ | Sofware | Notes |
122
+ |-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
123
+ | Ruby | A supported version of the Ruby interpreter needs to be installed. |
124
+ | C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed |
125
+ | Git version control toolkit | |
126
+ | SWIG >= 3.0.12 | On MacOS install with Homebrew |
127
+ | Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files. |
128
+ | wxWidgets >= 3.2 (*OPTIONAL*) | On Linux most distributions provide system installable (development) packages for wxWidgets providing a supported version.<br>Alternatively you can fairly easily install your own preferred version manually. |
129
+
130
+ See the [INSTALL](INSTALL.md) document for more details.
129
131
 
130
132
  In case the prerequisites above are met the (source-only or binary) gem can be installed executing the following command:
131
133
 
@@ -154,7 +156,9 @@ distribution comes with numerous samples which illustrate how to use
154
156
  many specific parts of the API. A good one to start with is the
155
157
  'minimal' sample, which provides an application skeleton. All the
156
158
  bundled samples are expected to work with current wxRuby3, although
157
- some use a more modern coding style than others.
159
+ some use a more modern coding style than others. Use the bundled `wxruby`
160
+ CLI to access the samples (see the section **Bundled CLI** in
161
+ the [INSTALL](INSTALL.md) document for more details).
158
162
 
159
163
  Complete (more or less) wxRuby API documentation should be part of any
160
164
  complete wxRuby3 build. This tends to focus on providing a reference
@@ -213,4 +217,9 @@ this doesn't help, please post your question using GitHub Issues.
213
217
 
214
218
  ### Is there another, more declarative way, for writing wxRuby3 desktop GUI applications?
215
219
 
216
- Yes. [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) enables software engineers to build GUI using wxruby3 following the Ruby way with the least amount of code possible. That is by offering a minimalistic declarative high-level DSL that maps visually to the way software engineers think about the GUI hierarchy in addition to adopting Rails' strategy of Convention over Configuration via smart defaults and automation of wxruby3 low-level details. You can check out the [Glimmer DSL for WX README "Coming From wxruby3" section](https://github.com/AndyObtiva/glimmer-dsl-wx#coming-from-wxruby3) for more information on how to translate wxruby3 apps to [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) syntax.
220
+ Yes. [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) enables software engineers to build GUI
221
+ using wxruby3 following the Ruby way with the least amount of code possible. That is by offering a minimalistic
222
+ declarative high-level DSL that maps visually to the way software engineers think about the GUI hierarchy in addition
223
+ to adopting Rails' strategy of Convention over Configuration via smart defaults and automation of wxruby3 low-level
224
+ details. You can check out the [Glimmer DSL for WX README "Coming From wxruby3" section](https://github.com/AndyObtiva/glimmer-dsl-wx#coming-from-wxruby3) for more information on
225
+ how to translate wxruby3 apps to [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) syntax.
@@ -0,0 +1,338 @@
1
+ // Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ #include <memory>
6
+
7
+ /*
8
+ * WxRuby3 App class
9
+ */
10
+
11
+ class wxRubyApp : public wxApp
12
+ {
13
+ private:
14
+ bool is_running_ = false;
15
+ VALUE self_ = Qnil;
16
+ public:
17
+ static wxRubyApp* GetInstance () { return dynamic_cast<wxRubyApp*> (wxApp::GetInstance()); }
18
+
19
+ virtual ~wxRubyApp()
20
+ {
21
+ #ifdef __WXTRACE__
22
+ std::wcout << "~wxRubyApp" << std::endl;
23
+ #endif
24
+ // unlink
25
+ if (this->self_ != Qnil)
26
+ {
27
+ DATA_PTR(this->self_) = 0;
28
+ }
29
+ this->self_ = Qnil;
30
+ }
31
+
32
+ // special event handler for destruction of windows which is done
33
+ // automatically by wxWidgets. Tag the object as having been destroyed
34
+ // by WxWidgets.
35
+ void OnWindowDestroy(wxWindowDestroyEvent &event)
36
+ {
37
+ wxObject* wx_obj = event.GetEventObject();
38
+ #ifdef __WXRB_DEBUG__
39
+ if (wxRuby_TraceLevel()>0)
40
+ std::wcout << "<= OnWindowDestroy [" << wx_obj << "]" << std::endl;
41
+ #endif
42
+ GC_SetWindowDeleted((void *)wx_obj);
43
+ event.Skip();
44
+ #ifdef __WXRB_DEBUG__
45
+ if (wxRuby_TraceLevel()>0)
46
+ std::wcout << "=> OnWindowDestroy [" << wx_obj << "]" << std::endl;
47
+ #endif
48
+ }
49
+
50
+ bool IsRunning() const { return this->is_running_; }
51
+
52
+ // When ruby's garbage collection runs, if the app is still active, it
53
+ // cycles through all currently known SWIG objects and calls this
54
+ // function on each to preserve still active Wx::Windows, and also
55
+ // pending Wx::Events which have been queued from the Ruby side (the
56
+ // only sort of events that will be in the tracking hash.
57
+ static void markIterate(void* ptr, VALUE rb_obj)
58
+ {
59
+ // Check if it's a valid object (sometimes SWIG doesn't return what we're
60
+ // expecting), a descendant of Wx::Window (but not a Dialog), and if it has not yet been
61
+ // deleted by WxWidgets; if so, mark it.
62
+ if ( TYPE(rb_obj) == T_DATA )
63
+ {
64
+ if ( rb_obj_is_kind_of(rb_obj, wxRuby_GetWindowClass()) )
65
+ {
66
+ rb_gc_mark(rb_obj);
67
+ }
68
+ else if (rb_obj_is_kind_of(rb_obj, wxRuby_GetDefaultEventClass()) )
69
+ rb_gc_mark(rb_obj);
70
+ }
71
+ else if (TYPE(rb_obj) == T_ARRAY )
72
+ {
73
+ VALUE proc = rb_ary_entry(rb_obj, 0);
74
+ if (rb_obj_is_kind_of(proc, rb_cProc) || rb_obj_is_kind_of(proc, rb_cMethod))
75
+ {
76
+ // keep the async call alive
77
+ rb_gc_mark(rb_obj);
78
+ }
79
+ }
80
+ }
81
+
82
+ // Implements GC protection across wxRuby. Always called because
83
+ // Wx::THE_APP is a constant so always checked in GC mark phase.
84
+ static void mark_wxRubyApp(void *ptr)
85
+ {
86
+
87
+ #ifdef __WXRB_DEBUG__
88
+ if (wxRuby_TraceLevel()>0)
89
+ std::wcout << "=== Starting App GC mark phase" << std::endl;
90
+ #endif
91
+
92
+ // If the App has ended, the ruby object will have been unlinked from
93
+ // the C++ one; this implies that all Windows have already been destroyed
94
+ // so there is no point trying to mark them, and doing so may cause
95
+ // errors.
96
+ if ( !wxRubyApp::GetInstance() || !wxRubyApp::GetInstance()->IsRunning() )
97
+ {
98
+ #ifdef __WXRB_DEBUG__
99
+ if (wxRuby_TraceLevel()>0)
100
+ std::wcout << "=== App not started yet or has ended, skipping mark phase" << std::endl;
101
+ #endif
102
+ return;
103
+ }
104
+
105
+ // Mark any active (tracked) log target
106
+ wxLog* curLog = wxLog::GetActiveTarget();
107
+ VALUE rb_cur_log = wxRuby_FindTracking(curLog);
108
+ if (!NIL_P(rb_cur_log))
109
+ {
110
+ rb_gc_mark(rb_cur_log);
111
+ }
112
+
113
+ // Mark evt handler procs associated with live windows - see
114
+ // classes/EvtHandler.i
115
+ wxRuby_MarkProtectedEvtHandlerProcs();
116
+
117
+ // run registered markers
118
+ for (wxVector<WXRBMarkFunction>::iterator it = WXRuby_Mark_List.begin();
119
+ it != WXRuby_Mark_List.end() ;++it)
120
+ {
121
+ (*it) ();
122
+ }
123
+
124
+ // To do the main marking, primarily of Windows, iterate over SWIG's
125
+ // list of tracked objects
126
+ wxRuby_IterateTracking(&wxRubyApp::markIterate);
127
+
128
+ #ifdef __WXRB_DEBUG__
129
+ if (wxRuby_TraceLevel()>0)
130
+ std::wcout << "=== App GC mark phase completed" << std::endl;
131
+ #endif
132
+ }
133
+
134
+ // This is the method run when main_loop is called in Ruby
135
+ // wxEntry calls the C++ App::OnInit method
136
+ int main_loop()
137
+ {
138
+ int rc = 0;
139
+
140
+ // There should ever only be only a single App instance running
141
+ if (rb_const_defined(mWxCore, rb_intern("THE_APP")))
142
+ {
143
+ rb_raise(rb_eRuntimeError, "There is already another App instance running");
144
+ return -1;
145
+ }
146
+
147
+ // Set self reference and global THE_APP constant
148
+ this->self_ = SWIG_RubyInstanceFor(this);
149
+ rb_define_const(mWxCore, "THE_APP", this->self_);
150
+ // Also cache the Ruby App reference on the stack here as after
151
+ // wxEntry returns the C++ App instance will have been destroyed
152
+ // and we cannot reference it (or it's members) anymore
153
+ VALUE the_app = this->self_;
154
+
155
+ this->Connect(wxEVT_DESTROY,
156
+ wxWindowDestroyEventHandler(wxRubyApp::OnWindowDestroy));
157
+
158
+ #ifdef __WXRB_DEBUG__
159
+ if (wxRuby_TraceLevel()>0)
160
+ std::wcout << "Calling wxEntry, this=" << this << std::endl;
161
+ #endif
162
+
163
+ // collect ruby app name and arguments array
164
+ VALUE rb_args = rb_get_argv();
165
+ int argc = 1 + RARRAY_LEN(rb_args);
166
+ std::unique_ptr<char*[]> argv_safe = std::make_unique<char*[]> (argc);
167
+ VALUE sval = rb_gv_get("$0");
168
+ argv_safe[0] = StringValuePtr(sval);
169
+ for (int i=0; i<RARRAY_LEN(rb_args) ;++i)
170
+ {
171
+ sval = rb_ary_entry(rb_args, i);
172
+ argv_safe[1+i] = StringValuePtr(sval);
173
+ }
174
+ // there is no need to copy the strings as we only need them until
175
+ // wxEntry returns
176
+
177
+ #ifdef __WXMSW__
178
+ wxApp::m_nCmdShow = SW_NORMAL;
179
+ #endif
180
+ rc = wxEntry(argc, argv_safe.get());
181
+
182
+ /*
183
+ At this point the C++ wxRubyApp instance has been destroyed so take care NOT to reference
184
+ it or any of it's members anymore but only unroll the callstack.
185
+ */
186
+
187
+ #ifdef __WXRB_DEBUG__
188
+ if (wxRuby_TraceLevel()>0)
189
+ std::wcout << "returned from wxEntry..." << std::endl;
190
+ #endif
191
+ rb_gc_start();
192
+ #ifdef __WXRB_DEBUG__
193
+ if (wxRuby_TraceLevel()>0)
194
+ std::wcout << "survived gc" << std::endl;
195
+ #endif
196
+
197
+ rb_const_remove(mWxCore, rb_intern("THE_APP"));
198
+
199
+ VALUE exc = rb_iv_get(the_app, "@exception");
200
+ if (!NIL_P(exc))
201
+ {
202
+ rb_exc_raise(exc);
203
+ }
204
+ return rc;
205
+ }
206
+
207
+ // This method initializes the stock objects (Pens, Brushes, Fonts)
208
+ // before yielding to ruby by calling the App's on_init method.
209
+ // Note that as of wxWidget 2.8, the stock fonts in particular cannot
210
+ // be initialized any earlier than this without crashing
211
+ bool OnInit() override
212
+ {
213
+ #ifdef __WXRB_DEBUG__
214
+ if (wxRuby_TraceLevel()>0)
215
+ std::wcout << "OnInit..." << std::endl;
216
+ #endif
217
+
218
+ if (!wxApp::OnInit())
219
+ return false;
220
+
221
+ // Signal that we've started
222
+ this->is_running_ = true;
223
+ // Set up the GDI objects
224
+ Init_wxRubyStockObjects();
225
+ // Get the ruby representation of the App object, and call the
226
+ // ruby on_init method to set up the initial window state
227
+ bool ex_caught = false;
228
+ VALUE result = wxRuby_Funcall(ex_caught, this->self_, rb_intern("on_ruby_init"), 0, 0);
229
+
230
+ if (ex_caught)
231
+ {
232
+ #ifdef __WXRB_DEBUG__
233
+ wxRuby_PrintException(result);
234
+ #endif
235
+ rb_iv_set(this->self_, "@exception", result);
236
+ result = Qfalse; // exit app
237
+ }
238
+
239
+ // If on_init return any (ruby) true value, signal to wxWidgets to
240
+ // enter the main event loop by returning true, else return false
241
+ // which will make wxWidgets exit.
242
+ if ( result == Qfalse || result == Qnil )
243
+ {
244
+ this->is_running_ = false;
245
+ return false;
246
+ }
247
+ else
248
+ {
249
+ return true;
250
+ }
251
+ }
252
+
253
+ int OnExit() override
254
+ {
255
+ #ifdef __WXRB_DEBUG__
256
+ if (wxRuby_TraceLevel()>0)
257
+ std::wcout << "OnExit..." << std::endl;
258
+ #endif
259
+
260
+ // Get the ruby representation of the App object, and call the
261
+ // ruby on_exit method (if any) for application level cleanup
262
+ ID on_exit_id = rb_intern("on_exit");
263
+ if (rb_funcall(this->self_, rb_intern("respond_to?"), 1, ID2SYM(on_exit_id)) == Qtrue)
264
+ {
265
+ bool ex_caught = false;
266
+ VALUE rc = wxRuby_Funcall(ex_caught, this->self_, on_exit_id, 0, 0);
267
+ if (ex_caught)
268
+ {
269
+ #ifdef __WXRB_DEBUG__
270
+ wxRuby_PrintException(rc);
271
+ #endif
272
+ rb_iv_set(this->self_, "@exception", rc);
273
+ }
274
+ }
275
+
276
+ // perform wxRuby cleanup
277
+ _wxRuby_Cleanup();
278
+
279
+ // execute base wxWidgets functionality
280
+ return this->wxApp::OnExit();
281
+ }
282
+
283
+ // actually implemented in ruby in classes/app.rb
284
+ virtual void OnAssertFailure(const wxChar *file, int line, const wxChar *func, const wxChar *cond, const wxChar *msg) override
285
+ {
286
+ if (rb_during_gc() || NIL_P(this->self_))
287
+ {
288
+ std::wcerr << file << "(" << line << "): ASSERT " << cond
289
+ << (NIL_P(this->self_) ? " fired without THE_APP in " : " fired during GC phase in ")
290
+ << func << "() with message [" << msg << "]" << std::endl;
291
+ }
292
+ else
293
+ {
294
+ VALUE obj0 = Qnil ;
295
+ VALUE obj1 = Qnil ;
296
+ VALUE obj2 = Qnil ;
297
+ VALUE obj3 = Qnil ;
298
+ VALUE obj4 = Qnil ;
299
+
300
+ obj0 = rb_str_new2((const char *)wxString(file).utf8_str());
301
+ obj1 = INT2NUM(line);
302
+ obj2 = rb_str_new2((const char *)wxString(func).utf8_str());
303
+ obj3 = rb_str_new2((const char *)wxString(cond).utf8_str());
304
+ obj4 = rb_str_new2((const char *)wxString(msg).utf8_str());
305
+ (void)wxRuby_Funcall(this->self_, rb_intern("on_assert_failure"), 5,obj0,obj1,obj2,obj3,obj4);
306
+ }
307
+ }
308
+
309
+ void _wxRuby_Cleanup()
310
+ {
311
+ #ifdef __WXRB_DEBUG__
312
+ if (wxRuby_TraceLevel()>0)
313
+ std::wcout << "wxRuby_Cleanup..." << std::endl;
314
+ #endif
315
+ // Note in a global variable that the App has ended, so that we
316
+ // can skip any GC marking later
317
+ this->is_running_ = false;
318
+
319
+ // if a Ruby implemented logger has been installed clean that up
320
+ // before we exit, otherwise let wxWidgets handle things
321
+ wxLog *oldlog = wxLog::GetActiveTarget();
322
+ if (wxRuby_FindTracking(oldlog) != Qnil)
323
+ {
324
+ oldlog = wxLog::SetActiveTarget(new wxLogStderr);
325
+ }
326
+ else
327
+ {
328
+ oldlog = 0;
329
+ }
330
+ SetTopWindow(0);
331
+ if ( oldlog )
332
+ {
333
+ SWIG_RubyUnlinkObjects(oldlog);
334
+ SWIG_RubyRemoveTracking(oldlog);
335
+ delete oldlog;
336
+ }
337
+ }
338
+ };
@@ -0,0 +1,48 @@
1
+ // Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ //
3
+ // This software is released under the MIT license.
4
+
5
+ /*
6
+ * WxRuby3 wxRubyClientData class
7
+ */
8
+
9
+ #ifndef _WXRUBY_CLIENT_DATA_H
10
+ #define _WXRUBY_CLIENT_DATA_H
11
+
12
+ #include <wx/clntdata.h>
13
+
14
+ class WXRUBY_EXPORT wxRubyClientData;
15
+
16
+ WXRUBY_EXPORT void wxRuby_RegisterClientData(wxRubyClientData* pcd);
17
+ WXRUBY_EXPORT void wxRuby_UnregisterClientData(wxRubyClientData* pcd);
18
+
19
+ class WXRUBY_EXPORT wxRubyClientData : public wxClientData
20
+ {
21
+ public:
22
+ wxRubyClientData() : rb_data(Qnil) { }
23
+ wxRubyClientData (VALUE data) : rb_data(data) { wxRuby_RegisterClientData(this); }
24
+ virtual ~wxRubyClientData () { wxRuby_UnregisterClientData(this); }
25
+ VALUE GetData() const { return rb_data; }
26
+ private:
27
+ VALUE rb_data;
28
+ };
29
+
30
+ class WXRUBY_EXPORT wxRubyUserData;
31
+
32
+ WXRUBY_EXPORT void wxRuby_RegisterUserData(wxRubyUserData* pud);
33
+ WXRUBY_EXPORT void wxRuby_UnregisterUserData(wxRubyUserData* pud);
34
+
35
+ class WXRUBY_EXPORT wxRubyUserData : public wxObject
36
+ {
37
+ public:
38
+ wxRubyUserData() : rb_data(Qnil) { }
39
+ wxRubyUserData (VALUE data) : rb_data(data) { wxRuby_RegisterUserData(this); }
40
+ virtual ~wxRubyUserData () { wxRuby_UnregisterUserData(this); }
41
+ VALUE GetData() const { return rb_data; }
42
+ private:
43
+ VALUE rb_data;
44
+
45
+ wxDECLARE_NO_COPY_CLASS(wxRubyUserData);
46
+ };
47
+
48
+ #endif /* _WXRUBY_CLIENT_DATA_H */
@@ -456,7 +456,7 @@ protected:
456
456
  }
457
457
 
458
458
  #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
459
- virtual bool DoReadLongLong(const wxString& key, wxLongLong_t *pll) const
459
+ virtual bool DoReadLongLong(const wxString& key, wxLongLong_t *pll) const override
460
460
  {
461
461
  wxConfigPathChanger path(this, key);
462
462
 
@@ -487,7 +487,7 @@ protected:
487
487
  }
488
488
  #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
489
489
 
490
- virtual bool DoReadDouble(const wxString& key, double* val) const
490
+ virtual bool DoReadDouble(const wxString& key, double* val) const override
491
491
  {
492
492
  wxConfigPathChanger path(this, key);
493
493
 
@@ -517,7 +517,7 @@ protected:
517
517
  }
518
518
  }
519
519
 
520
- virtual bool DoReadBool(const wxString& key, bool* val) const
520
+ virtual bool DoReadBool(const wxString& key, bool* val) const override
521
521
  {
522
522
  wxConfigPathChanger path(this, key);
523
523
 
@@ -637,7 +637,7 @@ protected:
637
637
  }
638
638
 
639
639
  #ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
640
- virtual bool DoWriteLongLong(const wxString& key, wxLongLong_t value)
640
+ virtual bool DoWriteLongLong(const wxString& key, wxLongLong_t value) override
641
641
  {
642
642
  wxConfigPathChanger path(this, key);
643
643
  wxString strName = path.Name();
@@ -675,7 +675,7 @@ protected:
675
675
  }
676
676
  #endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
677
677
 
678
- virtual bool DoWriteDouble(const wxString& key, double value)
678
+ virtual bool DoWriteDouble(const wxString& key, double value) override
679
679
  {
680
680
  wxConfigPathChanger path(this, key);
681
681
  wxString strName = path.Name();
@@ -712,7 +712,7 @@ protected:
712
712
  return true;
713
713
  }
714
714
 
715
- virtual bool DoWriteBool(const wxString& key, bool value)
715
+ virtual bool DoWriteBool(const wxString& key, bool value) override
716
716
  {
717
717
  wxConfigPathChanger path(this, key);
718
718
  wxString strName = path.Name();