wxruby3 1.6.0 → 1.7.0

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 (541) hide show
  1. checksums.yaml +4 -4
  2. data/CREDITS.md +32 -25
  3. data/INSTALL.md +21 -6
  4. data/README.md +5 -5
  5. data/assets/repo-social-preview.odg +0 -0
  6. data/assets/repo-social-preview.xcf +0 -0
  7. data/ext/wxruby3/include/wxRubyApp.h +58 -45
  8. data/ext/wxruby3/include/wxruby-runtime.h +78 -1
  9. data/ext/wxruby3/swig/common.i +2 -2
  10. data/ext/wxruby3/swig/custom/director.swg +2 -2
  11. data/ext/wxruby3/swig/custom/rubyprimtypes.swg +59 -15
  12. data/ext/wxruby3/swig/custom/rubyrun.swg +4 -0
  13. data/ext/wxruby3/swig/custom/rubytracking.swg +4 -0
  14. data/ext/wxruby3/swig/custom/swiglabels.swg +129 -0
  15. data/ext/wxruby3/swig/custom/swigrun.swg +15 -0
  16. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +20 -0
  17. data/ext/wxruby3/swig/mark_free_impl.i +154 -88
  18. data/ext/wxruby3/swig/memory_management.i +1 -0
  19. data/ext/wxruby3/swig/wx.i +73 -44
  20. data/lib/wx/aui/events/evt_list.rb +148 -0
  21. data/lib/wx/aui/require.rb +0 -1
  22. data/lib/wx/core/calendar_ctrl.rb +15 -0
  23. data/lib/wx/core/clipboard.rb +9 -13
  24. data/lib/wx/core/config.rb +1 -1
  25. data/lib/wx/core/events/evt_list.rb +1458 -0
  26. data/lib/wx/core/font/encoding.rb +113 -0
  27. data/lib/wx/core/generic_validator.rb +83 -31
  28. data/lib/wx/core/tipwindow.rb +16 -0
  29. data/lib/wx/core/variant.rb +6 -0
  30. data/lib/wx/doc/aui/auitabctrl.rb +35 -0
  31. data/lib/wx/doc/config.rb +2 -2
  32. data/lib/wx/doc/functions.rb +1 -1
  33. data/lib/wx/doc/gen/about_dialog_info.rb +330 -0
  34. data/lib/wx/doc/gen/accelerator.rb +178 -0
  35. data/lib/wx/doc/gen/activity_indicator.rb +83 -0
  36. data/lib/wx/doc/gen/affine_matrix2d.rb +284 -0
  37. data/lib/wx/doc/gen/animation.rb +275 -0
  38. data/lib/wx/doc/gen/animation_ctrl.rb +300 -0
  39. data/lib/wx/doc/gen/any_button.rb +191 -0
  40. data/lib/wx/doc/gen/app.rb +463 -0
  41. data/lib/wx/doc/gen/app_traits.rb +396 -0
  42. data/lib/wx/doc/gen/art_provider.rb +605 -0
  43. data/lib/wx/doc/gen/aui/aui_dock_art.rb +455 -0
  44. data/lib/wx/doc/gen/aui/aui_floating_frame.rb +54 -0
  45. data/lib/wx/doc/gen/aui/aui_manager.rb +847 -0
  46. data/lib/wx/doc/gen/aui/aui_manager_event.rb +131 -0
  47. data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +180 -0
  48. data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +59 -0
  49. data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +130 -0
  50. data/lib/wx/doc/gen/aui/aui_notebook.rb +631 -0
  51. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +233 -0
  52. data/lib/wx/doc/gen/aui/aui_pane_info.rb +769 -0
  53. data/lib/wx/doc/gen/aui/aui_tab_art.rb +352 -0
  54. data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +14 -0
  55. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +510 -0
  56. data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +340 -0
  57. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +244 -0
  58. data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +257 -0
  59. data/lib/wx/doc/gen/aui/event_list.rb +179 -0
  60. data/lib/wx/doc/gen/banner_window.rb +124 -0
  61. data/lib/wx/doc/gen/bitmap.rb +731 -0
  62. data/lib/wx/doc/gen/bitmap_button.rb +123 -0
  63. data/lib/wx/doc/gen/bitmap_combo_box.rb +221 -0
  64. data/lib/wx/doc/gen/book_ctrl_base.rb +273 -0
  65. data/lib/wx/doc/gen/book_ctrl_event.rb +66 -0
  66. data/lib/wx/doc/gen/box_sizer.rb +85 -0
  67. data/lib/wx/doc/gen/brush.rb +251 -0
  68. data/lib/wx/doc/gen/busy_info.rb +157 -0
  69. data/lib/wx/doc/gen/button.rb +182 -0
  70. data/lib/wx/doc/gen/calculate_layout_event.rb +62 -0
  71. data/lib/wx/doc/gen/calendar_ctrl.rb +505 -0
  72. data/lib/wx/doc/gen/calendar_date_attr.rb +138 -0
  73. data/lib/wx/doc/gen/calendar_event.rb +147 -0
  74. data/lib/wx/doc/gen/caret.rb +97 -0
  75. data/lib/wx/doc/gen/check_box.rb +175 -0
  76. data/lib/wx/doc/gen/check_list_box.rb +121 -0
  77. data/lib/wx/doc/gen/choice.rb +175 -0
  78. data/lib/wx/doc/gen/choicebook.rb +116 -0
  79. data/lib/wx/doc/gen/client_dc.rb +43 -0
  80. data/lib/wx/doc/gen/clipboard.rb +144 -0
  81. data/lib/wx/doc/gen/collapsible_pane.rb +138 -0
  82. data/lib/wx/doc/gen/collapsible_pane_event.rb +46 -0
  83. data/lib/wx/doc/gen/colour.rb +333 -0
  84. data/lib/wx/doc/gen/colour_dialog.rb +190 -0
  85. data/lib/wx/doc/gen/colour_picker_ctrl.rb +110 -0
  86. data/lib/wx/doc/gen/colour_picker_event.rb +77 -0
  87. data/lib/wx/doc/gen/combo_box.rb +292 -0
  88. data/lib/wx/doc/gen/combo_ctrl.rb +662 -0
  89. data/lib/wx/doc/gen/command_link_button.rb +134 -0
  90. data/lib/wx/doc/gen/config_base.rb +10 -0
  91. data/lib/wx/doc/gen/context_help_button.rb +109 -0
  92. data/lib/wx/doc/gen/control.rb +277 -0
  93. data/lib/wx/doc/gen/control_with_items.rb +253 -0
  94. data/lib/wx/doc/gen/core.rb +45 -0
  95. data/lib/wx/doc/gen/credential_entry_dialog.rb +137 -0
  96. data/lib/wx/doc/gen/cursor.rb +193 -0
  97. data/lib/wx/doc/gen/data_format.rb +85 -0
  98. data/lib/wx/doc/gen/data_object.rb +436 -0
  99. data/lib/wx/doc/gen/data_object_simple_base.rb +10 -0
  100. data/lib/wx/doc/gen/date_event.rb +49 -0
  101. data/lib/wx/doc/gen/date_picker_ctrl.rb +161 -0
  102. data/lib/wx/doc/gen/dc.rb +1631 -0
  103. data/lib/wx/doc/gen/dc_overlay.rb +102 -0
  104. data/lib/wx/doc/gen/defs.rb +2802 -0
  105. data/lib/wx/doc/gen/dial_up_event.rb +45 -0
  106. data/lib/wx/doc/gen/dial_up_manager.rb +149 -0
  107. data/lib/wx/doc/gen/dialog.rb +541 -0
  108. data/lib/wx/doc/gen/dir_dialog.rb +164 -0
  109. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +90 -0
  110. data/lib/wx/doc/gen/dir_picker_ctrl.rb +125 -0
  111. data/lib/wx/doc/gen/display.rb +238 -0
  112. data/lib/wx/doc/gen/drag_drop.rb +299 -0
  113. data/lib/wx/doc/gen/drag_image.rb +116 -0
  114. data/lib/wx/doc/gen/editable_list_box.rb +109 -0
  115. data/lib/wx/doc/gen/event.rb +990 -0
  116. data/lib/wx/doc/gen/event_blocker.rb +50 -0
  117. data/lib/wx/doc/gen/event_filter.rb +92 -0
  118. data/lib/wx/doc/gen/event_list.rb +1644 -0
  119. data/lib/wx/doc/gen/events.rb +2809 -0
  120. data/lib/wx/doc/gen/evt_handler.rb +229 -0
  121. data/lib/wx/doc/gen/ext_help_controller.rb +109 -0
  122. data/lib/wx/doc/gen/file_ctrl.rb +231 -0
  123. data/lib/wx/doc/gen/file_ctrl_event.rb +83 -0
  124. data/lib/wx/doc/gen/file_dialog.rb +353 -0
  125. data/lib/wx/doc/gen/file_dialog_custom_control.rb +165 -0
  126. data/lib/wx/doc/gen/file_dialog_customize_hook.rb +158 -0
  127. data/lib/wx/doc/gen/file_dir_picker_event.rb +100 -0
  128. data/lib/wx/doc/gen/file_picker_ctrl.rb +132 -0
  129. data/lib/wx/doc/gen/file_system.rb +232 -0
  130. data/lib/wx/doc/gen/find_dialog_event.rb +126 -0
  131. data/lib/wx/doc/gen/find_replace_data.rb +60 -0
  132. data/lib/wx/doc/gen/find_replace_dialog.rb +58 -0
  133. data/lib/wx/doc/gen/flex_grid_sizer.rb +199 -0
  134. data/lib/wx/doc/gen/font.rb +1379 -0
  135. data/lib/wx/doc/gen/font_data.rb +151 -0
  136. data/lib/wx/doc/gen/font_dialog.rb +88 -0
  137. data/lib/wx/doc/gen/font_picker_ctrl.rb +143 -0
  138. data/lib/wx/doc/gen/font_picker_event.rb +65 -0
  139. data/lib/wx/doc/gen/frame.rb +352 -0
  140. data/lib/wx/doc/gen/fs_file.rb +337 -0
  141. data/lib/wx/doc/gen/functions.rb +10 -0
  142. data/lib/wx/doc/gen/gauge.rb +157 -0
  143. data/lib/wx/doc/gen/gb_sizer_item.rb +68 -0
  144. data/lib/wx/doc/gen/gcdc.rb +46 -0
  145. data/lib/wx/doc/gen/gdi_common.rb +1271 -0
  146. data/lib/wx/doc/gen/gdi_object.rb +31 -0
  147. data/lib/wx/doc/gen/generic_about_dialog.rb +140 -0
  148. data/lib/wx/doc/gen/generic_dir_ctrl.rb +223 -0
  149. data/lib/wx/doc/gen/geometry.rb +661 -0
  150. data/lib/wx/doc/gen/graphics_context.rb +1184 -0
  151. data/lib/wx/doc/gen/graphics_object.rb +750 -0
  152. data/lib/wx/doc/gen/grid/event_list.rb +191 -0
  153. data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +40 -0
  154. data/lib/wx/doc/gen/grid/grid_cell_attr.rb +280 -0
  155. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +35 -0
  156. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +37 -0
  157. data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +49 -0
  158. data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +35 -0
  159. data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +46 -0
  160. data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +38 -0
  161. data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +45 -0
  162. data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +40 -0
  163. data/lib/wx/doc/gen/grid/grid_cell_editor.rb +197 -0
  164. data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +39 -0
  165. data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +44 -0
  166. data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +45 -0
  167. data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +79 -0
  168. data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +46 -0
  169. data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +35 -0
  170. data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +108 -0
  171. data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +35 -0
  172. data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +49 -0
  173. data/lib/wx/doc/gen/grid/grid_ctrl.rb +3002 -0
  174. data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +95 -0
  175. data/lib/wx/doc/gen/grid/grid_event.rb +129 -0
  176. data/lib/wx/doc/gen/grid/grid_range_select_event.rb +104 -0
  177. data/lib/wx/doc/gen/grid/grid_size_event.rb +85 -0
  178. data/lib/wx/doc/gen/grid/grid_string_table.rb +142 -0
  179. data/lib/wx/doc/gen/grid/grid_table_base.rb +317 -0
  180. data/lib/wx/doc/gen/grid/grid_table_message.rb +81 -0
  181. data/lib/wx/doc/gen/grid_bag_sizer.rb +323 -0
  182. data/lib/wx/doc/gen/grid_sizer.rb +195 -0
  183. data/lib/wx/doc/gen/gui_event_loop.rb +159 -0
  184. data/lib/wx/doc/gen/h_scrolled_window.rb +562 -0
  185. data/lib/wx/doc/gen/header_ctrl.rb +880 -0
  186. data/lib/wx/doc/gen/header_ctrl_event.rb +133 -0
  187. data/lib/wx/doc/gen/help_controller.rb +195 -0
  188. data/lib/wx/doc/gen/help_provider.rb +98 -0
  189. data/lib/wx/doc/gen/html/event_list.rb +38 -0
  190. data/lib/wx/doc/gen/html/html_cell.rb +536 -0
  191. data/lib/wx/doc/gen/html/html_cell_event.rb +69 -0
  192. data/lib/wx/doc/gen/html/html_data_object.rb +42 -0
  193. data/lib/wx/doc/gen/html/html_easy_printing.rb +203 -0
  194. data/lib/wx/doc/gen/html/html_help_controller.rb +340 -0
  195. data/lib/wx/doc/gen/html/html_help_data.rb +159 -0
  196. data/lib/wx/doc/gen/html/html_help_window.rb +258 -0
  197. data/lib/wx/doc/gen/html/html_link_event.rb +41 -0
  198. data/lib/wx/doc/gen/html/html_list_box.rb +346 -0
  199. data/lib/wx/doc/gen/html/html_printout.rb +109 -0
  200. data/lib/wx/doc/gen/html/html_window.rb +461 -0
  201. data/lib/wx/doc/gen/hyperlink_ctrl.rb +311 -0
  202. data/lib/wx/doc/gen/hyperlink_event.rb +44 -0
  203. data/lib/wx/doc/gen/icon.rb +267 -0
  204. data/lib/wx/doc/gen/icon_location.rb +40 -0
  205. data/lib/wx/doc/gen/image.rb +1371 -0
  206. data/lib/wx/doc/gen/image_list.rb +168 -0
  207. data/lib/wx/doc/gen/info_bar.rb +195 -0
  208. data/lib/wx/doc/gen/keyboard_state.rb +140 -0
  209. data/lib/wx/doc/gen/list_box.rb +304 -0
  210. data/lib/wx/doc/gen/list_ctrl.rb +1774 -0
  211. data/lib/wx/doc/gen/list_event.rb +208 -0
  212. data/lib/wx/doc/gen/listbook.rb +116 -0
  213. data/lib/wx/doc/gen/locale.rb +4293 -0
  214. data/lib/wx/doc/gen/log.rb +603 -0
  215. data/lib/wx/doc/gen/mdi_client_window.rb +47 -0
  216. data/lib/wx/doc/gen/mdi_frame.rb +324 -0
  217. data/lib/wx/doc/gen/media_ctrl.rb +269 -0
  218. data/lib/wx/doc/gen/media_event.rb +117 -0
  219. data/lib/wx/doc/gen/memory_dc.rb +174 -0
  220. data/lib/wx/doc/gen/menu.rb +509 -0
  221. data/lib/wx/doc/gen/menu_bar.rb +287 -0
  222. data/lib/wx/doc/gen/menu_item.rb +362 -0
  223. data/lib/wx/doc/gen/message_dialog.rb +238 -0
  224. data/lib/wx/doc/gen/mini_frame.rb +108 -0
  225. data/lib/wx/doc/gen/mirror_dc.rb +22 -0
  226. data/lib/wx/doc/gen/mouse_state.rb +150 -0
  227. data/lib/wx/doc/gen/multi_choice_dialog.rb +80 -0
  228. data/lib/wx/doc/gen/non_owned_window.rb +49 -0
  229. data/lib/wx/doc/gen/notebook.rb +278 -0
  230. data/lib/wx/doc/gen/num_validator.rb +37 -0
  231. data/lib/wx/doc/gen/number_entry_dialog.rb +93 -0
  232. data/lib/wx/doc/gen/object.rb +59 -0
  233. data/lib/wx/doc/gen/owner_drawn_combo_box.rb +395 -0
  234. data/lib/wx/doc/gen/paint_dc.rb +27 -0
  235. data/lib/wx/doc/gen/palette.rb +92 -0
  236. data/lib/wx/doc/gen/panel.rb +127 -0
  237. data/lib/wx/doc/gen/pen.rb +511 -0
  238. data/lib/wx/doc/gen/persistence_manager.rb +135 -0
  239. data/lib/wx/doc/gen/persistent_object.rb +52 -0
  240. data/lib/wx/doc/gen/persistent_window.rb +241 -0
  241. data/lib/wx/doc/gen/pg/event_list.rb +106 -0
  242. data/lib/wx/doc/gen/pg/numeric_property_validator.rb +54 -0
  243. data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +292 -0
  244. data/lib/wx/doc/gen/pg/pg_cell.rb +177 -0
  245. data/lib/wx/doc/gen/pg/pg_editor.rb +721 -0
  246. data/lib/wx/doc/gen/pg/pg_multi_button.rb +152 -0
  247. data/lib/wx/doc/gen/pg/pg_properties.rb +2829 -0
  248. data/lib/wx/doc/gen/pg/pg_property.rb +2078 -0
  249. data/lib/wx/doc/gen/pg/pg_validation_info.rb +344 -0
  250. data/lib/wx/doc/gen/pg/property_grid.rb +740 -0
  251. data/lib/wx/doc/gen/pg/property_grid_event.rb +184 -0
  252. data/lib/wx/doc/gen/pg/property_grid_interface.rb +1098 -0
  253. data/lib/wx/doc/gen/pg/property_grid_manager.rb +415 -0
  254. data/lib/wx/doc/gen/pg/property_grid_page.rb +354 -0
  255. data/lib/wx/doc/gen/pg/property_grid_page_state.rb +165 -0
  256. data/lib/wx/doc/gen/picker_base.rb +152 -0
  257. data/lib/wx/doc/gen/platform_info.rb +622 -0
  258. data/lib/wx/doc/gen/popup_window.rb +107 -0
  259. data/lib/wx/doc/gen/progress_dialog.rb +100 -0
  260. data/lib/wx/doc/gen/property_sheet_dialog.rb +216 -0
  261. data/lib/wx/doc/gen/prt/event_list.rb +17 -0
  262. data/lib/wx/doc/gen/prt/page_setup_dialog.rb +44 -0
  263. data/lib/wx/doc/gen/prt/post_script_dc.rb +30 -0
  264. data/lib/wx/doc/gen/prt/preview_frame.rb +78 -0
  265. data/lib/wx/doc/gen/prt/print_abort_dialog.rb +151 -0
  266. data/lib/wx/doc/gen/prt/print_data.rb +804 -0
  267. data/lib/wx/doc/gen/prt/print_dialog.rb +55 -0
  268. data/lib/wx/doc/gen/prt/printer.rb +518 -0
  269. data/lib/wx/doc/gen/prt/printer_dc.rb +37 -0
  270. data/lib/wx/doc/gen/query_layout_info_event.rb +106 -0
  271. data/lib/wx/doc/gen/radio_box.rb +306 -0
  272. data/lib/wx/doc/gen/radio_button.rb +159 -0
  273. data/lib/wx/doc/gen/rbn/event_list.rb +136 -0
  274. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +1132 -0
  275. data/lib/wx/doc/gen/rbn/ribbon_bar.rb +308 -0
  276. data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +45 -0
  277. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +458 -0
  278. data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +63 -0
  279. data/lib/wx/doc/gen/rbn/ribbon_control.rb +143 -0
  280. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +229 -0
  281. data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +55 -0
  282. data/lib/wx/doc/gen/rbn/ribbon_page.rb +174 -0
  283. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +270 -0
  284. data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +45 -0
  285. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +360 -0
  286. data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +42 -0
  287. data/lib/wx/doc/gen/rearrange_ctrl.rb +78 -0
  288. data/lib/wx/doc/gen/rearrange_list.rb +123 -0
  289. data/lib/wx/doc/gen/region.rb +380 -0
  290. data/lib/wx/doc/gen/region_iterator.rb +76 -0
  291. data/lib/wx/doc/gen/rich_tool_tip.rb +154 -0
  292. data/lib/wx/doc/gen/rtc/event_list.rb +125 -0
  293. data/lib/wx/doc/gen/rtc/rich_text_box.rb +445 -0
  294. data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +1188 -0
  295. data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +41 -0
  296. data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +538 -0
  297. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +2103 -0
  298. data/lib/wx/doc/gen/rtc/rich_text_event.rb +173 -0
  299. data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +181 -0
  300. data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +319 -0
  301. data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +193 -0
  302. data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +102 -0
  303. data/lib/wx/doc/gen/rtc/rich_text_image.rb +337 -0
  304. data/lib/wx/doc/gen/rtc/rich_text_object.rb +2922 -0
  305. data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +1240 -0
  306. data/lib/wx/doc/gen/rtc/rich_text_printing.rb +258 -0
  307. data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +344 -0
  308. data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +227 -0
  309. data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +59 -0
  310. data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +169 -0
  311. data/lib/wx/doc/gen/sash_event.rb +147 -0
  312. data/lib/wx/doc/gen/sash_layout_window.rb +232 -0
  313. data/lib/wx/doc/gen/sash_window.rb +171 -0
  314. data/lib/wx/doc/gen/scaled_dc.rb +10 -0
  315. data/lib/wx/doc/gen/screen_dc.rb +30 -0
  316. data/lib/wx/doc/gen/scroll_bar.rb +204 -0
  317. data/lib/wx/doc/gen/scrolled_canvas.rb +410 -0
  318. data/lib/wx/doc/gen/scrolled_control.rb +410 -0
  319. data/lib/wx/doc/gen/scrolled_window.rb +430 -0
  320. data/lib/wx/doc/gen/search_ctrl.rb +159 -0
  321. data/lib/wx/doc/gen/secret_store.rb +116 -0
  322. data/lib/wx/doc/gen/simplebook.rb +110 -0
  323. data/lib/wx/doc/gen/single_choice_dialog.rb +89 -0
  324. data/lib/wx/doc/gen/sizer.rb +945 -0
  325. data/lib/wx/doc/gen/sizer_item.rb +244 -0
  326. data/lib/wx/doc/gen/slider.rb +342 -0
  327. data/lib/wx/doc/gen/spin_button.rb +157 -0
  328. data/lib/wx/doc/gen/spin_ctrl.rb +231 -0
  329. data/lib/wx/doc/gen/spin_ctrl_double.rb +192 -0
  330. data/lib/wx/doc/gen/spin_double_event.rb +55 -0
  331. data/lib/wx/doc/gen/spin_event.rb +51 -0
  332. data/lib/wx/doc/gen/splash_screen.rb +113 -0
  333. data/lib/wx/doc/gen/splitter_event.rb +99 -0
  334. data/lib/wx/doc/gen/splitter_window.rb +498 -0
  335. data/lib/wx/doc/gen/static_bitmap.rb +256 -0
  336. data/lib/wx/doc/gen/static_box.rb +180 -0
  337. data/lib/wx/doc/gen/static_box_sizer.rb +85 -0
  338. data/lib/wx/doc/gen/static_line.rb +83 -0
  339. data/lib/wx/doc/gen/static_text.rb +127 -0
  340. data/lib/wx/doc/gen/status_bar.rb +290 -0
  341. data/lib/wx/doc/gen/stc/event_list.rb +221 -0
  342. data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4474 -0
  343. data/lib/wx/doc/gen/stc/styled_text_event.rb +8762 -0
  344. data/lib/wx/doc/gen/std_dialog_button_sizer.rb +129 -0
  345. data/lib/wx/doc/gen/svg_file_dc.rb +164 -0
  346. data/lib/wx/doc/gen/system_options.rb +129 -0
  347. data/lib/wx/doc/gen/system_settings.rb +507 -0
  348. data/lib/wx/doc/gen/task_bar_icon.rb +127 -0
  349. data/lib/wx/doc/gen/task_bar_icon_event.rb +88 -0
  350. data/lib/wx/doc/gen/text_attr.rb +756 -0
  351. data/lib/wx/doc/gen/text_ctrl.rb +1033 -0
  352. data/lib/wx/doc/gen/text_entry.rb +441 -0
  353. data/lib/wx/doc/gen/text_entry_dialog.rb +220 -0
  354. data/lib/wx/doc/gen/text_validator.rb +245 -0
  355. data/lib/wx/doc/gen/time_picker_ctrl.rb +128 -0
  356. data/lib/wx/doc/gen/timer.rb +119 -0
  357. data/lib/wx/doc/gen/timer_event.rb +68 -0
  358. data/lib/wx/doc/gen/tip_provider.rb +63 -0
  359. data/lib/wx/doc/gen/tip_window.rb +51 -0
  360. data/lib/wx/doc/gen/toggle_button.rb +182 -0
  361. data/lib/wx/doc/gen/tool_bar.rb +890 -0
  362. data/lib/wx/doc/gen/tool_tip.rb +86 -0
  363. data/lib/wx/doc/gen/toolbook.rb +118 -0
  364. data/lib/wx/doc/gen/top_level_window.rb +497 -0
  365. data/lib/wx/doc/gen/tree_ctrl.rb +1052 -0
  366. data/lib/wx/doc/gen/tree_event.rb +127 -0
  367. data/lib/wx/doc/gen/treebook.rb +180 -0
  368. data/lib/wx/doc/gen/ui_action_simulator.rb +109 -0
  369. data/lib/wx/doc/gen/utils.rb +273 -0
  370. data/lib/wx/doc/gen/v_list_box.rb +272 -0
  371. data/lib/wx/doc/gen/v_scrolled_canvas.rb +195 -0
  372. data/lib/wx/doc/gen/v_scrolled_window.rb +191 -0
  373. data/lib/wx/doc/gen/validator.rb +68 -0
  374. data/lib/wx/doc/gen/variant.rb +294 -0
  375. data/lib/wx/doc/gen/window.rb +2917 -0
  376. data/lib/wx/doc/gen/window_dc.rb +38 -0
  377. data/lib/wx/doc/gen/window_disabler.rb +30 -0
  378. data/lib/wx/doc/gen/with_images.rb +84 -0
  379. data/lib/wx/doc/gen/wizard.rb +257 -0
  380. data/lib/wx/doc/gen/wizard_event.rb +113 -0
  381. data/lib/wx/doc/gen/wizard_page.rb +65 -0
  382. data/lib/wx/doc/gen/wizard_page_simple.rb +88 -0
  383. data/lib/wx/doc/gen/wrap_sizer.rb +79 -0
  384. data/lib/wx/doc/gen/xml_node.rb +316 -0
  385. data/lib/wx/doc/gen/xml_resource.rb +320 -0
  386. data/lib/wx/doc/generic_validator.rb +5 -0
  387. data/lib/wx/doc/pg/pg_property.rb +5 -0
  388. data/lib/wx/doc/tip_window.rb +18 -6
  389. data/lib/wx/doc/variant.rb +30 -0
  390. data/lib/wx/grid/events/evt_list.rb +166 -0
  391. data/lib/wx/html/events/evt_list.rb +27 -0
  392. data/lib/wx/html/simple_html_listbox.rb +46 -33
  393. data/lib/wx/keyword_defs.rb +9 -0
  394. data/lib/wx/pg/events/evt_list.rb +73 -0
  395. data/lib/wx/pg/pg_property.rb +85 -52
  396. data/lib/wx/pg/property_grid_interface.rb +12 -2
  397. data/lib/wx/rbn/events/evt_list.rb +102 -0
  398. data/lib/wx/rtc/events/evt_list.rb +98 -0
  399. data/lib/wx/rtc/ext/rich_text_ctrl.rb +24 -0
  400. data/lib/wx/stc/events/evt_list.rb +178 -0
  401. data/lib/wx/version.rb +1 -1
  402. data/lib/wx/wxruby/cmd/setup.rb +6 -0
  403. data/rakelib/configure.rb +9 -0
  404. data/rakelib/gem.rake +84 -66
  405. data/rakelib/gem.rb +4 -20
  406. data/rakelib/lib/config/linux.rb +1 -1
  407. data/rakelib/lib/config/macosx.rb +15 -1
  408. data/rakelib/lib/config/pkgman/linux.rb +7 -2
  409. data/rakelib/lib/config/unixish.rb +3 -3
  410. data/rakelib/lib/config.rb +19 -8
  411. data/rakelib/lib/core/include/swigdirector.inc +3 -3
  412. data/rakelib/lib/core/include/swigrubyerrors.inc +4 -8
  413. data/rakelib/lib/core/include/swigrubyrun.inc +20 -4
  414. data/rakelib/lib/core/include/swigrun.inc +189 -0
  415. data/rakelib/lib/core/package.rb +3 -1
  416. data/rakelib/lib/core/spec.rb +1 -1
  417. data/rakelib/lib/director/accelerator.rb +1 -1
  418. data/rakelib/lib/director/animation.rb +1 -0
  419. data/rakelib/lib/director/app_traits.rb +1 -1
  420. data/rakelib/lib/director/aui_manager.rb +21 -14
  421. data/rakelib/lib/director/aui_mdi_child_frame.rb +2 -0
  422. data/rakelib/lib/director/aui_mdi_parent_frame.rb +4 -0
  423. data/rakelib/lib/director/aui_notebook.rb +20 -3
  424. data/rakelib/lib/director/aui_tab_ctrl.rb +64 -106
  425. data/rakelib/lib/director/bitmap_combobox.rb +4 -2
  426. data/rakelib/lib/director/calendar_ctrl.rb +72 -14
  427. data/rakelib/lib/director/clipboard.rb +2 -0
  428. data/rakelib/lib/director/data_object.rb +15 -7
  429. data/rakelib/lib/director/date_picker_ctrl.rb +4 -1
  430. data/rakelib/lib/director/display.rb +81 -0
  431. data/rakelib/lib/director/event.rb +33 -16
  432. data/rakelib/lib/director/event_handler.rb +27 -2
  433. data/rakelib/lib/director/functions.rb +9 -0
  434. data/rakelib/lib/director/geometry.rb +5 -0
  435. data/rakelib/lib/director/grid_ctrl.rb +123 -28
  436. data/rakelib/lib/director/help_provider.rb +1 -1
  437. data/rakelib/lib/director/html_listbox.rb +30 -4
  438. data/rakelib/lib/director/hvscrolled.rb +154 -0
  439. data/rakelib/lib/director/image_list.rb +1 -0
  440. data/rakelib/lib/director/mdi_frame.rb +4 -0
  441. data/rakelib/lib/director/menu.rb +56 -15
  442. data/rakelib/lib/director/menu_bar.rb +62 -0
  443. data/rakelib/lib/director/menu_item.rb +7 -1
  444. data/rakelib/lib/director/num_validator.rb +27 -0
  445. data/rakelib/lib/director/numeric_property_validator.rb +9 -0
  446. data/rakelib/lib/director/persistent_window.rb +16 -0
  447. data/rakelib/lib/director/pgproperty.rb +3 -2
  448. data/rakelib/lib/director/popup_window.rb +2 -0
  449. data/rakelib/lib/director/preview_frame.rb +29 -6
  450. data/rakelib/lib/director/printer.rb +59 -5
  451. data/rakelib/lib/director/property_grid.rb +37 -18
  452. data/rakelib/lib/director/property_grid_interface.rb +10 -8
  453. data/rakelib/lib/director/property_grid_manager.rb +99 -39
  454. data/rakelib/lib/director/property_grid_page.rb +60 -0
  455. data/rakelib/lib/director/rich_tooltip.rb +22 -0
  456. data/rakelib/lib/director/richtext_ctrl.rb +5 -0
  457. data/rakelib/lib/director/richtext_object.rb +13 -4
  458. data/rakelib/lib/director/richtext_style_listbox.rb +11 -2
  459. data/rakelib/lib/director/scrolled_t.rb +3 -0
  460. data/rakelib/lib/director/searchctrl.rb +1 -0
  461. data/rakelib/lib/director/task_bar_icon.rb +14 -8
  462. data/rakelib/lib/director/text_validator.rb +9 -0
  463. data/rakelib/lib/director/tip_window.rb +117 -6
  464. data/rakelib/lib/director/tool_bar.rb +6 -0
  465. data/rakelib/lib/director/top_level_window.rb +0 -1
  466. data/rakelib/lib/director/utils.rb +3 -1
  467. data/rakelib/lib/director/validator.rb +12 -0
  468. data/rakelib/lib/director/variant.rb +64 -20
  469. data/rakelib/lib/director/vlistbox.rb +29 -22
  470. data/rakelib/lib/director/window.rb +12 -2
  471. data/rakelib/lib/director/xml_resource.rb +6 -0
  472. data/rakelib/lib/generate/doc/aui_manager.yaml +1 -1
  473. data/rakelib/lib/generate/doc/rich_tool_tip.yaml +26 -0
  474. data/rakelib/lib/generate/doc.rb +12 -7
  475. data/rakelib/lib/generate/interface.rb +16 -1
  476. data/rakelib/lib/specs/interfaces.rb +6 -2
  477. data/rakelib/lib/swig_runner.rb +12 -12
  478. data/rakelib/lib/typemap/aui_tabctrl.rb +46 -0
  479. data/rakelib/lib/typemap/common.rb +3 -3
  480. data/rakelib/lib/typemap/print_page_range.rb +32 -8
  481. data/samples/art/wxruby-512x512.png +0 -0
  482. data/samples/calendar/calendar.rb +64 -1
  483. data/samples/dialogs/dialogs.rb +172 -0
  484. data/samples/dialogs/tip.xpm +157 -0
  485. data/samples/drawing/maths_images.rb +1 -1
  486. data/samples/event/event.rb +1 -1
  487. data/samples/printing/printing2.rb +1 -1
  488. data/samples/sampler.rb +26 -8
  489. data/samples/text/textctrl.rb +2 -2
  490. data/samples/treectrl/treectrl.rb +2 -2
  491. data/tests/lib/leaked_process_event_exception_test.rb +1 -1
  492. data/tests/lib/leaked_queued_event_exception_test.rb +1 -1
  493. data/tests/lib/wxapp_runner.rb +31 -41
  494. data/tests/lib/wxframe_runner.rb +23 -11
  495. data/tests/lib/wxrb_test.rb +58 -0
  496. data/tests/test_app_event_filter.rb +1 -1
  497. data/tests/test_app_exit_exception.rb +3 -3
  498. data/tests/test_app_init_exception.rb +3 -3
  499. data/tests/test_app_traits.rb +24 -21
  500. data/tests/test_art.rb +7 -7
  501. data/tests/test_art_provider.rb +1 -1
  502. data/tests/test_basic.rb +2 -2
  503. data/tests/test_book_controls.rb +1 -1
  504. data/tests/test_box_sizer.rb +1 -1
  505. data/tests/test_clipboard.rb +5 -5
  506. data/tests/test_combo_ctrl.rb +2 -2
  507. data/tests/test_config.rb +11 -1
  508. data/tests/test_dc.rb +1 -1
  509. data/tests/test_dialog.rb +1 -1
  510. data/tests/test_event_handling.rb +1 -1
  511. data/tests/test_events.rb +1 -1
  512. data/tests/test_exceptions.rb +2 -2
  513. data/tests/test_ext_controls.rb +10 -10
  514. data/tests/test_file_dialog.rb +1 -1
  515. data/tests/test_font.rb +1 -1
  516. data/tests/test_gdi_object.rb +1 -1
  517. data/tests/test_geometry.rb +2 -2
  518. data/tests/test_grid_sizer.rb +2 -2
  519. data/tests/test_intl.rb +1 -1
  520. data/tests/test_item_data.rb +12 -12
  521. data/tests/test_list_ctrl.rb +1 -1
  522. data/tests/test_log.rb +2 -2
  523. data/tests/test_media_ctrl.rb +1 -1
  524. data/tests/test_menu.rb +114 -43
  525. data/tests/test_proof_check.rb +1 -1
  526. data/tests/test_propgrid.rb +857 -0
  527. data/tests/test_richtext.rb +10 -24
  528. data/tests/test_secret_store.rb +1 -1
  529. data/tests/test_sizer.rb +1 -1
  530. data/tests/test_std_controls.rb +8 -8
  531. data/tests/test_styled_text_ctrl.rb +1 -1
  532. data/tests/test_timer.rb +1 -1
  533. data/tests/test_tree_ctrl.rb +1 -1
  534. data/tests/test_validators.rb +79 -36
  535. data/tests/test_variant.rb +1 -1
  536. data/tests/test_window.rb +11 -11
  537. data/tests/testapp.rb +2 -2
  538. data/tests/testapp_noframe.rb +2 -2
  539. metadata +402 -12
  540. data/lib/wx/aui/aui_tab_ctrl.rb +0 -18
  541. data/rakelib/lib/director/hvscrolled_window.rb +0 -140
