wxruby3 0.9.0.pre.beta.8

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 (754) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +13 -0
  3. data/CREDITS.md +52 -0
  4. data/LICENSE +21 -0
  5. data/README.md +139 -0
  6. data/bin/wxruby +9 -0
  7. data/ext/mkrf_conf_srcgem.rb +64 -0
  8. data/ext/wxruby3/include/wxruby-runtime.h +104 -0
  9. data/ext/wxruby3/swig/RubyStockObjects.i +62 -0
  10. data/ext/wxruby3/swig/common.i +110 -0
  11. data/ext/wxruby3/swig/custom/rubyprimtypes.swg +225 -0
  12. data/ext/wxruby3/swig/custom/rubytracking.swg +60 -0
  13. data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +456 -0
  14. data/ext/wxruby3/swig/custom/swig4/rubyrun.swg +459 -0
  15. data/ext/wxruby3/swig/mark_free_impl.i +377 -0
  16. data/ext/wxruby3/swig/memory_management.i +142 -0
  17. data/ext/wxruby3/swig/typedefs.i +27 -0
  18. data/ext/wxruby3/swig/wx.i +282 -0
  19. data/ext/wxruby3/swig/wx.rc +19 -0
  20. data/ext/wxruby3/wxruby.ico +0 -0
  21. data/lib/wx/accessors.rb +63 -0
  22. data/lib/wx/aui/auimanager.rb +17 -0
  23. data/lib/wx/aui/auinotebook.rb +9 -0
  24. data/lib/wx/aui/require.rb +9 -0
  25. data/lib/wx/aui.rb +14 -0
  26. data/lib/wx/core/acceleratortable.rb +28 -0
  27. data/lib/wx/core/animation.rb +18 -0
  28. data/lib/wx/core/app.rb +89 -0
  29. data/lib/wx/core/artprovider.rb +31 -0
  30. data/lib/wx/core/bitmap.rb +59 -0
  31. data/lib/wx/core/busycursor.rb +12 -0
  32. data/lib/wx/core/choice.rb +4 -0
  33. data/lib/wx/core/choicedlg.rb +54 -0
  34. data/lib/wx/core/clientdc.rb +13 -0
  35. data/lib/wx/core/clipboard.rb +56 -0
  36. data/lib/wx/core/collapsible_pane.rb +12 -0
  37. data/lib/wx/core/colour.rb +34 -0
  38. data/lib/wx/core/combobox.rb +4 -0
  39. data/lib/wx/core/controlwithitems.rb +10 -0
  40. data/lib/wx/core/data_object.rb +10 -0
  41. data/lib/wx/core/dataformat.rb +26 -0
  42. data/lib/wx/core/dc.rb +68 -0
  43. data/lib/wx/core/dialog.rb +50 -0
  44. data/lib/wx/core/enum.rb +28 -0
  45. data/lib/wx/core/event.rb +16 -0
  46. data/lib/wx/core/evthandler.rb +253 -0
  47. data/lib/wx/core/ext.rb +58 -0
  48. data/lib/wx/core/font.rb +22 -0
  49. data/lib/wx/core/functions.rb +44 -0
  50. data/lib/wx/core/gauge.rb +12 -0
  51. data/lib/wx/core/genericdirctrl.rb +36 -0
  52. data/lib/wx/core/hboxsizer.rb +6 -0
  53. data/lib/wx/core/helpcontroller.rb +5 -0
  54. data/lib/wx/core/helpcontrollerhelpprovider.rb +24 -0
  55. data/lib/wx/core/helpprovider.rb +15 -0
  56. data/lib/wx/core/icon.rb +40 -0
  57. data/lib/wx/core/image.rb +68 -0
  58. data/lib/wx/core/imagelist.rb +3 -0
  59. data/lib/wx/core/listbox.rb +4 -0
  60. data/lib/wx/core/listctrl.rb +33 -0
  61. data/lib/wx/core/locale.rb +73 -0
  62. data/lib/wx/core/log.rb +20 -0
  63. data/lib/wx/core/menu.rb +78 -0
  64. data/lib/wx/core/menu_bar.rb +20 -0
  65. data/lib/wx/core/menuitem.rb +7 -0
  66. data/lib/wx/core/notebook.rb +9 -0
  67. data/lib/wx/core/object.rb +14 -0
  68. data/lib/wx/core/pen_info.rb +11 -0
  69. data/lib/wx/core/platform_info.rb +13 -0
  70. data/lib/wx/core/point.rb +92 -0
  71. data/lib/wx/core/real_point.rb +92 -0
  72. data/lib/wx/core/rect.rb +57 -0
  73. data/lib/wx/core/simplehelpprovider.rb +38 -0
  74. data/lib/wx/core/size.rb +86 -0
  75. data/lib/wx/core/sizer.rb +43 -0
  76. data/lib/wx/core/splash_screen.rb +44 -0
  77. data/lib/wx/core/textctrl.rb +8 -0
  78. data/lib/wx/core/timer.rb +104 -0
  79. data/lib/wx/core/toolbar.rb +37 -0
  80. data/lib/wx/core/toolbartool.rb +4 -0
  81. data/lib/wx/core/treectrl.rb +46 -0
  82. data/lib/wx/core/validator.rb +8 -0
  83. data/lib/wx/core/variant.rb +62 -0
  84. data/lib/wx/core/vboxsizer.rb +6 -0
  85. data/lib/wx/core/window.rb +95 -0
  86. data/lib/wx/core/window_update_locker.rb +12 -0
  87. data/lib/wx/core/xmlresource.rb +56 -0
  88. data/lib/wx/core.rb +61 -0
  89. data/lib/wx/doc/aui/auimanager.rb +12 -0
  90. data/lib/wx/doc/aui/auinotebook.rb +9 -0
  91. data/lib/wx/doc/colour_dialog.rb +15 -0
  92. data/lib/wx/doc/core.rb +11 -0
  93. data/lib/wx/doc/dc.rb +49 -0
  94. data/lib/wx/doc/enum.rb +88 -0
  95. data/lib/wx/doc/evthandler.rb +87 -0
  96. data/lib/wx/doc/extra/00_starting.md +154 -0
  97. data/lib/wx/doc/extra/01_packages.md +179 -0
  98. data/lib/wx/doc/extra/02_lifecycles.md +116 -0
  99. data/lib/wx/doc/extra/03_dialogs.md +57 -0
  100. data/lib/wx/doc/extra/04_enums.md +143 -0
  101. data/lib/wx/doc/extra/05_event-handling.md +166 -0
  102. data/lib/wx/doc/extra/06_geometry.md +56 -0
  103. data/lib/wx/doc/extra/07_colour_and_font.md +52 -0
  104. data/lib/wx/doc/extra/08_extensions.md +144 -0
  105. data/lib/wx/doc/extra/09_exceptions.md +54 -0
  106. data/lib/wx/doc/functions.rb +221 -0
  107. data/lib/wx/doc/gdi_common.rb +181 -0
  108. data/lib/wx/doc/grid/grid.rb +20 -0
  109. data/lib/wx/doc/help_controller.rb +14 -0
  110. data/lib/wx/doc/html/html_help_controller.rb +8 -0
  111. data/lib/wx/doc/pg/events.rb +15 -0
  112. data/lib/wx/doc/pg/pg_property.rb +8 -0
  113. data/lib/wx/doc/pg/pgeditor.rb +21 -0
  114. data/lib/wx/doc/pg/property_grid.rb +48 -0
  115. data/lib/wx/doc/pg/property_grid_interface.rb +64 -0
  116. data/lib/wx/doc/prt/page_setup_dialog.rb +15 -0
  117. data/lib/wx/doc/prt/print_data.rb +9 -0
  118. data/lib/wx/doc/prt/print_dialog.rb +26 -0
  119. data/lib/wx/doc/prt/printer.rb +15 -0
  120. data/lib/wx/doc/rbn/ribbon_bar.rb +9 -0
  121. data/lib/wx/doc/rbn/ribbon_button_bar.rb +9 -0
  122. data/lib/wx/doc/rbn/ribbon_gallery.rb +9 -0
  123. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +9 -0
  124. data/lib/wx/doc/rtc/richtext_printing.rb +14 -0
  125. data/lib/wx/doc/screen_dc.rb +10 -0
  126. data/lib/wx/doc/stock_objects.rb +98 -0
  127. data/lib/wx/doc/stream.rb +38 -0
  128. data/lib/wx/doc/system_settings.rb +29 -0
  129. data/lib/wx/doc/treebook.rb +9 -0
  130. data/lib/wx/doc/variant.rb +163 -0
  131. data/lib/wx/doc/xml_resource.rb +19 -0
  132. data/lib/wx/global_const.rb +84 -0
  133. data/lib/wx/grid/grid.rb +7 -0
  134. data/lib/wx/grid/keyword_defs.rb +10 -0
  135. data/lib/wx/grid/require.rb +9 -0
  136. data/lib/wx/grid.rb +14 -0
  137. data/lib/wx/helpers.rb +65 -0
  138. data/lib/wx/html/htmlhelpcontroller.rb +6 -0
  139. data/lib/wx/html/htmlwindow.rb +19 -0
  140. data/lib/wx/html/keyword_defs.rb +22 -0
  141. data/lib/wx/html/require.rb +10 -0
  142. data/lib/wx/html.rb +15 -0
  143. data/lib/wx/keyword_ctors.rb +226 -0
  144. data/lib/wx/keyword_defs.rb +487 -0
  145. data/lib/wx/pg/events.rb +14 -0
  146. data/lib/wx/pg/keyword_defs.rb +15 -0
  147. data/lib/wx/pg/pg_editor.rb +13 -0
  148. data/lib/wx/pg/pg_properties.rb +24 -0
  149. data/lib/wx/pg/pg_property.rb +27 -0
  150. data/lib/wx/pg/property_grid.rb +71 -0
  151. data/lib/wx/pg/property_grid_interface.rb +46 -0
  152. data/lib/wx/pg/require.rb +12 -0
  153. data/lib/wx/pg.rb +14 -0
  154. data/lib/wx/prt/keyword_defs.rb +8 -0
  155. data/lib/wx/prt/page_setup_dialog.rb +15 -0
  156. data/lib/wx/prt/previewframe.rb +13 -0
  157. data/lib/wx/prt/require.rb +8 -0
  158. data/lib/wx/prt.rb +14 -0
  159. data/lib/wx/rbn/events.rb +4 -0
  160. data/lib/wx/rbn/keyword_defs.rb +43 -0
  161. data/lib/wx/rbn/require.rb +12 -0
  162. data/lib/wx/rbn/ribbon_art_provider.rb +10 -0
  163. data/lib/wx/rbn/ribbon_bar.rb +12 -0
  164. data/lib/wx/rbn/ribbon_button_bar.rb +26 -0
  165. data/lib/wx/rbn/ribbon_control.rb +25 -0
  166. data/lib/wx/rbn/ribbon_gallery.rb +26 -0
  167. data/lib/wx/rbn/ribbon_page.rb +15 -0
  168. data/lib/wx/rbn/ribbon_panel.rb +15 -0
  169. data/lib/wx/rbn/ribbon_tool_bar.rb +26 -0
  170. data/lib/wx/rbn.rb +14 -0
  171. data/lib/wx/rtc/ext.rb +15 -0
  172. data/lib/wx/rtc/keyword_defs.rb +17 -0
  173. data/lib/wx/rtc/require.rb +8 -0
  174. data/lib/wx/rtc.rb +15 -0
  175. data/lib/wx/stc/keyword_defs.rb +8 -0
  176. data/lib/wx/stc/require.rb +7 -0
  177. data/lib/wx/stc.rb +14 -0
  178. data/lib/wx/version.rb +3 -0
  179. data/lib/wx/wxruby/base.rb +87 -0
  180. data/lib/wx/wxruby/cmd/sampler.rb +68 -0
  181. data/lib/wx/wxruby/cmd/test.rb +27 -0
  182. data/lib/wx.rb +14 -0
  183. data/rakelib/build.rake +62 -0
  184. data/rakelib/build.rb +141 -0
  185. data/rakelib/config.rake +48 -0
  186. data/rakelib/configure.rb +131 -0
  187. data/rakelib/doc.rake +21 -0
  188. data/rakelib/doc.rb +35 -0
  189. data/rakelib/install.rake +30 -0
  190. data/rakelib/install.rb +220 -0
  191. data/rakelib/lib/config/cygwin.rb +6 -0
  192. data/rakelib/lib/config/linux.rb +78 -0
  193. data/rakelib/lib/config/macosx.rb +6 -0
  194. data/rakelib/lib/config/mingw.rb +133 -0
  195. data/rakelib/lib/config/netbsd.rb +6 -0
  196. data/rakelib/lib/config/unixish.rb +187 -0
  197. data/rakelib/lib/config.rb +673 -0
  198. data/rakelib/lib/core/include/enum.inc +306 -0
  199. data/rakelib/lib/core/include/funcall.inc +277 -0
  200. data/rakelib/lib/core/include/init.inc +95 -0
  201. data/rakelib/lib/core/mapping.rb +1116 -0
  202. data/rakelib/lib/core/package.rb +634 -0
  203. data/rakelib/lib/core/parameter.rb +222 -0
  204. data/rakelib/lib/core/spec.rb +468 -0
  205. data/rakelib/lib/core/spec_helper.rb +405 -0
  206. data/rakelib/lib/director/about_dialog_info.rb +24 -0
  207. data/rakelib/lib/director/accelerator.rb +88 -0
  208. data/rakelib/lib/director/animation.rb +84 -0
  209. data/rakelib/lib/director/animation_ctrl.rb +24 -0
  210. data/rakelib/lib/director/any_button.rb +34 -0
  211. data/rakelib/lib/director/app.rb +420 -0
  212. data/rakelib/lib/director/art_provider.rb +124 -0
  213. data/rakelib/lib/director/aui_dock_art.rb +23 -0
  214. data/rakelib/lib/director/aui_floating_frame.rb +26 -0
  215. data/rakelib/lib/director/aui_manager.rb +114 -0
  216. data/rakelib/lib/director/aui_manager_event.rb +22 -0
  217. data/rakelib/lib/director/aui_mdi_child_frame.rb +50 -0
  218. data/rakelib/lib/director/aui_mdi_client_window.rb +23 -0
  219. data/rakelib/lib/director/aui_mdi_parent_frame.rb +26 -0
  220. data/rakelib/lib/director/aui_notebook.rb +77 -0
  221. data/rakelib/lib/director/aui_notebook_event.rb +23 -0
  222. data/rakelib/lib/director/aui_pane_info.rb +102 -0
  223. data/rakelib/lib/director/aui_tab_art.rb +47 -0
  224. data/rakelib/lib/director/aui_tab_ctrl.rb +121 -0
  225. data/rakelib/lib/director/aui_toolbar.rb +22 -0
  226. data/rakelib/lib/director/aui_toolbar_art.rb +24 -0
  227. data/rakelib/lib/director/aui_toolbar_event.rb +23 -0
  228. data/rakelib/lib/director/aui_toolbar_item.rb +21 -0
  229. data/rakelib/lib/director/bitmap.rb +87 -0
  230. data/rakelib/lib/director/book_ctrls.rb +104 -0
  231. data/rakelib/lib/director/brush.rb +28 -0
  232. data/rakelib/lib/director/busy_info.rb +71 -0
  233. data/rakelib/lib/director/button.rb +22 -0
  234. data/rakelib/lib/director/calendar_ctrl.rb +98 -0
  235. data/rakelib/lib/director/calendar_date_attr.rb +22 -0
  236. data/rakelib/lib/director/caret.rb +31 -0
  237. data/rakelib/lib/director/check_listbox.rb +33 -0
  238. data/rakelib/lib/director/choice.rb +32 -0
  239. data/rakelib/lib/director/clipboard.rb +37 -0
  240. data/rakelib/lib/director/collapsible_pane.rb +22 -0
  241. data/rakelib/lib/director/collapsible_pane_event.rb +22 -0
  242. data/rakelib/lib/director/colour.rb +64 -0
  243. data/rakelib/lib/director/colour_picker_ctrl.rb +22 -0
  244. data/rakelib/lib/director/combobox.rb +37 -0
  245. data/rakelib/lib/director/control.rb +22 -0
  246. data/rakelib/lib/director/ctrl_with_items.rb +68 -0
  247. data/rakelib/lib/director/cursor.rb +28 -0
  248. data/rakelib/lib/director/data_format.rb +31 -0
  249. data/rakelib/lib/director/data_object.rb +64 -0
  250. data/rakelib/lib/director/date_event.rb +141 -0
  251. data/rakelib/lib/director/date_picker_ctrl.rb +39 -0
  252. data/rakelib/lib/director/dc.rb +52 -0
  253. data/rakelib/lib/director/defs.rb +139 -0
  254. data/rakelib/lib/director/derived_dc.rb +64 -0
  255. data/rakelib/lib/director/dialog.rb +214 -0
  256. data/rakelib/lib/director/dir_filterlist_ctrl.rb +29 -0
  257. data/rakelib/lib/director/dir_picker_ctrl.rb +22 -0
  258. data/rakelib/lib/director/drag_image.rb +20 -0
  259. data/rakelib/lib/director/dragdrop.rb +61 -0
  260. data/rakelib/lib/director/editable_listbox.rb +21 -0
  261. data/rakelib/lib/director/event.rb +171 -0
  262. data/rakelib/lib/director/event_handler.rb +410 -0
  263. data/rakelib/lib/director/events.rb +39 -0
  264. data/rakelib/lib/director/file_picker_ctrl.rb +22 -0
  265. data/rakelib/lib/director/find_dialog_event.rb +22 -0
  266. data/rakelib/lib/director/find_replace_data.rb +20 -0
  267. data/rakelib/lib/director/font.rb +138 -0
  268. data/rakelib/lib/director/font_data.rb +22 -0
  269. data/rakelib/lib/director/font_picker_ctrl.rb +22 -0
  270. data/rakelib/lib/director/frame.rb +74 -0
  271. data/rakelib/lib/director/fs_file.rb +353 -0
  272. data/rakelib/lib/director/functions.rb +284 -0
  273. data/rakelib/lib/director/gdi_object.rb +21 -0
  274. data/rakelib/lib/director/gdicommon.rb +94 -0
  275. data/rakelib/lib/director/generic_dirctrl.rb +24 -0
  276. data/rakelib/lib/director/graphics_context.rb +143 -0
  277. data/rakelib/lib/director/graphics_object.rb +69 -0
  278. data/rakelib/lib/director/grid_cell_attr.rb +53 -0
  279. data/rakelib/lib/director/grid_cell_editor.rb +434 -0
  280. data/rakelib/lib/director/grid_cell_renderer.rb +132 -0
  281. data/rakelib/lib/director/grid_ctrl.rb +390 -0
  282. data/rakelib/lib/director/grid_range_select_event.rb +23 -0
  283. data/rakelib/lib/director/grid_table_base.rb +63 -0
  284. data/rakelib/lib/director/grid_table_message.rb +20 -0
  285. data/rakelib/lib/director/help_controller.rb +75 -0
  286. data/rakelib/lib/director/help_provider.rb +103 -0
  287. data/rakelib/lib/director/html_cell.rb +36 -0
  288. data/rakelib/lib/director/html_easy_printing.rb +45 -0
  289. data/rakelib/lib/director/html_event.rb +24 -0
  290. data/rakelib/lib/director/html_help_data.rb +43 -0
  291. data/rakelib/lib/director/html_help_frame.rb +25 -0
  292. data/rakelib/lib/director/html_listbox.rb +54 -0
  293. data/rakelib/lib/director/html_printout.rb +47 -0
  294. data/rakelib/lib/director/html_window.rb +114 -0
  295. data/rakelib/lib/director/icon.rb +33 -0
  296. data/rakelib/lib/director/image.rb +111 -0
  297. data/rakelib/lib/director/image_list.rb +21 -0
  298. data/rakelib/lib/director/list_ctrl.rb +197 -0
  299. data/rakelib/lib/director/listbox.rb +32 -0
  300. data/rakelib/lib/director/locale.rb +35 -0
  301. data/rakelib/lib/director/log.rb +32 -0
  302. data/rakelib/lib/director/mdi_frame.rb +36 -0
  303. data/rakelib/lib/director/media_ctrl.rb +22 -0
  304. data/rakelib/lib/director/menu.rb +92 -0
  305. data/rakelib/lib/director/menu_bar.rb +28 -0
  306. data/rakelib/lib/director/menu_item.rb +36 -0
  307. data/rakelib/lib/director/mouse_state.rb +21 -0
  308. data/rakelib/lib/director/numeric_property_validator.rb +38 -0
  309. data/rakelib/lib/director/object.rb +32 -0
  310. data/rakelib/lib/director/page_setup_dialog.rb +30 -0
  311. data/rakelib/lib/director/palette.rb +25 -0
  312. data/rakelib/lib/director/panel.rb +22 -0
  313. data/rakelib/lib/director/pen.rb +174 -0
  314. data/rakelib/lib/director/pgarray_editor_dialog.rb +64 -0
  315. data/rakelib/lib/director/pgcell.rb +68 -0
  316. data/rakelib/lib/director/pgeditor.rb +154 -0
  317. data/rakelib/lib/director/pgmulti_button.rb +22 -0
  318. data/rakelib/lib/director/pgproperties.rb +216 -0
  319. data/rakelib/lib/director/pgproperty.rb +207 -0
  320. data/rakelib/lib/director/pgvalidation_info.rb +24 -0
  321. data/rakelib/lib/director/pickerbase.rb +22 -0
  322. data/rakelib/lib/director/platform_info.rb +49 -0
  323. data/rakelib/lib/director/popup_window.rb +23 -0
  324. data/rakelib/lib/director/preview_frame.rb +39 -0
  325. data/rakelib/lib/director/print_data.rb +33 -0
  326. data/rakelib/lib/director/print_dialog.rb +36 -0
  327. data/rakelib/lib/director/printer.rb +61 -0
  328. data/rakelib/lib/director/property_grid.rb +174 -0
  329. data/rakelib/lib/director/property_grid_event.rb +23 -0
  330. data/rakelib/lib/director/property_grid_interface.rb +227 -0
  331. data/rakelib/lib/director/property_grid_manager.rb +90 -0
  332. data/rakelib/lib/director/property_grid_page.rb +76 -0
  333. data/rakelib/lib/director/property_grid_page_state.rb +32 -0
  334. data/rakelib/lib/director/radio_box.rb +39 -0
  335. data/rakelib/lib/director/region.rb +25 -0
  336. data/rakelib/lib/director/ribbon_art_provider.rb +154 -0
  337. data/rakelib/lib/director/ribbon_bar.rb +24 -0
  338. data/rakelib/lib/director/ribbon_bar_event.rb +22 -0
  339. data/rakelib/lib/director/ribbon_button_bar.rb +37 -0
  340. data/rakelib/lib/director/ribbon_button_bar_event.rb +40 -0
  341. data/rakelib/lib/director/ribbon_ctrl.rb +28 -0
  342. data/rakelib/lib/director/ribbon_gallery.rb +33 -0
  343. data/rakelib/lib/director/ribbon_gallery_event.rb +27 -0
  344. data/rakelib/lib/director/ribbon_page.rb +21 -0
  345. data/rakelib/lib/director/ribbon_panel.rb +22 -0
  346. data/rakelib/lib/director/ribbon_panel_event.rb +22 -0
  347. data/rakelib/lib/director/ribbon_tool_bar.rb +146 -0
  348. data/rakelib/lib/director/ribbon_tool_bar_event.rb +22 -0
  349. data/rakelib/lib/director/richtext_buffer.rb +46 -0
  350. data/rakelib/lib/director/richtext_ctrl.rb +63 -0
  351. data/rakelib/lib/director/richtext_event.rb +25 -0
  352. data/rakelib/lib/director/richtext_file_handler.rb +42 -0
  353. data/rakelib/lib/director/richtext_header_footer_data.rb +21 -0
  354. data/rakelib/lib/director/richtext_printing.rb +44 -0
  355. data/rakelib/lib/director/sash_layout_event.rb +22 -0
  356. data/rakelib/lib/director/sash_layout_window.rb +23 -0
  357. data/rakelib/lib/director/sash_window.rb +23 -0
  358. data/rakelib/lib/director/scrolled_t.rb +67 -0
  359. data/rakelib/lib/director/sizer.rb +67 -0
  360. data/rakelib/lib/director/sizer_item.rb +35 -0
  361. data/rakelib/lib/director/splash_screen.rb +24 -0
  362. data/rakelib/lib/director/splitter_event.rb +28 -0
  363. data/rakelib/lib/director/splitter_window.rb +25 -0
  364. data/rakelib/lib/director/static_bitmap.rb +24 -0
  365. data/rakelib/lib/director/static_box.rb +26 -0
  366. data/rakelib/lib/director/status_bar.rb +86 -0
  367. data/rakelib/lib/director/styled_text_ctrl.rb +82 -0
  368. data/rakelib/lib/director/styled_text_event.rb +25 -0
  369. data/rakelib/lib/director/system_options.rb +22 -0
  370. data/rakelib/lib/director/system_settings.rb +47 -0
  371. data/rakelib/lib/director/task_bar_icon.rb +77 -0
  372. data/rakelib/lib/director/text_attr.rb +22 -0
  373. data/rakelib/lib/director/text_entry.rb +26 -0
  374. data/rakelib/lib/director/text_validator.rb +47 -0
  375. data/rakelib/lib/director/textctrl.rb +80 -0
  376. data/rakelib/lib/director/time_picker_ctrl.rb +24 -0
  377. data/rakelib/lib/director/timer.rb +37 -0
  378. data/rakelib/lib/director/tip_provider.rb +44 -0
  379. data/rakelib/lib/director/toggle_button.rb +22 -0
  380. data/rakelib/lib/director/tool_bar.rb +62 -0
  381. data/rakelib/lib/director/tool_tip.rb +20 -0
  382. data/rakelib/lib/director/top_level_window.rb +105 -0
  383. data/rakelib/lib/director/tree_ctrl.rb +411 -0
  384. data/rakelib/lib/director/tree_event.rb +78 -0
  385. data/rakelib/lib/director/utils.rb +55 -0
  386. data/rakelib/lib/director/validator.rb +44 -0
  387. data/rakelib/lib/director/variant.rb +549 -0
  388. data/rakelib/lib/director/vlistbox.rb +46 -0
  389. data/rakelib/lib/director/vscrolled_window.rb +59 -0
  390. data/rakelib/lib/director/window.rb +296 -0
  391. data/rakelib/lib/director/window_disabler.rb +44 -0
  392. data/rakelib/lib/director/with_images.rb +65 -0
  393. data/rakelib/lib/director/wizard_page.rb +35 -0
  394. data/rakelib/lib/director/xml_node.rb +48 -0
  395. data/rakelib/lib/director/xml_resource.rb +141 -0
  396. data/rakelib/lib/director.rb +487 -0
  397. data/rakelib/lib/ext/enum_chain.rb +22 -0
  398. data/rakelib/lib/extractor/class.rb +384 -0
  399. data/rakelib/lib/extractor/enum.rb +94 -0
  400. data/rakelib/lib/extractor/function.rb +377 -0
  401. data/rakelib/lib/extractor/module.rb +140 -0
  402. data/rakelib/lib/extractor/variable.rb +145 -0
  403. data/rakelib/lib/extractor.rb +438 -0
  404. data/rakelib/lib/generate/analyzer.rb +593 -0
  405. data/rakelib/lib/generate/base.rb +37 -0
  406. data/rakelib/lib/generate/doc.rb +833 -0
  407. data/rakelib/lib/generate/interface.rb +742 -0
  408. data/rakelib/lib/generate/rakedep.rb +130 -0
  409. data/rakelib/lib/specs/interfaces.rb +324 -0
  410. data/rakelib/lib/streams.rb +206 -0
  411. data/rakelib/lib/swig_runner.rb +682 -0
  412. data/rakelib/lib/typemap/array_int_selections.rb +57 -0
  413. data/rakelib/lib/typemap/common.rb +613 -0
  414. data/rakelib/lib/typemap/data_format.rb +76 -0
  415. data/rakelib/lib/typemap/data_object_data.rb +99 -0
  416. data/rakelib/lib/typemap/datetime.rb +64 -0
  417. data/rakelib/lib/typemap/grid_client_data.rb +55 -0
  418. data/rakelib/lib/typemap/grid_coords.rb +65 -0
  419. data/rakelib/lib/typemap/html_cell.rb +57 -0
  420. data/rakelib/lib/typemap/io_streams.rb +162 -0
  421. data/rakelib/lib/typemap/pgcell.rb +35 -0
  422. data/rakelib/lib/typemap/pgeditor.rb +35 -0
  423. data/rakelib/lib/typemap/pgprop_arg.rb +74 -0
  424. data/rakelib/lib/typemap/pgproperty.rb +35 -0
  425. data/rakelib/lib/typemap/points_list.rb +124 -0
  426. data/rakelib/lib/typemap/richtext.rb +67 -0
  427. data/rakelib/lib/typemap/tree_itemid.rb +49 -0
  428. data/rakelib/lib/util/string.rb +141 -0
  429. data/rakelib/prepost.rake +91 -0
  430. data/rakelib/prepost.rb +26 -0
  431. data/rakelib/run.rake +49 -0
  432. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +7 -0
  433. data/rakelib/yard/templates/default/layout/html/setup.rb +5 -0
  434. data/rakelib/yard/yard/relative_markdown_links/version.rb +8 -0
  435. data/rakelib/yard/yard/relative_markdown_links.rb +39 -0
  436. data/rakelib/yard/yard-custom-templates.rb +2 -0
  437. data/rakelib/yard/yard-relative_markdown_links.rb +4 -0
  438. data/samples/art/wxruby-128x128.png +0 -0
  439. data/samples/art/wxruby-256x256.png +0 -0
  440. data/samples/art/wxruby-64x64.png +0 -0
  441. data/samples/art/wxruby.ico +0 -0
  442. data/samples/art/wxruby.png +0 -0
  443. data/samples/aui/aui.rb +1321 -0
  444. data/samples/aui/tn_aui.png +0 -0
  445. data/samples/bigdemo/About.rbw +39 -0
  446. data/samples/bigdemo/ColorPanel.rbw +23 -0
  447. data/samples/bigdemo/GridSimple.rbw +78 -0
  448. data/samples/bigdemo/MDIDemo.rbw +57 -0
  449. data/samples/bigdemo/PopupMenu.rbw +146 -0
  450. data/samples/bigdemo/ShapedWindow.rbw +128 -0
  451. data/samples/bigdemo/Sizers.rbw +541 -0
  452. data/samples/bigdemo/bigdemo.rb +810 -0
  453. data/samples/bigdemo/demoTemplate.rbw +33 -0
  454. data/samples/bigdemo/helpfile.htb +0 -0
  455. data/samples/bigdemo/icons/Test 015.jpg +0 -0
  456. data/samples/bigdemo/icons/Test 015.png +0 -0
  457. data/samples/bigdemo/icons/choice.bmp +0 -0
  458. data/samples/bigdemo/icons/choice.xpm +27 -0
  459. data/samples/bigdemo/icons/combo.bmp +0 -0
  460. data/samples/bigdemo/icons/combo.xpm +27 -0
  461. data/samples/bigdemo/icons/copy.xpm +25 -0
  462. data/samples/bigdemo/icons/cut.xpm +24 -0
  463. data/samples/bigdemo/icons/gauge.bmp +0 -0
  464. data/samples/bigdemo/icons/gauge.xpm +27 -0
  465. data/samples/bigdemo/icons/help.xpm +25 -0
  466. data/samples/bigdemo/icons/list.bmp +0 -0
  467. data/samples/bigdemo/icons/list.xpm +27 -0
  468. data/samples/bigdemo/icons/mondrian.ico +0 -0
  469. data/samples/bigdemo/icons/mondrian.xpm +44 -0
  470. data/samples/bigdemo/icons/new.xpm +24 -0
  471. data/samples/bigdemo/icons/ogl.ico +0 -0
  472. data/samples/bigdemo/icons/ogl.xpm +45 -0
  473. data/samples/bigdemo/icons/open.xpm +26 -0
  474. data/samples/bigdemo/icons/paste.bmp +0 -0
  475. data/samples/bigdemo/icons/paste.xpm +38 -0
  476. data/samples/bigdemo/icons/pointy.png +0 -0
  477. data/samples/bigdemo/icons/preview.xpm +26 -0
  478. data/samples/bigdemo/icons/print.xpm +26 -0
  479. data/samples/bigdemo/icons/radio.bmp +0 -0
  480. data/samples/bigdemo/icons/radio.xpm +27 -0
  481. data/samples/bigdemo/icons/robert.xpm +415 -0
  482. data/samples/bigdemo/icons/sashtest.ico +0 -0
  483. data/samples/bigdemo/icons/save.xpm +25 -0
  484. data/samples/bigdemo/icons/smiles.bmp +0 -0
  485. data/samples/bigdemo/icons/smiles.xpm +39 -0
  486. data/samples/bigdemo/icons/smiley.ico +0 -0
  487. data/samples/bigdemo/icons/smiley.xpm +42 -0
  488. data/samples/bigdemo/icons/stattext.xpm +24 -0
  489. data/samples/bigdemo/icons/test2.bmp +0 -0
  490. data/samples/bigdemo/icons/test2.png +0 -0
  491. data/samples/bigdemo/icons/test2.xpm +79 -0
  492. data/samples/bigdemo/icons/text.bmp +0 -0
  493. data/samples/bigdemo/icons/text.xpm +27 -0
  494. data/samples/bigdemo/icons/tog1.bmp +0 -0
  495. data/samples/bigdemo/icons/tog1.xpm +38 -0
  496. data/samples/bigdemo/icons/tog2.bmp +0 -0
  497. data/samples/bigdemo/icons/tog2.xpm +38 -0
  498. data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
  499. data/samples/bigdemo/icons/wxwin.ico +0 -0
  500. data/samples/bigdemo/icons/wxwin16x16.png +0 -0
  501. data/samples/bigdemo/icons/wxwin16x16.xpm +25 -0
  502. data/samples/bigdemo/icons/wxwin32x32.png +0 -0
  503. data/samples/bigdemo/icons/wxwin48x48.png +0 -0
  504. data/samples/bigdemo/run.rb +91 -0
  505. data/samples/bigdemo/tips.txt +7 -0
  506. data/samples/bigdemo/utils.rb +12 -0
  507. data/samples/bigdemo/wxArtProvider.rbw +281 -0
  508. data/samples/bigdemo/wxBitmapButton.rbw +65 -0
  509. data/samples/bigdemo/wxButton.rbw +64 -0
  510. data/samples/bigdemo/wxCalendarCtrl.rbw +59 -0
  511. data/samples/bigdemo/wxCheckBox.rbw +50 -0
  512. data/samples/bigdemo/wxCheckListBox.rbw +65 -0
  513. data/samples/bigdemo/wxChoice.rbw +47 -0
  514. data/samples/bigdemo/wxChoicebook.rbw +78 -0
  515. data/samples/bigdemo/wxColourDialog.rbw +33 -0
  516. data/samples/bigdemo/wxComboBox.rbw +77 -0
  517. data/samples/bigdemo/wxCursor.rbw +136 -0
  518. data/samples/bigdemo/wxDialog.rbw +74 -0
  519. data/samples/bigdemo/wxDirDialog.rbw +29 -0
  520. data/samples/bigdemo/wxDragImage.rbw +70 -0
  521. data/samples/bigdemo/wxFileDialog.rbw +37 -0
  522. data/samples/bigdemo/wxFileDialog_Save.rbw +35 -0
  523. data/samples/bigdemo/wxFindReplaceDialog.rbw +82 -0
  524. data/samples/bigdemo/wxFontDialog.rbw +200 -0
  525. data/samples/bigdemo/wxFrame.rbw +53 -0
  526. data/samples/bigdemo/wxGauge.rbw +65 -0
  527. data/samples/bigdemo/wxGenericDirCtrl.rbw +74 -0
  528. data/samples/bigdemo/wxGrid.rbw +66 -0
  529. data/samples/bigdemo/wxHtmlHelpController.rbw +52 -0
  530. data/samples/bigdemo/wxListBox.rbw +140 -0
  531. data/samples/bigdemo/wxListCtrl_virtual.rbw +112 -0
  532. data/samples/bigdemo/wxMDIWindows.rbw +50 -0
  533. data/samples/bigdemo/wxMenu.rbw +247 -0
  534. data/samples/bigdemo/wxMessageDialog.rbw +27 -0
  535. data/samples/bigdemo/wxMiniFrame.rbw +70 -0
  536. data/samples/bigdemo/wxMultipleChoiceDialog.rbw +29 -0
  537. data/samples/bigdemo/wxNotebook.rbw +136 -0
  538. data/samples/bigdemo/wxProgressDialog.rbw +43 -0
  539. data/samples/bigdemo/wxRadioBox.rbw +72 -0
  540. data/samples/bigdemo/wxRadioButton.rbw +125 -0
  541. data/samples/bigdemo/wxSashWindow.rbw +141 -0
  542. data/samples/bigdemo/wxScrolledMessageDialog.rbw +57 -0
  543. data/samples/bigdemo/wxScrolledWindow.rbw +199 -0
  544. data/samples/bigdemo/wxSingleChoiceDialog.rbw +33 -0
  545. data/samples/bigdemo/wxSlider.rbw +42 -0
  546. data/samples/bigdemo/wxSpinButton.rbw +50 -0
  547. data/samples/bigdemo/wxSpinCtrl.rbw +51 -0
  548. data/samples/bigdemo/wxSplitterWindow.rbw +63 -0
  549. data/samples/bigdemo/wxStaticBitmap.rbw +47 -0
  550. data/samples/bigdemo/wxStaticText.rbw +55 -0
  551. data/samples/bigdemo/wxStatusBar.rbw +126 -0
  552. data/samples/bigdemo/wxTextCtrl.rbw +149 -0
  553. data/samples/bigdemo/wxTextEntryDialog.rbw +31 -0
  554. data/samples/bigdemo/wxToggleButton.rbw +49 -0
  555. data/samples/bigdemo/wxToolBar.rbw +131 -0
  556. data/samples/bigdemo/wxTreeCtrl.rbw +191 -0
  557. data/samples/calendar/calendar.rb +363 -0
  558. data/samples/calendar/tn_calendar.png +0 -0
  559. data/samples/caret/caret.rb +293 -0
  560. data/samples/caret/mondrian.xpm +44 -0
  561. data/samples/caret/tn_caret.png +0 -0
  562. data/samples/controls/books.rb +183 -0
  563. data/samples/controls/choice.xpm +27 -0
  564. data/samples/controls/combo.xpm +27 -0
  565. data/samples/controls/controls.rb +1143 -0
  566. data/samples/controls/gauge.xpm +27 -0
  567. data/samples/controls/get_item_sample.rb +117 -0
  568. data/samples/controls/list.xpm +27 -0
  569. data/samples/controls/mondrian.ico +0 -0
  570. data/samples/controls/mondrian.xpm +44 -0
  571. data/samples/controls/radio.xpm +27 -0
  572. data/samples/controls/stattext.xpm +24 -0
  573. data/samples/controls/test2.bmp +0 -0
  574. data/samples/controls/text.xpm +27 -0
  575. data/samples/controls/tn_books.png +0 -0
  576. data/samples/controls/tn_controls.png +0 -0
  577. data/samples/controls/tn_get_item_sample.png +0 -0
  578. data/samples/dialogs/dialogs.rb +879 -0
  579. data/samples/dialogs/tips.txt +18 -0
  580. data/samples/dialogs/tn_dialogs.png +0 -0
  581. data/samples/dialogs/tn_wizard.png +0 -0
  582. data/samples/dialogs/wizard.rb +89 -0
  583. data/samples/dragdrop/dragdrop.rb +200 -0
  584. data/samples/dragdrop/tn_dragdrop.png +0 -0
  585. data/samples/drawing/SVGlogo24.xpm +310 -0
  586. data/samples/drawing/bitmap.rb +76 -0
  587. data/samples/drawing/bitmap_image.rb +131 -0
  588. data/samples/drawing/graphics_drawing.rb +257 -0
  589. data/samples/drawing/maths_images.rb +327 -0
  590. data/samples/drawing/rmagic_bitmap_image.rb +139 -0
  591. data/samples/drawing/ruby-logo.jpg +0 -0
  592. data/samples/drawing/svgtest.rb +373 -0
  593. data/samples/drawing/tn_bitmap.png +0 -0
  594. data/samples/drawing/tn_bitmap_image.png +0 -0
  595. data/samples/drawing/tn_graphics_drawing.png +0 -0
  596. data/samples/drawing/tn_maths_images.png +0 -0
  597. data/samples/drawing/tn_rmagic_bitmap_image.png +0 -0
  598. data/samples/drawing/tn_svgtest.png +0 -0
  599. data/samples/etc/choice.rb +82 -0
  600. data/samples/etc/miniframe.rb +92 -0
  601. data/samples/etc/sash.rb +140 -0
  602. data/samples/etc/scrollwin.rb +120 -0
  603. data/samples/etc/system_settings.rb +263 -0
  604. data/samples/etc/tn_choice.png +0 -0
  605. data/samples/etc/tn_miniframe.png +0 -0
  606. data/samples/etc/tn_sash.png +0 -0
  607. data/samples/etc/tn_scrollwin.png +0 -0
  608. data/samples/etc/tn_system_settings.png +0 -0
  609. data/samples/event/activation.rb +129 -0
  610. data/samples/event/event.rb +220 -0
  611. data/samples/event/threaded.rb +141 -0
  612. data/samples/event/tn_activation.png +0 -0
  613. data/samples/event/tn_event.png +0 -0
  614. data/samples/event/tn_threaded.png +0 -0
  615. data/samples/event/tn_update_ui_event.png +0 -0
  616. data/samples/event/update_ui_event.rb +91 -0
  617. data/samples/grid/grid.rb +224 -0
  618. data/samples/grid/gridtablebase.rb +178 -0
  619. data/samples/grid/tn_grid.png +0 -0
  620. data/samples/grid/tn_gridtablebase.png +0 -0
  621. data/samples/html/8859_2.htm +14 -0
  622. data/samples/html/cp1250.htm +19 -0
  623. data/samples/html/foo.png +0 -0
  624. data/samples/html/html.rb +278 -0
  625. data/samples/html/i18n.gif +0 -0
  626. data/samples/html/imagemap.htm +20 -0
  627. data/samples/html/imagemap.png +0 -0
  628. data/samples/html/listtest.htm +28 -0
  629. data/samples/html/pic.png +0 -0
  630. data/samples/html/pic2.bmp +0 -0
  631. data/samples/html/regres.htm +20 -0
  632. data/samples/html/subsup.html +42 -0
  633. data/samples/html/tables.htm +255 -0
  634. data/samples/html/test.htm +375 -0
  635. data/samples/html/tn_html.png +0 -0
  636. data/samples/mdi/mdi.rb +118 -0
  637. data/samples/mdi/tn_mdi.png +0 -0
  638. data/samples/minimal/minimal.rb +95 -0
  639. data/samples/minimal/mondrian.ico +0 -0
  640. data/samples/minimal/mondrian.png +0 -0
  641. data/samples/minimal/nothing.rb +38 -0
  642. data/samples/minimal/tn_minimal.png +0 -0
  643. data/samples/minimal/tn_nothing.png +0 -0
  644. data/samples/printing/mondrian.ico +0 -0
  645. data/samples/printing/mondrian.xpm +44 -0
  646. data/samples/printing/printing.rb +499 -0
  647. data/samples/printing/printing2.rb +251 -0
  648. data/samples/printing/sample-text.txt +213 -0
  649. data/samples/printing/tn_printing.png +0 -0
  650. data/samples/printing/tn_printing2.png +0 -0
  651. data/samples/propgrid/propgrid.rb +2711 -0
  652. data/samples/propgrid/propgrid_minimal.rb +107 -0
  653. data/samples/propgrid/sample_props.rb +434 -0
  654. data/samples/propgrid/tn_propgrid.png +0 -0
  655. data/samples/propgrid/tn_propgrid_minimal.png +0 -0
  656. data/samples/ribbon/align_center.xpm +21 -0
  657. data/samples/ribbon/align_left.xpm +21 -0
  658. data/samples/ribbon/align_right.xpm +21 -0
  659. data/samples/ribbon/aui_style.xpm +53 -0
  660. data/samples/ribbon/auto_crop_selection.xpm +55 -0
  661. data/samples/ribbon/auto_crop_selection_small.xpm +33 -0
  662. data/samples/ribbon/circle.xpm +38 -0
  663. data/samples/ribbon/circle_small.xpm +22 -0
  664. data/samples/ribbon/colours.xpm +25 -0
  665. data/samples/ribbon/cross.xpm +38 -0
  666. data/samples/ribbon/empty.xpm +23 -0
  667. data/samples/ribbon/expand_selection_h.xpm +46 -0
  668. data/samples/ribbon/expand_selection_v.xpm +46 -0
  669. data/samples/ribbon/eye.xpm +26 -0
  670. data/samples/ribbon/hexagon.xpm +38 -0
  671. data/samples/ribbon/msw_style.xpm +65 -0
  672. data/samples/ribbon/position_left.xpm +22 -0
  673. data/samples/ribbon/position_top.xpm +22 -0
  674. data/samples/ribbon/ribbon.rb +900 -0
  675. data/samples/ribbon/ribbon.xpm +54 -0
  676. data/samples/ribbon/selection_panel.xpm +23 -0
  677. data/samples/ribbon/square.xpm +38 -0
  678. data/samples/ribbon/tn_ribbon.png +0 -0
  679. data/samples/ribbon/triangle.xpm +38 -0
  680. data/samples/sample.xpm +475 -0
  681. data/samples/sampler/back.xpm +21 -0
  682. data/samples/sampler/copy.xpm +44 -0
  683. data/samples/sampler/cut.xpm +46 -0
  684. data/samples/sampler/editor.rb +560 -0
  685. data/samples/sampler/ext.rb +51 -0
  686. data/samples/sampler/filesave.xpm +42 -0
  687. data/samples/sampler/find.xpm +62 -0
  688. data/samples/sampler/findrepl.xpm +63 -0
  689. data/samples/sampler/forward.xpm +21 -0
  690. data/samples/sampler/paste.xpm +46 -0
  691. data/samples/sampler/play.xpm +24 -0
  692. data/samples/sampler/redo.xpm +58 -0
  693. data/samples/sampler/sample.rb +347 -0
  694. data/samples/sampler/stc_editor.rb +321 -0
  695. data/samples/sampler/txt_editor.rb +130 -0
  696. data/samples/sampler/undo.xpm +58 -0
  697. data/samples/sampler.rb +394 -0
  698. data/samples/splash/mobile.xpm +1835 -0
  699. data/samples/splash/splash.png +0 -0
  700. data/samples/splash/splash.rb +164 -0
  701. data/samples/splash/tn_splash.png +0 -0
  702. data/samples/text/document-open.png +0 -0
  703. data/samples/text/document-save.png +0 -0
  704. data/samples/text/edit-copy.png +0 -0
  705. data/samples/text/edit-cut.png +0 -0
  706. data/samples/text/edit-paste.png +0 -0
  707. data/samples/text/edit-redo.png +0 -0
  708. data/samples/text/edit-undo.png +0 -0
  709. data/samples/text/format-text-bold.png +0 -0
  710. data/samples/text/format-text-italic.png +0 -0
  711. data/samples/text/format-text-underline.png +0 -0
  712. data/samples/text/mondrian.ico +0 -0
  713. data/samples/text/mondrian.xpm +44 -0
  714. data/samples/text/preferences-desktop-font.png +0 -0
  715. data/samples/text/rich_textctrl.rb +326 -0
  716. data/samples/text/scintilla.rb +179 -0
  717. data/samples/text/textctrl.rb +124 -0
  718. data/samples/text/tn_rich_textctrl.png +0 -0
  719. data/samples/text/tn_scintilla.png +0 -0
  720. data/samples/text/tn_textctrl.png +0 -0
  721. data/samples/text/tn_unicode.png +0 -0
  722. data/samples/text/unicode.rb +238 -0
  723. data/samples/text/utf8.txt +15 -0
  724. data/samples/treectrl/checked.xpm +54 -0
  725. data/samples/treectrl/icon1.xpm +79 -0
  726. data/samples/treectrl/icon2.xpm +53 -0
  727. data/samples/treectrl/icon3.xpm +79 -0
  728. data/samples/treectrl/icon4.xpm +43 -0
  729. data/samples/treectrl/icon5.xpm +79 -0
  730. data/samples/treectrl/state1.xpm +145 -0
  731. data/samples/treectrl/state2.xpm +144 -0
  732. data/samples/treectrl/state3.xpm +142 -0
  733. data/samples/treectrl/state4.xpm +145 -0
  734. data/samples/treectrl/state5.xpm +85 -0
  735. data/samples/treectrl/tn_treectrl.png +0 -0
  736. data/samples/treectrl/treectrl.rb +1720 -0
  737. data/samples/treectrl/unchecked.xpm +30 -0
  738. data/samples/xrc/custom_dialog.xrc +46 -0
  739. data/samples/xrc/custom_xrc_sample.rb +84 -0
  740. data/samples/xrc/samples.xrc +46 -0
  741. data/samples/xrc/tn_xrc_sample.png +0 -0
  742. data/samples/xrc/xrc_sample.rb +86 -0
  743. data/tests/test_basic.rb +20 -0
  744. data/tests/test_clipboard.rb +241 -0
  745. data/tests/test_dialog.rb +28 -0
  746. data/tests/test_event_handling.rb +103 -0
  747. data/tests/test_events.rb +45 -0
  748. data/tests/test_geometry.rb +141 -0
  749. data/tests/test_intl.rb +107 -0
  750. data/tests/test_item_data.rb +120 -0
  751. data/tests/test_variant.rb +151 -0
  752. data/tests/testapp.rb +40 -0
  753. data/tests/testapp_noframe.rb +28 -0
  754. metadata +874 -0
