wxruby3 0.9.0.pre.rc.3 → 0.9.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 (656) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/mkrf_conf_srcgem.rb +4 -1
  4. data/ext/wxruby3/include/wxruby-Config.h +953 -0
  5. data/ext/wxruby3/include/wxruby-ScaledDC.h +4 -1
  6. data/ext/wxruby3/include/wxruby-runtime.h +10 -1
  7. data/ext/wxruby3/swig/RubyStockObjects.i +5 -3
  8. data/ext/wxruby3/swig/common.i +8 -3
  9. data/ext/wxruby3/swig/mark_free_impl.i +6 -4
  10. data/ext/wxruby3/swig/memory_management.i +5 -3
  11. data/ext/wxruby3/swig/typedefs.i +5 -3
  12. data/ext/wxruby3/swig/wx.i +5 -0
  13. data/ext/wxruby3/swig/wx.rc +4 -2
  14. data/lib/wx/accessors.rb +10 -2
  15. data/lib/wx/aui/auifloatframe.rb +20 -0
  16. data/lib/wx/aui/auimanager.rb +3 -0
  17. data/lib/wx/aui/auinotebook.rb +17 -0
  18. data/lib/wx/aui/require.rb +5 -1
  19. data/lib/wx/aui.rb +4 -1
  20. data/lib/wx/core/acceleratortable.rb +8 -0
  21. data/lib/wx/core/animation.rb +8 -0
  22. data/lib/wx/core/app.rb +8 -0
  23. data/lib/wx/core/array_ext.rb +7 -0
  24. data/lib/wx/core/art_locator.rb +7 -0
  25. data/lib/wx/core/artprovider.rb +9 -0
  26. data/lib/wx/core/bitmap.rb +16 -4
  27. data/lib/wx/core/bitmap_combobox.rb +7 -0
  28. data/lib/wx/core/brush.rb +7 -0
  29. data/lib/wx/core/busycursor.rb +9 -0
  30. data/lib/wx/core/choice.rb +7 -0
  31. data/lib/wx/core/choicedlg.rb +7 -0
  32. data/lib/wx/core/clientdc.rb +9 -0
  33. data/lib/wx/core/clipboard.rb +8 -0
  34. data/lib/wx/core/collapsible_pane.rb +8 -1
  35. data/lib/wx/core/colour.rb +8 -0
  36. data/lib/wx/core/combo_ctrl.rb +110 -0
  37. data/lib/wx/core/combobox.rb +7 -0
  38. data/lib/wx/core/config.rb +303 -0
  39. data/lib/wx/core/controlwithitems.rb +12 -1
  40. data/lib/wx/core/cursor.rb +14 -4
  41. data/lib/wx/core/data_object.rb +7 -0
  42. data/lib/wx/core/dataformat.rb +9 -0
  43. data/lib/wx/core/datetime.rb +14 -0
  44. data/lib/wx/core/dc.rb +7 -0
  45. data/lib/wx/core/dialog.rb +18 -1
  46. data/lib/wx/core/enum.rb +7 -0
  47. data/lib/wx/core/event.rb +7 -0
  48. data/lib/wx/core/event_blocker.rb +7 -0
  49. data/lib/wx/core/event_loop.rb +7 -0
  50. data/lib/wx/core/evthandler.rb +8 -0
  51. data/lib/wx/core/ext.rb +7 -0
  52. data/lib/wx/core/file_dialog.rb +23 -0
  53. data/lib/wx/core/find_replace_dialog.rb +7 -0
  54. data/lib/wx/core/functions.rb +8 -0
  55. data/lib/wx/core/gauge.rb +10 -1
  56. data/lib/wx/core/genericdirctrl.rb +9 -0
  57. data/lib/wx/core/hboxsizer.rb +16 -0
  58. data/lib/wx/core/helpcontroller.rb +8 -0
  59. data/lib/wx/core/helpcontrollerhelpprovider.rb +9 -0
  60. data/lib/wx/core/helpprovider.rb +10 -1
  61. data/lib/wx/core/icon.rb +17 -6
  62. data/lib/wx/core/id_helper.rb +7 -0
  63. data/lib/wx/core/image.rb +16 -4
  64. data/lib/wx/core/imagelist.rb +8 -1
  65. data/lib/wx/core/listbox.rb +7 -0
  66. data/lib/wx/core/listctrl.rb +9 -0
  67. data/lib/wx/core/locale.rb +8 -0
  68. data/lib/wx/core/log.rb +24 -0
  69. data/lib/wx/core/menu.rb +9 -0
  70. data/lib/wx/core/menu_bar.rb +7 -0
  71. data/lib/wx/core/menuitem.rb +9 -0
  72. data/lib/wx/core/notebook.rb +9 -0
  73. data/lib/wx/core/object.rb +9 -0
  74. data/lib/wx/core/paintdc.rb +7 -0
  75. data/lib/wx/core/pen.rb +7 -0
  76. data/lib/wx/core/pen_info.rb +7 -0
  77. data/lib/wx/core/platform_info.rb +7 -0
  78. data/lib/wx/core/point.rb +8 -0
  79. data/lib/wx/core/real_point.rb +8 -0
  80. data/lib/wx/core/rect.rb +9 -0
  81. data/lib/wx/core/region_iterator.rb +7 -0
  82. data/lib/wx/core/simplehelpprovider.rb +9 -0
  83. data/lib/wx/core/size.rb +8 -0
  84. data/lib/wx/core/sizer.rb +9 -0
  85. data/lib/wx/core/splash_screen.rb +22 -2
  86. data/lib/wx/core/text_entry.rb +7 -0
  87. data/lib/wx/core/textctrl.rb +86 -5
  88. data/lib/wx/core/timer.rb +9 -0
  89. data/lib/wx/core/toolbar.rb +9 -0
  90. data/lib/wx/core/toolbartool.rb +8 -0
  91. data/lib/wx/core/treectrl.rb +9 -0
  92. data/lib/wx/core/v_list_box.rb +7 -0
  93. data/lib/wx/core/validator.rb +7 -0
  94. data/lib/wx/core/variant.rb +7 -0
  95. data/lib/wx/core/vboxsizer.rb +16 -0
  96. data/lib/wx/core/window.rb +8 -0
  97. data/lib/wx/core/window_update_locker.rb +9 -0
  98. data/lib/wx/core/xmlresource.rb +8 -0
  99. data/lib/wx/core.rb +4 -1
  100. data/lib/wx/doc/app.rb +7 -1
  101. data/lib/wx/doc/array_ext.rb +6 -0
  102. data/lib/wx/doc/art_locator.rb +7 -0
  103. data/lib/wx/doc/aui/auimanager.rb +6 -0
  104. data/lib/wx/doc/aui/auinotebook.rb +6 -0
  105. data/lib/wx/doc/bitmap.rb +12 -4
  106. data/lib/wx/doc/brush.rb +6 -0
  107. data/lib/wx/doc/busy_info.rb +6 -0
  108. data/lib/wx/doc/client_dc.rb +6 -0
  109. data/lib/wx/doc/clipboard.rb +6 -0
  110. data/lib/wx/doc/colour_dialog.rb +6 -0
  111. data/lib/wx/doc/config.rb +190 -0
  112. data/lib/wx/doc/const.rb +7 -0
  113. data/lib/wx/doc/controlwithitems.rb +6 -0
  114. data/lib/wx/doc/core.rb +6 -0
  115. data/lib/wx/doc/cursor.rb +13 -5
  116. data/lib/wx/doc/data_object.rb +6 -0
  117. data/lib/wx/doc/datetime.rb +16 -0
  118. data/lib/wx/doc/dc.rb +6 -0
  119. data/lib/wx/doc/enum.rb +8 -1
  120. data/lib/wx/doc/event.rb +12 -0
  121. data/lib/wx/doc/event_blocker.rb +6 -0
  122. data/lib/wx/doc/event_loop.rb +6 -0
  123. data/lib/wx/doc/events.rb +6 -0
  124. data/lib/wx/doc/evthandler.rb +8 -0
  125. data/lib/wx/doc/extra/01_packages.md +52 -51
  126. data/lib/wx/doc/extra/05_event-handling.md +37 -12
  127. data/lib/wx/doc/extra/06_geometry.md +5 -5
  128. data/lib/wx/doc/extra/07_colour_and_font.md +2 -2
  129. data/lib/wx/doc/extra/09_exceptions.md +1 -1
  130. data/lib/wx/doc/extra/10_art.md +18 -12
  131. data/lib/wx/doc/extra/11_drawing_and_dc.md +4 -4
  132. data/lib/wx/doc/font.rb +6 -0
  133. data/lib/wx/doc/font_data.rb +16 -0
  134. data/lib/wx/doc/functions.rb +9 -1
  135. data/lib/wx/doc/gc_dc.rb +6 -0
  136. data/lib/wx/doc/gdi_common.rb +8 -1
  137. data/lib/wx/doc/graphics_context.rb +59 -39
  138. data/lib/wx/doc/grid/grid.rb +16 -1
  139. data/lib/wx/doc/hboxsizer.rb +33 -0
  140. data/lib/wx/doc/help_controller.rb +6 -0
  141. data/lib/wx/doc/html/html_help_controller.rb +6 -0
  142. data/lib/wx/doc/icon.rb +13 -5
  143. data/lib/wx/doc/id_helper.rb +6 -0
  144. data/lib/wx/doc/image.rb +12 -4
  145. data/lib/wx/doc/list_ctrl.rb +6 -0
  146. data/lib/wx/doc/log.rb +17 -0
  147. data/lib/wx/doc/memory_dc.rb +6 -0
  148. data/lib/wx/doc/mirror_dc.rb +6 -0
  149. data/lib/wx/doc/pen.rb +6 -0
  150. data/lib/wx/doc/pg/events.rb +6 -0
  151. data/lib/wx/doc/pg/pg_property.rb +17 -0
  152. data/lib/wx/doc/pg/pgeditor.rb +6 -0
  153. data/lib/wx/doc/pg/property_grid.rb +6 -0
  154. data/lib/wx/doc/pg/property_grid_interface.rb +6 -0
  155. data/lib/wx/doc/progress_dialog.rb +6 -0
  156. data/lib/wx/doc/prt/page_setup_dialog.rb +6 -0
  157. data/lib/wx/doc/prt/print_data.rb +6 -0
  158. data/lib/wx/doc/prt/print_dialog.rb +6 -0
  159. data/lib/wx/doc/prt/printer.rb +6 -0
  160. data/lib/wx/doc/prt/printer_dc.rb +6 -0
  161. data/lib/wx/doc/radio_box.rb +6 -0
  162. data/lib/wx/doc/rbn/ribbon_bar.rb +6 -0
  163. data/lib/wx/doc/rbn/ribbon_button_bar.rb +6 -0
  164. data/lib/wx/doc/rbn/ribbon_gallery.rb +6 -0
  165. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +6 -0
  166. data/lib/wx/doc/region_iterator.rb +6 -0
  167. data/lib/wx/doc/rtc/richtext_buffer.rb +28 -0
  168. data/lib/wx/doc/rtc/richtext_formatting_dialog.rb +68 -0
  169. data/lib/wx/doc/rtc/richtext_printing.rb +6 -0
  170. data/lib/wx/doc/rtc/richtext_style_sheet.rb +20 -0
  171. data/lib/wx/doc/scaled_dc.rb +6 -0
  172. data/lib/wx/doc/screen_dc.rb +6 -0
  173. data/lib/wx/doc/stock_objects.rb +6 -0
  174. data/lib/wx/doc/stream.rb +6 -0
  175. data/lib/wx/doc/svg_file_dc.rb +6 -0
  176. data/lib/wx/doc/system_settings.rb +6 -0
  177. data/lib/wx/doc/text_validator.rb +6 -0
  178. data/lib/wx/doc/textctrl.rb +89 -0
  179. data/lib/wx/doc/tree_event.rb +20 -0
  180. data/lib/wx/doc/treebook.rb +6 -0
  181. data/lib/wx/doc/v_list_box.rb +6 -0
  182. data/lib/wx/doc/variant.rb +6 -0
  183. data/lib/wx/doc/vboxsizer.rb +33 -0
  184. data/lib/wx/doc/window.rb +6 -0
  185. data/lib/wx/doc/window_disabler.rb +6 -0
  186. data/lib/wx/doc/xml_resource.rb +8 -0
  187. data/lib/wx/global_const.rb +4 -1
  188. data/lib/wx/grid/grid.rb +23 -3
  189. data/lib/wx/grid/keyword_defs.rb +8 -1
  190. data/lib/wx/grid/require.rb +4 -1
  191. data/lib/wx/grid.rb +4 -1
  192. data/lib/wx/helpers.rb +8 -1
  193. data/lib/wx/html/htmlhelpcontroller.rb +29 -3
  194. data/lib/wx/html/htmlwindow.rb +23 -12
  195. data/lib/wx/html/keyword_defs.rb +8 -1
  196. data/lib/wx/html/require.rb +4 -1
  197. data/lib/wx/html/simple_html_listbox.rb +3 -0
  198. data/lib/wx/html.rb +4 -1
  199. data/lib/wx/keyword_ctors.rb +22 -3
  200. data/lib/wx/keyword_defs.rb +55 -3
  201. data/lib/wx/pg/events.rb +4 -1
  202. data/lib/wx/pg/keyword_defs.rb +8 -1
  203. data/lib/wx/pg/pg_editor.rb +3 -0
  204. data/lib/wx/pg/pg_properties.rb +4 -1
  205. data/lib/wx/pg/pg_property.rb +18 -5
  206. data/lib/wx/pg/property_grid.rb +4 -1
  207. data/lib/wx/pg/property_grid_interface.rb +3 -0
  208. data/lib/wx/pg/require.rb +4 -1
  209. data/lib/wx/pg.rb +4 -1
  210. data/lib/wx/prt/keyword_defs.rb +8 -1
  211. data/lib/wx/prt/page_setup_dialog.rb +3 -0
  212. data/lib/wx/prt/previewframe.rb +5 -0
  213. data/lib/wx/prt/require.rb +4 -1
  214. data/lib/wx/prt.rb +4 -1
  215. data/lib/wx/rbn/events.rb +4 -1
  216. data/lib/wx/rbn/keyword_defs.rb +8 -1
  217. data/lib/wx/rbn/require.rb +5 -1
  218. data/lib/wx/rbn/ribbon_art_provider.rb +3 -1
  219. data/lib/wx/rbn/ribbon_bar.rb +3 -0
  220. data/lib/wx/rbn/ribbon_button_bar.rb +3 -0
  221. data/lib/wx/rbn/ribbon_control.rb +3 -0
  222. data/lib/wx/rbn/ribbon_gallery.rb +10 -0
  223. data/lib/wx/rbn/ribbon_page.rb +3 -0
  224. data/lib/wx/rbn/ribbon_panel.rb +3 -0
  225. data/lib/wx/rbn/ribbon_tool_bar.rb +3 -0
  226. data/lib/wx/rbn.rb +4 -1
  227. data/lib/wx/rtc/ext.rb +4 -1
  228. data/lib/wx/rtc/keyword_defs.rb +18 -7
  229. data/lib/wx/rtc/require.rb +8 -1
  230. data/lib/wx/rtc/richtext_buffer.rb +36 -0
  231. data/lib/wx/rtc/richtext_formatting_dialog.rb +88 -0
  232. data/lib/wx/rtc/richtext_style_organiser_dialog.rb +46 -0
  233. data/lib/wx/rtc/symbol_picker_dialog.rb +47 -0
  234. data/lib/wx/rtc.rb +5 -1
  235. data/lib/wx/stc/keyword_defs.rb +8 -1
  236. data/lib/wx/stc/require.rb +4 -1
  237. data/lib/wx/stc.rb +4 -1
  238. data/lib/wx/version.rb +5 -1
  239. data/lib/wx/wxruby/base.rb +4 -1
  240. data/lib/wx/wxruby/cmd/sampler.rb +4 -1
  241. data/lib/wx/wxruby/cmd/test.rb +4 -1
  242. data/lib/wx.rb +4 -1
  243. data/rakelib/build.rake +4 -1
  244. data/rakelib/build.rb +4 -1
  245. data/rakelib/config.rake +4 -1
  246. data/rakelib/configure.rb +4 -1
  247. data/rakelib/doc.rake +4 -1
  248. data/rakelib/doc.rb +5 -1
  249. data/rakelib/install.rake +4 -1
  250. data/rakelib/install.rb +4 -1
  251. data/rakelib/lib/config/cygwin.rb +4 -1
  252. data/rakelib/lib/config/linux.rb +4 -1
  253. data/rakelib/lib/config/macosx.rb +5 -2
  254. data/rakelib/lib/config/mingw.rb +4 -1
  255. data/rakelib/lib/config/netbsd.rb +4 -1
  256. data/rakelib/lib/config/unixish.rb +10 -7
  257. data/rakelib/lib/config.rb +7 -2
  258. data/rakelib/lib/core/include/enum.inc +4 -1
  259. data/rakelib/lib/core/include/funcall.inc +10 -64
  260. data/rakelib/lib/core/include/init.inc +3 -0
  261. data/rakelib/lib/core/mapping.rb +26 -46
  262. data/rakelib/lib/core/package.rb +17 -3
  263. data/rakelib/lib/core/parameter.rb +4 -1
  264. data/rakelib/lib/core/spec.rb +14 -8
  265. data/rakelib/lib/core/spec_helper.rb +32 -9
  266. data/rakelib/lib/director/about_dialog_info.rb +4 -1
  267. data/rakelib/lib/director/accelerator.rb +7 -2
  268. data/rakelib/lib/director/animation.rb +4 -1
  269. data/rakelib/lib/director/animation_ctrl.rb +4 -1
  270. data/rakelib/lib/director/any_button.rb +5 -2
  271. data/rakelib/lib/director/app.rb +16 -2
  272. data/rakelib/lib/director/app_traits.rb +71 -0
  273. data/rakelib/lib/director/art_provider.rb +4 -1
  274. data/rakelib/lib/director/aui_dock_art.rb +4 -1
  275. data/rakelib/lib/director/aui_floating_frame.rb +4 -1
  276. data/rakelib/lib/director/aui_manager.rb +12 -5
  277. data/rakelib/lib/director/aui_manager_event.rb +4 -1
  278. data/rakelib/lib/director/aui_mdi_child_frame.rb +25 -1
  279. data/rakelib/lib/director/aui_mdi_client_window.rb +4 -1
  280. data/rakelib/lib/director/aui_mdi_parent_frame.rb +4 -1
  281. data/rakelib/lib/director/aui_notebook.rb +12 -1
  282. data/rakelib/lib/director/aui_notebook_event.rb +4 -1
  283. data/rakelib/lib/director/aui_pane_info.rb +4 -1
  284. data/rakelib/lib/director/aui_tab_art.rb +52 -1
  285. data/rakelib/lib/director/aui_tab_ctrl.rb +14 -1
  286. data/rakelib/lib/director/aui_toolbar.rb +6 -3
  287. data/rakelib/lib/director/aui_toolbar_art.rb +52 -1
  288. data/rakelib/lib/director/aui_toolbar_event.rb +4 -1
  289. data/rakelib/lib/director/aui_toolbar_item.rb +4 -1
  290. data/rakelib/lib/director/banner_window.rb +26 -0
  291. data/rakelib/lib/director/bitmap.rb +11 -2
  292. data/rakelib/lib/director/bitmap_combobox.rb +5 -1
  293. data/rakelib/lib/director/book_ctrls.rb +13 -3
  294. data/rakelib/lib/director/brush.rb +4 -1
  295. data/rakelib/lib/director/busy_info.rb +4 -1
  296. data/rakelib/lib/director/button.rb +4 -1
  297. data/rakelib/lib/director/calendar_ctrl.rb +4 -1
  298. data/rakelib/lib/director/calendar_date_attr.rb +4 -1
  299. data/rakelib/lib/director/caret.rb +4 -1
  300. data/rakelib/lib/director/check_listbox.rb +4 -1
  301. data/rakelib/lib/director/choice.rb +4 -1
  302. data/rakelib/lib/director/clipboard.rb +4 -1
  303. data/rakelib/lib/director/collapsible_pane.rb +4 -1
  304. data/rakelib/lib/director/collapsible_pane_event.rb +4 -1
  305. data/rakelib/lib/director/colour.rb +9 -1
  306. data/rakelib/lib/director/colour_picker_ctrl.rb +4 -1
  307. data/rakelib/lib/director/combobox.rb +4 -1
  308. data/rakelib/lib/director/comboctrl.rb +94 -0
  309. data/rakelib/lib/director/config_base.rb +135 -0
  310. data/rakelib/lib/director/context_help_button.rb +4 -1
  311. data/rakelib/lib/director/control.rb +4 -1
  312. data/rakelib/lib/director/ctrl_with_items.rb +5 -1
  313. data/rakelib/lib/director/cursor.rb +6 -2
  314. data/rakelib/lib/director/data_format.rb +4 -1
  315. data/rakelib/lib/director/data_object.rb +4 -1
  316. data/rakelib/lib/director/data_object_simple_base.rb +4 -1
  317. data/rakelib/lib/director/date_event.rb +9 -2
  318. data/rakelib/lib/director/date_picker_ctrl.rb +4 -1
  319. data/rakelib/lib/director/dc.rb +19 -1
  320. data/rakelib/lib/director/defs.rb +4 -1
  321. data/rakelib/lib/director/derived_dc.rb +27 -20
  322. data/rakelib/lib/director/dialog.rb +24 -3
  323. data/rakelib/lib/director/dir_filterlist_ctrl.rb +4 -1
  324. data/rakelib/lib/director/dir_picker_ctrl.rb +4 -1
  325. data/rakelib/lib/director/drag_image.rb +9 -2
  326. data/rakelib/lib/director/dragdrop.rb +4 -1
  327. data/rakelib/lib/director/editable_listbox.rb +4 -1
  328. data/rakelib/lib/director/event.rb +11 -3
  329. data/rakelib/lib/director/event_blocker.rb +4 -1
  330. data/rakelib/lib/director/event_filter.rb +4 -1
  331. data/rakelib/lib/director/event_handler.rb +28 -11
  332. data/rakelib/lib/director/event_loop.rb +4 -1
  333. data/rakelib/lib/director/events.rb +5 -2
  334. data/rakelib/lib/director/file_dialog_custom_control.rb +28 -0
  335. data/rakelib/lib/director/file_dialog_customize_hook.rb +28 -0
  336. data/rakelib/lib/director/file_picker_ctrl.rb +4 -1
  337. data/rakelib/lib/director/file_system.rb +45 -0
  338. data/rakelib/lib/director/find_dialog_event.rb +4 -1
  339. data/rakelib/lib/director/find_replace_data.rb +4 -1
  340. data/rakelib/lib/director/font.rb +7 -3
  341. data/rakelib/lib/director/font_data.rb +9 -1
  342. data/rakelib/lib/director/font_picker_ctrl.rb +4 -1
  343. data/rakelib/lib/director/frame.rb +45 -33
  344. data/rakelib/lib/director/fs_file.rb +52 -1
  345. data/rakelib/lib/director/functions.rb +11 -5
  346. data/rakelib/lib/director/gdi_object.rb +4 -1
  347. data/rakelib/lib/director/gdicommon.rb +14 -9
  348. data/rakelib/lib/director/generic_dirctrl.rb +4 -1
  349. data/rakelib/lib/director/graphics_context.rb +113 -18
  350. data/rakelib/lib/director/graphics_object.rb +13 -2
  351. data/rakelib/lib/director/grid_cell_attr.rb +28 -4
  352. data/rakelib/lib/director/grid_cell_editor.rb +22 -5
  353. data/rakelib/lib/director/grid_cell_renderer.rb +16 -3
  354. data/rakelib/lib/director/grid_ctrl.rb +146 -5
  355. data/rakelib/lib/director/grid_range_select_event.rb +4 -1
  356. data/rakelib/lib/director/grid_table_base.rb +6 -1
  357. data/rakelib/lib/director/grid_table_message.rb +4 -1
  358. data/rakelib/lib/director/header_ctrl.rb +37 -0
  359. data/rakelib/lib/director/help_controller.rb +13 -6
  360. data/rakelib/lib/director/help_provider.rb +4 -1
  361. data/rakelib/lib/director/html_cell.rb +10 -3
  362. data/rakelib/lib/director/html_data_object.rb +4 -1
  363. data/rakelib/lib/director/html_easy_printing.rb +4 -1
  364. data/rakelib/lib/director/html_event.rb +4 -1
  365. data/rakelib/lib/director/html_help_data.rb +4 -1
  366. data/rakelib/lib/director/html_help_window.rb +30 -0
  367. data/rakelib/lib/director/html_listbox.rb +4 -1
  368. data/rakelib/lib/director/html_printout.rb +6 -1
  369. data/rakelib/lib/director/html_window.rb +10 -8
  370. data/rakelib/lib/director/hyperlink_ctrl.rb +32 -0
  371. data/rakelib/lib/director/hyperlink_event.rb +4 -1
  372. data/rakelib/lib/director/icon.rb +4 -1
  373. data/rakelib/lib/director/image.rb +26 -3
  374. data/rakelib/lib/director/image_list.rb +5 -1
  375. data/rakelib/lib/director/info_bar.rb +26 -0
  376. data/rakelib/lib/director/list_ctrl.rb +39 -7
  377. data/rakelib/lib/director/listbox.rb +4 -1
  378. data/rakelib/lib/director/locale.rb +7 -4
  379. data/rakelib/lib/director/log.rb +51 -6
  380. data/rakelib/lib/director/mdi_frame.rb +4 -1
  381. data/rakelib/lib/director/media_ctrl.rb +4 -1
  382. data/rakelib/lib/director/menu.rb +16 -3
  383. data/rakelib/lib/director/menu_bar.rb +13 -2
  384. data/rakelib/lib/director/menu_item.rb +6 -6
  385. data/rakelib/lib/director/mouse_state.rb +5 -2
  386. data/rakelib/lib/director/numeric_property_validator.rb +4 -1
  387. data/rakelib/lib/director/object.rb +5 -2
  388. data/rakelib/lib/director/page_setup_dialog.rb +4 -1
  389. data/rakelib/lib/director/palette.rb +54 -2
  390. data/rakelib/lib/director/panel.rb +4 -1
  391. data/rakelib/lib/director/pen.rb +5 -2
  392. data/rakelib/lib/director/pgarray_editor_dialog.rb +4 -1
  393. data/rakelib/lib/director/pgcell.rb +4 -1
  394. data/rakelib/lib/director/pgeditor.rb +4 -1
  395. data/rakelib/lib/director/pgmulti_button.rb +4 -1
  396. data/rakelib/lib/director/pgproperties.rb +4 -1
  397. data/rakelib/lib/director/pgproperty.rb +42 -3
  398. data/rakelib/lib/director/pgvalidation_info.rb +9 -1
  399. data/rakelib/lib/director/pickerbase.rb +4 -1
  400. data/rakelib/lib/director/platform_info.rb +9 -1
  401. data/rakelib/lib/director/popup_window.rb +14 -1
  402. data/rakelib/lib/director/preview_frame.rb +5 -2
  403. data/rakelib/lib/director/print_data.rb +4 -1
  404. data/rakelib/lib/director/print_dialog.rb +4 -1
  405. data/rakelib/lib/director/printer.rb +14 -6
  406. data/rakelib/lib/director/property_grid.rb +30 -1
  407. data/rakelib/lib/director/property_grid_event.rb +11 -1
  408. data/rakelib/lib/director/property_grid_interface.rb +20 -6
  409. data/rakelib/lib/director/property_grid_manager.rb +4 -1
  410. data/rakelib/lib/director/property_grid_page.rb +4 -1
  411. data/rakelib/lib/director/property_grid_page_state.rb +4 -1
  412. data/rakelib/lib/director/radio_box.rb +4 -1
  413. data/rakelib/lib/director/rearrange_list.rb +36 -0
  414. data/rakelib/lib/director/region.rb +5 -1
  415. data/rakelib/lib/director/region_iterator.rb +4 -1
  416. data/rakelib/lib/director/ribbon_art_provider.rb +9 -1
  417. data/rakelib/lib/director/ribbon_bar.rb +4 -1
  418. data/rakelib/lib/director/ribbon_bar_event.rb +4 -1
  419. data/rakelib/lib/director/ribbon_button_bar.rb +4 -1
  420. data/rakelib/lib/director/ribbon_button_bar_event.rb +4 -1
  421. data/rakelib/lib/director/ribbon_ctrl.rb +4 -1
  422. data/rakelib/lib/director/ribbon_gallery.rb +8 -3
  423. data/rakelib/lib/director/ribbon_gallery_event.rb +4 -1
  424. data/rakelib/lib/director/ribbon_page.rb +4 -1
  425. data/rakelib/lib/director/ribbon_panel.rb +4 -1
  426. data/rakelib/lib/director/ribbon_panel_event.rb +4 -1
  427. data/rakelib/lib/director/ribbon_tool_bar.rb +4 -1
  428. data/rakelib/lib/director/ribbon_tool_bar_event.rb +4 -1
  429. data/rakelib/lib/director/richtext_box.rb +61 -0
  430. data/rakelib/lib/director/richtext_buffer.rb +219 -22
  431. data/rakelib/lib/director/richtext_buffer_data_object.rb +4 -1
  432. data/rakelib/lib/director/richtext_composite_object.rb +174 -0
  433. data/rakelib/lib/director/richtext_ctrl.rb +157 -4
  434. data/rakelib/lib/director/richtext_event.rb +4 -1
  435. data/rakelib/lib/director/richtext_file_handler.rb +13 -1
  436. data/rakelib/lib/director/richtext_formatting_dialog.rb +44 -0
  437. data/rakelib/lib/director/richtext_header_footer_data.rb +4 -1
  438. data/rakelib/lib/director/richtext_image.rb +56 -0
  439. data/rakelib/lib/director/richtext_object.rb +272 -0
  440. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +178 -0
  441. data/rakelib/lib/director/richtext_printing.rb +4 -1
  442. data/rakelib/lib/director/richtext_style_listbox.rb +37 -0
  443. data/rakelib/lib/director/richtext_style_organiser_dialog.rb +28 -0
  444. data/rakelib/lib/director/sash_layout_event.rb +4 -1
  445. data/rakelib/lib/director/sash_layout_window.rb +4 -1
  446. data/rakelib/lib/director/sash_window.rb +4 -1
  447. data/rakelib/lib/director/scroll_bar.rb +4 -1
  448. data/rakelib/lib/director/scrolled_t.rb +7 -4
  449. data/rakelib/lib/director/searchctrl.rb +4 -1
  450. data/rakelib/lib/director/sizer.rb +4 -1
  451. data/rakelib/lib/director/sizer_item.rb +9 -3
  452. data/rakelib/lib/director/slider.rb +4 -1
  453. data/rakelib/lib/director/splash_screen.rb +4 -1
  454. data/rakelib/lib/director/splitter_event.rb +4 -1
  455. data/rakelib/lib/director/splitter_window.rb +4 -1
  456. data/rakelib/lib/director/static_bitmap.rb +4 -1
  457. data/rakelib/lib/director/static_box.rb +5 -2
  458. data/rakelib/lib/director/status_bar.rb +5 -1
  459. data/rakelib/lib/director/styled_text_ctrl.rb +14 -2
  460. data/rakelib/lib/director/styled_text_event.rb +4 -1
  461. data/rakelib/lib/director/system_options.rb +4 -1
  462. data/rakelib/lib/director/system_settings.rb +4 -1
  463. data/rakelib/lib/director/task_bar_icon.rb +4 -1
  464. data/rakelib/lib/director/text_attr.rb +5 -2
  465. data/rakelib/lib/director/text_entry.rb +4 -1
  466. data/rakelib/lib/director/text_validator.rb +6 -1
  467. data/rakelib/lib/director/textctrl.rb +32 -3
  468. data/rakelib/lib/director/time_picker_ctrl.rb +4 -1
  469. data/rakelib/lib/director/timer.rb +4 -1
  470. data/rakelib/lib/director/tip_provider.rb +4 -1
  471. data/rakelib/lib/director/toggle_button.rb +4 -1
  472. data/rakelib/lib/director/tool_bar.rb +20 -1
  473. data/rakelib/lib/director/tool_tip.rb +5 -2
  474. data/rakelib/lib/director/top_level_window.rb +58 -51
  475. data/rakelib/lib/director/tree_ctrl.rb +5 -2
  476. data/rakelib/lib/director/tree_event.rb +28 -10
  477. data/rakelib/lib/director/uiaction_simulator.rb +4 -1
  478. data/rakelib/lib/director/utils.rb +9 -1
  479. data/rakelib/lib/director/validator.rb +4 -1
  480. data/rakelib/lib/director/variant.rb +5 -2
  481. data/rakelib/lib/director/vlistbox.rb +4 -1
  482. data/rakelib/lib/director/vscrolled_window.rb +4 -1
  483. data/rakelib/lib/director/window.rb +81 -82
  484. data/rakelib/lib/director/window_disabler.rb +4 -1
  485. data/rakelib/lib/director/with_images.rb +5 -2
  486. data/rakelib/lib/director/wizard_page.rb +4 -1
  487. data/rakelib/lib/director/xml_node.rb +4 -1
  488. data/rakelib/lib/director/xml_resource.rb +4 -1
  489. data/rakelib/lib/director.rb +27 -28
  490. data/rakelib/lib/ext/enum_chain.rb +4 -1
  491. data/rakelib/lib/extractor/class.rb +8 -6
  492. data/rakelib/lib/extractor/enum.rb +15 -2
  493. data/rakelib/lib/extractor/function.rb +12 -4
  494. data/rakelib/lib/extractor/module.rb +4 -1
  495. data/rakelib/lib/extractor/variable.rb +4 -1
  496. data/rakelib/lib/extractor.rb +7 -2
  497. data/rakelib/lib/generate/analyzer.rb +31 -21
  498. data/rakelib/lib/generate/base.rb +4 -1
  499. data/rakelib/lib/generate/doc/grid_cell_attr.yaml +21 -0
  500. data/rakelib/lib/generate/doc/grid_ctrl.yaml +25 -0
  501. data/rakelib/lib/generate/doc/html_cell.yaml +11 -0
  502. data/rakelib/lib/generate/doc/html_help_controller.yaml +23 -0
  503. data/rakelib/lib/generate/doc/html_help_window.yaml +21 -0
  504. data/rakelib/lib/generate/doc/html_window.yaml +47 -0
  505. data/rakelib/lib/generate/doc/pg_editor.yaml +11 -0
  506. data/rakelib/lib/generate/doc/pg_multi_button.yaml +78 -0
  507. data/rakelib/lib/generate/doc/pg_properties.yaml +244 -0
  508. data/rakelib/lib/generate/doc/pg_property.yaml +188 -0
  509. data/rakelib/lib/generate/doc/property_grid.yaml +23 -0
  510. data/rakelib/lib/generate/doc/property_grid_interface.yaml +30 -0
  511. data/rakelib/lib/generate/doc/property_grid_manager.yaml +40 -0
  512. data/rakelib/lib/generate/doc/rich_text_html_handler.yaml +11 -0
  513. data/rakelib/lib/generate/doc/styled_text_ctrl.yaml +18 -0
  514. data/rakelib/lib/generate/doc/symbol_picker_dialog.yaml +40 -0
  515. data/rakelib/lib/generate/doc.rb +19 -3
  516. data/rakelib/lib/generate/interface.rb +79 -110
  517. data/rakelib/lib/generate/rakedep.rb +4 -1
  518. data/rakelib/lib/specs/interfaces.rb +45 -20
  519. data/rakelib/lib/streams.rb +5 -1
  520. data/rakelib/lib/swig_runner.rb +34 -22
  521. data/rakelib/lib/typemap/array_int_selections.rb +4 -1
  522. data/rakelib/lib/typemap/common.rb +57 -2
  523. data/rakelib/lib/typemap/config.rb +55 -0
  524. data/rakelib/lib/typemap/data_format.rb +4 -1
  525. data/rakelib/lib/typemap/data_object_data.rb +4 -1
  526. data/rakelib/lib/typemap/datetime.rb +8 -1
  527. data/rakelib/lib/typemap/grid_client_data.rb +4 -1
  528. data/rakelib/lib/typemap/grid_coords.rb +37 -7
  529. data/rakelib/lib/typemap/html_cell.rb +4 -1
  530. data/rakelib/lib/typemap/io_streams.rb +4 -1
  531. data/rakelib/lib/typemap/pgcell.rb +4 -1
  532. data/rakelib/lib/typemap/pgeditor.rb +4 -1
  533. data/rakelib/lib/typemap/pgprop_arg.rb +4 -1
  534. data/rakelib/lib/typemap/pgproperty.rb +4 -1
  535. data/rakelib/lib/typemap/points_list.rb +4 -1
  536. data/rakelib/lib/typemap/richtext.rb +185 -11
  537. data/rakelib/lib/typemap/tree_itemid.rb +26 -1
  538. data/rakelib/lib/util/string.rb +4 -1
  539. data/rakelib/prepost.rake +4 -1
  540. data/rakelib/prepost.rb +4 -1
  541. data/rakelib/run.rake +4 -1
  542. data/samples/aui/aui.rb +8 -3
  543. data/samples/bigdemo/bigdemo.rb +9 -2
  544. data/samples/bigdemo/run.rb +9 -2
  545. data/samples/bigdemo/utils.rb +9 -1
  546. data/samples/calendar/calendar.rb +9 -4
  547. data/samples/caret/caret.rb +8 -3
  548. data/samples/controls/books.rb +8 -2
  549. data/samples/controls/controls.rb +33 -77
  550. data/samples/controls/get_item_sample.rb +8 -2
  551. data/samples/controls/htlbox.rb +10 -3
  552. data/samples/dialogs/dialogs.rb +9 -4
  553. data/samples/dialogs/wizard.rb +8 -3
  554. data/samples/dragdrop/dragdrop.rb +8 -3
  555. data/samples/drawing/bitmap.rb +8 -3
  556. data/samples/drawing/bitmap_image.rb +8 -3
  557. data/samples/drawing/graphics_drawing.rb +44 -33
  558. data/samples/drawing/image_prt.rb +8 -2
  559. data/samples/drawing/maths_images.rb +8 -3
  560. data/samples/drawing/rmagic_bitmap_image.rb +8 -3
  561. data/samples/etc/choice.rb +8 -3
  562. data/samples/etc/miniframe.rb +8 -3
  563. data/samples/etc/sash.rb +8 -3
  564. data/samples/etc/scrollwin.rb +8 -3
  565. data/samples/etc/system_settings.rb +8 -3
  566. data/samples/event/activation.rb +8 -3
  567. data/samples/event/event.rb +8 -3
  568. data/samples/event/threaded.rb +8 -3
  569. data/samples/event/update_ui_event.rb +8 -3
  570. data/samples/grid/grid.rb +9 -3
  571. data/samples/grid/gridtablebase.rb +8 -3
  572. data/samples/html/html.rb +8 -3
  573. data/samples/mdi/mdi.rb +8 -3
  574. data/samples/minimal/minimal.rb +8 -3
  575. data/samples/minimal/nothing.rb +8 -3
  576. data/samples/printing/printing.rb +8 -3
  577. data/samples/printing/printing2.rb +8 -2
  578. data/samples/propgrid/propgrid.rb +4 -1
  579. data/samples/propgrid/propgrid_minimal.rb +4 -2
  580. data/samples/propgrid/sample_props.rb +4 -1
  581. data/samples/ribbon/ribbon.rb +4 -1
  582. data/samples/sampler/editor.rb +4 -1
  583. data/samples/sampler/ext.rb +4 -1
  584. data/samples/sampler/sample.rb +13 -4
  585. data/samples/sampler/stc_editor.rb +4 -1
  586. data/samples/sampler/txt_editor.rb +4 -1
  587. data/samples/sampler.rb +11 -3
  588. data/samples/splash/splash.rb +4 -2
  589. data/samples/text/art/richtext/alignleft.xpm +24 -0
  590. data/samples/text/art/richtext/alignright.xpm +24 -0
  591. data/samples/text/art/richtext/bold.xpm +24 -0
  592. data/samples/text/art/richtext/centre.xpm +24 -0
  593. data/samples/text/art/richtext/copy.xpm +45 -0
  594. data/samples/text/art/richtext/cut.xpm +47 -0
  595. data/samples/text/art/richtext/font.xpm +25 -0
  596. data/samples/text/art/richtext/idea.xpm +47 -0
  597. data/samples/text/art/richtext/indentless.xpm +25 -0
  598. data/samples/text/art/richtext/indentmore.xpm +25 -0
  599. data/samples/text/art/richtext/italic.xpm +25 -0
  600. data/samples/text/art/richtext/open.xpm +58 -0
  601. data/samples/text/art/richtext/paste.xpm +47 -0
  602. data/samples/text/art/richtext/redo.xpm +59 -0
  603. data/samples/text/art/richtext/save.xpm +43 -0
  604. data/samples/text/art/richtext/smiley.xpm +42 -0
  605. data/samples/text/art/richtext/underline.xpm +25 -0
  606. data/samples/text/art/richtext/undo.xpm +59 -0
  607. data/samples/text/art/richtext/zebra.xpm +409 -0
  608. data/samples/text/rich_textctrl.rb +8 -3
  609. data/samples/text/richtext.rb +1824 -0
  610. data/samples/text/scintilla.rb +8 -3
  611. data/samples/text/textctrl.rb +21 -4
  612. data/samples/text/tn_richtext.png +0 -0
  613. data/samples/text/unicode.rb +9 -4
  614. data/samples/treectrl/treectrl.rb +10 -5
  615. data/samples/xrc/custom_xrc_sample.rb +8 -3
  616. data/samples/xrc/xrc_sample.rb +8 -3
  617. data/tests/art/test_art/bitmap/wxruby-128x128.png +0 -0
  618. data/tests/art/test_art/bitmap/wxruby-256x256.png +0 -0
  619. data/tests/art/test_art/bitmap/wxruby-64x64.png +0 -0
  620. data/tests/lib/item_container_tests.rb +3 -0
  621. data/tests/lib/text_entry_tests.rb +3 -0
  622. data/tests/lib/wxapp_runner.rb +3 -0
  623. data/tests/lib/wxframe_runner.rb +81 -3
  624. data/tests/test_app_event_filter.rb +3 -0
  625. data/tests/test_app_traits.rb +33 -0
  626. data/tests/test_art.rb +22 -0
  627. data/tests/test_art_provider.rb +3 -0
  628. data/tests/test_aui.rb +65 -0
  629. data/tests/test_basic.rb +5 -1
  630. data/tests/test_box_sizer.rb +5 -2
  631. data/tests/test_clipboard.rb +3 -0
  632. data/tests/test_config.rb +150 -0
  633. data/tests/test_dc.rb +3 -0
  634. data/tests/test_dialog.rb +3 -0
  635. data/tests/test_event_handling.rb +3 -0
  636. data/tests/test_events.rb +3 -0
  637. data/tests/test_ext_controls.rb +286 -3
  638. data/tests/test_file_dialog.rb +55 -0
  639. data/tests/test_font.rb +8 -5
  640. data/tests/test_gdi_object.rb +3 -0
  641. data/tests/test_geometry.rb +4 -0
  642. data/tests/test_grid_sizer.rb +7 -4
  643. data/tests/test_intl.rb +3 -0
  644. data/tests/test_item_data.rb +3 -0
  645. data/tests/test_list_ctrl.rb +4 -1
  646. data/tests/test_log.rb +63 -0
  647. data/tests/test_proof_check.rb +52 -0
  648. data/tests/test_richtext.rb +204 -0
  649. data/tests/test_std_controls.rb +45 -35
  650. data/tests/test_timer.rb +3 -0
  651. data/tests/test_variant.rb +3 -0
  652. data/tests/test_window.rb +10 -8
  653. data/tests/testapp.rb +4 -0
  654. data/tests/testapp_noframe.rb +4 -0
  655. metadata +89 -3
  656. data/rakelib/lib/director/html_help_frame.rb +0 -25