@@ -175,12 +175,14 @@ module WXRuby3
175
175
  spec.disown('wxGridTableBase* table')
176
176
  # customize mark function to handle safeguarding any customized Grid tables installed
177
177
  spec.add_header_code <<~__HEREDOC
178
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCMarkGrid, "GC_MARK_GRID")
179
+
178
180
  static void GC_mark_wxGridCtrl(void* ptr)
179
181
  {
180
- #ifdef __WXRB_DEBUG__
181
- if (wxRuby_TraceLevel()>1)
182
- std::wcout << "> GC_mark_wxGridCtrl : " << ptr << std::endl;
183
- #endif
182
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGrid, 2)
183
+ WXRUBY_TRACE("> GC_mark_wxGridCtrl : " << ptr)
184
+ WXRUBY_TRACE_END
185
+
184
186
  if ( GC_IsWindowDeleted(ptr) )
185
187
  {
186
188
  return;
@@ -194,8 +196,16 @@ module WXRuby3
194
196
  VALUE rb_gtbl = SWIG_RubyInstanceFor(wx_gtbl);
195
197
  if (!NIL_P(rb_gtbl))
196
198
  {
199
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGrid, 3)
200
+ WXRUBY_TRACE("| GC_mark_wxGridCtrl : marking gridtable " << wx_gtbl << " -> " << rb_gtbl);
201
+ WXRUBY_TRACE_END
202
+
197
203
  rb_gc_mark(rb_gtbl);
198
204
  }