@@ -0,0 +1,1116 @@
1
+ ###
2
+ # wxRuby3 typemap mapping classes
3
+ # Copyright (c) M.J.N. Corino, The Netherlands
4
+ ###
5
+
6
+ require 'set'
7
+
8
+ require_relative './parameter'
9
+
10
+ module WXRuby3
11
+
12
+ module Typemap
13
+
14
+ RubyArg = Struct.new(:type, :index) do
15
+ def to_s
16
+ "RubyArg{type=#{type}; index=#{index}}"
17
+ end
18
+ def inspect
19
+ to_s
20
+ end
21
+ end
22
+
23
+ STD_INT_TYPES = [
24
+ 'char', 'unsigned char', 'wchar_t',
25
+ 'short', 'unsigned short',
26
+ 'int', 'unsigned int',
27
+ 'long', 'unsigned long',
28
+ 'long int', 'unsigned long int',
29
+ 'long long', 'unsigned long long',
30
+ 'ssize_t', 'size_t'
31
+ ]
32
+ STD_FLOAT_TYPES = %w[float double]
33
+ STD_STR_TYPES = ['char*', 'unsigned char*', 'wchar_t*']
34
+ STD_BOOL_TYPES = %w[bool]
35
+
36
+ class << self
37
+ def map_std_type(std_type)
38
+ if STD_INT_TYPES.include?(std_type)
39
+ 'Integer'
40
+ elsif STD_FLOAT_TYPES.include?(std_type)
41
+ 'Float'
42
+ elsif STD_STR_TYPES.include?(std_type)
43
+ 'String'
44
+ elsif STD_BOOL_TYPES.include?(std_type)
45
+ 'true,false'
46
+ else
47
+ nil
48
+ end
49
+ end
50
+
51
+ def std_type_maps
52
+ @std_type_maps ||= {}
53
+ end
54
+
55
+ def register_std_typedef(wx_type, std_type)
56
+ std_type_maps[wx_type] = map_std_type(std_type) || wx_type
57
+ end
58
+ end
59
+
60
+ def self.rb_void_type(ctype)
61
+ "VOID_#{ctype.tr(' ', '_').upcase}"
62
+ end
63
+
64
+ def self.wx_type_to_rb(typestr)
65
+ c_type = typestr.gsub(/const\s+/, '')
66
+ c_type.gsub!(/\s+(\*|&)/, '\1')
67
+ c_type.strip!
68
+ c_type.tr!('*&', '')
69
+ (std_type_maps[c_type] || c_type).sub(/\Awx/, 'Wx::')
70
+ end
71
+
72
+ class Map
73
+
74
+ class Base
75
+ def initialize(map, temp: nil, code: nil)
76
+ @map = map
77
+ @temporaries = [temp].flatten.compact
78
+ @mapping_code = code ? [code.to_s] : []
79
+ end
80
+
81
+ def kind
82
+ self.class.name.split('::').last.downcase.to_sym
83
+ end
84
+
85
+ def modifiers
86
+ nil
87
+ end
88
+ protected :modifiers
89
+
90
+ def add_temporaries(*temps)
91
+ @temporaries.concat temps.flatten
92
+ end
93
+
94
+ def add_code(code)
95
+ @mapping_code << code.to_s
96
+ end
97
+
98
+ def to_swig
99
+ tmpstr = (@temporaries && !@temporaries.empty?) ? " (#{@temporaries.join(', ')})" : ''
100
+ mods = modifiers
101
+ argmasks = @map.patterns.collect { |p| "(#{p.param_masks.collect { |pm| pm.to_s }.join(', ')})#{tmpstr}" }.join(', ')
102
+ if @mapping_code.inject(0) { |lc, s| lc += (1 + s.count("\n")); lc } > 1
103
+ <<~__SWIG
104
+ %typemap(#{kind}#{mods}) #{argmasks} {
105
+ #{@mapping_code.collect { |s| s.split("\n") }.flatten.join("\n ")}
106
+ }
107
+ __SWIG
108
+ else
109
+ %Q{%typemap(#{kind}#{mods}) #{argmasks} "#{@mapping_code.first}";}
110
+ end
111
+ end
112
+
113
+ def to_s
114
+ "#{kind} #{@map}"
115
+ end
116
+
117
+ def _get_mapped_type(type)
118
+ mapped_type = case type
119
+ when RubyArg
120
+ type
121
+ when ::Array
122
+ RubyArg[*type]
123
+ when ::Hash
124
+ RubyArg[type[:type], type[:index]]
125
+ else
126
+ RubyArg[type.to_s]
127
+ end
128
+ end
129
+ private :_get_mapped_type
130
+
131
+ def _map_args(argdef, argmap)
132
+ if ::Hash === argdef && !argdef.has_key?(:type)
133
+ argdef.each_pair do |argmasks, type|
134
+ pattern = @map.patterns.detect { |ps| ps == argmasks }
135
+ raise "Unknown parameter set [#{argmasks}] for [#{to_s}]" unless pattern
136
+ argmap[pattern] = _get_mapped_type(type)
137
+ end
138
+ else
139
+ mapped_type = _get_mapped_type(argdef)
140
+ @map.patterns.each { |pattern| argmap[pattern] = mapped_type }
141
+ end
142
+ argmap
143
+ end
144
+ protected :_map_args
145
+ end
146
+
147
+ class In < Base
148
+ def initialize(map, from: nil, ignore: nil, temp: nil, code: nil, &block)
149
+ super(map, temp: temp, code: code)
150
+ raise "Cannot combine 'from' and 'ignore' in #{to_s}" if from && ignore
151
+ @from = {}
152
+ @ignore = ignore
153
+ if from
154
+ map_from(from)
155
+ elsif !ignore
156
+ map.types.each_pair { |pset, type| @from[pset] = _get_mapped_type(type) }
157
+ @ignore = @from.empty?
158
+ end
159
+ block.call(self) if block
160
+ end
161
+
162
+ attr_reader :from
163
+
164
+ def map_from(argdef)
165
+ @ignore = _map_args(argdef, @from).empty?
166
+ end
167
+
168
+ def ignore?
169
+ @ignore
170
+ end
171
+
172
+ def modifiers
173
+ ignore? ? ",numinputs=0" : nil
174
+ end
175
+ end
176
+
177
+ class Default < Base
178
+ def initialize(map, temp: nil, code: nil, &block)
179
+ super(map, temp: temp, code: code)
180
+ block.call(self) if block
181
+ end
182
+ end
183
+
184
+ class Typecheck < Base
185
+ def initialize(map, precedence: nil, temp: nil, code: nil, &block)
186
+ super(map, temp: temp, code: code)
187
+ @precedence = precedence
188
+ block.call(self) if block
189
+ end
190
+
191
+ def modifiers
192
+ if @precedence
193
+ %Q[,precedence=#{Integer === @precedence ? @precedence : "SWIG_TYPECHECK_#{@precedence.to_s.upcase}"}]
194
+ else
195
+ nil
196
+ end
197
+ end
198
+ end
199
+
200
+ class Check < Base
201
+ def initialize(map, temp: nil, code: nil, &block)
202
+ super(map, temp: temp, code: code)
203
+ block.call(self) if block
204
+ end
205
+ end
206
+
207
+ class Out < Base
208
+ def initialize(map, ignore: nil, to: nil, temp: nil, code: nil, &block)
209
+ super(map, temp: temp, code: code)
210
+ @ignored = ignore ? [ignore].flatten : []
211
+ @ignore = !!ignore
212
+ @to = {}
213
+ if to
214
+ map_to(to)
215
+ elsif !(@ignore || map.types.empty?)
216
+ map.types.each_pair { |pset, type| @to[pset] = _get_mapped_type(type) }
217
+ end
218
+ block.call(self) if block
219
+ end
220
+
221
+ attr_reader :ignored, :to
222
+
223
+ def map_to(typedef)
224
+ if ::Hash === typedef
225
+ typedef.each_pair do |argmasks, type|
226
+ pattern = @patterns.detect { |ps| ps == argmasks }
227
+ raise "Unknown parameter set [#{argmasks}] for [#{@map}]" unless pattern
228
+ @to[pattern] = type
229
+ end
230
+ else
231
+ @patterns.inject(@to) do |map, pattern|
232
+ map[pattern] = typedef
233
+ map
234
+ end
235
+ end
236
+ raise "Cannot combine 'ignore' and 'to' mapping in #{to_s}" if @ignore && !@to.empty?
237
+ end
238
+
239
+ def ignore?
240
+ @ignore
241
+ end
242
+
243
+ def ignored_out_to_swig(typename)
244
+ <<~__SWIG
245
+ typedef #{typename} #{Typemap.rb_void_type(typename)};
246
+ %{
247
+ typedef #{typename} #{Typemap.rb_void_type(typename)};
248
+ %}
249
+ %typemap(out) #{Typemap.rb_void_type(typename)} \"wxUnusedVar(result);\";
250
+ %typemap(directorout) #{Typemap.rb_void_type(typename)} \"\";
251
+ __SWIG
252
+ end
253
+ private :ignored_out_to_swig
254
+
255
+ def to_swig
256
+ @ignore ? @ignored.collect { |typename| ignored_out_to_swig(typename) } : super
257
+ end
258
+ end
259
+
260
+ class FreeArg < Base
261
+ def initialize(map, temp: nil, code: nil, &block)
262
+ super(map, temp: temp, code: code)
263
+ block.call(self) if block
264
+ end
265
+ end
266
+
267
+ class ArgOut < Base
268
+ def initialize(map, as: nil, temp: nil, code: nil, &block)
269
+ super(map, temp: nil, code: code)
270
+ @as = {}
271
+ if as
272
+ map_as(as)
273
+ elsif !map.types.empty?
274
+ map.types.each_pair { |pset, type| @as[pset] = _get_mapped_type(type) }
275
+ end
276
+ block.call(self) if block
277
+ end
278
+
279
+ attr_reader :as
280
+
281
+ def map_as(argdef)
282
+ _map_args(argdef, @as)
283
+ end
284
+ end
285
+
286
+ class DirectorIn < Base
287
+ def initialize(map, temp: nil, code: nil, &block)
288
+ super(map, temp: temp, code: code)
289
+ block.call(self) if block
290
+ end
291
+ end
292
+
293
+ class DirectorOut < Base
294
+ def initialize(map, temp: nil, code: nil, &block)
295
+ super(map, temp: temp, code: code)
296
+ block.call(self) if block
297
+ end
298
+ end
299
+
300
+ class DirectorArgOut < Base
301
+ def initialize(map, temp: nil, code: nil, &block)
302
+ super(map, temp: temp, code: code)
303
+ block.call(self) if block
304
+ end
305
+ end
306
+
307
+ class VarOut < Base
308
+ def initialize(map, temp: nil, code: nil, &block)
309
+ super(map, temp: nil, code: code)
310
+ block.call(self) if block
311
+ end
312
+ end
313
+
314
+ class Configurator
315
+ def initialize(map)
316
+ @map = map
317
+ end
318
+ def add_header_code(*code)
319
+ @map.add_header_code(*code)
320
+ end
321
+ alias :add_header :add_header_code
322
+
323
+ def map_in(**kwargs, &block)
324
+ @map.map_in(**kwargs, &block)
325
+ end
326
+
327
+ def map_default(**kwargs, &block)
328
+ @map.map_default(**kwargs, &block)
329
+ end
330
+
331
+ def map_typecheck(**kwargs, &block)
332
+ @map.map_typecheck(**kwargs, &block)
333
+ end
334
+
335
+ def map_check(**kwargs, &block)
336
+ @map.map_check(**kwargs, &block)
337
+ end
338
+
339
+ def map_out(**kwargs, &block)
340
+ @map.map_out(**kwargs, &block)
341
+ end
342
+
343
+ def map_freearg(**kwargs, &block)
344
+ @map.map_freearg(**kwargs, &block)
345
+ end
346
+
347
+ def map_argout(**kwargs, &block)
348
+ @map.map_argout(**kwargs, &block)
349
+ end
350
+
351
+ def map_directorin(**kwargs, &block)
352
+ @map.map_directorin(**kwargs, &block)
353
+ end
354
+
355
+ def map_directorout(**kwargs, &block)
356
+ @map.map_directorout(**kwargs, &block)
357
+ end
358
+
359
+ def map_directorargout(**kwargs, &block)
360
+ @map.map_directorargout(**kwargs, &block)
361
+ end
362
+
363
+ def map_varout(**kwargs, &block)
364
+ @map.map_varout(**kwargs, &block)
365
+ end
366
+ end
367
+
368
+ def initialize(*mappings, as: nil, swig: true, &block)
369
+ @types = {}
370
+ @patterns = mappings.collect do |mapping|
371
+ if ::Hash === mapping
372
+ mapping.collect do |pattern, type|
373
+ pset = ParameterSet === pattern ? pattern : ParameterSet.new(pattern)
374
+ @types[pset] = type
375
+ pset
376
+ end
377
+ else
378
+ ParameterSet === mapping ? mapping : ParameterSet.new(mapping)
379
+ end
380
+ end.flatten
381
+ @patterns.each { |pset| @types[pset] = as unless @types.has_key?(pset) } if as
382
+ @swig = swig
383
+ @in = nil
384
+ @default = nil
385
+ @typecheck = nil
386
+ @check = nil
387
+ @argout = nil
388
+ @out = nil
389
+ @freearg = nil
390
+ @directorin = nil
391
+ @directorargout = nil
392
+ @directorout = nil
393
+ @varout = nil
394
+ @header_code = []
395
+ Configurator.new(self).instance_eval &block if block
396
+ end
397
+
398
+ attr_reader :patterns, :types
399
+
400
+ def swig?
401
+ @swig
402
+ end
403
+
404
+ def add_header_code(*code)
405
+ @header_code.concat(code.flatten)
406
+ end
407
+
408
+ def map_in(from: nil, ignore: nil, temp: nil, code: nil, &block)
409
+ @in = In.new(self, from: from, ignore: ignore, temp: temp, code: code, &block)
410
+ end
411
+
412
+ def map_default(temp: nil, code: nil, &block)
413
+ @default = Default.new(self, temp: temp, code: code, &block)
414
+ end
415
+
416
+ def map_typecheck(precedence: nil, temp: nil, code: nil, &block)
417
+ @typecheck = Typecheck.new(self, precedence: precedence, temp: temp, code: code, &block)
418
+ end
419
+
420
+ def map_check(temp: nil, code: nil, &block)
421
+ @check = Check.new(self, temp: temp, code: code, &block)
422
+ end
423
+
424
+ def map_out(ignore: nil, to: nil, temp: nil, code: nil, &block)
425
+ @out = Out.new(self, ignore: ignore, to: nil, temp: temp, code: code, &block)
426
+ end
427
+
428
+ def map_freearg(temp: nil, code: nil, &block)
429
+ @check = FreeArg.new(self, temp: temp, code: code, &block)
430
+ end
431
+
432
+ def map_argout(as: nil, temp: nil, code: nil, &block)
433
+ @argout = ArgOut.new(self, as: as, temp: temp, code: code, &block)
434
+ end
435
+
436
+ def map_directorin(temp: nil, code: nil, &block)
437
+ @directorin = DirectorIn.new(self, temp: temp, code: code, &block)
438
+ end
439
+
440
+ def map_directorout(temp: nil, code: nil, &block)
441
+ @directorout = DirectorOut.new(self, temp: temp, code: code, &block)
442
+ end
443
+
444
+ def map_directorargout(temp: nil, code: nil, &block)
445
+ @directorargout = DirectorArgOut.new(self, temp: temp, code: code, &block)
446
+ end
447
+
448
+ def map_varout(temp: nil, code: nil, &block)
449
+ @varout = VarOut.new(self, temp: temp, code: code, &block)
450
+ end
451
+
452
+ def resolve(_)
453
+ self
454
+ end
455
+
456
+ def matches?(pattern)
457
+ @patterns.any? { |p| p == pattern }
458
+ end
459
+
460
+ def mapped_arg_input(arg_pattern)
461
+ if maps_input? && !ignores_input? && tm_pset = @patterns.detect { |p| p == arg_pattern }
462
+ @in.from[tm_pset]
463
+ else
464
+ nil
465
+ end
466
+ end
467
+
468
+ def mapped_arg_output(arg_pattern)
469
+ if maps_input_as_output? && tm_pset = @patterns.detect { |p| p == arg_pattern }
470
+ @argout.as[tm_pset]
471
+ else
472
+ nil
473
+ end
474
+ end
475
+
476
+ def map_input(parameters, param_offset)
477
+ # does this map handle input mapping?
478
+ if (maps_input? || maps_input_as_output?) &&
479
+ # and if so, do any of the pattern sets match the first parameter
480
+ !(tm_psets = @patterns.select { |pset| pset.param_masks.first == parameters.first }).empty?
481
+ # ok, find first for which the rest of the pattern (if any) matches as well?
482
+ tm_pset = tm_psets.detect do |pset|
483
+ pset.param_masks.size == 1 ||
484
+ (parameters.size >= pset.param_masks.size &&
485
+ (1...pset.param_masks.size).all? { |pi| pset.param_masks[pi] == parameters[pi] })
486
+ end
487
+ if tm_pset
488
+ in_arg = nil
489
+ # map the matched parameters
490
+ if maps_input?
491
+ unless ignores_input?
492
+ mapped_arg = @in.from[tm_pset]
493
+ paramnr = mapped_arg.index || 0
494
+ in_arg = RubyArg.new(mapped_arg.type,
495
+ param_offset+paramnr)
496
+ end
497
+ end
498
+ out_arg = nil
499
+ if maps_input_as_output?
500
+ mapped_arg = @argout.as[tm_pset]
501
+ paramnr = mapped_arg.index || 0
502
+ out_arg = RubyArg.new(mapped_arg.type,
503
+ param_offset+paramnr)
504
+ end
505
+ # shift mapped parameters
506
+ parameters.shift(tm_pset.param_masks.size)
507
+ # return mappings
508
+ return [in_arg, out_arg]
509
+ end
510
+ end
511
+ nil
512
+ end
513
+
514
+ def map_output(type)
515
+ if maps_output?
516
+ if ignores_output? && ignored_output.include?(type)
517
+ return ''
518
+ end
519
+ if (tm_pset = @patterns.detect { |pset| pset == type })
520
+ return @out.to.has_key?(tm_pset) ? @out.to[tm_pset].type : ''
521
+ end
522
+ end
523
+ nil
524
+ end
525
+
526
+ def maps_input?
527
+ !!@in
528
+ end
529
+
530
+ def maps_output?
531
+ !!@out
532
+ end
533
+
534
+ def ignores_input?
535
+ @in && @in.ignore?
536
+ end
537
+
538
+ def maps_input_as_output?
539
+ !!@argout
540
+ end
541
+
542
+ def ignores_output?
543
+ @out && @out.ignore?
544
+ end
545
+
546
+ def ignored_output
547
+ @out ? @out.ignored : []
548
+ end
549
+
550
+ def to_swig
551
+ if swig?
552
+ s = []
553
+ unless @header_code.empty?
554
+ s << "%{\n"
555
+ s.concat @header_code
556
+ s << "\n%}"
557
+ end
558
+ maps = [@in,
559
+ @default,
560
+ @typecheck,
561
+ @check,
562
+ @argout,
563
+ @out,
564
+ @freearg,
565
+ @directorin,
566
+ @directorargout,
567
+ @varout]
568
+ maps << @directorout unless ignores_output?
569
+ s.concat maps.collect { |mapping| mapping ? mapping.to_swig : nil }.compact
570
+ else
571
+ []
572
+ end
573
+ end
574
+
575
+ def to_s
576
+ "typemap #{@patterns.join(', ')}"
577
+ end
578
+
579
+ def inspect
580
+ to_s
581
+ end
582
+ end # Map
583
+
584
+ class AppliedMap
585
+ def initialize(src_pattern, *mappings)
586
+ @patterns = mappings.collect { |paramset| ParameterSet.new(paramset) }
587
+ @src_pattern = src_pattern
588
+ @applied_maps = nil
589
+ end
590
+
591
+ attr_reader :patterns
592
+
593
+ def resolve(resolver)
594
+ unless @applied_maps
595
+ @applied_maps = resolver.call(@src_pattern).reverse + STANDARD.find_all(@src_pattern) # assume system (SWIG) defined map if not found
596
+ STDERR.puts "*** apply #{@applied_maps} (from #{@src_pattern}) for #{@patterns}" if Director.trace?
597
+ end
598
+ self
599
+ end
600
+
601
+ def matches?(pattern)
602
+ @patterns.any? { |p| p == pattern }
603
+ end
604
+
605
+ def mapped_arg_input(arg_pattern)
606
+ if maps_input? && !ignores_input? && @patterns.any? { |p| p == arg_pattern }
607
+ @applied_maps.detect { |tm| tm.maps_input? && !tm.ignores_input? }.mapped_arg_input(@src_pattern)
608
+ else
609
+ nil
610
+ end
611
+ end
612
+
613
+ def mapped_arg_output(arg_pattern)
614
+ if maps_input_as_output? && @patterns.any? { |p| p == arg_pattern }
615
+ @applied_maps.detect { |tm| tm.maps_input_as_output? }.mapped_arg_output(@src_pattern)
616
+ else
617
+ nil
618
+ end
619
+ end
620
+
621
+ def map_input(parameters, param_offset)
622
+ # does this map handle input mapping?
623
+ if (maps_input? || maps_input_as_output?) &&
624
+ # and if so, do any of the pattern sets match the first parameter
625
+ !(tm_psets = @patterns.select { |pset| pset.param_masks.first == parameters.first }).empty?
626
+ # ok, do any match the rest of the pattern (if any) as well?
627
+ tm_match = tm_psets.any? do |pset|
628
+ pset.param_masks.size == 1 ||
629
+ (parameters.size >= pset.param_masks.size &&
630
+ (1...pset.param_masks.size).all? { |pi| pset.param_masks[pi] == parameters[pi] })
631
+ end
632
+ if tm_match
633
+ # find the applied map mapping input (if any)
634
+ tm_app = @applied_maps.detect { |tm| tm.maps_input? }
635
+ in_arg = nil
636
+ # map the matched parameters
637
+ if tm_app
638
+ unless tm_app.ignores_input?
639
+ mapped_arg = tm_app.mapped_arg_input(@src_pattern)
640
+ paramnr = mapped_arg.index || 0
641
+ in_arg = RubyArg.new(mapped_arg.type,
642
+ param_offset+paramnr)
643
+ end
644
+ end
645
+ # find the applied map mapping arg output (if any)
646
+ tm_app = @applied_maps.detect { |tm| tm.maps_input_as_output? }
647
+ out_arg = nil
648
+ if tm_app
649
+ mapped_arg = tm_app.mapped_arg_output(@src_pattern)
650
+ paramnr = mapped_arg.index || 0
651
+ out_arg = RubyArg.new(mapped_arg.type,
652
+ param_offset+paramnr)
653
+ end
654
+ # shift mapped parameters
655
+ parameters.shift(@src_pattern.param_masks.size)
656
+ # return mappings
657
+ return [in_arg, out_arg]
658
+ end
659
+ end
660
+ nil
661
+ end
662
+
663
+ def map_output(type)
664
+ if maps_output?
665
+ if ignores_output? && ignored_output.include?(type)
666
+ return ''
667
+ end
668
+ return @applied_maps.detect { |tm| tm.maps_output? }.map_output(type)
669
+ end
670
+ nil
671
+ end
672
+
673
+ def maps_input?
674
+ @applied_maps ? @applied_maps.any? { |map| map.maps_input? } : false
675
+ end
676
+
677
+ def maps_output?
678
+ @applied_maps ? @applied_maps.any? { |map| map.maps_output? } : false
679
+ end
680
+
681
+ def ignores_input?
682
+ @applied_maps ? @applied_maps.any? { |map| map.ignores_input? } : false
683
+ end
684
+
685
+ def maps_input_as_output?
686
+ @applied_maps ? @applied_maps.any? { |map| map.maps_input_as_output? } : false
687
+ end
688
+
689
+ def ignores_output?
690
+ @applied_maps ? @applied_maps.any? { |map| map.ignores_output? } : false
691
+ end
692
+
693
+ def ignored_output
694
+ ignores_output? ? @applied_maps.detect { |map| map.ignores_output? }.ignored_output : []
695
+ end
696
+
697
+ def to_swig
698
+ "%apply #{@src_pattern} { #{@patterns.join(', ')} };"
699
+ end
700
+
701
+ def to_s
702
+ "applied typemap #{@patterns.join(', ')} (applies #{@applied_maps})"
703
+ end
704
+
705
+ def inspect
706
+ to_s
707
+ end
708
+ end
709
+
710
+ class SystemMap
711
+
712
+ def initialize(*mappings, maps_in: false, maps_argout: false, maps_out: false, mapped_type: nil)
713
+ @patterns = mappings.collect { |paramset| ParameterSet === paramset ? paramset : ParameterSet.new(paramset) }
714
+ @maps_in = maps_in || @patterns.any? { |p| p.param_masks.any? { |m| m.name == 'INPUT' } }
715
+ @maps_argout = maps_argout || @patterns.any? { |p| p.param_masks.any? { |m| m.name == 'OUTPUT' } }
716
+ @maps_out = maps_out
717
+ @mapped_type = mapped_type
718
+ end
719
+
720
+ attr_reader :patterns
721
+
722
+ def resolve(_)
723
+ self
724
+ end
725
+
726
+ def matches?(pattern)
727
+ @patterns.any? { |p| p == pattern }
728
+ end
729
+
730
+ def mapped_arg_input(arg_pattern)
731
+ if maps_input? && !ignores_input? && @patterns.any? { |p| p == arg_pattern }
732
+ RubyArg.new(@mapped_type)
733
+ else
734
+ nil
735
+ end
736
+ end
737
+
738
+ def mapped_arg_output(arg_pattern)
739
+ if maps_input_as_output? && @patterns.any? { |p| p == arg_pattern }
740
+ RubyArg.new(@mapped_type)
741
+ else
742
+ nil
743
+ end
744
+ end
745
+
746
+ def map_input(parameters, param_offset)
747
+ # does this map handle input mapping?
748
+ if (maps_input? || maps_input_as_output?) &&
749
+ # and if so, do any of the pattern sets match the first parameter
750
+ !(tm_psets = @patterns.select { |pset| pset.param_masks.first == parameters.first }).empty?
751
+ # ok, find first for which the rest of the pattern (if any) matches as well?
752
+ tm_pset = tm_psets.detect do |pset|
753
+ pset.param_masks.size == 1 ||
754
+ (parameters.size >= pset.param_masks.size &&
755
+ (1...pset.param_masks.size).all? { |pi| pset.param_masks[pi] == parameters[pi] })
756
+ end
757
+ if tm_pset
758
+ in_arg = nil
759
+ # map the matched parameters
760
+ if maps_input?
761
+ in_arg = RubyArg.new(@mapped_type,
762
+ param_offset)
763
+ end
764
+ out_arg = nil
765
+ if maps_input_as_output?
766
+ out_arg = RubyArg.new(@mapped_type,
767
+ param_offset)
768
+ end
769
+ # shift mapped parameters
770
+ parameters.shift(tm_pset.param_masks.size)
771
+ # return mappings
772
+ return [in_arg, out_arg]
773
+ end
774
+ end
775
+ nil
776
+ end
777
+
778
+ def map_output(type)
779
+ if maps_output? && matches?(type)
780
+ return @mapped_type
781
+ end
782
+ nil
783
+ end
784
+
785
+ def maps_input?
786
+ @maps_in
787
+ end
788
+
789
+ def ignores_input?
790
+ @maps_argout && !@maps_in
791
+ end
792
+
793
+ def maps_input_as_output?
794
+ @maps_argout
795
+ end
796
+
797
+ def maps_output?
798
+ @maps_out
799
+ end
800
+
801
+ def ignores_output?
802
+ false
803
+ end
804
+
805
+ def ignored_output
806
+ []
807
+ end
808
+
809
+ def to_swig
810
+ nil
811
+ end
812
+
813
+ def to_s
814
+ "system typemap #{@patterns.join(', ')}"
815
+ end
816
+
817
+ def inspect
818
+ to_s
819
+ end
820
+ end
821
+
822
+ # This typemap disables (clears) any previous type mapping for the given argument pattern.
823
+ # For SWIG it generates the '%clear' declaration.
824
+ # For doc generation it simply shortcuts input and output mappings on any argument or return
825
+ # type matching the pattern and 'maps' to the actual argument/return type.
826
+ # No argument output or argument/return ignoring.
827
+ class DisabledMap
828
+ def initialize(pattern)
829
+ @pattern = ParameterSet.new(pattern)
830
+ end
831
+
832
+ def patterns
833
+ [@pattern]
834
+ end
835
+
836
+ def resolve(_)
837
+ self
838
+ end
839
+
840
+ def matches?(pattern)
841
+ @pattern == pattern
842
+ end
843
+
844
+ def mapped_arg_input(arg_pattern)
845
+ nil
846
+ end
847
+
848
+ def mapped_arg_output(arg_pattern)
849
+ nil
850
+ end
851
+
852
+ def map_input(parameters, param_offset)
853
+ # does the pattern match the first parameter?
854
+ if @pattern.param_masks.first == parameters.first
855
+ # just 'map' the parameter to itself
856
+ param = parameters.shift # loose the 'mapped' parameter
857
+ return [RubyArg[Typemap.wx_type_to_rb(param.type), param_offset], nil]
858
+ end
859
+ nil
860
+ end
861
+
862
+ def map_output(type)
863
+ if matches?(type)
864
+ return Typemap.wx_type_to_rb(type)
865
+ end
866
+ nil
867
+ end
868
+
869
+ def maps_input?
870
+ true
871
+ end
872
+
873
+ def maps_output?
874
+ true
875
+ end
876
+
877
+ def ignores_input?
878
+ false
879
+ end
880
+
881
+ def maps_input_as_output?
882
+ false
883
+ end
884
+
885
+ def ignores_output?
886
+ false
887
+ end
888
+
889
+ def ignored_output
890
+ []
891
+ end
892
+
893
+ def to_swig
894
+ "%clear #{@pattern};"
895
+ end
896
+
897
+ def to_s
898
+ "cleared typemap #{@pattern}"
899
+ end
900
+
901
+ def inspect
902
+ to_s
903
+ end
904
+ end
905
+
906
+ class Collection
907
+ module EnumHelpers
908
+ def find(*patterns)
909
+ if patterns.size == 1
910
+ # in case of a single pattern find the first map matching the pattern
911
+ pattern = ParameterSet === patterns.first ? patterns.first : ParameterSet.new(patterns.first)
912
+ list.detect { |map| map.matches?(pattern) }
913
+ else
914
+ # in case of multiple patterns the list must exactly identical as the pattern list of a map
915
+ patterns = patterns.collect { |p| ParameterSet === p ? p : ParameterSet.new(p) }
916
+ list.detect { |map| map.patterns == patterns }
917
+ end
918
+ end
919
+
920
+ def find_all(*patterns)
921
+ if patterns.size == 1
922
+ # in case of a single pattern find the first map matching the pattern
923
+ pattern = ParameterSet === patterns.first ? patterns.first : ParameterSet.new(patterns.first)
924
+ list.select { |map| map.matches?(pattern) }
925
+ else
926
+ # in case of multiple patterns the list must exactly identical as the pattern list of a map
927
+ patterns = patterns.collect { |p| ParameterSet === p ? p : ParameterSet.new(p) }
928
+ list.select { |map| map.patterns == patterns }
929
+ end
930
+ end
931
+
932
+ def select(&block)
933
+ list.select(&block)
934
+ end
935
+
936
+ def collect(&block)
937
+ list.inject(Collection.new) { |c, tm| c.list << block.call(tm); c }
938
+ end
939
+ end
940
+
941
+ def initialize
942
+ @list = []
943
+ end
944
+
945
+ attr_reader :list
946
+
947
+ include EnumHelpers
948
+
949
+ def add(typemap)
950
+ @list << typemap
951
+ self
952
+ end
953
+ alias :<< :add
954
+
955
+ def to_swig
956
+ @list.collect { |map| map.to_swig }.flatten.compact
957
+ end
958
+
959
+ def to_s
960
+ "typemap collection"
961
+ end
962
+
963
+ class Chain
964
+ def initialize(*collections)
965
+ @collections = collections.collect do |coll|
966
+ raise ArgumentError,
967
+ "Do not know how to chain #{coll}. Expected Typemap::Collection" unless Collection === coll || Chain === coll
968
+ coll
969
+ end
970
+ end
971
+
972
+ def list
973
+ ::Enumerator::Chain.new(*@collections.collect { |c| c.list })
974
+ end
975
+
976
+ include EnumHelpers
977
+
978
+ def resolve
979
+ resolver = ->(pattern) { self.find_all(pattern) }
980
+ list.each { |tm| tm.resolve(resolver) }
981
+ self
982
+ end
983
+
984
+ def map_input(parameters)
985
+ param_offset = 0
986
+ args = []
987
+ ret = []
988
+ reverse_list = list.reverse_each
989
+ while !parameters.empty?
990
+ result = nil
991
+ param_count = parameters.size
992
+ reverse_list.detect { |map| result = map.map_input(parameters, param_offset) }
993
+ arg_in = arg_out = nil
994
+ if result
995
+ arg_in, arg_out = result
996
+ else
997
+ arg_in = RubyArg.new(Typemap.wx_type_to_rb(parameters.first.type), param_offset)
998
+ parameters.shift # loose the mapped param
999
+ end
1000
+ # store mapped param
1001
+ args << arg_in if arg_in
1002
+ ret << arg_out if arg_out
1003
+ # calculate new param offset
1004
+ param_offset += (param_count - parameters.size)
1005
+ end
1006
+ [args, ret]
1007
+ end
1008
+
1009
+ def map_output(type)
1010
+ result = nil
1011
+ list.reverse_each.detect { |map| result = map.map_output(type) }
1012
+ result || Typemap.wx_type_to_rb(type)
1013
+ end
1014
+
1015
+ def to_swig
1016
+ @collections.collect { |coll| coll.to_swig }.join("\n")
1017
+ end
1018
+
1019
+ def to_s
1020
+ "typemap collection chain"
1021
+ end
1022
+ end
1023
+ end
1024
+
1025
+ # set up standard SWIG defined type maps
1026
+ STANDARD = {
1027
+ STD_INT_TYPES => 'Integer',
1028
+ STD_STR_TYPES => 'String',
1029
+ STD_FLOAT_TYPES => 'Float',
1030
+ STD_BOOL_TYPES => 'true,false'
1031
+ }.inject(Typemap::Collection.new) do |list, (ctypes, rbtype)|
1032
+ unless rbtype == 'String'
1033
+ list << SystemMap.new(*ctypes.collect { |t| ["#{t} * OUTPUT", "#{t} & OUTPUT"]}.flatten,
1034
+ mapped_type: rbtype)
1035
+ list << SystemMap.new(*ctypes.collect { |t| ["#{t} * INPUT", "#{t} & INPUT"]}.flatten,
1036
+ mapped_type: rbtype)
1037
+ end
1038
+ list << SystemMap.new(*ctypes, maps_in: true, maps_out: true, mapped_type: rbtype)
1039
+ end << SystemMap.new('void', maps_out: true, mapped_type: 'void')
1040
+
1041
+ module MappingMethods
1042
+
1043
+ # creates a type mapping set
1044
+ def map(*mappings, &block)
1045
+ as = nil
1046
+ swig = true
1047
+ if ::Hash === mappings.last && (mappings.last.has_key?(:as) || mappings.last.has_key?(:swig))
1048
+ as = mappings.last.delete(:as)
1049
+ swig = !!mappings.last.delete(:swig) if mappings.last.has_key?(:swig)
1050
+ end
1051
+ type_maps << Map.new(*mappings, as: as, swig: swig, &block)
1052
+ end
1053
+
1054
+ # creates type mapping applications sets for different parameter sets
1055
+ def map_apply(application)
1056
+ application.each_pair do |src_mapping, tgt_mappings|
1057
+ src_pattern = ParameterSet.new(src_mapping)
1058
+ type_maps << AppliedMap.new(src_pattern, *[tgt_mappings].flatten)
1059
+ end
1060
+ end
1061
+
1062
+ def map_disable(pattern)
1063
+ type_maps << DisabledMap.new(pattern)
1064
+ end
1065
+
1066
+ end
1067
+
1068
+ module Module
1069
+
1070
+ def self.included(typemap_mod)
1071
+ typemap_mod.singleton_class.class_eval do
1072
+ def define(&block)
1073
+ @typemap_setup = block
1074
+ end
1075
+
1076
+ def add_maps(typemap_user)
1077
+ typemap_user.module_eval &@typemap_setup
1078
+ end
1079
+ end
1080
+
1081
+ # Define an include handler for the typemap module which sets up the module/class
1082
+ # using the typemap module (most likely a Director class).
1083
+ # The method implemented below makes sure type maps are ever only created when needed.
1084
+ typemap_mod.module_eval do
1085
+ def self.included(map_user_mod)
1086
+ # do we have an #on_include handler?
1087
+ self.on_include(map_user_mod) if self.respond_to?(:on_include)
1088
+ # first time we included a type map module?
1089
+ unless map_user_mod.singleton_class.include?(Typemap::MappingMethods)
1090
+ # add map creation and collection support methods
1091
+ map_user_mod.singleton_class.class_eval do
1092
+ # provide the map creation methods
1093
+ include Typemap::MappingMethods
1094
+ # define type_maps collection initializer
1095
+ def init_type_maps
1096
+ @type_maps = Collection.new
1097
+ # create the type maps from included type map modules (by us or our ancestors)
1098
+ self.included_modules.reverse.select { |mod| mod.include?(Typemap::Module) }.each { |mod| mod.add_maps(self) }
1099
+ @type_maps
1100
+ end
1101
+ private :init_type_maps
1102
+ # type maps accessor
1103
+ def type_maps
1104
+ @type_maps ||= init_type_maps
1105
+ end
1106
+ end
1107
+ end
1108
+ end
1109
+ end
1110
+ end
1111
+
1112
+ end
1113
+
1114
+ end # Typemap
1115
+
1116
+ end # WXRuby3