@@ -0,0 +1,44 @@
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 './dialog'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class RichTextFormattingDialog < Dialog
16
+
17
+ include Typemap::RichText
18
+
19
+ def setup
20
+ super
21
+ spec.items << 'wxRichTextFormattingDialogFactory'
22
+ spec.add_header_code 'extern VALUE wxRuby_RichTextStyleDefinition2Ruby(const wxRichTextStyleDefinition *wx_rtsd, int own);'
23
+ spec.no_proxy %w[
24
+ wxRichTextFormattingDialog::GetStyleDefinition
25
+ wxRichTextFormattingDialog::GetStyleSheet
26
+ wxRichTextFormattingDialog::GetStyle
27
+ wxRichTextFormattingDialog::SetStyle
28
+ wxRichTextFormattingDialog::SetStyleDefinition
29
+ ]
30
+ # add undocumented methods
31
+ spec.extend_interface 'wxRichTextFormattingDialog',
32
+ 'wxRichTextObject* GetObject() const',
33
+ 'void SetObject(wxRichTextObject* obj)',
34
+ 'virtual bool ApplyStyle(wxRichTextCtrl* ctrl, int flags = wxRICHTEXT_SETSTYLE_WITH_UNDO)'
35
+ spec.add_header_code 'extern VALUE wxRuby_RichTextObject2Ruby(const wxRichTextObject *wx_rto, int own);'
36
+ spec.disown 'wxRichTextFormattingDialogFactory *factory'
37
+ spec.suppress_warning(473, 'wxRichTextFormattingDialogFactory::CreatePage')
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  module WXRuby3
@@ -0,0 +1,56 @@
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 './richtext_object'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class RichTextImage < RichTextObject
16
+
17
+ include Typemap::RichText
18
+ include Typemap::IOStreams
19
+
20
+ def setup
21
+ super
22
+ spec.items << 'wxRichTextImageBlock'
23
+ spec.no_proxy 'wxRichTextImageBlock'
24
+ spec.ignore 'wxRichTextImageBlock::ReadBlock',
25
+ 'wxRichTextImageBlock::WriteBlock'
26
+ # for SetData & GetData
27
+ spec.map 'unsigned char *' => 'String' do
28
+
29
+ map_in temp: 'std::unique_ptr<unsigned char[]> buf', code: <<~__CODE
30
+ if (TYPE($input) == T_STRING)
31
+ {
32
+ int data_len = RSTRING_LEN($input);
33
+ buf = std::make_unique<unsigned char[]> (data_len);
34
+ memcpy(buf.get(), StringValuePtr($input), data_len);
35
+ $1 = buf.release();
36
+ }
37
+ else
38
+ {
39
+ rb_raise(rb_eArgError, "Expected a String for %d", $argnum-1);
40
+ }
41
+ __CODE
42
+
43
+ map_out code: <<~__CODE
44
+ size_t data_len = arg1->GetDataSize();
45
+ $result = rb_str_new( (const char*)$1, data_len);
46
+ __CODE
47
+ end
48
+ spec.map_apply 'bool * OUTPUT' => 'bool & changed'
49
+ spec.do_not_generate(:typedefs, :variables, :enums, :defines, :functions)
50
+ end
51
+
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,272 @@
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
+ module WXRuby3
10
+
11
+ class Director
12
+
13
+ class RichTextObject < Director
14
+
15
+ include Typemap::RichText
16
+
17
+ def setup
18
+ super
19
+ spec.swig_import 'swig/classes/include/wxTextAttr.h'
20
+ if spec.module_name == 'wxRichTextObject'
21
+ spec.items.concat %w[
22
+ wxRichTextPlainText
23
+ wxRichTextDrawingContext
24
+ wxRichTextAttr
25
+ wxTextBoxAttr
26
+ wxTextAttrDimension
27
+ wxTextAttrDimensions
28
+ wxTextAttrShadow
29
+ wxTextAttrBorder
30
+ wxTextAttrBorders
31
+ wxTextAttrSize
32
+ wxRichTextSelection
33
+ wxRichTextProperties
34
+ ]
35
+ spec.disable_proxies
36
+ spec.gc_as_untracked 'wxRichTextObject',
37
+ 'wxRichTextPlainText'
38
+ spec.add_swig_code '%feature("freefunc") wxRichTextObject "GC_RichTextObjectFreeFunc";'
39
+ spec.gc_as_untracked 'wxRichTextDrawingContext',
40
+ 'wxRichTextAttr',
41
+ 'wxTextBoxAttr',
42
+ 'wxTextAttrDimension',
43
+ 'wxTextAttrDimensions',
44
+ 'wxTextAttrShadow',
45
+ 'wxTextAttrBorder',
46
+ 'wxTextAttrBorders',
47
+ 'wxTextAttrSize',
48
+ 'wxRichTextSelection',
49
+ 'wxRichTextProperties'
50
+ spec.add_header_code <<~__HEREDOC
51
+ extern void GC_RichTextObjectFreeFunc(void* ptr)
52
+ {
53
+ SWIG_RubyRemoveTracking(ptr);
54
+ if (ptr)
55
+ {
56
+ #ifdef __WXRB_DEBUG__
57
+ if (wxRuby_TraceLevel()>1)
58
+ std::wcout << "GC_RichTextObjectFreeFunc(" << ptr << ")" << std::endl;
59
+ #endif
60
+ ((wxRichTextObject*)ptr)->Dereference();
61
+ }
62
+ }
63
+ __HEREDOC
64
+ spec.make_abstract 'wxRichTextObject'
65
+ spec.add_header_code <<~__HEREDOC
66
+ extern VALUE wxRuby_RichTextObject2Ruby(const wxRichTextObject *wx_rto, int own)
67
+ {
68
+ // If no object was passed to be wrapped.
69
+ if ( ! wx_rto )
70
+ return Qnil;
71
+
72
+ // Get the wx class and the ruby class we are converting into
73
+ wxString class_name( wx_rto->GetClassInfo()->GetClassName() );
74
+ wxCharBuffer wx_classname = class_name.mb_str();
75
+ VALUE r_class_name = rb_intern(wx_classname.data () + 2);
76
+ VALUE r_class = Qnil;
77
+
78
+ if ( class_name.Len() > 2 )
79
+ {
80
+ // lookup the class in the RichText module
81
+ if (rb_const_defined(mWxRTC, r_class_name))
82
+ r_class = rb_const_get(mWxRTC, r_class_name);
83
+ }
84
+
85
+ // Handle classes (currently) unknown in wxRuby.
86
+ if ( NIL_P(r_class) )
87
+ {
88
+ rb_warn("Error wrapping object; class '%s' is not (yet) supported in wxRuby",
89
+ (const char *)class_name.mb_str());
90
+ return Qnil;
91
+ }
92
+
93
+ // Otherwise, retrieve the swig type info for this class and wrap it
94
+ // in Ruby. wxRuby_GetSwigTypeForClass is defined in wx.i
95
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
96
+ VALUE rb_rto = SWIG_NewPointerObj(const_cast<wxRichTextObject*> (wx_rto), swig_type, own);
97
+ return rb_rto;
98
+ }
99
+ __HEREDOC
100
+ spec.ignore(%w[wxRICHTEXT_ALL wxRICHTEXT_NONE wxRICHTEXT_NO_SELECTION])
101
+ # special typemap for const wxChar wxRichTextLineBreakChar;
102
+ spec.add_swig_code <<~__HEREDOC
103
+ %typemap(constcode,noblock=1) const wxChar {
104
+ %set_constant("$symname", rb_str_new2((const char *)wxString($value).utf8_str()));
105
+ }
106
+ __HEREDOC
107
+ spec.new_object 'wxRichTextObject::DoSplit',
108
+ 'wxRichTextObject::Clone'
109
+ # for wxRichTextObject::GetRangeSize
110
+ spec.map 'int & descent', as: 'Integer' do
111
+
112
+ map_in temp: 'int tmp', code: 'tmp = NUM2INT($input); $1 = &tmp;'
113
+
114
+ map_argout code: '$result = SWIG_Ruby_AppendOutput($result, INT2NUM(tmp$argnum));'
115
+
116
+ map_directorin code: '$input = INT2NUM($1);'
117
+
118
+ map_directorargout code: <<~__CODE
119
+ if(output != Qnil)
120
+ {
121
+ $1 = NUM2INT(output);
122
+ }
123
+ else
124
+ {
125
+ $1 = 0;
126
+ }
127
+ __CODE
128
+
129
+ end
130
+ spec.map_apply 'int * OUTPUT' => ['int * height',
131
+ 'int &leftMargin', 'int &rightMargin', 'int &topMargin', 'int &bottomMargin']
132
+ spec.map 'wxTextOutputStream &' => 'IO,Wx::OutputStream' do
133
+
134
+ add_header_code <<~__CODE
135
+ WXRUBY_EXPORT bool wxRuby_IsOutputStream(VALUE);
136
+ WXRUBY_EXPORT bool wxRuby_IsCompatibleOutput(VALUE rbos);
137
+ WXRUBY_EXPORT wxOutputStream* wxRuby_RubyToOutputStream(VALUE);
138
+ WXRUBY_EXPORT VALUE wxRuby_RubyFromOutputStream(wxOutputStream&);
139
+
140
+ // Allows a ruby IO-like object to be used as a wxOutputStream
141
+ class WXRUBY_EXPORT wxRubyOutputStream : public wxOutputStream
142
+ {
143
+ public:
144
+ // Initialize with the writeable ruby IO-like object
145
+ wxRubyOutputStream(VALUE rb_io);
146
+ virtual ~wxRubyOutputStream();
147
+
148
+ wxFileOffset GetLength() const wxOVERRIDE;
149
+
150
+ void Sync() wxOVERRIDE;
151
+ bool Close() wxOVERRIDE;
152
+ bool Ok() const { return IsOk(); }
153
+ bool IsOk() const wxOVERRIDE;
154
+ bool IsSeekable() const wxOVERRIDE;
155
+
156
+ VALUE GetRubyIO () { return m_rbio; }
157
+
158
+ protected:
159
+ size_t OnSysWrite(const void *buffer, size_t size) wxOVERRIDE;
160
+ wxFileOffset OnSysSeek(wxFileOffset seek, wxSeekMode mode) wxOVERRIDE;
161
+ wxFileOffset OnSysTell() const wxOVERRIDE;
162
+
163
+ VALUE m_rbio; // Wrapped ruby object
164
+ bool m_isIO;
165
+ bool m_isSeekable;
166
+ };
167
+ __CODE
168
+
169
+ map_in temp: 'std::unique_ptr<wxRubyOutputStream> tmp_ros, std::unique_ptr<wxTextOutputStream> tmp_tos',
170
+ code: <<~__CODE
171
+ if (wxRuby_IsCompatibleOutput($input))
172
+ {
173
+ tmp_ros = std::make_unique<wxRubyOutputStream>($input);
174
+ tmp_tos = std::make_unique<wxTextOutputStream>(*tmp_ros.get());
175
+ $1 = tmp_tos.get();
176
+ }
177
+ else
178
+ {
179
+ wxOutputStream* wx_os = wxRuby_RubyToOutputStream($input);
180
+ if (!wx_os)
181
+ {
182
+ rb_raise(rb_eArgError, "Invalid value for %d expected IO(-like) or Wx::OutputStream", $argnum-1);
183
+ }
184
+ tmp_tos = std::make_unique<wxTextOutputStream>(*wx_os);
185
+ $1 = tmp_tos.get();
186
+ }
187
+ __CODE
188
+ end
189
+ spec.map 'wxRichTextAttrArray & attributes' => 'Array' do
190
+
191
+ map_in temp: 'wxRichTextAttrArray arr, VALUE rb_arr', code: <<~__CODE
192
+ if (TYPE($input) == T_ARRAY)
193
+ {
194
+ $1 = &arr;
195
+ rb_arr = $input;
196
+ }
197
+ else
198
+ {
199
+ rb_raise(rb_eArgError, "Expected an Array for %d", $argnum-1);
200
+ }
201
+ __CODE
202
+
203
+ map_argout by_ref: true, code: <<~__CODE
204
+ for (size_t i=0; i<arr$argnum.GetCount() ;++i)
205
+ {
206
+ wxRichTextAttr* wx_rta = new wxRichTextAttr(arr$argnum.Item(i));
207
+ rb_ary_push(rb_arr$argnum, SWIG_NewPointerObj(SWIG_as_voidptr(wx_rta), SWIGTYPE_p_wxRichTextAttr, SWIG_POINTER_OWN));
208
+ }
209
+ __CODE
210
+
211
+ end
212
+ spec.ignore 'wxRichTextSelection::operator[]'
213
+ spec.ignore 'wxRichTextProperties::SetProperty(const wxString &,const wxChar *)',
214
+ 'wxRichTextProperties::operator[]'
215
+ spec.map 'const wxRichTextVariantArray &' => 'Array<Wx::Variant>' do
216
+ map_in temp: 'wxRichTextVariantArray tmp', code: <<~__CODE
217
+ if (($input == Qnil) || (TYPE($input) != T_ARRAY))
218
+ {
219
+ rb_raise(rb_eArgError, "Expected an Array of Wx::Variant for %d", $argnum-1);
220
+ }
221
+ else
222
+ {
223
+ for (int i = 0; i < RARRAY_LEN($input); ++i)
224
+ {
225
+ void *ptr;
226
+ VALUE var = rb_ary_entry($input, i);
227
+ int res = SWIG_ConvertPtr(var, &ptr, SWIGTYPE_p_wxVariant, 0 );
228
+ if (!SWIG_IsOK(res)) {
229
+ rb_raise(rb_eArgError, "Expected an Array of Wx::Variant for %d", $argnum-1);
230
+ }
231
+ tmp.Add(*static_cast<wxVariant*>(ptr));
232
+ }
233
+ $1 = &tmp;
234
+ }
235
+ __CODE
236
+ map_out code: <<~__CODE
237
+ $result = rb_ary_new();
238
+ for (size_t i = 0; i < $1->Count(); ++i)
239
+ {
240
+ wxVariant *var = &(*$1)[i];
241
+ rb_ary_push($result, SWIG_NewPointerObj(SWIG_as_voidptr(var), SWIGTYPE_p_wxVariant, 0));
242
+ }
243
+ __CODE
244
+ map_typecheck precedence: 'OBJECT_ARRAY', code: '$1 = TYPE($input) == T_ARRAY;'
245
+ end
246
+ spec.do_not_generate(:functions)
247
+ else
248
+ spec.add_header_code 'extern VALUE wxRuby_RichTextObject2Ruby(const wxRichTextObject *wx_rto, int own);'
249
+ end
250
+ end
251
+
252
+ def process(gendoc: false)
253
+ defmod = super
254
+ unless spec.module_name == 'wxRichTextObject'
255
+ spec.add_header_code 'extern void GC_RichTextObjectFreeFunc(void* ptr);'
256
+ spec.items.each do |citem|
257
+ def_item = defmod.find_item(citem)
258
+ if Extractor::ClassDef === def_item && def_item.is_derived_from?('wxRichTextObject')
259
+ spec.no_proxy def_item.name
260
+ spec.gc_as_untracked def_item.name
261
+ spec.add_swig_code %Q{%feature("freefunc") #{def_item.name} "GC_RichTextObjectFreeFunc";}
262
+ end
263
+ end
264
+ end
265
+ defmod
266
+ end
267
+
268
+ end
269
+
270
+ end
271
+
272
+ end
@@ -0,0 +1,178 @@
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 './richtext_composite_object'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class RichTextParagraphLayoutBox < RichTextCompositeObject
16
+
17
+ include Typemap::RichText
18
+
19
+ def setup
20
+ super
21
+ if spec.module_name == 'wxRichTextParagraphLayoutBox'
22
+ spec.items << 'wxRichTextField' <<
23
+ 'wxRichTextStyleSheet' <<
24
+ 'wxRichTextStyleDefinition' <<
25
+ 'wxRichTextCharacterStyleDefinition' <<
26
+ 'wxRichTextParagraphStyleDefinition' <<
27
+ 'wxRichTextListStyleDefinition'
28
+ spec.no_proxy 'wxRichTextStyleSheet',
29
+ 'wxRichTextStyleDefinition',
30
+ 'wxRichTextCharacterStyleDefinition',
31
+ 'wxRichTextParagraphStyleDefinition',
32
+ 'wxRichTextListStyleDefinition'
33
+ spec.make_abstract 'wxRichTextStyleDefinition'
34
+ spec.make_concrete 'wxRichTextCharacterStyleDefinition'
35
+ spec.make_concrete 'wxRichTextParagraphStyleDefinition'
36
+ spec.make_concrete 'wxRichTextListStyleDefinition'
37
+ # documented declarations are incorrect
38
+ spec.ignore 'wxRichTextStyleDefinition::GetStyle'
39
+ spec.extend_interface 'wxRichTextStyleDefinition',
40
+ 'const wxRichTextAttr& GetStyle() const'
41
+ # missing from docs
42
+ spec.extend_interface 'wxRichTextStyleDefinition',
43
+ 'virtual wxRichTextStyleDefinition* Clone() const = 0'
44
+ spec.new_object 'wxRichTextStyleDefinition::Clone'
45
+ spec.add_header_code <<~__HEREDOC
46
+ static void wxRuby_MakeRichTextStyleDefinitionOwned(VALUE rb_rtsd)
47
+ {
48
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(CLASS_OF(rb_rtsd));
49
+ RDATA(rb_rtsd)->dfree = ((swig_class *) swig_type->clientdata)->destroy; // make sure Ruby owns
50
+ }
51
+
52
+ extern VALUE wxRuby_RichTextStyleDefinition2Ruby(const wxRichTextStyleDefinition *wx_rtsd, int own)
53
+ {
54
+ // If no object was passed to be wrapped.
55
+ if ( ! wx_rtsd )
56
+ return Qnil;
57
+
58
+ // Get the wx class and the ruby class we are converting into
59
+ wxString class_name( wx_rtsd->GetClassInfo()->GetClassName() );
60
+ wxCharBuffer wx_classname = class_name.mb_str();
61
+ VALUE r_class_name = rb_intern(wx_classname.data () + 2);
62
+ VALUE r_class = Qnil;
63
+
64
+ if ( class_name.Len() > 2 )
65
+ {
66
+ // lookup the class in the RichText module
67
+ if (rb_const_defined(mWxRTC, r_class_name))
68
+ r_class = rb_const_get(mWxRTC, r_class_name);
69
+ }
70
+
71
+ // Handle classes (currently) unknown in wxRuby.
72
+ if ( NIL_P(r_class) )
73
+ {
74
+ rb_warn("Error wrapping object; class '%s' is not (yet) supported in wxRuby",
75
+ (const char *)class_name.mb_str());
76
+ return Qnil;
77
+ }
78
+
79
+ // Otherwise, retrieve the swig type info for this class and wrap it
80
+ // in Ruby. wxRuby_GetSwigTypeForClass is defined in wx.i
81
+ swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
82
+ VALUE rb_rtsd = SWIG_NewPointerObj(const_cast<wxRichTextStyleDefinition*> (wx_rtsd), swig_type, own);
83
+ return rb_rtsd;
84
+ }
85
+ __HEREDOC
86
+ # add undocumented convenience method
87
+ spec.extend_interface 'wxRichTextListStyleDefinition',
88
+ 'void SetAttributes(int i, int leftIndent, int leftSubIndent, int bulletStyle, const wxString& bulletSymbol = wxEmptyString)'
89
+ # undocumented methods
90
+ spec.extend_interface 'wxRichTextStyleSheet',
91
+ 'wxRichTextStyleSheet(const wxRichTextStyleSheet& sheet)',
92
+ 'void Copy(const wxRichTextStyleSheet& sheet)'
93
+ # redefine these since we need to be able to selectively specify 'disown'
94
+ spec.ignore 'wxRichTextStyleSheet::AddCharacterStyle',
95
+ 'wxRichTextStyleSheet::AddListStyle',
96
+ 'wxRichTextStyleSheet::AddParagraphStyle',
97
+ 'wxRichTextStyleSheet::AddStyle', ignore_doc: false
98
+ spec.extend_interface 'wxRichTextStyleSheet',
99
+ 'bool AddCharacterStyle(wxRichTextCharacterStyleDefinition *def_disown)',
100
+ 'bool AddListStyle(wxRichTextListStyleDefinition *def_disown)',
101
+ 'bool AddParagraphStyle(wxRichTextParagraphStyleDefinition *def_disown)',
102
+ 'bool AddStyle(wxRichTextStyleDefinition *def_disown)'
103
+ spec.disown 'wxRichTextCharacterStyleDefinition *def_disown',
104
+ 'wxRichTextListStyleDefinition *def_disown',
105
+ 'wxRichTextParagraphStyleDefinition *def_disown',
106
+ 'wxRichTextStyleDefinition *def_disown'
107
+ # The RemoveXXX methods need custom wrapper as we need to re-own any style defs that
108
+ # are removed but NOT deleted
109
+ spec.ignore 'wxRichTextStyleSheet::RemoveCharacterStyle',
110
+ 'wxRichTextStyleSheet::RemoveListStyle',
111
+ 'wxRichTextStyleSheet::RemoveParagraphStyle',
112
+ 'wxRichTextStyleSheet::RemoveStyle', ignore_doc: false
113
+ spec.add_extend_code 'wxRichTextStyleSheet', <<~__HEREDOC
114
+ bool remove_character_style(wxRichTextStyleDefinition *def, bool deleteStyle=false)
115
+ {
116
+ bool rc = $self->RemoveCharacterStyle(def, deleteStyle);
117
+ if (rc && !deleteStyle)
118
+ {
119
+ VALUE rb_rtsd = SWIG_RubyInstanceFor(const_cast<wxRichTextStyleDefinition*> (def));
120
+ if (rb_rtsd && !NIL_P(rb_rtsd)) // should always be true
121
+ {
122
+ wxRuby_MakeRichTextStyleDefinitionOwned(rb_rtsd);
123
+ }
124
+ }
125
+ return rc;
126
+ }
127
+
128
+ bool remove_list_style(wxRichTextStyleDefinition *def, bool deleteStyle=false)
129
+ {
130
+ bool rc = $self->RemoveListStyle(def, deleteStyle);
131
+ if (rc && !deleteStyle)
132
+ {
133
+ VALUE rb_rtsd = SWIG_RubyInstanceFor(const_cast<wxRichTextStyleDefinition*> (def));
134
+ if (rb_rtsd && !NIL_P(rb_rtsd)) // should always be true
135
+ {
136
+ wxRuby_MakeRichTextStyleDefinitionOwned(rb_rtsd);
137
+ }
138
+ }
139
+ return rc;
140
+ }
141
+
142
+ bool remove_paragraph_style(wxRichTextStyleDefinition *def, bool deleteStyle=false)
143
+ {
144
+ bool rc = $self->RemoveParagraphStyle(def, deleteStyle);
145
+ if (rc && !deleteStyle)
146
+ {
147
+ VALUE rb_rtsd = SWIG_RubyInstanceFor(const_cast<wxRichTextStyleDefinition*> (def));
148
+ if (rb_rtsd && !NIL_P(rb_rtsd)) // should always be true
149
+ {
150
+ wxRuby_MakeRichTextStyleDefinitionOwned(rb_rtsd);
151
+ }
152
+ }
153
+ return rc;
154
+ }
155
+
156
+ bool remove_style(wxRichTextStyleDefinition *def, bool deleteStyle=false)
157
+ {
158
+ bool rc = $self->RemoveStyle(def, deleteStyle);
159
+ if (rc && !deleteStyle)
160
+ {
161
+ VALUE rb_rtsd = SWIG_RubyInstanceFor(const_cast<wxRichTextStyleDefinition*> (def));
162
+ if (rb_rtsd && !NIL_P(rb_rtsd)) // should always be true
163
+ {
164
+ wxRuby_MakeRichTextStyleDefinitionOwned(rb_rtsd);
165
+ }
166
+ }
167
+ return rc;
168
+ }
169
+ __HEREDOC
170
+ spec.do_not_generate(:typedefs, :variables, :enums, :defines, :functions)
171
+ end
172
+ end
173
+
174
+ end
175
+
176
+ end
177
+
178
+ end
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  module WXRuby3
@@ -0,0 +1,37 @@
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 RichTextStyleListBox < Window
16
+
17
+ include Typemap::RichText
18
+
19
+ def setup
20
+ super
21
+ spec.items << 'wxRichTextStyleListCtrl' << 'wxRichTextStyleComboCtrl'
22
+ spec.include 'wx/odcombo.h'
23
+ spec.add_header_code 'extern VALUE wxRuby_RichTextStyleDefinition2Ruby(const wxRichTextStyleDefinition *wx_rtsd, int own);'
24
+ spec.override_inheritance_chain('wxRichTextStyleListBox', %w[wxHtmlListBox wxVListBox wxVScrolledWindow wxPanel wxWindow wxEvtHandler wxObject])
25
+ spec.override_inheritance_chain('wxRichTextStyleComboCtrl',
26
+ %w[wxComboCtrl
27
+ wxControl
28
+ wxWindow
29
+ wxEvtHandler
30
+ wxObject])
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,28 @@
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 './dialog'
10
+
11
+ module WXRuby3
12
+
13
+ class Director
14
+
15
+ class RichTextStyleOrganiserDialog < Dialog
16
+
17
+ include Typemap::RichText
18
+
19
+ def setup
20
+ super
21
+ spec.add_header_code 'extern VALUE wxRuby_RichTextStyleDefinition2Ruby(const wxRichTextStyleDefinition *wx_rtsd, int own);'
22
+ end
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  require_relative './event'
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  require_relative './window'
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  require_relative './window'
@@ -1,6 +1,9 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
1
5
  ###
2
6
  # wxRuby3 wxWidgets interface director
3
- # Copyright (c) M.J.N. Corino, The Netherlands
4
7
  ###
5
8
 
6
9
  require_relative './window'