205
+
206
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGrid, 2)
207
+ WXRUBY_TRACE("< GC_mark_wxGridCtrl : " << ptr)
208
+ WXRUBY_TRACE_END
199
209
  }
200
210
  __HEREDOC
201
211
  spec.add_swig_code '%markfunc wxGrid "GC_mark_wxGridCtrl";'
@@ -298,12 +308,19 @@ module WXRuby3
298
308
  WXRBGridCellAttrValueHash);
299
309
  static WXRBGridCellAttrValueHash Grid_Cell_Attr_Value_Map;
300
310
 
311
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCMarkGridCellAttr, "GC_MARK_GRID_CELL_ATTR")
312
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCTrackGridCellAttr, "GC_TRACK_GRID_CELL_ATTR")
313
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCMarkGridCellEditor, "GC_MARK_GRID_CELL_EDITOR")
314
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCTrackGridCellEditor, "GC_TRACK_GRID_CELL_EDITOR")
315
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCMarkGridCellRenderer, "GC_MARK_GRID_CELL_RENDERER")
316
+ WXRUBY_TRACE_GUARD(WxRubyTraceGCTrackGridCellRenderer, "GC_TRACK_GRID_CELL_RENDERER")
317
+
301
318
  static void wxRuby_UnregisterGridCellAttr(wxGridCellAttr* wx_attr)
302
319
  {
303
- #ifdef __WXRB_DEBUG__
304
- if (wxRuby_TraceLevel()>1)
305
- std::wcout << "** wxRuby_UnregisterGridCellAttr : " << wx_attr << ":" << (void*)Grid_Cell_Attr_Value_Map[wx_attr] << std::endl;
306
- #endif
320
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellAttr, 2)
321
+ WXRUBY_TRACE("> wxRuby_UnregisterGridCellAttr : " << wx_attr << " -> " << Grid_Cell_Attr_Value_Map[wx_attr])
322
+ WXRUBY_TRACE_END
323
+
307
324
  if (Grid_Cell_Attr_Value_Map.count(wx_attr) != 0)
308
325
  {
309
326
  VALUE object = Grid_Cell_Attr_Value_Map[wx_attr];
@@ -313,6 +330,10 @@ module WXRuby3
313
330
  }
314
331
  Grid_Cell_Attr_Value_Map.erase(wx_attr);
315
332
  }
333
+
334
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellAttr, 2)
335
+ WXRUBY_TRACE("< wxRuby_UnregisterGridCellAttr : " << wx_attr)
336
+ WXRUBY_TRACE_END
316
337
  }
317
338
 
318
339
  extern VALUE wxRuby_GridCellAttrInstance(wxGridCellAttr* wx_attr)
@@ -340,30 +361,52 @@ module WXRuby3
340
361
  // and it's associated registration/de-registration functions
341
362
  extern void wxRuby_RegisterGridCellAttr(wxGridCellAttr* wx_attr, VALUE rb_attr)
342
363
  {
364
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellAttr, 2)
365
+ WXRUBY_TRACE("> wxRuby_RegisterGridCellAttr : " << wx_attr << " -> " << rb_attr)
366
+ WXRUBY_TRACE_END
367
+
343
368
  if (wx_attr && !NIL_P(rb_attr))
344
369
  {
345
370
  // always (keep) disown(ed); wxWidgets takes over ownership
346
371
  RDATA(rb_attr)->dfree = 0;
347
372
  if (Grid_Cell_Attr_Value_Map.count(wx_attr) == 0)
348
373
  {
349
- #ifdef __WXRB_DEBUG__
350
- if (wxRuby_TraceLevel()>1)
351
- std::wcout << "** wxRuby_RegisterGridCellAttr : " << wx_attr << ":" << (void*)rb_attr << std::endl;
352
- #endif
374
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellAttr, 2)
375
+ WXRUBY_TRACE("| wxRuby_RegisterGridCellAttr : installing monitor")
376
+ WXRUBY_TRACE_END
377
+
353
378
  wx_attr->SetClientObject(new WXRBGridCellAttrMonitor(wx_attr, rb_attr));
354
379
  }
355
380
  }
381
+
382
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellAttr, 2)
383
+ WXRUBY_TRACE("< wxRuby_RegisterGridCellAttr : " << wx_attr)
384
+ WXRUBY_TRACE_END
356
385
  }
357
386
 
358
387
  // define the grid cell attribute marker
359
388
  static void wxRuby_markGridCellAttr()
360
389
  {
390
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGridCellAttr, 2)
391
+ WXRUBY_TRACE("> wxRuby_markGridCellAttr")
392
+ WXRUBY_TRACE_END
393
+
361
394
  WXRBGridCellAttrValueHash::iterator it;
362
395
  for( it = Grid_Cell_Attr_Value_Map.begin(); it != Grid_Cell_Attr_Value_Map.end(); ++it )
363
396
  {
364
397
  VALUE obj = it->second;
398
+
399
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGridCellAttr, 2)
400
+ WXRUBY_TRACE_WITH(void *c_ptr = (TYPE(obj) == T_DATA ? DATA_PTR(obj) : 0))
401
+ WXRUBY_TRACE("| wxRuby_markGridCellAttr : " << it->first << "|" << (void*)c_ptr)
402
+ WXRUBY_TRACE_END
403
+
365
404
  rb_gc_mark(obj);
366
405
  }
406
+
407
+ WXRUBY_TRACE_IF(WxRubyTraceGCMarkGridCellAttr, 2)
408
+ WXRUBY_TRACE("< wxRuby_markGridCellAttr")
409
+ WXRUBY_TRACE_END
367
410
  }
368
411
 
369
412
  // declare the global table for grid cell editors
@@ -373,10 +416,10 @@ module WXRuby3
373
416
 
374
417
  static void wxRuby_UnregisterGridCellEditor(wxGridCellEditor* wx_edt)
375
418
  {
376
- #ifdef __WXRB_DEBUG__
377
- if (wxRuby_TraceLevel()>1)
378
- std::wcout << "** wxRuby_UnregisterGridCellEditor : " << wx_edt << ":" << (void*)Grid_Cell_Editor_Value_Map[wx_edt] << std::endl;
379
- #endif
419
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
420
+ WXRUBY_TRACE("> wxRuby_UnregisterGridCellEditor : " << wx_edt << " -> " << Grid_Cell_Editor_Value_Map[wx_edt])
421
+ WXRUBY_TRACE_END
422
+
380
423
  if (Grid_Cell_Editor_Value_Map.count(wx_edt) != 0)
381
424
  {
382
425
  VALUE object = Grid_Cell_Editor_Value_Map[wx_edt];
@@ -386,6 +429,10 @@ module WXRuby3
386
429
  }
387
430
  Grid_Cell_Editor_Value_Map.erase(wx_edt);
388
431
  }
432
+
433
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
434
+ WXRUBY_TRACE("< wxRuby_UnregisterGridCellEditor : " << wx_edt)
435
+ WXRUBY_TRACE_END
389
436
  }
390
437
 
391
438
  extern VALUE wxRuby_GridCellEditorInstance(wxGridCellEditor* wx_edt)
@@ -413,30 +460,52 @@ module WXRuby3
413
460
  // and it's associated registration function
414
461
  extern void wxRuby_RegisterGridCellEditor(wxGridCellEditor* wx_edt, VALUE rb_edt)
415
462
  {
463
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
464
+ WXRUBY_TRACE("> wxRuby_RegisterGridCellEditor : " << wx_edt << " -> " << rb_edt)
465
+ WXRUBY_TRACE_END
466
+
416
467
  if (wx_edt && !NIL_P(rb_edt))
417
468
  {
418
469
  // always (keep) disown(ed); wxWidgets takes over ownership
419
470
  RDATA(rb_edt)->dfree = 0;
420
471
  if (Grid_Cell_Editor_Value_Map.count(wx_edt) == 0)
421
472
  {
422
- #ifdef __WXRB_DEBUG__
423
- if (wxRuby_TraceLevel()>1)
424
- std::wcout << "** wxRuby_RegisterGridCellEditor : " << wx_edt << ":" << (void*)rb_edt << std::endl;
425
- #endif
473
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
474
+ WXRUBY_TRACE("| wxRuby_RegisterGridCellEditor : installing monitor")
475
+ WXRUBY_TRACE_END
476
+
426
477
  wx_edt->SetClientObject(new WXRBGridCellEditorMonitor(wx_edt, rb_edt));
427
478
  }
428
479
  }
480
+
481
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
482
+ WXRUBY_TRACE("< wxRuby_RegisterGridCellEditor : " << wx_edt)
483
+ WXRUBY_TRACE_END
429
484
  }
430
485
 
431
486
  // define the grid cell editor marker
432
487
  static void wxRuby_markGridCellEditor()
433
488
  {
489
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
490
+ WXRUBY_TRACE("> wxRuby_markGridCellEditor")
491
+ WXRUBY_TRACE_END
492
+
434
493
  WXRBGridCellEditorValueHash::iterator it;
435
494
  for( it = Grid_Cell_Editor_Value_Map.begin(); it != Grid_Cell_Editor_Value_Map.end(); ++it )
436
495
  {
437
496
  VALUE obj = it->second;
497
+
498
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
499
+ WXRUBY_TRACE_WITH(void *c_ptr = (TYPE(obj) == T_DATA ? DATA_PTR(obj) : 0))
500
+ WXRUBY_TRACE("| wxRuby_markGridCellEditor : " << it->first << "|" << (void*)c_ptr)
501
+ WXRUBY_TRACE_END
502
+
438
503
  rb_gc_mark(obj);
439
504
  }
505
+
506
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellEditor, 2)
507
+ WXRUBY_TRACE("< wxRuby_markGridCellEditor")
508
+ WXRUBY_TRACE_END
440
509
  }
441
510
 
442
511
  // declare the global table for grid cell renderer
@@ -446,10 +515,10 @@ module WXRuby3
446
515
 
447
516
  static void wxRuby_UnregisterGridCellRenderer(wxGridCellRenderer* wx_rnd)
448
517
  {
449
- #ifdef __WXRB_DEBUG__
450
- if (wxRuby_TraceLevel()>1)
451
- std::wcout << "** wxRuby_UnregisterGridCellRenderer : " << wx_rnd << ":" << (void*)Grid_Cell_Renderer_Value_Map[wx_rnd] << std::endl;
452
- #endif
518
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
519
+ WXRUBY_TRACE("> wxRuby_UnregisterGridCellRenderer : " << wx_rnd << " -> " << Grid_Cell_Renderer_Value_Map[wx_rnd])
520
+ WXRUBY_TRACE_END
521
+
453
522
  if (Grid_Cell_Renderer_Value_Map.count(wx_rnd) != 0)
454
523
  {
455
524
  VALUE object = Grid_Cell_Renderer_Value_Map[wx_rnd];
@@ -459,6 +528,10 @@ module WXRuby3
459
528
  }
460
529
  Grid_Cell_Renderer_Value_Map.erase(wx_rnd);
461
530
  }
531
+
532
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
533
+ WXRUBY_TRACE("< wxRuby_UnregisterGridCellRenderer : " << wx_rnd)
534
+ WXRUBY_TRACE_END
462
535
  }
463
536
 
464
537
  extern VALUE wxRuby_GridCellRendererInstance(wxGridCellRenderer* wx_rnd)
@@ -485,30 +558,52 @@ module WXRuby3
485
558
  // and it's associated registration/de-registration functions
486
559
  extern void wxRuby_RegisterGridCellRenderer(wxGridCellRenderer* wx_rnd, VALUE rb_rnd)
487
560
  {
561
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
562
+ WXRUBY_TRACE("> wxRuby_RegisterGridCellRenderer : " << wx_rnd << " -> " << rb_rnd)
563
+ WXRUBY_TRACE_END
564
+
488
565
  if (wx_rnd && !NIL_P(rb_rnd))
489
566
  {
490
567
  // always (keep) disowned(ed); wxWidgets takes over ownership
491
568
  RDATA(rb_rnd)->dfree = 0;
492
569
  if (Grid_Cell_Renderer_Value_Map.count(wx_rnd) == 0)
493
570
  {
494
- #ifdef __WXRB_DEBUG__
495
- if (wxRuby_TraceLevel()>1)
496
- std::wcout << "** wxRuby_RegisterGridCellRenderer : registering " << wx_rnd << ":" << (void*)rb_rnd << std::endl;
497
- #endif
571
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
572
+ WXRUBY_TRACE("| wxRuby_RegisterGridCellRenderer : installing monitor")
573
+ WXRUBY_TRACE_END
574
+
498
575
  wx_rnd->SetClientObject(new WXRBGridCellRendererMonitor(wx_rnd, rb_rnd));
499
576
  }
500
577
  }
578
+
579
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
580
+ WXRUBY_TRACE("< wxRuby_RegisterGridCellRenderer : " << wx_rnd)
581
+ WXRUBY_TRACE_END
501
582
  }
502
583
 
503
584
  // define the grid cell renderer marker
504
585
  static void wxRuby_markGridCellRenderer()
505
586
  {
587
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
588
+ WXRUBY_TRACE("> wxRuby_markGridCellRenderer")
589
+ WXRUBY_TRACE_END
590
+
506
591
  WXRBGridCellRendererValueHash::iterator it;
507
592
  for( it = Grid_Cell_Renderer_Value_Map.begin(); it != Grid_Cell_Renderer_Value_Map.end(); ++it )
508
593
  {
509
594
  VALUE obj = it->second;
595
+
596
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
597
+ WXRUBY_TRACE_WITH(void *c_ptr = (TYPE(obj) == T_DATA ? DATA_PTR(obj) : 0))
598
+ WXRUBY_TRACE("| wxRuby_markGridCellRenderer : " << it->first << "|" << (void*)c_ptr)
599
+ WXRUBY_TRACE_END
600
+
510
601
  rb_gc_mark(obj);
511
602
  }
603
+
604
+ WXRUBY_TRACE_IF(WxRubyTraceGCTrackGridCellRenderer, 2)
605
+ WXRUBY_TRACE("< wxRuby_markGridCellRenderer")
606
+ WXRUBY_TRACE_END
512
607
  }
513
608
 
514
609
  __HEREDOC
@@ -92,7 +92,7 @@ module WXRuby3
92
92
  // virtual wxString GetHelp(const wxWindowBase* window);
93
93
  void RemoveHelp(wxWindowBase* window); // no virtual as we have fixed director impl above
94
94
  virtual bool ShowHelp(wxWindowBase* window);
95
- virtual bool ShowHelpAtPoint(wxWindowBase* window, const wxPoint point,
95
+ virtual bool ShowHelpAtPoint(wxWindowBase* window, const wxPoint& point,
96
96
  wxHelpEvent::Origin origin);
97
97
  };
98
98
  __HEREDOC
@@ -18,8 +18,15 @@ module WXRuby3
18
18
 
19
19
  def setup
20
20
  spec.items << 'wxSimpleHtmlListBox' << 'wxItemContainer'
21
+ spec.gc_as_window('wxHtmlListBox', 'wxSimpleHtmlListBox')
21
22
  super
22
- spec.override_inheritance_chain('wxHtmlListBox', ['wxVListBox', { 'wxVScrolledWindow' => 'wxHVScrolledWindow' }, 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
23
+ if Config.instance.wx_version_check('3.3.1') > 0
24
+ spec.override_inheritance_chain('wxHtmlListBox', ['wxVListBox', 'wxVScrolledCanvas', 'wxWindow', 'wxEvtHandler', 'wxObject'])
25
+ elsif Config.instance.wx_version_check('3.3.0') > 0
26
+ spec.override_inheritance_chain('wxHtmlListBox', ['wxVListBox', 'wxVScrolledWindow', 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
27
+ else
28
+ spec.override_inheritance_chain('wxHtmlListBox', ['wxVListBox', { 'wxVScrolledWindow' => 'wxHScrolledWindow' }, 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
29
+ end
23
30
  spec.make_abstract 'wxHtmlListBox'
24
31
  # provide base implementation for OnGetItem
25
32
  spec.add_header_code <<~__HEREDOC
@@ -55,6 +62,13 @@ module WXRuby3
55
62
  'wxHtmlListBox::GetSelectedTextColour',
56
63
  'wxHtmlListBox::GetSelectedTextBgColour',
57
64
  'wxHtmlListBox::OnLinkClicked'
65
+ # missing from the XML docs
66
+ spec.extend_interface('wxHtmlListBox',
67
+ 'virtual void OnInternalIdle()',
68
+ 'virtual void RefreshRow(size_t line)',
69
+ 'virtual void RefreshRows(size_t from, size_t to)',
70
+ 'virtual void RefreshAll()',
71
+ 'virtual void SetItemCount(size_t count)')
58
72
  # add missing protected overloads
59
73
  spec.extend_interface 'wxHtmlListBox',
60
74
  'virtual void OnDrawItem(wxDC &dc, const wxRect &rect, size_t n) const',
@@ -62,10 +76,18 @@ module WXRuby3
62
76
  'virtual void OnDrawBackground(wxDC &dc, const wxRect &rect, size_t n) const',
63
77
  'virtual void OnDrawSeparator(wxDC& dc, wxRect& rect, size_t n) const',
64
78
  visibility: 'protected'
65
- spec.no_proxy 'wxVListBox::OnGetRowHeight'
79
+ # optimize; no need for these virtuals here
80
+ spec.no_proxy 'wxHtmlListBox::OnGetRowHeight',
81
+ 'wxHtmlListBox::OnGetRowsHeightHint'
66
82
 
67
83
  # override inheritance chain
68
- spec.override_inheritance_chain('wxSimpleHtmlListBox', ['wxHtmlListBox', 'wxVListBox', { 'wxVScrolledWindow' => 'wxHVScrolledWindow' }, 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
84
+ if Config.instance.wx_version_check('3.3.1') > 0
85
+ spec.override_inheritance_chain('wxSimpleHtmlListBox', ['wxHtmlListBox', 'wxVListBox', 'wxVScrolledCanvas', 'wxWindow', 'wxEvtHandler', 'wxObject'])
86
+ elsif Config.instance.wx_version_check('3.3.0') > 0
87
+ spec.override_inheritance_chain('wxSimpleHtmlListBox', ['wxHtmlListBox', 'wxVListBox', 'wxVScrolledWindow', 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
88
+ else
89
+ spec.override_inheritance_chain('wxSimpleHtmlListBox', ['wxHtmlListBox', 'wxVListBox', { 'wxVScrolledWindow' => 'wxHScrolledWindow' }, 'wxPanel', 'wxWindow', 'wxEvtHandler', 'wxObject'])
90
+ end
69
91
  spec.fold_bases('wxSimpleHtmlListBox' => %w[wxItemContainer])
70
92
  # override SWIG's confusion
71
93
  spec.make_concrete 'wxSimpleHtmlListBox'
@@ -74,7 +96,8 @@ module WXRuby3
74
96
  # add missing overloads
75
97
  spec.extend_interface 'wxSimpleHtmlListBox',
76
98
  'virtual wxString GetString(unsigned int n) const',
77
- 'virtual void SetString(unsigned int n, const wxString &string)'
99
+ 'virtual void SetString(unsigned int n, const wxString &string)',
100
+ 'wxArrayString GetStrings() const'
78
101
  spec.ignore([ 'wxItemContainer::Append(const wxString &, void *)',
79
102
  'wxItemContainer::Append(const std::vector< wxString > &)',
80
103
  'wxItemContainer::Append(const wxArrayString &, void **)',
@@ -100,6 +123,9 @@ module WXRuby3
100
123
  'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
101
124
  'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
102
125
  'wxItemContainer::Set(const wxArrayString &, wxClientData **)'], ignore_doc: false)
126
+ # optimize; no need for these virtuals here
127
+ spec.no_proxy 'wxSimpleHtmlListBox::OnGetRowHeight',
128
+ 'wxSimpleHtmlListBox::OnGetRowsHeightHint'
103
129
  # for doc only
104
130
  spec.map 'void** clientData' => 'Array', swig: false do
105
131
  map_in code: ''
@@ -0,0 +1,154 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ require_relative './window'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class HVScrolled < Window
16
+
17
+ def setup
18
+ super
19
+ case spec.module_name
20
+ when 'wxHScrolledWindow'
21
+ spec.items.replace %w[wxVarScrollHelperBase wxVarVScrollHelper wxVarHVScrollHelper wxVarHScrollHelper wxHScrolledWindow wxHVScrolledWindow wxPosition]
22
+ spec.override_inheritance_chain('wxHScrolledWindow', %w[wxPanel wxWindow wxEvtHandler wxObject])
23
+ spec.fold_bases('wxHScrolledWindow' => %w[wxVarHScrollHelper wxVarScrollHelperBase])
24
+ spec.make_abstract 'wxHScrolledWindow'
25
+ # spec.force_proxy 'wxHScrolledWindow'
26
+ spec.override_inheritance_chain('wxHVScrolledWindow', %w[wxPanel wxWindow wxEvtHandler wxObject])
27
+ spec.fold_bases('wxHVScrolledWindow' => %w[wxVarHVScrollHelper wxVarHScrollHelper wxVarVScrollHelper wxVarScrollHelperBase])
28
+ spec.make_abstract 'wxHVScrolledWindow'
29
+ # regard protected methods
30
+ spec.regard 'wxVarVScrollHelper::OnGetRowHeight',
31
+ 'wxVarVScrollHelper::OnGetRowsHeightHint'
32
+ spec.regard 'wxVarHScrollHelper::OnGetColumnWidth',
33
+ 'wxVarHScrollHelper::OnGetColumnsWidthHint'
34
+ # ignore internal implementation methods
35
+ spec.ignore 'wxVarScrollHelperBase::GetNonOrientationTargetSize',
36
+ 'wxVarScrollHelperBase::GetOrientation',
37
+ 'wxVarScrollHelperBase::GetOrientationTargetSize',
38
+ 'wxVarScrollHelperBase::OnGetUnitSize',
39
+ 'wxVarScrollHelperBase::CalcScrolledPosition',
40
+ 'wxVarScrollHelperBase::CalcUnscrolledPosition',
41
+ 'wxVarScrollHelperBase::GetTargetWindow',
42
+ 'wxVarScrollHelperBase::SetTargetWindow',
43
+ 'wxVarScrollHelperBase::UpdateScrollbar',
44
+ 'wxVarScrollHelperBase::RefreshAll'
45
+ spec.map 'const wxPosition&' => 'Array(Integer, Integer), Wx::Position' do
46
+ add_header_code '#include <memory>'
47
+ map_in temp: 'std::unique_ptr<$1_basetype> tmp', code: <<~__CODE
48
+ if ( TYPE($input) == T_DATA )
49
+ {
50
+ void* argp$argnum;
51
+ SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 0);
52
+ $1 = reinterpret_cast< $1_basetype * >(argp$argnum);
53
+ }
54
+ else if ( TYPE($input) == T_ARRAY )
55
+ {
56
+ $1 = new $1_basetype( NUM2INT( rb_ary_entry($input, 0) ),
57
+ NUM2INT( rb_ary_entry($input, 1) ) );
58
+ tmp.reset($1); // auto destruct when method scope ends
59
+ }
60
+ else
61
+ {
62
+ rb_raise(rb_eTypeError, "Wrong type for $1_basetype parameter");
63
+ }
64
+ __CODE
65
+ map_typecheck precedence: 'POINTER', code: <<~__CODE
66
+ void *vptr = 0;
67
+ $1 = 0;
68
+ if (TYPE($input) == T_ARRAY && RARRAY_LEN($input) == 2)
69
+ $1 = 1;
70
+ else if (TYPE($input) == T_DATA && SWIG_CheckState (SWIG_ConvertPtr ($input, &vptr, $1_descriptor, 0)))
71
+ $1 = 1;
72
+ __CODE
73
+ end
74
+ if Config.instance.wx_version_check('3.3.0') <= 0
75
+ spec.items << 'wxVScrolledWindow'
76
+ spec.override_inheritance_chain('wxVScrolledWindow', %w[wxPanel wxWindow wxEvtHandler wxObject])
77
+ spec.fold_bases('wxVScrolledWindow' => %w[wxVarVScrollHelper wxVarScrollHelperBase])
78
+ spec.make_abstract 'wxVScrolledWindow'
79
+ end
80
+ spec.do_not_generate(:typedefs)
81
+ when 'wxVScrolledWindow'
82
+ if Config.instance.wx_version_check('3.3.0') > 0
83
+ spec.items.replace %w[wxVScrolled wxVarScrollHelperBase wxVarVScrollHelper]
84
+ spec.gc_as_window
85
+ spec.use_template_as_class('wxVScrolled', 'wxVScrolledWindow')
86
+ spec.override_inheritance_chain('wxVScrolled', %w[wxPanel wxWindow wxEvtHandler wxObject])
87
+ spec.fold_bases('wxVScrolled' => %w[wxVarVScrollHelper wxVarScrollHelperBase])
88
+ spec.make_abstract 'wxVScrolledWindow'
89
+ # spec.force_proxy 'wxVScrolled'
90
+ spec.swig_import %w[
91
+ swig/classes/include/wxObject.h
92
+ swig/classes/include/wxEvtHandler.h
93
+ swig/classes/include/wxWindow.h
94
+ swig/classes/include/wxPanel.h
95
+ swig/classes/include/wxHScrolledWindow.h
96
+ ]
97
+ # regard protected methods
98
+ spec.regard 'wxVarVScrollHelper::OnGetRowHeight',
99
+ 'wxVarVScrollHelper::OnGetRowsHeightHint'
100
+ # ignore internal implementation methods
101
+ spec.ignore 'wxVarScrollHelperBase::GetNonOrientationTargetSize',
102
+ 'wxVarScrollHelperBase::GetOrientation',
103
+ 'wxVarScrollHelperBase::GetOrientationTargetSize',
104
+ 'wxVarScrollHelperBase::OnGetUnitSize',
105
+ 'wxVarScrollHelperBase::CalcScrolledPosition',
106
+ 'wxVarScrollHelperBase::CalcUnscrolledPosition',
107
+ 'wxVarScrollHelperBase::GetTargetWindow',
108
+ 'wxVarScrollHelperBase::SetTargetWindow',
109
+ 'wxVarScrollHelperBase::UpdateScrollbar',
110
+ 'wxVarScrollHelperBase::RefreshAll'
111
+ spec.do_not_generate(:typedefs, :functions, :defines, :variables)
112
+ else
113
+ spec.items.clear
114
+ end
115
+ when 'wxVScrolledCanvas'
116
+ if Config.instance.wx_version_check('3.3.0') > 0
117
+ spec.items.replace %w[wxVScrolled wxVarScrollHelperBase wxVarVScrollHelper]
118
+ spec.gc_as_window
119
+ spec.use_template_as_class('wxVScrolled', 'wxVScrolledCanvas')
120
+ spec.override_inheritance_chain('wxVScrolled', %w[wxWindow wxEvtHandler wxObject])
121
+ spec.fold_bases('wxVScrolled' => %w[wxVarVScrollHelper wxVarScrollHelperBase])
122
+ spec.make_abstract 'wxVScrolledCanvas'
123
+ # spec.force_proxy 'wxVScrolled'
124
+ spec.swig_import %w[
125
+ swig/classes/include/wxObject.h
126
+ swig/classes/include/wxEvtHandler.h
127
+ swig/classes/include/wxWindow.h
128
+ swig/classes/include/wxPanel.h
129
+ swig/classes/include/wxHScrolledWindow.h
130
+ ]
131
+ # regard protected methods
132
+ spec.regard 'wxVarVScrollHelper::OnGetRowHeight',
133
+ 'wxVarVScrollHelper::OnGetRowsHeightHint'
134
+ # ignore internal implementation methods
135
+ spec.ignore 'wxVarScrollHelperBase::GetNonOrientationTargetSize',
136
+ 'wxVarScrollHelperBase::GetOrientation',
137
+ 'wxVarScrollHelperBase::GetOrientationTargetSize',
138
+ 'wxVarScrollHelperBase::OnGetUnitSize',
139
+ 'wxVarScrollHelperBase::CalcScrolledPosition',
140
+ 'wxVarScrollHelperBase::CalcUnscrolledPosition',
141
+ 'wxVarScrollHelperBase::GetTargetWindow',
142
+ 'wxVarScrollHelperBase::SetTargetWindow',
143
+ 'wxVarScrollHelperBase::UpdateScrollbar'
144
+ spec.do_not_generate(:typedefs, :functions, :defines, :variables)
145
+ else
146
+ spec.items.clear
147
+ end
148
+ end
149
+ end
150
+ end # class HVScrolledWindow
151
+
152
+ end # class Director
153
+
154
+ end # module WXRuby3
@@ -13,6 +13,7 @@ module WXRuby3
13
13
  class ImageList < Director
14
14
 
15
15
  def setup
16
+ spec.disable_proxies
16
17
  spec.require_app 'wxImageList'
17
18
  if Config.instance.windows? || Config.instance.macosx?
18
19
  spec.ignore('wxImageList::Add(const wxIcon &)', ignore_doc: false)
@@ -22,6 +22,10 @@ module WXRuby3
22
22
  wxMDIParentFrame::SetWindowMenu
23
23
  wxMDIParentFrame::Tile
24
24
  wxMDIParentFrame::Cascade]
25
+ # for SetWindowMenu
26
+ spec.disown 'wxMenu *'
27
+ spec.extend_interface('wxMDIChildFrame',
28
+ 'virtual bool Destroy() override')
25
29
  # for GetClientWindow
26
30
  spec.map 'wxMDIClientWindowBase *' => 'wxMDIClientWindow *' do
27
31
  map_out code: <<~__HEREDOC
@@ -13,7 +13,7 @@ module WXRuby3
13
13
  class Menu < Director
14
14
 
15
15
  def setup
16
- spec.gc_never
16
+ spec.gc_as_object
17
17
  spec.ignore 'wxMenu::wxMenu(long)'
18
18
  spec.no_proxy 'wxMenu' # do not support derived wxMenu classes
19
19
  spec.add_header_code <<~__HEREDOC
@@ -33,6 +33,16 @@ module WXRuby3
33
33
  __HEREDOC
34
34
  # make Ruby director and wrappers use custom implementation
35
35
  spec.use_class_implementation('wxMenu', 'wxRubyMenu')
36
+ # GC handling
37
+ spec.disown 'wxMenu *submenu'
38
+ # not wanted
39
+ spec.ignore 'wxMenu::SetParent',
40
+ 'wxMenu::Attach',
41
+ 'wxMenu::Detach',
42
+ 'wxMenu::SetInvokingWindow',
43
+ 'wxMenu::GetInvokingWindow',
44
+ 'wxMenu::GetWindow',
45
+ 'wxMenu::UpdateUI'
36
46
  # ignore non-const version as that has no benefits in Ruby
37
47
  spec.ignore 'wxMenu::GetMenuItems()'
38
48
  # Fix for GetMenuItems - converts list of MenuItems to Array
@@ -60,30 +70,61 @@ module WXRuby3
60
70
  # for FindChildItem
61
71
  spec.map_apply 'size_t * OUTPUT' => 'size_t * pos'
62
72
  spec.add_header_code <<~__HEREDOC
73
+ WXRUBY_TRACE_GUARD(WxRubyTraceMarkMenu, "GC_MARK_MENU")
74
+
75
+ // forward decl
76
+ SWIGINTERN void free_wxMenu(void *self);
77
+
63
78
  // Mark Function
64
79
  // Need to protect MenuItems which are included in the Menu, including
65
80
  // their associated sub-menus, recursively.
66
- static void mark_wxMenu(void *ptr)
81
+ static void GC_mark_wxMenu(void *ptr)
67
82
  {
68
- if ( GC_IsWindowDeleted(ptr) )
69
- return;
83
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
84
+ WXRUBY_TRACE("> GC_mark_wxMenu : " << ptr)
85
+ WXRUBY_TRACE_END
70
86
 
71
- wxMenu* menu = (wxMenu*)ptr;
72
- wxMenuItemList menu_items = menu->GetMenuItems();
73
- wxMenuItemList::iterator iter;
74
- for (iter = menu_items.begin(); iter != menu_items.end(); ++iter)
87
+ VALUE rb_menu = SWIG_RubyInstanceFor(ptr);
88
+ if (!RB_NIL_P(rb_menu))
89
+ {
90
+ // as long as the dfree function is still the managed free function the menu has not been attached to a menu bar
91
+ // but it may hay have already had submenus and/or menuitems added which need to be marked
92
+ if (RDATA(rb_menu)->dfree == free_wxMenu)
75
93
  {
76
- wxMenuItem *item = *iter;
77
- rb_gc_mark( SWIG_RubyInstanceFor(item) );
78
- wxMenu* sub_menu = item->GetSubMenu();
79
- if ( sub_menu)
80
- rb_gc_mark( SWIG_RubyInstanceFor(sub_menu) );
94
+ wxMenu* wx_menu = static_cast<wxMenu*> (ptr);
95
+
96
+ wxMenuItemList wx_menu_items = wx_menu->GetMenuItems();
97
+ wxMenuItemList::iterator iter;
98
+ for (iter = wx_menu_items.begin(); iter != wx_menu_items.end(); ++iter)
99
+ {
100
+ wxMenuItem *wx_item = *iter;
101
+ rb_gc_mark( SWIG_RubyInstanceFor(wx_item) );
102
+ wxMenu* wx_sub_menu = wx_item->GetSubMenu();
103
+ if (wx_sub_menu)
104
+ GC_mark_attached_wxMenu(wx_sub_menu);
105
+ }
81
106
  }
82
- return;
107
+ else // otherwise the menu has been attached to a menu bar and may already have been deleted (or not)
108
+ { // marking in this case will be left to the menu bar
109
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 3)
110
+ WXRUBY_TRACE("< GC_mark_wxMenu : skipping attached menu")
111
+ WXRUBY_TRACE_END
112
+ }
113
+ }
114
+ else
115
+ {
116
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 3)
117
+ WXRUBY_TRACE("< GC_mark_wxMenu : skipping untracked menu (should not have happened)")
118
+ WXRUBY_TRACE_END
119
+ }
120
+
121
+ WXRUBY_TRACE_IF(WxRubyTraceMarkMenu, 2)
122
+ WXRUBY_TRACE("< GC_mark_wxMenu : " << ptr)
123
+ WXRUBY_TRACE_END
83
124
  }
84
125
  __HEREDOC
85
126
  spec.add_swig_code <<~__HEREDOC
86
- %markfunc wxMenu "mark_wxMenu";
127
+ %markfunc wxMenu "GC_mark_wxMenu";
87
128
  __HEREDOC
88
129
  # ignore MSW specific method
89
130
  spec.ignore 'wxMenu::MSWCommand'