wxruby3 1.6.1 → 1.8.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 (642) hide show
  1. checksums.yaml +4 -4
  2. data/CREDITS.md +32 -25
  3. data/INSTALL.md +46 -6
  4. data/README.md +17 -17
  5. data/assets/repo-social-preview.odg +0 -0
  6. data/assets/repo-social-preview.xcf +0 -0
  7. data/ext/wxruby3/include/wxRubyApp.h +203 -91
  8. data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
  9. data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
  10. data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
  11. data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
  12. data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
  13. data/ext/wxruby3/include/wxruby-runtime.h +107 -1
  14. data/ext/wxruby3/swig/common.i +2 -2
  15. data/ext/wxruby3/swig/custom/director.swg +2 -2
  16. data/ext/wxruby3/swig/custom/rubyprimtypes.swg +59 -15
  17. data/ext/wxruby3/swig/custom/rubyrun.swg +4 -0
  18. data/ext/wxruby3/swig/custom/rubytracking.swg +9 -19
  19. data/ext/wxruby3/swig/custom/swiglabels.swg +129 -0
  20. data/ext/wxruby3/swig/custom/swigrun.swg +15 -0
  21. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +20 -0
  22. data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
  23. data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
  24. data/ext/wxruby3/swig/mark_free_impl.i +83 -144
  25. data/ext/wxruby3/swig/memory_management.i +8 -43
  26. data/ext/wxruby3/swig/wx.i +88 -86
  27. data/lib/wx/aui/events/evt_list.rb +148 -0
  28. data/lib/wx/aui/require.rb +0 -1
  29. data/lib/wx/core/calendar_ctrl.rb +15 -0
  30. data/lib/wx/core/clipboard.rb +9 -13
  31. data/lib/wx/core/config.rb +1 -1
  32. data/lib/wx/core/const.rb +0 -1
  33. data/lib/wx/core/context_help.rb +17 -0
  34. data/lib/wx/core/cursor.rb +1 -0
  35. data/lib/wx/core/events/evt_list.rb +1458 -0
  36. data/lib/wx/core/font/encoding.rb +113 -0
  37. data/lib/wx/core/generic_validator.rb +83 -31
  38. data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
  39. data/lib/wx/core/mbconv.rb +11 -0
  40. data/lib/wx/core/media_ctrl.rb +31 -0
  41. data/lib/wx/core/tipwindow.rb +16 -0
  42. data/lib/wx/core/top_level_window.rb +7 -0
  43. data/lib/wx/core.rb +6 -0
  44. data/lib/wx/doc/art_provider.rb +17 -0
  45. data/lib/wx/doc/aui/auitabctrl.rb +35 -0
  46. data/lib/wx/doc/config.rb +2 -2
  47. data/lib/wx/doc/context_help.rb +42 -0
  48. data/lib/wx/doc/core.rb +0 -5
  49. data/lib/wx/doc/functions.rb +11 -1
  50. data/lib/wx/doc/gen/about_dialog_info.rb +330 -0
  51. data/lib/wx/doc/gen/accelerator.rb +178 -0
  52. data/lib/wx/doc/gen/activity_indicator.rb +83 -0
  53. data/lib/wx/doc/gen/affine_matrix2d.rb +286 -0
  54. data/lib/wx/doc/gen/animation.rb +275 -0
  55. data/lib/wx/doc/gen/animation_ctrl.rb +300 -0
  56. data/lib/wx/doc/gen/any_button.rb +191 -0
  57. data/lib/wx/doc/gen/app.rb +463 -0
  58. data/lib/wx/doc/gen/app_traits.rb +396 -0
  59. data/lib/wx/doc/gen/art_provider.rb +617 -0
  60. data/lib/wx/doc/gen/aui/aui_dock_art.rb +455 -0
  61. data/lib/wx/doc/gen/aui/aui_floating_frame.rb +54 -0
  62. data/lib/wx/doc/gen/aui/aui_manager.rb +847 -0
  63. data/lib/wx/doc/gen/aui/aui_manager_event.rb +131 -0
  64. data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +180 -0
  65. data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +59 -0
  66. data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +130 -0
  67. data/lib/wx/doc/gen/aui/aui_notebook.rb +631 -0
  68. data/lib/wx/doc/gen/aui/aui_notebook_event.rb +233 -0
  69. data/lib/wx/doc/gen/aui/aui_pane_info.rb +769 -0
  70. data/lib/wx/doc/gen/aui/aui_tab_art.rb +352 -0
  71. data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +14 -0
  72. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +510 -0
  73. data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +340 -0
  74. data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +244 -0
  75. data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +257 -0
  76. data/lib/wx/doc/gen/aui/event_list.rb +179 -0
  77. data/lib/wx/doc/gen/banner_window.rb +124 -0
  78. data/lib/wx/doc/gen/bitmap.rb +731 -0
  79. data/lib/wx/doc/gen/bitmap_button.rb +123 -0
  80. data/lib/wx/doc/gen/bitmap_combo_box.rb +221 -0
  81. data/lib/wx/doc/gen/book_ctrl_base.rb +274 -0
  82. data/lib/wx/doc/gen/book_ctrl_event.rb +66 -0
  83. data/lib/wx/doc/gen/box_sizer.rb +85 -0
  84. data/lib/wx/doc/gen/brush.rb +251 -0
  85. data/lib/wx/doc/gen/busy_info.rb +157 -0
  86. data/lib/wx/doc/gen/button.rb +182 -0
  87. data/lib/wx/doc/gen/calculate_layout_event.rb +62 -0
  88. data/lib/wx/doc/gen/calendar_ctrl.rb +505 -0
  89. data/lib/wx/doc/gen/calendar_date_attr.rb +138 -0
  90. data/lib/wx/doc/gen/calendar_event.rb +147 -0
  91. data/lib/wx/doc/gen/caret.rb +97 -0
  92. data/lib/wx/doc/gen/check_box.rb +175 -0
  93. data/lib/wx/doc/gen/check_list_box.rb +121 -0
  94. data/lib/wx/doc/gen/choice.rb +175 -0
  95. data/lib/wx/doc/gen/choicebook.rb +116 -0
  96. data/lib/wx/doc/gen/client_dc.rb +43 -0
  97. data/lib/wx/doc/gen/clipboard.rb +144 -0
  98. data/lib/wx/doc/gen/collapsible_pane.rb +138 -0
  99. data/lib/wx/doc/gen/collapsible_pane_event.rb +46 -0
  100. data/lib/wx/doc/gen/colour.rb +333 -0
  101. data/lib/wx/doc/gen/colour_dialog.rb +190 -0
  102. data/lib/wx/doc/gen/colour_picker_ctrl.rb +110 -0
  103. data/lib/wx/doc/gen/colour_picker_event.rb +77 -0
  104. data/lib/wx/doc/gen/combo_box.rb +292 -0
  105. data/lib/wx/doc/gen/combo_ctrl.rb +662 -0
  106. data/lib/wx/doc/gen/command_link_button.rb +134 -0
  107. data/lib/wx/doc/gen/config_base.rb +10 -0
  108. data/lib/wx/doc/gen/context_help_button.rb +56 -0
  109. data/lib/wx/doc/gen/control.rb +277 -0
  110. data/lib/wx/doc/gen/control_with_items.rb +253 -0
  111. data/lib/wx/doc/gen/core.rb +45 -0
  112. data/lib/wx/doc/gen/credential_entry_dialog.rb +137 -0
  113. data/lib/wx/doc/gen/cursor.rb +193 -0
  114. data/lib/wx/doc/gen/data_format.rb +85 -0
  115. data/lib/wx/doc/gen/data_object.rb +436 -0
  116. data/lib/wx/doc/gen/data_object_simple_base.rb +10 -0
  117. data/lib/wx/doc/gen/date_event.rb +49 -0
  118. data/lib/wx/doc/gen/date_picker_ctrl.rb +161 -0
  119. data/lib/wx/doc/gen/dc.rb +1631 -0
  120. data/lib/wx/doc/gen/dc_overlay.rb +102 -0
  121. data/lib/wx/doc/gen/defs.rb +2802 -0
  122. data/lib/wx/doc/gen/dial_up_event.rb +45 -0
  123. data/lib/wx/doc/gen/dial_up_manager.rb +149 -0
  124. data/lib/wx/doc/gen/dialog.rb +541 -0
  125. data/lib/wx/doc/gen/dir_dialog.rb +164 -0
  126. data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +90 -0
  127. data/lib/wx/doc/gen/dir_picker_ctrl.rb +125 -0
  128. data/lib/wx/doc/gen/display.rb +238 -0
  129. data/lib/wx/doc/gen/drag_drop.rb +299 -0
  130. data/lib/wx/doc/gen/drag_image.rb +116 -0
  131. data/lib/wx/doc/gen/editable_list_box.rb +109 -0
  132. data/lib/wx/doc/gen/event.rb +990 -0
  133. data/lib/wx/doc/gen/event_blocker.rb +50 -0
  134. data/lib/wx/doc/gen/event_filter.rb +92 -0
  135. data/lib/wx/doc/gen/event_list.rb +1644 -0
  136. data/lib/wx/doc/gen/events.rb +2809 -0
  137. data/lib/wx/doc/gen/evt_handler.rb +229 -0
  138. data/lib/wx/doc/gen/ext_help_controller.rb +155 -0
  139. data/lib/wx/doc/gen/file_ctrl.rb +231 -0
  140. data/lib/wx/doc/gen/file_ctrl_event.rb +83 -0
  141. data/lib/wx/doc/gen/file_dialog.rb +353 -0
  142. data/lib/wx/doc/gen/file_dialog_custom_control.rb +165 -0
  143. data/lib/wx/doc/gen/file_dialog_customize_hook.rb +158 -0
  144. data/lib/wx/doc/gen/file_dir_picker_event.rb +100 -0
  145. data/lib/wx/doc/gen/file_picker_ctrl.rb +132 -0
  146. data/lib/wx/doc/gen/file_system.rb +232 -0
  147. data/lib/wx/doc/gen/find_dialog_event.rb +126 -0
  148. data/lib/wx/doc/gen/find_replace_data.rb +60 -0
  149. data/lib/wx/doc/gen/find_replace_dialog.rb +58 -0
  150. data/lib/wx/doc/gen/flex_grid_sizer.rb +199 -0
  151. data/lib/wx/doc/gen/font.rb +1379 -0
  152. data/lib/wx/doc/gen/font_data.rb +151 -0
  153. data/lib/wx/doc/gen/font_dialog.rb +88 -0
  154. data/lib/wx/doc/gen/font_picker_ctrl.rb +143 -0
  155. data/lib/wx/doc/gen/font_picker_event.rb +65 -0
  156. data/lib/wx/doc/gen/frame.rb +352 -0
  157. data/lib/wx/doc/gen/fs_file.rb +337 -0
  158. data/lib/wx/doc/gen/functions.rb +10 -0
  159. data/lib/wx/doc/gen/gauge.rb +157 -0
  160. data/lib/wx/doc/gen/gb_sizer_item.rb +68 -0
  161. data/lib/wx/doc/gen/gcdc.rb +46 -0
  162. data/lib/wx/doc/gen/gdi_common.rb +1271 -0
  163. data/lib/wx/doc/gen/gdi_object.rb +31 -0
  164. data/lib/wx/doc/gen/generic_about_dialog.rb +140 -0
  165. data/lib/wx/doc/gen/generic_dir_ctrl.rb +223 -0
  166. data/lib/wx/doc/gen/geometry.rb +661 -0
  167. data/lib/wx/doc/gen/graphics_context.rb +1184 -0
  168. data/lib/wx/doc/gen/graphics_object.rb +750 -0
  169. data/lib/wx/doc/gen/grid/event_list.rb +191 -0
  170. data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +40 -0
  171. data/lib/wx/doc/gen/grid/grid_cell_attr.rb +280 -0
  172. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +35 -0
  173. data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +37 -0
  174. data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +49 -0
  175. data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +35 -0
  176. data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +46 -0
  177. data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +38 -0
  178. data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +45 -0
  179. data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +40 -0
  180. data/lib/wx/doc/gen/grid/grid_cell_editor.rb +197 -0
  181. data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +39 -0
  182. data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +44 -0
  183. data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +45 -0
  184. data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +79 -0
  185. data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +46 -0
  186. data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +35 -0
  187. data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +108 -0
  188. data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +35 -0
  189. data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +49 -0
  190. data/lib/wx/doc/gen/grid/grid_ctrl.rb +3037 -0
  191. data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +95 -0
  192. data/lib/wx/doc/gen/grid/grid_event.rb +129 -0
  193. data/lib/wx/doc/gen/grid/grid_range_select_event.rb +104 -0
  194. data/lib/wx/doc/gen/grid/grid_size_event.rb +85 -0
  195. data/lib/wx/doc/gen/grid/grid_string_table.rb +142 -0
  196. data/lib/wx/doc/gen/grid/grid_table_base.rb +317 -0
  197. data/lib/wx/doc/gen/grid/grid_table_message.rb +81 -0
  198. data/lib/wx/doc/gen/grid_bag_sizer.rb +323 -0
  199. data/lib/wx/doc/gen/grid_sizer.rb +195 -0
  200. data/lib/wx/doc/gen/gui_event_loop.rb +159 -0
  201. data/lib/wx/doc/gen/h_scrolled_window.rb +562 -0
  202. data/lib/wx/doc/gen/header_ctrl.rb +880 -0
  203. data/lib/wx/doc/gen/header_ctrl_event.rb +133 -0
  204. data/lib/wx/doc/gen/help_controller.rb +238 -0
  205. data/lib/wx/doc/gen/help_provider.rb +98 -0
  206. data/lib/wx/doc/gen/html/event_list.rb +38 -0
  207. data/lib/wx/doc/gen/html/html_cell.rb +536 -0
  208. data/lib/wx/doc/gen/html/html_cell_event.rb +69 -0
  209. data/lib/wx/doc/gen/html/html_data_object.rb +42 -0
  210. data/lib/wx/doc/gen/html/html_easy_printing.rb +203 -0
  211. data/lib/wx/doc/gen/html/html_help_controller.rb +382 -0
  212. data/lib/wx/doc/gen/html/html_help_data.rb +159 -0
  213. data/lib/wx/doc/gen/html/html_help_window.rb +258 -0
  214. data/lib/wx/doc/gen/html/html_link_event.rb +41 -0
  215. data/lib/wx/doc/gen/html/html_list_box.rb +346 -0
  216. data/lib/wx/doc/gen/html/html_printout.rb +109 -0
  217. data/lib/wx/doc/gen/html/html_window.rb +461 -0
  218. data/lib/wx/doc/gen/hyperlink_ctrl.rb +311 -0
  219. data/lib/wx/doc/gen/hyperlink_event.rb +44 -0
  220. data/lib/wx/doc/gen/icon.rb +267 -0
  221. data/lib/wx/doc/gen/icon_location.rb +40 -0
  222. data/lib/wx/doc/gen/image.rb +1371 -0
  223. data/lib/wx/doc/gen/image_list.rb +168 -0
  224. data/lib/wx/doc/gen/info_bar.rb +195 -0
  225. data/lib/wx/doc/gen/keyboard_state.rb +140 -0
  226. data/lib/wx/doc/gen/list_box.rb +304 -0
  227. data/lib/wx/doc/gen/list_ctrl.rb +1774 -0
  228. data/lib/wx/doc/gen/list_event.rb +208 -0
  229. data/lib/wx/doc/gen/listbook.rb +116 -0
  230. data/lib/wx/doc/gen/locale.rb +4293 -0
  231. data/lib/wx/doc/gen/log.rb +603 -0
  232. data/lib/wx/doc/gen/mb_conv.rb +10 -0
  233. data/lib/wx/doc/gen/mdi_client_window.rb +47 -0
  234. data/lib/wx/doc/gen/mdi_frame.rb +324 -0
  235. data/lib/wx/doc/gen/media_ctrl.rb +269 -0
  236. data/lib/wx/doc/gen/media_event.rb +117 -0
  237. data/lib/wx/doc/gen/memory_dc.rb +174 -0
  238. data/lib/wx/doc/gen/menu.rb +509 -0
  239. data/lib/wx/doc/gen/menu_bar.rb +287 -0
  240. data/lib/wx/doc/gen/menu_item.rb +362 -0
  241. data/lib/wx/doc/gen/message_dialog.rb +238 -0
  242. data/lib/wx/doc/gen/mini_frame.rb +108 -0
  243. data/lib/wx/doc/gen/mirror_dc.rb +22 -0
  244. data/lib/wx/doc/gen/mouse_state.rb +150 -0
  245. data/lib/wx/doc/gen/multi_choice_dialog.rb +80 -0
  246. data/lib/wx/doc/gen/non_owned_window.rb +49 -0
  247. data/lib/wx/doc/gen/notebook.rb +278 -0
  248. data/lib/wx/doc/gen/num_validator.rb +37 -0
  249. data/lib/wx/doc/gen/number_entry_dialog.rb +93 -0
  250. data/lib/wx/doc/gen/object.rb +59 -0
  251. data/lib/wx/doc/gen/owner_drawn_combo_box.rb +395 -0
  252. data/lib/wx/doc/gen/paint_dc.rb +27 -0
  253. data/lib/wx/doc/gen/palette.rb +92 -0
  254. data/lib/wx/doc/gen/panel.rb +127 -0
  255. data/lib/wx/doc/gen/pen.rb +511 -0
  256. data/lib/wx/doc/gen/persistence_manager.rb +135 -0
  257. data/lib/wx/doc/gen/persistent_object.rb +52 -0
  258. data/lib/wx/doc/gen/persistent_window.rb +241 -0
  259. data/lib/wx/doc/gen/pg/event_list.rb +106 -0
  260. data/lib/wx/doc/gen/pg/numeric_property_validator.rb +54 -0
  261. data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +292 -0
  262. data/lib/wx/doc/gen/pg/pg_cell.rb +177 -0
  263. data/lib/wx/doc/gen/pg/pg_editor.rb +721 -0
  264. data/lib/wx/doc/gen/pg/pg_multi_button.rb +152 -0
  265. data/lib/wx/doc/gen/pg/pg_properties.rb +2829 -0
  266. data/lib/wx/doc/gen/pg/pg_property.rb +2078 -0
  267. data/lib/wx/doc/gen/pg/pg_validation_info.rb +344 -0
  268. data/lib/wx/doc/gen/pg/property_grid.rb +740 -0
  269. data/lib/wx/doc/gen/pg/property_grid_event.rb +184 -0
  270. data/lib/wx/doc/gen/pg/property_grid_interface.rb +1098 -0
  271. data/lib/wx/doc/gen/pg/property_grid_manager.rb +415 -0
  272. data/lib/wx/doc/gen/pg/property_grid_page.rb +354 -0
  273. data/lib/wx/doc/gen/pg/property_grid_page_state.rb +165 -0
  274. data/lib/wx/doc/gen/picker_base.rb +152 -0
  275. data/lib/wx/doc/gen/platform_info.rb +622 -0
  276. data/lib/wx/doc/gen/popup_window.rb +107 -0
  277. data/lib/wx/doc/gen/progress_dialog.rb +100 -0
  278. data/lib/wx/doc/gen/property_sheet_dialog.rb +216 -0
  279. data/lib/wx/doc/gen/prt/event_list.rb +17 -0
  280. data/lib/wx/doc/gen/prt/page_setup_dialog.rb +44 -0
  281. data/lib/wx/doc/gen/prt/post_script_dc.rb +30 -0
  282. data/lib/wx/doc/gen/prt/preview_frame.rb +78 -0
  283. data/lib/wx/doc/gen/prt/print_abort_dialog.rb +151 -0
  284. data/lib/wx/doc/gen/prt/print_data.rb +804 -0
  285. data/lib/wx/doc/gen/prt/print_dialog.rb +55 -0
  286. data/lib/wx/doc/gen/prt/printer.rb +518 -0
  287. data/lib/wx/doc/gen/prt/printer_dc.rb +37 -0
  288. data/lib/wx/doc/gen/query_layout_info_event.rb +106 -0
  289. data/lib/wx/doc/gen/radio_box.rb +306 -0
  290. data/lib/wx/doc/gen/radio_button.rb +159 -0
  291. data/lib/wx/doc/gen/rbn/event_list.rb +136 -0
  292. data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +1142 -0
  293. data/lib/wx/doc/gen/rbn/ribbon_bar.rb +308 -0
  294. data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +45 -0
  295. data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +458 -0
  296. data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +63 -0
  297. data/lib/wx/doc/gen/rbn/ribbon_control.rb +143 -0
  298. data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +229 -0
  299. data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +55 -0
  300. data/lib/wx/doc/gen/rbn/ribbon_page.rb +174 -0
  301. data/lib/wx/doc/gen/rbn/ribbon_panel.rb +270 -0
  302. data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +45 -0
  303. data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +360 -0
  304. data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +42 -0
  305. data/lib/wx/doc/gen/rearrange_ctrl.rb +78 -0
  306. data/lib/wx/doc/gen/rearrange_list.rb +123 -0
  307. data/lib/wx/doc/gen/region.rb +380 -0
  308. data/lib/wx/doc/gen/region_iterator.rb +76 -0
  309. data/lib/wx/doc/gen/rich_tool_tip.rb +154 -0
  310. data/lib/wx/doc/gen/rt/event_list.rb +17 -0
  311. data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
  312. data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
  313. data/lib/wx/doc/gen/rtc/event_list.rb +125 -0
  314. data/lib/wx/doc/gen/rtc/rich_text_box.rb +445 -0
  315. data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +1188 -0
  316. data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +41 -0
  317. data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +538 -0
  318. data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +2103 -0
  319. data/lib/wx/doc/gen/rtc/rich_text_event.rb +173 -0
  320. data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +181 -0
  321. data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +319 -0
  322. data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +193 -0
  323. data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +102 -0
  324. data/lib/wx/doc/gen/rtc/rich_text_image.rb +337 -0
  325. data/lib/wx/doc/gen/rtc/rich_text_object.rb +2922 -0
  326. data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +1240 -0
  327. data/lib/wx/doc/gen/rtc/rich_text_printing.rb +258 -0
  328. data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +344 -0
  329. data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +227 -0
  330. data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +59 -0
  331. data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +169 -0
  332. data/lib/wx/doc/gen/sash_event.rb +147 -0
  333. data/lib/wx/doc/gen/sash_layout_window.rb +232 -0
  334. data/lib/wx/doc/gen/sash_window.rb +171 -0
  335. data/lib/wx/doc/gen/scaled_dc.rb +10 -0
  336. data/lib/wx/doc/gen/screen_dc.rb +30 -0
  337. data/lib/wx/doc/gen/scroll_bar.rb +204 -0
  338. data/lib/wx/doc/gen/scrolled_canvas.rb +410 -0
  339. data/lib/wx/doc/gen/scrolled_control.rb +410 -0
  340. data/lib/wx/doc/gen/scrolled_window.rb +430 -0
  341. data/lib/wx/doc/gen/search_ctrl.rb +159 -0
  342. data/lib/wx/doc/gen/secret_store.rb +116 -0
  343. data/lib/wx/doc/gen/simplebook.rb +110 -0
  344. data/lib/wx/doc/gen/single_choice_dialog.rb +89 -0
  345. data/lib/wx/doc/gen/sizer.rb +945 -0
  346. data/lib/wx/doc/gen/sizer_item.rb +244 -0
  347. data/lib/wx/doc/gen/slider.rb +342 -0
  348. data/lib/wx/doc/gen/spin_button.rb +157 -0
  349. data/lib/wx/doc/gen/spin_ctrl.rb +231 -0
  350. data/lib/wx/doc/gen/spin_ctrl_double.rb +192 -0
  351. data/lib/wx/doc/gen/spin_double_event.rb +55 -0
  352. data/lib/wx/doc/gen/spin_event.rb +51 -0
  353. data/lib/wx/doc/gen/splash_screen.rb +113 -0
  354. data/lib/wx/doc/gen/splitter_event.rb +99 -0
  355. data/lib/wx/doc/gen/splitter_window.rb +498 -0
  356. data/lib/wx/doc/gen/static_bitmap.rb +256 -0
  357. data/lib/wx/doc/gen/static_box.rb +180 -0
  358. data/lib/wx/doc/gen/static_box_sizer.rb +85 -0
  359. data/lib/wx/doc/gen/static_line.rb +83 -0
  360. data/lib/wx/doc/gen/static_text.rb +127 -0
  361. data/lib/wx/doc/gen/status_bar.rb +290 -0
  362. data/lib/wx/doc/gen/stc/event_list.rb +221 -0
  363. data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4474 -0
  364. data/lib/wx/doc/gen/stc/styled_text_event.rb +8762 -0
  365. data/lib/wx/doc/gen/std_dialog_button_sizer.rb +129 -0
  366. data/lib/wx/doc/gen/svg_file_dc.rb +164 -0
  367. data/lib/wx/doc/gen/system_options.rb +129 -0
  368. data/lib/wx/doc/gen/system_settings.rb +507 -0
  369. data/lib/wx/doc/gen/task_bar_icon.rb +127 -0
  370. data/lib/wx/doc/gen/task_bar_icon_event.rb +88 -0
  371. data/lib/wx/doc/gen/text_attr.rb +756 -0
  372. data/lib/wx/doc/gen/text_ctrl.rb +1033 -0
  373. data/lib/wx/doc/gen/text_entry.rb +441 -0
  374. data/lib/wx/doc/gen/text_entry_dialog.rb +220 -0
  375. data/lib/wx/doc/gen/text_validator.rb +245 -0
  376. data/lib/wx/doc/gen/time_picker_ctrl.rb +128 -0
  377. data/lib/wx/doc/gen/timer.rb +119 -0
  378. data/lib/wx/doc/gen/timer_event.rb +68 -0
  379. data/lib/wx/doc/gen/tip_provider.rb +63 -0
  380. data/lib/wx/doc/gen/tip_window.rb +51 -0
  381. data/lib/wx/doc/gen/toggle_button.rb +182 -0
  382. data/lib/wx/doc/gen/tool_bar.rb +890 -0
  383. data/lib/wx/doc/gen/tool_tip.rb +86 -0
  384. data/lib/wx/doc/gen/toolbook.rb +118 -0
  385. data/lib/wx/doc/gen/top_level_window.rb +516 -0
  386. data/lib/wx/doc/gen/tree_ctrl.rb +1052 -0
  387. data/lib/wx/doc/gen/tree_event.rb +127 -0
  388. data/lib/wx/doc/gen/treebook.rb +180 -0
  389. data/lib/wx/doc/gen/ui_action_simulator.rb +109 -0
  390. data/lib/wx/doc/gen/utils.rb +273 -0
  391. data/lib/wx/doc/gen/v_list_box.rb +272 -0
  392. data/lib/wx/doc/gen/v_scrolled_canvas.rb +195 -0
  393. data/lib/wx/doc/gen/v_scrolled_window.rb +191 -0
  394. data/lib/wx/doc/gen/validator.rb +68 -0
  395. data/lib/wx/doc/gen/variant.rb +294 -0
  396. data/lib/wx/doc/gen/web/event_list.rb +95 -0
  397. data/lib/wx/doc/gen/web/web_view.rb +1136 -0
  398. data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
  399. data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
  400. data/lib/wx/doc/gen/window.rb +2917 -0
  401. data/lib/wx/doc/gen/window_dc.rb +38 -0
  402. data/lib/wx/doc/gen/window_disabler.rb +30 -0
  403. data/lib/wx/doc/gen/with_images.rb +84 -0
  404. data/lib/wx/doc/gen/wizard.rb +257 -0
  405. data/lib/wx/doc/gen/wizard_event.rb +113 -0
  406. data/lib/wx/doc/gen/wizard_page.rb +65 -0
  407. data/lib/wx/doc/gen/wizard_page_simple.rb +88 -0
  408. data/lib/wx/doc/gen/wrap_sizer.rb +79 -0
  409. data/lib/wx/doc/gen/xml_node.rb +316 -0
  410. data/lib/wx/doc/gen/xml_resource.rb +320 -0
  411. data/lib/wx/doc/generic_validator.rb +5 -0
  412. data/lib/wx/doc/html/html_help_controller.rb +23 -1
  413. data/lib/wx/doc/mbconv.rb +108 -0
  414. data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
  415. data/lib/wx/doc/rt/thread_event.rb +28 -0
  416. data/lib/wx/doc/tip_window.rb +18 -6
  417. data/lib/wx/doc/webview.rb +40 -0
  418. data/lib/wx/grid/events/evt_list.rb +166 -0
  419. data/lib/wx/helpers.rb +1 -1
  420. data/lib/wx/html/events/evt_list.rb +27 -0
  421. data/lib/wx/html/htmlhelpcontroller.rb +10 -0
  422. data/lib/wx/html/simple_html_listbox.rb +46 -33
  423. data/lib/wx/keyword_defs.rb +20 -0
  424. data/lib/wx/pg/events/evt_list.rb +73 -0
  425. data/lib/wx/pg/pg_property.rb +26 -0
  426. data/lib/wx/pg/property_grid_interface.rb +2 -2
  427. data/lib/wx/rbn/events/evt_list.rb +102 -0
  428. data/lib/wx/rt/events/evt_list.rb +8 -0
  429. data/lib/wx/rt/require.rb +8 -0
  430. data/lib/wx/rt/thread_event.rb +14 -0
  431. data/lib/wx/rt.rb +16 -0
  432. data/lib/wx/rtc/events/evt_list.rb +98 -0
  433. data/lib/wx/rtc/ext/rich_text_ctrl.rb +24 -0
  434. data/lib/wx/stc/events/evt_list.rb +178 -0
  435. data/lib/wx/version.rb +1 -1
  436. data/lib/wx/web/events/evt_list.rb +74 -0
  437. data/lib/wx/web/require.rb +8 -0
  438. data/lib/wx/web/webview.rb +106 -0
  439. data/lib/wx/web.rb +17 -0
  440. data/lib/wx/wxruby/cmd/setup.rb +21 -0
  441. data/lib/wx.rb +2 -0
  442. data/rakelib/configure.rb +33 -0
  443. data/rakelib/gem.rake +3 -2
  444. data/rakelib/gem.rb +3 -2
  445. data/rakelib/install.rb +54 -27
  446. data/rakelib/lib/config/linux.rb +1 -1
  447. data/rakelib/lib/config/macosx.rb +22 -6
  448. data/rakelib/lib/config/mingw.rb +66 -5
  449. data/rakelib/lib/config/pkgman/linux.rb +7 -2
  450. data/rakelib/lib/config/pkgman/mingw.rb +1 -1
  451. data/rakelib/lib/config/unixish.rb +7 -5
  452. data/rakelib/lib/config.rb +52 -7
  453. data/rakelib/lib/core/include/client_data.inc +38 -17
  454. data/rakelib/lib/core/include/funcall.inc +1 -1
  455. data/rakelib/lib/core/include/swigdirector.inc +6 -6
  456. data/rakelib/lib/core/include/swigrubyerrors.inc +4 -8
  457. data/rakelib/lib/core/include/swigrubyrun.inc +34 -30
  458. data/rakelib/lib/core/include/swigrun.inc +189 -0
  459. data/rakelib/lib/core/package.rb +3 -3
  460. data/rakelib/lib/director/accelerator.rb +1 -1
  461. data/rakelib/lib/director/animation.rb +1 -0
  462. data/rakelib/lib/director/app.rb +1 -8
  463. data/rakelib/lib/director/app_traits.rb +1 -1
  464. data/rakelib/lib/director/art_provider.rb +7 -3
  465. data/rakelib/lib/director/aui_manager.rb +21 -14
  466. data/rakelib/lib/director/aui_mdi_child_frame.rb +2 -0
  467. data/rakelib/lib/director/aui_mdi_parent_frame.rb +4 -0
  468. data/rakelib/lib/director/aui_notebook.rb +20 -3
  469. data/rakelib/lib/director/aui_tab_ctrl.rb +64 -106
  470. data/rakelib/lib/director/calendar_ctrl.rb +72 -14
  471. data/rakelib/lib/director/clipboard.rb +2 -0
  472. data/rakelib/lib/director/comboctrl.rb +0 -7
  473. data/rakelib/lib/director/context_help_button.rb +35 -2
  474. data/rakelib/lib/director/data_object.rb +15 -7
  475. data/rakelib/lib/director/date_picker_ctrl.rb +4 -1
  476. data/rakelib/lib/director/display.rb +81 -0
  477. data/rakelib/lib/director/event.rb +33 -16
  478. data/rakelib/lib/director/event_handler.rb +59 -30
  479. data/rakelib/lib/director/fs_file.rb +15 -10
  480. data/rakelib/lib/director/functions.rb +17 -0
  481. data/rakelib/lib/director/geometry.rb +5 -0
  482. data/rakelib/lib/director/grid_cell_attr.rb +1 -3
  483. data/rakelib/lib/director/grid_cell_editor.rb +14 -12
  484. data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
  485. data/rakelib/lib/director/grid_ctrl.rb +231 -117
  486. data/rakelib/lib/director/help_controller.rb +70 -2
  487. data/rakelib/lib/director/help_provider.rb +1 -1
  488. data/rakelib/lib/director/html_listbox.rb +16 -3
  489. data/rakelib/lib/director/hvscrolled.rb +7 -106
  490. data/rakelib/lib/director/image_list.rb +1 -0
  491. data/rakelib/lib/director/mb_conv.rb +30 -0
  492. data/rakelib/lib/director/mdi_frame.rb +4 -0
  493. data/rakelib/lib/director/menu.rb +113 -22
  494. data/rakelib/lib/director/menu_bar.rb +103 -2
  495. data/rakelib/lib/director/menu_item.rb +7 -1
  496. data/rakelib/lib/director/num_validator.rb +27 -0
  497. data/rakelib/lib/director/numeric_property_validator.rb +9 -0
  498. data/rakelib/lib/director/persistence_manager.rb +3 -2
  499. data/rakelib/lib/director/popup_window.rb +2 -0
  500. data/rakelib/lib/director/preview_frame.rb +28 -5
  501. data/rakelib/lib/director/printer.rb +59 -5
  502. data/rakelib/lib/director/property_grid.rb +37 -18
  503. data/rakelib/lib/director/property_grid_interface.rb +10 -8
  504. data/rakelib/lib/director/property_grid_manager.rb +99 -39
  505. data/rakelib/lib/director/property_grid_page.rb +60 -0
  506. data/rakelib/lib/director/rich_tooltip.rb +22 -0
  507. data/rakelib/lib/director/richtext_buffer.rb +5 -2
  508. data/rakelib/lib/director/richtext_ctrl.rb +5 -0
  509. data/rakelib/lib/director/richtext_object.rb +13 -4
  510. data/rakelib/lib/director/richtext_style_listbox.rb +4 -1
  511. data/rakelib/lib/director/scrolled_t.rb +3 -0
  512. data/rakelib/lib/director/searchctrl.rb +1 -0
  513. data/rakelib/lib/director/shared_evt_handler.rb +30 -0
  514. data/rakelib/lib/director/sizer.rb +8 -17
  515. data/rakelib/lib/director/sizer_item.rb +3 -4
  516. data/rakelib/lib/director/task_bar_icon.rb +18 -12
  517. data/rakelib/lib/director/text_validator.rb +9 -0
  518. data/rakelib/lib/director/thread_event.rb +33 -0
  519. data/rakelib/lib/director/tip_window.rb +117 -6
  520. data/rakelib/lib/director/tool_bar.rb +6 -0
  521. data/rakelib/lib/director/validator.rb +15 -1
  522. data/rakelib/lib/director/variant.rb +48 -28
  523. data/rakelib/lib/director/vlistbox.rb +25 -22
  524. data/rakelib/lib/director/webview.rb +166 -0
  525. data/rakelib/lib/director/webview_event.rb +37 -0
  526. data/rakelib/lib/director/webview_handler.rb +63 -0
  527. data/rakelib/lib/director/window.rb +10 -1
  528. data/rakelib/lib/director/xml_resource.rb +6 -0
  529. data/rakelib/lib/generate/doc/aui_manager.yaml +1 -1
  530. data/rakelib/lib/generate/doc/rich_tool_tip.yaml +26 -0
  531. data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
  532. data/rakelib/lib/generate/doc/web_view.yaml +135 -0
  533. data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
  534. data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
  535. data/rakelib/lib/generate/doc.rb +12 -7
  536. data/rakelib/lib/generate/interface.rb +16 -1
  537. data/rakelib/lib/specs/interfaces.rb +15 -1
  538. data/rakelib/lib/swig_runner.rb +10 -10
  539. data/rakelib/lib/typemap/aui_tabctrl.rb +46 -0
  540. data/rakelib/lib/typemap/common.rb +37 -4
  541. data/rakelib/lib/typemap/mb_conv.rb +58 -0
  542. data/rakelib/lib/typemap/print_page_range.rb +32 -8
  543. data/rakelib/prepost.rake +23 -31
  544. data/rakelib/prepost.rb +20 -0
  545. data/samples/art/wxruby-512x512.png +0 -0
  546. data/samples/calendar/calendar.rb +64 -1
  547. data/samples/dialogs/dialogs.rb +172 -0
  548. data/samples/dialogs/tip.xpm +157 -0
  549. data/samples/drawing/maths_images.rb +1 -1
  550. data/samples/event/event.rb +1 -1
  551. data/samples/event/threaded.rb +295 -42
  552. data/samples/event/tn_threaded.png +0 -0
  553. data/samples/help/doc/back.gif +0 -0
  554. data/samples/help/doc/contents.gif +0 -0
  555. data/samples/help/doc/cshelp.txt +9 -0
  556. data/samples/help/doc/doc.chm +0 -0
  557. data/samples/help/doc/doc.cnt +8 -0
  558. data/samples/help/doc/doc.h +7 -0
  559. data/samples/help/doc/doc.hhc +40 -0
  560. data/samples/help/doc/doc.hhk +31 -0
  561. data/samples/help/doc/doc.hhp +33 -0
  562. data/samples/help/doc/doc.hpj +21 -0
  563. data/samples/help/doc/doc.htm +27 -0
  564. data/samples/help/doc/doc1.htm +24 -0
  565. data/samples/help/doc/doc2.htm +12 -0
  566. data/samples/help/doc/doc3.htm +12 -0
  567. data/samples/help/doc/doc4.htm +12 -0
  568. data/samples/help/doc/doc5.htm +14 -0
  569. data/samples/help/doc/forward.gif +0 -0
  570. data/samples/help/doc/up.gif +0 -0
  571. data/samples/help/doc.chm +0 -0
  572. data/samples/help/doc.chw +0 -0
  573. data/samples/help/doc.zip +0 -0
  574. data/samples/help/help.rb +352 -0
  575. data/samples/help/tn_help.png +0 -0
  576. data/samples/printing/printing2.rb +1 -1
  577. data/samples/sampler.rb +26 -8
  578. data/samples/text/textctrl.rb +2 -2
  579. data/samples/treectrl/treectrl.rb +2 -2
  580. data/samples/webview/handler_advanced.html +55 -0
  581. data/samples/webview/tn_webview.png +0 -0
  582. data/samples/webview/webview.rb +1264 -0
  583. data/tests/assets/handler_advanced.html +55 -0
  584. data/tests/assets/test.css +1 -0
  585. data/tests/assets/test.html +9 -0
  586. data/tests/assets/test.zip +0 -0
  587. data/tests/lib/leaked_process_event_exception_test.rb +1 -1
  588. data/tests/lib/leaked_queued_event_exception_test.rb +1 -1
  589. data/tests/lib/text_entry_tests.rb +2 -2
  590. data/tests/lib/wxapp_runner.rb +65 -35
  591. data/tests/lib/wxframe_runner.rb +40 -13
  592. data/tests/lib/wxrb_test.rb +58 -0
  593. data/tests/test_app_event_filter.rb +1 -1
  594. data/tests/test_app_exit_exception.rb +3 -3
  595. data/tests/test_app_init_exception.rb +3 -3
  596. data/tests/test_app_traits.rb +24 -21
  597. data/tests/test_art.rb +14 -14
  598. data/tests/test_art_provider.rb +1 -1
  599. data/tests/test_basic.rb +2 -2
  600. data/tests/test_book_controls.rb +1 -1
  601. data/tests/test_box_sizer.rb +1 -1
  602. data/tests/test_clipboard.rb +9 -9
  603. data/tests/test_combo_ctrl.rb +2 -2
  604. data/tests/test_config.rb +17 -7
  605. data/tests/test_dc.rb +1 -1
  606. data/tests/test_dialog.rb +1 -1
  607. data/tests/test_event_handling.rb +1 -1
  608. data/tests/test_events.rb +1 -1
  609. data/tests/test_exceptions.rb +10 -8
  610. data/tests/test_ext_controls.rb +13 -13
  611. data/tests/test_file_dialog.rb +6 -6
  612. data/tests/test_font.rb +8 -8
  613. data/tests/test_gdi_object.rb +1 -1
  614. data/tests/test_geometry.rb +2 -2
  615. data/tests/test_grid_ctrl.rb +133 -0
  616. data/tests/test_grid_sizer.rb +2 -2
  617. data/tests/test_help.rb +88 -0
  618. data/tests/test_intl.rb +2 -2
  619. data/tests/test_item_data.rb +12 -12
  620. data/tests/test_list_ctrl.rb +1 -1
  621. data/tests/test_log.rb +2 -2
  622. data/tests/test_media_ctrl.rb +15 -7
  623. data/tests/test_menu.rb +81 -2
  624. data/tests/test_persistence.rb +1 -1
  625. data/tests/test_proof_check.rb +6 -6
  626. data/tests/test_propgrid.rb +32 -32
  627. data/tests/test_richtext.rb +10 -24
  628. data/tests/test_secret_store.rb +1 -1
  629. data/tests/test_shared_event_handler.rb +141 -0
  630. data/tests/test_sizer.rb +1 -1
  631. data/tests/test_std_controls.rb +13 -13
  632. data/tests/test_styled_text_ctrl.rb +1 -1
  633. data/tests/test_timer.rb +1 -1
  634. data/tests/test_tree_ctrl.rb +1 -1
  635. data/tests/test_validators.rb +79 -36
  636. data/tests/test_variant.rb +1 -1
  637. data/tests/test_webview.rb +492 -0
  638. data/tests/test_window.rb +14 -14
  639. data/tests/testapp.rb +2 -2
  640. data/tests/testapp_noframe.rb +2 -2
  641. metadata +476 -11
  642. data/lib/wx/aui/aui_tab_ctrl.rb +0 -18
@@ -0,0 +1,1264 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ # Adapted for Wx::Ruby3
6
+ ###
7
+
8
+ require 'wx'
9
+
10
+ module WebView
11
+
12
+ if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
13
+ # AdvancedWebViewHandler is a sample handler used by handler_advanced.html
14
+ # to show a sample implementation of wxWebViewHandler::StartRequest().
15
+ # see the documentation for additional details.
16
+ class AdvancedWebViewHandler < Wx::WebViewHandler
17
+ def initialize
18
+ super("wxpost")
19
+ end
20
+
21
+ def start_request(request, response)
22
+ response.set_header("Access-Control-Allow-Origin", "*")
23
+ response.set_header("Access-Control-Allow-Headers", "*")
24
+
25
+ # Handle options request
26
+ if request.get_method.casecmp("options") == 0
27
+ response.finish("")
28
+ else
29
+ response.set_content_type("application/json")
30
+ response.finish("{\n contentType: \"#{request.get_header("Content-Type")}\",\n" \
31
+ " method: \"#{request.get_method}\",\n" \
32
+ " data: \"#{request.get_data_string}\"\n}")
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ class SourceViewDialog < Wx::Dialog
39
+
40
+ def initialize(parent, source)
41
+ super(parent, title: 'Source Code', size: [700, 500], style: Wx::DEFAULT_DIALOG_STYLE | Wx::RESIZE_BORDER)
42
+ if Wx.has_feature?(:USE_STC)
43
+ text = Wx::STC::StyledTextCtrl.new(self, Wx::ID_ANY)
44
+ text.set_margin_width(1, 30)
45
+ text.set_margin_type(1, Wx::STC_MARGIN_NUMBER)
46
+ text.set_text(source)
47
+
48
+ text.style_clear_all
49
+ text.set_lexer(Wx::STC_LEX_HTML)
50
+ text.style_set_foreground(Wx::STC_H_DOUBLESTRING, Wx::Colour.new(255,0,0))
51
+ text.style_set_foreground(Wx::STC_H_SINGLESTRING, Wx::Colour.new(255,0,0))
52
+ text.style_set_foreground(Wx::STC_H_ENTITY, Wx::Colour.new(255,0,0))
53
+ text.style_set_foreground(Wx::STC_H_TAG, Wx::Colour.new(0,150,0))
54
+ text.style_set_foreground(Wx::STC_H_TAGUNKNOWN, Wx::Colour.new(0,150,0))
55
+ text.style_set_foreground(Wx::STC_H_ATTRIBUTE, Wx::Colour.new(0,0,150))
56
+ text.style_set_foreground(Wx::STC_H_ATTRIBUTEUNKNOWN, Wx::Colour.new(0,0,150))
57
+ text.style_set_foreground(Wx::STC_H_COMMENT, Wx::Colour.new(150,150,150))
58
+ else # !Wx::USE_STC
59
+ text = Wx::TextCtrl.new(self, value: source, style: Wx::TE_MULTILINE | Wx::TE_RICH | Wx::TE_READONLY)
60
+ end # Wx::USE_STC/!Wx::USE_STC
61
+
62
+ sizer = Wx::VBoxSizer.new
63
+ sizer.add(text, 1, Wx::EXPAND)
64
+ set_sizer(sizer)
65
+ end
66
+
67
+ end
68
+
69
+ class TextViewDialog < Wx::Dialog
70
+ def initialize(parent, txt)
71
+ super(parent, title: 'Page Text', size: [700, 500], style: Wx::DEFAULT_DIALOG_STYLE | Wx::RESIZE_BORDER)
72
+ if Wx.has_feature?(:USE_STC)
73
+ text = Wx::StyledTextCtrl.new(self)
74
+ text.set_text(txt)
75
+ else # !wxUSE_STC
76
+ text = Wx::TextCtrl.new(self, value: txt, style: Wx::TE_MULTILINE | Wx::TE_RICH | Wx::TE_READONLY)
77
+ end # wxUSE_STC/!wxUSE_STC
78
+ sizer = Wx::VBoxSizer.new
79
+ sizer.add(text, 1, Wx::EXPAND)
80
+ set_sizer(sizer)
81
+ end
82
+ end
83
+
84
+ class WebFrame < Wx::Frame
85
+
86
+ Child = 0
87
+ Main = 1
88
+ Private = 2
89
+
90
+ module ID
91
+ include Wx::IDHelper
92
+ CLEAR_BROWSING_DATA_ALL = self.next_id
93
+ CLEAR_BROWSING_DATA_CACHE = self.next_id
94
+ CLEAR_BROWSING_DATA_COOKIES = self.next_id
95
+ CLEAR_BROWSING_DATA_DOM_STORAGE = self.next_id
96
+ CLEAR_BROWSING_DATA_OTHER = self.next_id
97
+ CLEAR_BROWSING_DATA_LAST_HOUR = self.next_id
98
+ end
99
+
100
+ def initialize(url, flags = 0, window_features = nil)
101
+ super(nil, title: 'WebView Sample')
102
+
103
+ @flags = flags
104
+
105
+ @hist_menu_items = {}
106
+
107
+ # set the frame icon
108
+ self.icon = Wx.Icon(:sample, Wx::BITMAP_TYPE_XPM, art_path: File.join(__dir__, '..'))
109
+ set_title("Wx::WebView Sample")
110
+ enable_full_screen_view # Enable native fullscreen API on macOS
111
+
112
+ topsizer = Wx::VBoxSizer.new
113
+
114
+ # Create the toolbar
115
+ @toolbar = create_tool_bar(Wx::TB_TEXT)
116
+
117
+ @toolbar_back = @toolbar.add_tool(Wx::ID_ANY, "Back", Wx::ArtProvider.get_bitmap_bundle(Wx::ART_GO_BACK, Wx::ART_TOOLBAR))
118
+ @toolbar_forward = @toolbar.add_tool(Wx::ID_ANY, "Forward", Wx::ArtProvider.get_bitmap_bundle(Wx::ART_GO_FORWARD, Wx::ART_TOOLBAR))
119
+ @toolbar_stop = @toolbar.add_tool(Wx::ID_ANY, "Stop", Wx::ArtProvider.get_bitmap_bundle(Wx::ART_STOP, Wx::ART_TOOLBAR))
120
+ @toolbar_reload = @toolbar.add_tool(Wx::ID_ANY, "Reload", Wx::ArtProvider.get_bitmap_bundle(Wx::ART_REFRESH, Wx::ART_TOOLBAR))
121
+ @url = Wx::TextCtrl.new(@toolbar, Wx::ID_ANY, "", Wx::DEFAULT_POSITION, from_dip([400, -1]), Wx::TE_PROCESS_ENTER)
122
+ @toolbar.add_control(@url, "URL")
123
+ @toolbar_tools = @toolbar.add_tool(Wx::ID_ANY, "Menu", Wx::ArtProvider.get_bitmap_bundle(Wx::ART_WX_LOGO, Wx::ART_TOOLBAR))
124
+
125
+ @toolbar.realize
126
+
127
+ # Set find values.
128
+ @findFlags = Wx::WEBVIEW_FIND_DEFAULT
129
+ @findCount = 0
130
+
131
+ # Create panel for find toolbar.
132
+ panel = Wx::Panel.new(self)
133
+ topsizer.add(panel, Wx::SizerFlags.new.expand)
134
+
135
+ # Create sizer for panel.
136
+ panel_sizer = Wx::VBoxSizer.new
137
+ panel.set_sizer(panel_sizer)
138
+
139
+ # Create the find toolbar.
140
+ @find_toolbar = Wx::ToolBar.new(panel, Wx::ID_ANY, Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TB_HORIZONTAL|Wx::TB_TEXT|Wx::TB_HORZ_LAYOUT)
141
+ @find_toolbar.hide
142
+ panel_sizer.add(@find_toolbar, Wx::SizerFlags.new.expand)
143
+
144
+ # Create find control.
145
+ @find_ctrl = Wx::TextCtrl.new(@find_toolbar, Wx::ID_ANY, '', Wx::DEFAULT_POSITION, [140,-1], Wx::TE_PROCESS_ENTER)
146
+
147
+
148
+ #Find options menu
149
+ findmenu = Wx::Menu.new
150
+ @find_toolbar_wrap = findmenu.append_check_item(Wx::ID_ANY,"Wrap")
151
+ @find_toolbar_matchcase = findmenu.append_check_item(Wx::ID_ANY,"Match Case")
152
+ @find_toolbar_wholeword = findmenu.append_check_item(Wx::ID_ANY,"Entire Word")
153
+ @find_toolbar_highlight = findmenu.append_check_item(Wx::ID_ANY,"Highlight")
154
+ # Add find toolbar tools.
155
+ @find_toolbar.set_tool_separation(7)
156
+ @find_toolbar_done = @find_toolbar.add_tool(Wx::ID_ANY, "Close", Wx::ArtProvider.get_bitmap(Wx::ART_CROSS_MARK))
157
+ @find_toolbar.add_separator
158
+ @find_toolbar.add_control(@find_ctrl, "Find")
159
+ @find_toolbar.add_separator
160
+ @find_toolbar_next = @find_toolbar.add_tool(Wx::ID_ANY, "Next", Wx::ArtProvider.get_bitmap(Wx::ART_GO_DOWN, Wx::ART_TOOLBAR, [16,16]))
161
+ @find_toolbar_previous = @find_toolbar.add_tool(Wx::ID_ANY, "Previous", Wx::ArtProvider.get_bitmap(Wx::ART_GO_UP, Wx::ART_TOOLBAR, [16,16]))
162
+ @find_toolbar.add_separator
163
+ @find_toolbar_options = @find_toolbar.add_tool(Wx::ID_ANY, "Options", Wx::ArtProvider.get_bitmap(Wx::ART_PLUS, Wx::ART_TOOLBAR, [16,16]), "", Wx::ITEM_DROPDOWN)
164
+ @find_toolbar_options.set_dropdown_menu(findmenu)
165
+ @find_toolbar.realize
166
+
167
+ # Create the info panel
168
+ @info = Wx::InfoBar.new(self)
169
+ topsizer.add(@info, Wx::SizerFlags.new.expand)
170
+
171
+ # Create the webview: WX_WEBVIEW_BACKEND environment variable allows to
172
+ # select the backend to use if there is more than one available.
173
+ backend = ENV['WX_WEBVIEW_BACKEND'] || ''
174
+
175
+ if backend != Wx::WEB::WEBVIEW_BACKEND_DEFAULT && (backend.empty? || !Wx::WEB::WebView.is_backend_available(backend))
176
+ Wx.log_warning("Requested backend \"#{backend}\" is not available, using default " \
177
+ "backend instead.") unless backend.empty?
178
+ backend = Wx::WEB::WEBVIEW_BACKEND_DEFAULT
179
+ end
180
+
181
+ if !window_features
182
+ if Wx::WXWIDGETS_VERSION >= '3.3.0'
183
+ conf = Wx::WEB::WebView.new_configuration(backend)
184
+ if @flags.allbits?(Private)
185
+ unless conf.enable_persistent_storage(false)
186
+ Wx.log_warning("Disabling persistent storage is not supported by this backend!")
187
+ @flags ^= Private
188
+ end
189
+ end
190
+
191
+ @browser = Wx::WebView.new(conf)
192
+ else
193
+ @browser = Wx::WebView.new(backend)
194
+ end
195
+ else
196
+ @browser = window_features.get_child_web_view
197
+ end
198
+ unless @browser
199
+ Wx.log_fatal_error("Failed to create Wx::WebView object using \"#{backend}\" backend")
200
+ end
201
+
202
+ # With several backends the proxy can only be set before creation, so do
203
+ # it here if the standard environment variable is defined.
204
+ proxy = ENV['http_proxy'] || ''
205
+ unless proxy.empty?
206
+ Wx.log_message("Using proxy \"#{proxy}\"") if @browser.set_proxy(proxy)
207
+ #else: error message should have been already given by Wx::WebView itself
208
+ end
209
+
210
+ if Wx::PLATFORM == 'WXOSX'
211
+ if @flags.allbits?(Main)
212
+ # With WKWebView handlers need to be registered before creation
213
+ @browser.register_handler(Wx::WebViewArchiveHandler.new("wxfs"))
214
+ @browser.register_handler(Wx::WebViewFSHandler.new("memory"))
215
+ @browser.register_handler(AdvancedWebViewHandler.new) if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
216
+ end
217
+ end
218
+ Wx.log_fatal_error("Failed to create Wx::WebView") unless @browser.create(self, Wx::ID_ANY, url)
219
+
220
+ topsizer.add(@browser, Wx::SizerFlags.new.expand.proportion(1))
221
+
222
+ if @flags.allbits?(Main)
223
+ # Setup log text control
224
+ @log_textCtrl = Wx::TextCtrl.new(self, value: '', style: Wx::TE_MULTILINE | Wx::TE_READONLY | Wx::TE_RICH2)
225
+ @log_textCtrl.set_min_size(from_dip([100, 100]))
226
+ topsizer.add(@log_textCtrl, Wx::SizerFlags.new.expand.proportion(0))
227
+ Wx::Log.set_active_target(Wx::LogTextCtrl.new(@log_textCtrl))
228
+
229
+ # Log backend information
230
+ versionRunTime = (ver = Wx::WEB::WebView.get_backend_version_info(backend)).ok? ?
231
+ ", run-time version=#{ver.numeric_version_string}#{" (#{ver.description})" if ver.has_description}" : ''
232
+ versionBuildTime = (ver = Wx::WEB::WebView.get_backend_version_info(backend, Wx::VersionContext::BuildTime)).ok? ?
233
+ ", build-time version=#{ver.numeric_version_string}#{" (#{ver.description})" if ver.has_description}" : ''
234
+
235
+ Wx.log_message("Backend: %s%s%s",
236
+ @browser.class.name,
237
+ versionRunTime,
238
+ versionBuildTime)
239
+
240
+ # Chromium backend can't be used immediately after creation, so wait
241
+ # until the browser is created before calling GetUserAgent(), but we
242
+ # can't do it unconditionally either as doing it with WebViewGTK
243
+ # triggers https:#gitlab.gnome.org/GNOME/gtk/-/issues/124 and just
244
+ # kills the sample.
245
+ initShow = lambda { |_ = nil|
246
+ Wx.log_message("Web view created, user agent is \"#{@browser.get_user_agent}\"")
247
+
248
+ # We need to synchronize this call with #get_user_agent one, as
249
+ # otherwise the results of executing JavaScript inside
250
+ # #get_user_agent and #add_script_message_handler could arrive out of
251
+ # order and we'd get the wrong user agent string back.
252
+ Wx.log_error("Could not add script message handler") unless @browser.add_script_message_handler("wx")
253
+ }
254
+
255
+ if backend == Wx::WEB::WEBVIEW_BACKEND_CHROMIUM
256
+ @browser.evt_webview_created(Wx::ID_ANY, initShow)
257
+ else
258
+ initShow.call
259
+ end
260
+
261
+ @browser.evt_webview_browsing_data_cleared(Wx::ID_ANY) { |event|
262
+ if event.is_error
263
+ Wx.log_error("Failed to clear browsing data")
264
+ else
265
+ Wx.log_message("Browsing data cleared")
266
+ end
267
+ event.skip
268
+ }
269
+
270
+ unless Wx::PLATFORM == 'WXOSX'
271
+ # We register the wxfs:# protocol for testing purposes
272
+ @browser.register_handler(Wx::WEB::WebViewArchiveHandler.new("wxfs"))
273
+ #And the memory: file system
274
+ @browser.register_handler(Wx::WEB::WebViewFSHandler.new("memory"))
275
+ @browser.register_handler(AdvancedWebViewHandler.new) if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
276
+ end
277
+ else
278
+ Wx.log_message("Created new window")
279
+ end
280
+
281
+ set_sizer(topsizer)
282
+
283
+ #Set a more sensible size for web browsing
284
+ set_size(from_dip([1120, 800]))
285
+
286
+ if window_features
287
+ set_size(from_dip(window_features.get_size)) if window_features.get_size.is_fully_specified
288
+ move(from_dip(window_features.get_position)) if window_features.get_position.is_fully_specified
289
+ @toolbar.hide unless window_features.should_display_tool_bar
290
+ set_menu_bar(nil) unless window_features.should_display_menu_bar
291
+ end
292
+
293
+ # Create the Tools menu
294
+ @tools_menu = Wx::Menu.new
295
+ print = @tools_menu.append(Wx::ID_ANY , "Print")
296
+ if Wx.has_feature?(:USE_PRINTING_ARCHITECTURE) && ::Wx::WXWIDGETS_VERSION >= '3.3.2'
297
+ print_with_settings = @tools_menu.append(Wx::ID_ANY , "Print with Settings...")
298
+ end
299
+ setPage = @tools_menu.append(Wx::ID_ANY , "Set page text")
300
+ viewSource = @tools_menu.append(Wx::ID_ANY , "View Source")
301
+ viewText = @tools_menu.append(Wx::ID_ANY, "View Text")
302
+ openPrivate = @tools_menu.append(Wx::ID_ANY, "Open Private Window")
303
+ @tools_menu.append_separator
304
+ @tools_layout = @tools_menu.append_radio_item(Wx::ID_ANY, "Use Layout Zoom")
305
+ @tools_tiny = @tools_menu.append_radio_item(Wx::ID_ANY, "Tiny")
306
+ @tools_small = @tools_menu.append_radio_item(Wx::ID_ANY, "Small")
307
+ @tools_medium = @tools_menu.append_radio_item(Wx::ID_ANY, "Medium")
308
+ @tools_large = @tools_menu.append_radio_item(Wx::ID_ANY, "Large")
309
+ @tools_largest = @tools_menu.append_radio_item(Wx::ID_ANY, "Largest")
310
+ @tools_custom = @tools_menu.append_radio_item(Wx::ID_ANY, "Custom Size")
311
+ @tools_menu.append_separator
312
+ @tools_handle_navigation = @tools_menu.append_check_item(Wx::ID_ANY, "Handle Navigation")
313
+ @tools_handle_new_window = @tools_menu.append_check_item(Wx::ID_ANY, "Handle New Windows")
314
+ @tools_menu.append_separator
315
+
316
+ #Find
317
+ @find = @tools_menu.append(Wx::ID_ANY, "Find")
318
+ @tools_menu.append_separator
319
+
320
+ #History menu
321
+ @tools_history_menu = Wx::Menu.new
322
+ clearhist = @tools_history_menu.append(Wx::ID_ANY, "Clear History")
323
+ @tools_enable_history = @tools_history_menu.append_check_item(Wx::ID_ANY, "Enable History")
324
+ @tools_history_menu.append_separator
325
+
326
+ @tools_menu.append_sub_menu(@tools_history_menu, "History")
327
+
328
+ # Browsing data menu
329
+ browsingDataMenu = Wx::Menu.new
330
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_ALL, "All")
331
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_CACHE, "Cache")
332
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_COOKIES, "Cookies")
333
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_DOM_STORAGE, "DOM Storage")
334
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_OTHER, "Other")
335
+ browsingDataMenu.append_separator
336
+ browsingDataMenu.append(ID::CLEAR_BROWSING_DATA_LAST_HOUR, "All in last hour")
337
+ @tools_menu.append_sub_menu(browsingDataMenu, "Clear Browsing Data")
338
+
339
+ #Create an editing menu
340
+ editmenu = Wx::Menu.new
341
+ @edit_cut = editmenu.append(Wx::ID_ANY, "Cut")
342
+ @edit_copy = editmenu.append(Wx::ID_ANY, "Copy")
343
+ @edit_paste = editmenu.append(Wx::ID_ANY, "Paste")
344
+ editmenu.append_separator
345
+ @edit_undo = editmenu.append(Wx::ID_ANY, "Undo")
346
+ @edit_redo = editmenu.append(Wx::ID_ANY, "Redo")
347
+ editmenu.append_separator
348
+ @edit_mode = editmenu.append_check_item(Wx::ID_ANY, "Edit Mode")
349
+
350
+ @tools_menu.append_separator
351
+ @tools_menu.append_sub_menu(editmenu, "Edit")
352
+
353
+ scroll_menu = Wx::Menu.new
354
+ @scroll_line_up = scroll_menu.append(Wx::ID_ANY, "Line &up")
355
+ @scroll_line_down = scroll_menu.append(Wx::ID_ANY, "Line &down")
356
+ @scroll_page_up = scroll_menu.append(Wx::ID_ANY, "Page u&p")
357
+ @scroll_page_down = scroll_menu.append(Wx::ID_ANY, "Page d&own")
358
+ @tools_menu.append_sub_menu(scroll_menu, "Scroll")
359
+
360
+ script_menu = Wx::Menu.new
361
+ @script_string = script_menu.append(Wx::ID_ANY, "Return String")
362
+ @script_integer = script_menu.append(Wx::ID_ANY, "Return integer")
363
+ @script_double = script_menu.append(Wx::ID_ANY, "Return double")
364
+ @script_bool = script_menu.append(Wx::ID_ANY, "Return bool")
365
+ @script_object = script_menu.append(Wx::ID_ANY, "Return JSON object")
366
+ @script_array = script_menu.append(Wx::ID_ANY, "Return array")
367
+ @script_dom = script_menu.append(Wx::ID_ANY, "Modify DOM")
368
+ @script_undefined = script_menu.append(Wx::ID_ANY, "Return undefined")
369
+ @script_null = script_menu.append(Wx::ID_ANY, "Return null")
370
+ @script_date = script_menu.append(Wx::ID_ANY, "Return Date")
371
+ # #if Wx::USE_WEBVIEW_IE
372
+ # if (!Wx::WebView::IsBackendAvailable(Wx::WebViewBackendEdge))
373
+ # {
374
+ # @script_object_el = script_menu.append(Wx::ID_ANY, "Return JSON object changing emulation level")
375
+ # @script_date_el = script_menu.append(Wx::ID_ANY, "Return Date changing emulation level")
376
+ # @script_array_el = script_menu.append(Wx::ID_ANY, "Return array changing emulation level")
377
+ # }
378
+ # #endif
379
+ @script_async = script_menu.append(Wx::ID_ANY, "Return String async")
380
+ @script_message = script_menu.append(Wx::ID_ANY, "Send script message")
381
+ @script_custom = script_menu.append(Wx::ID_ANY, "Custom script")
382
+ @tools_menu.append_sub_menu(script_menu, "Run Script")
383
+ addUserScript = @tools_menu.append(Wx::ID_ANY, "Add user script")
384
+ setCustomUserAgent = @tools_menu.append(Wx::ID_ANY, "Set custom user agent")
385
+ setProxy = @tools_menu.append(Wx::ID_ANY, "Set proxy")
386
+
387
+ #Selection menu
388
+ selection = Wx::Menu.new
389
+ @selection_clear = selection.append(Wx::ID_ANY, "Clear Selection")
390
+ @selection_delete = selection.append(Wx::ID_ANY, "Delete Selection")
391
+ selectall = selection.append(Wx::ID_ANY, "Select All")
392
+
393
+ editmenu.append_sub_menu(selection, "Selection")
394
+
395
+ handlers = Wx::Menu.new
396
+ loadscheme = handlers.append(Wx::ID_ANY, "Custom Scheme")
397
+ usememoryfs = handlers.append(Wx::ID_ANY, "Memory File System")
398
+ advancedHandler = handlers.append(Wx::ID_ANY, "Advanced Handler") if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
399
+ @tools_menu.append_sub_menu(handlers, "Handler Examples")
400
+
401
+ @context_menu = @tools_menu.append_check_item(Wx::ID_ANY, "Enable Context Menu")
402
+ @browser_accelerator_keys = @tools_menu.append_check_item(Wx::ID_ANY, "Enable Browser Accelerator Keys")
403
+ @dev_tools = @tools_menu.append_check_item(Wx::ID_ANY, "Enable Dev Tools")
404
+ show_dev_tools = @tools_menu.append(Wx::ID_ANY, "Show Dev Tools")
405
+
406
+ if @flags.allbits?(Main)
407
+ showLog = @tools_menu.append_check_item(Wx::ID_ANY, "Show Log")
408
+ showLog.check
409
+ evt_menu(showLog) { |evt| @log_textCtrl.show(evt.checked?); layout }
410
+ end
411
+
412
+ #By default we want to handle navigation and new windows
413
+ @tools_handle_navigation.check
414
+ @tools_handle_new_window.check
415
+ @tools_enable_history.check
416
+
417
+ #Zoom
418
+ @zoomFactor = 100
419
+ @tools_medium.check
420
+
421
+ @tools_layout.enable(false) unless @browser.can_set_zoom_type(Wx::WEBVIEW_ZOOM_TYPE_LAYOUT)
422
+
423
+ # Connect the toolbar events
424
+ evt_tool @toolbar_back, :on_back
425
+ evt_tool @toolbar_forward,:on_forward
426
+ evt_tool @toolbar_stop,:on_stop
427
+ evt_tool @toolbar_reload,:on_reload
428
+ evt_tool @toolbar_tools,:on_tools_clicked
429
+
430
+ evt_text_enter @url,:on_url
431
+
432
+ # Connect find toolbar events.
433
+ evt_tool @find_toolbar_done,:on_find_done
434
+ evt_tool @find_toolbar_next,:on_find_text
435
+ evt_tool @find_toolbar_previous,:on_find_text
436
+
437
+ # Connect find control events.
438
+ evt_text @find_ctrl, :on_find_text
439
+ evt_text_enter @find_ctrl, :on_find_text
440
+
441
+ # Connect the webview events
442
+ evt_webview_navigating @browser, :on_navigation_request
443
+ evt_webview_navigated @browser, :on_navigation_complete
444
+ evt_webview_loaded @browser, :on_document_loaded
445
+ evt_webview_error @browser, :on_error
446
+ evt_webview_newwindow @browser, :on_new_window
447
+ evt_webview_newwindow_features @browser, :on_new_window_features
448
+ evt_webview_title_changed @browser, :on_title_changed
449
+ evt_webview_fullscreen_changed @browser, :on_full_screen_changed
450
+ evt_webview_script_message_received @browser, :on_script_message
451
+ evt_webview_script_result @browser, :on_script_result
452
+ evt_webview_window_close_requested @browser, :on_window_close_requested
453
+
454
+ # Connect the menu events
455
+ evt_menu setPage, :on_set_page
456
+ evt_menu viewSource, :on_view_source_request
457
+ evt_menu viewText, :on_view_text_request
458
+ evt_menu print, :on_print
459
+ if Wx.has_feature?(:USE_PRINTING_ARCHITECTURE) && ::Wx::WXWIDGETS_VERSION >= '3.3.2'
460
+ evt_menu print_with_settings, :on_print_with_settings
461
+ end
462
+ evt_menu openPrivate, :on_open_private_window
463
+ evt_menu @tools_layout, :on_zoom_layout
464
+ evt_menu @tools_tiny, :on_set_zoom
465
+ evt_menu @tools_small, :on_set_zoom
466
+ evt_menu @tools_medium, :on_set_zoom
467
+ evt_menu @tools_large, :on_set_zoom
468
+ evt_menu @tools_largest, :on_set_zoom
469
+ evt_menu @tools_custom, :on_set_zoom
470
+ evt_menu clearhist, :on_clear_history
471
+ evt_menu @tools_enable_history, :on_enable_history
472
+ evt_menu @edit_cut, :on_cut
473
+ evt_menu @edit_copy, :on_copy
474
+ evt_menu @edit_paste, :on_paste
475
+ evt_menu @edit_undo, :on_undo
476
+ evt_menu @edit_redo, :on_redo
477
+ evt_menu @edit_mode, :on_mode
478
+ evt_menu @scroll_line_up, :on_scroll_line_up
479
+ evt_menu @scroll_line_down, :on_scroll_line_down
480
+ evt_menu @scroll_page_up, :on_scroll_page_up
481
+ evt_menu @scroll_page_down, :on_scroll_page_down
482
+ evt_menu @script_string, :on_run_script_string
483
+ evt_menu @script_integer, :on_run_script_integer
484
+ evt_menu @script_double, :on_run_script_double
485
+ evt_menu @script_bool, :on_run_script_bool
486
+ evt_menu @script_object, :on_run_script_object
487
+ evt_menu @script_array, :on_run_script_array
488
+ evt_menu @script_dom, :on_run_script_dom
489
+ evt_menu @script_undefined, :on_run_script_undefined
490
+ evt_menu @script_null, :on_run_script_null
491
+ evt_menu @script_date, :on_run_script_date
492
+ # #if Wx::USE_WEBVIEW_IE
493
+ # unless Wx::WEB::WebView.is_backend_available(Wx::WEB::WEBVIEW_BACKEND_EDGE)
494
+ # evt_MENU @script_object_el, :OnRunScriptObjectWithEmulationLevel
495
+ # evt_MENU @script_date_el, :OnRunScriptDateWithEmulationLevel
496
+ # evt_MENU @script_array_el, :OnRunScriptArrayWithEmulationLevel
497
+ # end
498
+ # #endif
499
+ evt_menu @script_message, :on_run_script_message
500
+ evt_menu @script_custom, :on_run_script_custom
501
+ evt_menu @script_async, :on_run_script_async
502
+ evt_menu addUserScript, :on_add_user_script
503
+ evt_menu setCustomUserAgent, :on_set_custom_user_agent
504
+ evt_menu setProxy, :on_set_proxy
505
+ evt_menu ID::CLEAR_BROWSING_DATA_ALL, :on_clear_browsing_data
506
+ evt_menu ID::CLEAR_BROWSING_DATA_LAST_HOUR, :on_clear_browsing_data
507
+ evt_menu @selection_clear, :on_clear_selection
508
+ evt_menu @selection_delete, :on_delete_selection
509
+ evt_menu selectall, :on_select_all
510
+ evt_menu loadscheme, :on_load_scheme
511
+ evt_menu usememoryfs, :on_use_memory_fs
512
+ evt_menu advancedHandler, :on_load_advanced_handler if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
513
+ evt_menu @find, :on_find
514
+ evt_menu @context_menu, :on_enable_context_menu
515
+ evt_menu @dev_tools, :on_enable_dev_tools
516
+ evt_menu show_dev_tools, :on_show_dev_tools
517
+ evt_menu @browser_accelerator_keys, :on_enable_browser_accelerator_keys
518
+
519
+ #Connect the idle events
520
+ evt_idle :on_idle
521
+ end
522
+
523
+ def update_state
524
+ @toolbar.enable_tool(@toolbar_back.get_id, @browser.can_go_back)
525
+ @toolbar.enable_tool(@toolbar_forward.get_id, @browser.can_go_forward)
526
+
527
+ if @browser.is_busy
528
+ @toolbar.enable_tool(@toolbar_stop.get_id, true)
529
+ else
530
+ @toolbar.enable_tool(@toolbar_stop.get_id, false)
531
+ end
532
+
533
+ set_title(get_private_prefix + @browser.get_current_title)
534
+
535
+ @url.set_value(@browser.get_current_url)
536
+ end
537
+
538
+ def on_idle(_evt)
539
+ if @browser.is_busy
540
+ Wx.set_cursor(Wx::CURSOR_ARROWWAIT)
541
+ @toolbar.enable_tool(@toolbar_stop.get_id, true)
542
+ else
543
+ Wx.set_cursor(Wx::NULL_CURSOR)
544
+ @toolbar.enable_tool(@toolbar_stop.get_id, false)
545
+ end
546
+ end
547
+
548
+ def on_url(_evt)
549
+ @browser.load_url(@url.get_value)
550
+ @browser.set_focus
551
+ update_state
552
+ end
553
+
554
+ def on_back(_evt)
555
+ @browser.go_back
556
+ update_state
557
+ end
558
+
559
+ def on_forward(_evt)
560
+ @browser.go_forward
561
+ update_state
562
+ end
563
+
564
+ def on_stop(_evt)
565
+ @browser.stop
566
+ update_state
567
+ end
568
+
569
+ def on_reload(_evt)
570
+ @browser.reload
571
+ update_state
572
+ end
573
+
574
+ def on_clear_history(_evt)
575
+ @browser.clear_history
576
+ update_state
577
+ end
578
+
579
+ def on_enable_history(_evt)
580
+ @browser.enable_history(@tools_enable_history.is_checked)
581
+ update_state
582
+ end
583
+
584
+ # Callback invoked when there is a request to load a new page (for instance
585
+ # when the user clicks a link)
586
+ def on_navigation_request(evt)
587
+ @info.dismiss if @info.is_shown
588
+
589
+ Wx.log_message("Navigation request to '%s' (target='%s')%s" % [
590
+ evt.get_url,
591
+ evt.get_target,
592
+ evt.is_target_main_frame ? " mainFrame" : ""])
593
+
594
+ # If we don't want to handle navigation then veto the event and navigation
595
+ # will not take place, we also need to stop the loading animation
596
+ if !@tools_handle_navigation.is_checked
597
+ evt.veto
598
+ @toolbar.enable_tool(@toolbar_stop.get_id, false )
599
+ else
600
+ update_state
601
+ end
602
+ end
603
+
604
+ def on_navigation_complete(evt)
605
+ Wx.log_message("Navigation complete; url='%s'" % evt.get_url)
606
+ update_state
607
+ end
608
+
609
+ def on_document_loaded(evt)
610
+ # Only notify if the document is the main frame, not a subframe
611
+ if evt.get_url == @browser.get_current_url
612
+ Wx.log_message("Document loaded; url='%s'" % evt.get_url)
613
+ end
614
+ update_state
615
+ end
616
+
617
+ def on_new_window(evt)
618
+ flag = " (other)"
619
+ flag = " (user)" if evt.get_navigation_action == Wx::WEB::WEBVIEW_NAV_ACTION_USER
620
+
621
+ Wx.log_message("New window; url='%s'%s", evt.get_url, flag)
622
+
623
+ # If we handle new window events then create a new frame
624
+ evt.veto unless @tools_handle_new_window.is_checked
625
+
626
+ update_state
627
+ end
628
+
629
+ def on_new_window_features(evt)
630
+ features = evt.get_target_window_features
631
+ return unless features
632
+
633
+ featureDescription = ''
634
+ featureDescription += " Position: %d, %d; " % [features.get_position.x, features.get_position.y] if features.get_position.is_fully_specified
635
+ featureDescription += " Size: %d, %d; " % [features.get_size.x, features.get_size.y] if features.get_size.is_fully_specified
636
+ featureDescription += " MenuBar; " if features.should_display_menu_bar
637
+ featureDescription += " StatusBar; " if features.should_display_status_bar
638
+ featureDescription += " ToolBar; " if features.should_display_tool_bar
639
+ featureDescription += " ScrollBars; " if features.should_display_scroll_bars
640
+
641
+ Wx.log_message("Window features of child webview are available." + featureDescription)
642
+
643
+ # Create child frame with the features specified by window.open() call
644
+ newFrame = WebFrame.new(evt.get_url, WebFrame::Child, features)
645
+ newFrame.show
646
+ end
647
+
648
+ def on_title_changed(evt)
649
+ set_title(get_private_prefix + evt.get_string)
650
+ Wx.log_message("Title changed; title='%s'", evt.get_string)
651
+ end
652
+
653
+ def on_full_screen_changed(evt)
654
+ Wx.log_message("Full screen changed; status = %d", evt.get_int)
655
+ show_full_screen(evt.get_int != 0)
656
+ end
657
+
658
+ def on_script_message(evt)
659
+ Wx.log_message("Script message received; value = %s, handler = %s", evt.get_string, evt.get_message_handler)
660
+ end
661
+
662
+ def on_script_result(evt)
663
+ if evt.is_error
664
+ Wx.log_error("Async script execution failed: %s", evt.get_string)
665
+ else
666
+ Wx.log_message("Async script result received; value = %s", evt.get_string)
667
+ end
668
+ end
669
+
670
+ def on_window_close_requested(_evt)
671
+ Wx.log_message("Window close requested")
672
+ close unless @flags.allbits?(Main)
673
+ end
674
+
675
+ def on_set_page(_evt)
676
+ @browser.set_page(%Q[<html><title>New Page</title>
677
+ <body>Created using <tt>SetPage()</tt> method.</body></html>], '')
678
+ end
679
+
680
+ def on_view_source_request(_evt)
681
+ WebView.SourceViewDialog(self, @browser.get_page_source)
682
+ end
683
+
684
+ def on_view_text_request(_evt)
685
+ WebView.TextViewDialog(self, @browser.get_page_text)
686
+ end
687
+
688
+ def on_tools_clicked(_evt)
689
+ return if @browser.get_current_url == ""
690
+
691
+ @edit_cut.enable(@browser.can_cut)
692
+ @edit_copy.enable(@browser.can_copy)
693
+ @edit_paste.enable(@browser.can_paste)
694
+
695
+ @edit_undo.enable(@browser.can_undo)
696
+ @edit_redo.enable(@browser.can_redo)
697
+
698
+ @selection_clear.enable(@browser.has_selection)
699
+ @selection_delete.enable(@browser.has_selection)
700
+
701
+ @context_menu.check(@browser.is_context_menu_enabled)
702
+ @dev_tools.check(@browser.is_access_to_dev_tools_enabled)
703
+ @browser_accelerator_keys.check(@browser.are_browser_accelerator_keys_enabled)
704
+
705
+ #Firstly we clear the existing menu items, then we add the current ones
706
+ @hist_menu_items.each_key do |item_id|
707
+ disconnect(item_id, Wx::ID_ANY, :evt_menu) # disconnect previously connected event handlers
708
+ @tools_history_menu.destroy(item_id)
709
+ end
710
+ @hist_menu_items.clear
711
+
712
+ # We can't use empty labels for the menu items, so use this helper to give
713
+ # them at least some name if we don't have anything better.
714
+ make_label = ->(title, url) {
715
+ title.empty? ? url : title
716
+ }
717
+
718
+ @browser.get_backward_history.each do |hist_item|
719
+ Wx.log_message(hist_item.get_title)
720
+ item = @tools_history_menu.append_radio_item(Wx::ID_ANY, make_label.call(hist_item.get_title, hist_item.get_url))
721
+ @hist_menu_items[item.get_id] = hist_item
722
+ evt_menu item, :on_history
723
+ end
724
+
725
+ item = @tools_history_menu.append_radio_item(Wx::ID_ANY, make_label.call(@browser.get_current_title, @browser.get_current_url))
726
+ item.check
727
+
728
+ # No need to connect the current item
729
+ @hist_menu_items[item.get_id] = Wx::WEB::WebViewHistoryItem.new(@browser.get_current_url, @browser.get_current_title)
730
+
731
+ @browser.get_forward_history.each do |hist_item|
732
+ Wx.log_message(hist_item.get_title)
733
+ item = @tools_history_menu.append_radio_item(Wx::ID_ANY, make_label.call(hist_item.get_title, hist_item.get_url))
734
+ @hist_menu_items[item.get_id] = hist_item
735
+ evt_menu item, :on_history
736
+ end
737
+
738
+ position = screen_to_client(Wx.get_mouse_position)
739
+ popup_menu(@tools_menu, position.x, position.y)
740
+ end
741
+
742
+ def on_set_zoom(evt)
743
+ case evt.get_id
744
+ when @tools_tiny.get_id
745
+ @browser.set_zoom(Wx::WEB::WEBVIEW_ZOOM_TINY)
746
+ when @tools_small.get_id
747
+ @browser.set_zoom(Wx::WEB::WEBVIEW_ZOOM_SMALL)
748
+ when @tools_medium.get_id
749
+ @browser.set_zoom(Wx::WEB::WEBVIEW_ZOOM_MEDIUM)
750
+ when @tools_large.get_id
751
+ @browser.set_zoom(Wx::WEB::WEBVIEW_ZOOM_LARGE)
752
+ when @tools_largest.get_id
753
+ @browser.set_zoom(Wx::WEB::WEBVIEW_ZOOM_LARGEST)
754
+ when @tools_custom.get_id
755
+ @zoomFactor = @browser.get_zoom_factor.to_i * 100
756
+ on_zoom_custom(evt)
757
+ else
758
+ Wx.log_error('Unknown zoom event')
759
+ end
760
+ end
761
+
762
+ def on_error(evt)
763
+ category = case evt.get_int
764
+ when Wx::WEB::WEBVIEW_NAV_ERR_CONNECTION
765
+ 'WEBVIEW_NAV_ERR_CONNECTION'
766
+ when Wx::WEB::WEBVIEW_NAV_ERR_CERTIFICATE
767
+ 'WEBVIEW_NAV_ERR_CERTIFICATE'
768
+ when Wx::WEB::WEBVIEW_NAV_ERR_AUTH
769
+ 'WEBVIEW_NAV_ERR_AUTH'
770
+ when Wx::WEB::WEBVIEW_NAV_ERR_SECURITY
771
+ 'WEBVIEW_NAV_ERR_SECURITY'
772
+ when Wx::WEB::WEBVIEW_NAV_ERR_NOT_FOUND
773
+ 'WEBVIEW_NAV_ERR_NOT_FOUND'
774
+ when Wx::WEB::WEBVIEW_NAV_ERR_REQUEST
775
+ 'WEBVIEW_NAV_ERR_REQUEST'
776
+ when Wx::WEB::WEBVIEW_NAV_ERR_USER_CANCELLED
777
+ 'WEBVIEW_NAV_ERR_USER_CANCELLED'
778
+ when Wx::WEB::WEBVIEW_NAV_ERR_OTHER
779
+ 'WEBVIEW_NAV_ERR_OTHER'
780
+ else
781
+ '(unknown)'
782
+ end
783
+
784
+ Wx.log_message("Error url='%s', error='%s (%s)'",
785
+ evt.get_url, category, evt.get_string)
786
+
787
+ # Show the info bar with an error
788
+ @info.show_message("An error occurred loading " + evt.get_url + "\n" + "'" + category + "'", Wx::ICON_ERROR)
789
+
790
+ update_state
791
+ end
792
+
793
+ def on_print(_evt)
794
+ @browser.print
795
+ end
796
+
797
+ if Wx.has_feature?(:USE_PRINTING_ARCHITECTURE) && ::Wx::WXWIDGETS_VERSION >= '3.3.2'
798
+
799
+ def on_print_with_settings(_evt)
800
+ # Let the user choose paper size and orientation
801
+ paperChoices = [
802
+ "Letter (Portrait)",
803
+ "Letter (Landscape)",
804
+ "A4 (Portrait)",
805
+ "A4 (Landscape)",
806
+ "Legal (Portrait)",
807
+ "Legal (Landscape)"
808
+ ]
809
+
810
+ sel = Wx.get_single_choice_index(
811
+ "Select paper size and orientation for printing:",
812
+ "Print with Settings",
813
+ paperChoices,
814
+ self)
815
+
816
+ return if sel == -1
817
+
818
+ printData = Wx::PRT::PrintData.new
819
+ case sel
820
+ when 0
821
+ printData.set_paper_id(Wx::PAPER_LETTER)
822
+ printData.set_orientation(Wx::PORTRAIT)
823
+ when 1
824
+ printData.set_paper_id(Wx::PAPER_LETTER)
825
+ printData.set_orientation(Wx::LANDSCAPE)
826
+ when 2
827
+ printData.set_paper_id(Wx::PAPER_A4)
828
+ printData.set_orientation(Wx::PORTRAIT)
829
+ when 3
830
+ printData.set_paper_id(Wx::PAPER_A4)
831
+ printData.set_orientation(Wx::LANDSCAPE)
832
+ when 4
833
+ printData.set_paper_id(Wx::PAPER_LEGAL)
834
+ printData.set_orientation(Wx::PORTRAIT)
835
+ when 5
836
+ printData.set_paper_id(Wx::PAPER_LEGAL)
837
+ printData.set_orientation(Wx::LANDSCAPE)
838
+ else
839
+ #
840
+ end
841
+
842
+ Wx.log_message("Printing with paper=%s, orientation=%s",
843
+ paperChoices[sel],
844
+ printData.get_orientation == Wx::LANDSCAPE ? "Landscape" : "Portrait")
845
+
846
+ if Wx::PLATFORM == 'WXMSW'
847
+ printFlags = Wx::WEB::WEBVIEW_PRINT_DEFAULT
848
+ if Wx.message_box("Hide header and footer?",
849
+ "Print with Settings",
850
+ Wx::YES_NO | Wx::ICON_QUESTION, self) == Wx::YES
851
+ printFlags |= Wx::WEB::WEBVIEW_PRINT_HIDE_HEADER_FOOTER
852
+ end
853
+
854
+ @browser.print(printData, printFlags)
855
+ else
856
+ @browser.print(printData)
857
+ end
858
+ end
859
+
860
+ end
861
+
862
+ def on_open_private_window(_evt)
863
+ newFrame = WebFrame.new(@browser.get_current_url, WebFrame::Private)
864
+ newFrame.show
865
+ end
866
+
867
+ def on_cut(_evt)
868
+ @browser.cut
869
+ end
870
+
871
+ def on_copy(_evt)
872
+ @browser.copy
873
+ end
874
+
875
+ def on_paste(_evt)
876
+ @browser.paste
877
+ end
878
+
879
+ def on_undo(_evt)
880
+ @browser.undo
881
+ end
882
+
883
+ def on_redo(_evt)
884
+ @browser.redo
885
+ end
886
+
887
+ def on_mode(_evt)
888
+ @browser.set_editable(@edit_mode.is_checked)
889
+ end
890
+
891
+ def on_zoom_layout(_evt)
892
+ if @tools_layout.is_checked
893
+ @browser.set_zoom_type(Wx::WEB::WEBVIEW_ZOOM_TYPE_LAYOUT)
894
+ else
895
+ @browser.set_zoom_type(Wx::WEB::WEBVIEW_ZOOM_TYPE_TEXT)
896
+ end
897
+ end
898
+
899
+ def on_zoom_custom(_evt)
900
+ Wx.NumberEntryDialog(
901
+ self,
902
+ "Enter zoom factor as a percentage (10-10000)%",
903
+ "Zoom Factor:",
904
+ "Change Zoom Factor",
905
+ @zoomFactor,
906
+ 10, 10000) do |dlg|
907
+ if dlg.show_modal == Wx::ID_OK
908
+ @zoomFactor = dlg.get_value
909
+ @browser.set_zoom_factor(@zoomFactor.to_f/100)
910
+ end
911
+ end
912
+ end
913
+
914
+ def on_history(evt)
915
+ @browser.load_history_item(@hist_menu_items[evt.get_id])
916
+ end
917
+
918
+ def on_scroll_line_up(_evt)
919
+ @browser.line_up
920
+ end
921
+
922
+ def on_scroll_line_down(_evt)
923
+ @browser.line_down
924
+ end
925
+
926
+ def on_scroll_page_up(_evt)
927
+ @browser.page_up
928
+ end
929
+
930
+ def on_scroll_page_down(_evt)
931
+ @browser.page_down
932
+ end
933
+
934
+ def run_script(javascript)
935
+ # Remember the script we run in any case, so the next time the user opens
936
+ # the "Run Script" dialog box, it is shown there for convenient updating.
937
+ @javascript = javascript
938
+
939
+ Wx.log_message("Running JavaScript:\n%s\n", javascript)
940
+
941
+ result = @browser.run_script(javascript)
942
+ if result
943
+ Wx.log_message("RunScript() returned \"%s\"", result)
944
+ else
945
+ Wx.log_warning("RunScript() failed")
946
+ end
947
+ end
948
+
949
+ def on_run_script_string(_evt)
950
+ run_script("function f(a){return a;}f('Hello World!');")
951
+ end
952
+
953
+ def on_run_script_integer(_evt)
954
+ run_script("function f(a){return a;}f(123);")
955
+ end
956
+
957
+ def on_run_script_double(_evt)
958
+ run_script("function f(a){return a;}f(2.34);")
959
+ end
960
+
961
+ def on_run_script_bool(_evt)
962
+ run_script("function f(a){return a;}f(false);")
963
+ end
964
+
965
+ def on_run_script_object(_evt)
966
+ run_script("function f(){var person = new Object();person.name = 'Foo'; \
967
+ person.lastName = 'Bar';return person;}; f();")
968
+ end
969
+
970
+ def on_run_script_array(_evt)
971
+ run_script("function f(){ return [\"foo\", \"bar\"]; }f();")
972
+ end
973
+
974
+ def on_run_script_dom(_evt)
975
+ run_script("document.write(\"Hello World!\");")
976
+ end
977
+
978
+ def on_run_script_undefined(_evt)
979
+ run_script("function f(){var person = new Object();}f();")
980
+ end
981
+
982
+ def on_run_script_null(_evt)
983
+ run_script("function f(){return null;}f();")
984
+ end
985
+
986
+ def on_run_script_date(_evt)
987
+ run_script("function f(){var d = new Date('10/08/2017 21:30:40'); \
988
+ var tzoffset = d.getTimezoneOffset() * 60000; \
989
+ return new Date(d.getTime() - tzoffset);}; f();")
990
+ end
991
+
992
+ def on_run_script_message(_evt)
993
+ run_script("window.wx.postMessage('This is a web message');")
994
+ end
995
+
996
+ def on_run_script_async(_evt)
997
+ @browser.run_script_async("function f(a){return a;}f('Hello World!');")
998
+ end
999
+
1000
+ def on_run_script_custom(_evt)
1001
+ Wx.TextEntryDialog(
1002
+ self,
1003
+ "Please enter JavaScript code to execute",
1004
+ Wx::GET_TEXT_FROM_USER_PROMPT_STR,
1005
+ @javascript,
1006
+ Wx::OK | Wx::CANCEL | Wx::CENTRE | Wx::TE_MULTILINE) do |dialog|
1007
+ run_script(dialog.get_value) if dialog.show_modal == Wx::ID_OK
1008
+ end
1009
+ end
1010
+
1011
+ def on_add_user_script(_evt)
1012
+ userScript = "window.wx_test_var = 'wxWidgets webview sample';"
1013
+ Wx.TextEntryDialog(
1014
+ self,
1015
+ "Enter the JavaScript code to run as the initialization script that runs before any script in the HTML document.",
1016
+ Wx::GET_TEXT_FROM_USER_PROMPT_STR,
1017
+ userScript,
1018
+ Wx::OK | Wx::CANCEL | Wx::CENTRE | Wx::TE_MULTILINE) do |dialog|
1019
+ if dialog.show_modal == Wx::ID_OK
1020
+ Wx.log_error("Could not add user script") unless @browser.add_user_script(dialog.get_value)
1021
+ end
1022
+ end
1023
+ end
1024
+
1025
+ def on_set_custom_user_agent(_evt)
1026
+ customUserAgent = @browser.get_user_agent
1027
+ Wx.TextEntryDialog(
1028
+ self,
1029
+ "Enter the custom user agent string you would like to use.",
1030
+ Wx::GET_TEXT_FROM_USER_PROMPT_STR,
1031
+ customUserAgent,
1032
+ Wx::OK | Wx::CANCEL | Wx::CENTRE) do |dialog|
1033
+ if dialog.show_modal == Wx::ID_OK
1034
+ unless @browser.set_user_agent(customUserAgent)
1035
+ Wx.log_error("Could not set custom user agent")
1036
+ end
1037
+ end
1038
+ end
1039
+ end
1040
+
1041
+ class << self
1042
+ def get_proxy
1043
+ @proxy ||= ENV['http_proxy']
1044
+ end
1045
+ def set_proxy(proxy)
1046
+ @proxy = proxy
1047
+ end
1048
+ end
1049
+
1050
+ def on_set_proxy(_evt)
1051
+ proxy = Wx.get_text_from_user(
1052
+ "Enter the proxy to use",
1053
+ Wx::GET_TEXT_FROM_USER_PROMPT_STR,
1054
+ self.class.get_proxy,
1055
+ self)
1056
+
1057
+ unless proxy.empty?
1058
+ self.class.set_proxy(proxy)
1059
+
1060
+ Wx.log_error("Could not set proxy") unless @browser.set_proxy(proxy)
1061
+ end
1062
+ end
1063
+
1064
+ def on_clear_browsing_data(evt)
1065
+ since = Time.at(0)
1066
+ dataTypes = case evt.get_id
1067
+ when ID::CLEAR_BROWSING_DATA_ALL
1068
+ Wx::WEB::WEBVIEW_BROWSING_DATA_ALL
1069
+ when ID::CLEAR_BROWSING_DATA_CACHE
1070
+ Wx::WEB::WEBVIEW_BROWSING_DATA_CACHE
1071
+ when ID::CLEAR_BROWSING_DATA_COOKIES
1072
+ Wx::WEB::WEBVIEW_BROWSING_DATA_COOKIES
1073
+ when ID::CLEAR_BROWSING_DATA_DOM_STORAGE
1074
+ Wx::WEB::WEBVIEW_BROWSING_DATA_DOM_STORAGE
1075
+ when ID::CLEAR_BROWSING_DATA_OTHER
1076
+ Wx::WEB::WEBVIEW_BROWSING_DATA_OTHER
1077
+ when ID::CLEAR_BROWSING_DATA_LAST_HOUR
1078
+ Wx::WEB::WEBVIEW_BROWSING_DATA_ALL
1079
+ since = Time.now - 3600 # 1 hour old
1080
+ else
1081
+ Wx.log_error("Unexpected event ID")
1082
+ return
1083
+ end
1084
+
1085
+ unless @browser.clear_browsing_data(dataTypes, since)
1086
+ Wx.log_error("Clearing this browsing data type is not supported by this backend")
1087
+ end
1088
+ end
1089
+
1090
+ def on_clear_selection(_evt)
1091
+ @browser.clear_selection
1092
+ end
1093
+
1094
+ def on_delete_selection(_evt)
1095
+ @browser.delete_selection
1096
+ end
1097
+
1098
+ def on_select_all(_evt)
1099
+ @browser.select_all
1100
+ end
1101
+
1102
+ def on_load_scheme(_evt)
1103
+ pathlist = %w[. .. ../help ../../../samples/help]
1104
+ path = nil
1105
+ pathlist.each { |p| break if path; fp = File.join(__dir__, p, 'doc.zip'); path = File.realpath(fp, __dir__) if File.exist?(fp) }
1106
+ if path
1107
+ # Under MSW we need to flip the slashes
1108
+ path = path.gsub("\\", '/')
1109
+ path = 'wxfs:///' + path + ';protocol=zip/doc.htm'
1110
+ @browser.load_url(path)
1111
+ else
1112
+ Wx.log_error("Could not find doc.zip")
1113
+ end
1114
+ end
1115
+
1116
+ def on_use_memory_fs(_evt)
1117
+ @browser.load_url("memory:page1.htm")
1118
+ end
1119
+
1120
+ if ::Wx::WXWIDGETS_VERSION >= '3.3.0'
1121
+ def on_load_advanced_handler(_evt)
1122
+ pathlist = %w[. ..]
1123
+
1124
+ path = nil
1125
+ pathlist.filter_map { |p| break if path; fp = File.join(__dir__, p, 'handler_advanced.html'); path = File.realpath(fp, __dir__) if File.exist?(fp) }
1126
+ if path
1127
+ path = "file://" + path
1128
+ @browser.load_url(path)
1129
+ else
1130
+ Wx.log_error("Could not find handler_advanced.html")
1131
+ end
1132
+ end
1133
+ end
1134
+
1135
+ def on_find(_evt)
1136
+ value = @browser.get_selected_text
1137
+ value.slice(0, 150) if value.size > 150
1138
+ @find_ctrl.set_value(value)
1139
+ unless @find_toolbar.is_shown
1140
+ @find_toolbar.show(true)
1141
+ send_size_event
1142
+ end
1143
+ @find_ctrl.select_all
1144
+ end
1145
+
1146
+ def on_find_done(_evt)
1147
+ @browser.find("")
1148
+ @find_toolbar.show(false)
1149
+ send_size_event
1150
+ end
1151
+
1152
+ def on_find_text(evt)
1153
+ flags = Wx::WEB::WebViewFindFlags.new(0)
1154
+
1155
+ flags |= Wx::WEB::WEBVIEW_FIND_WRAP if @find_toolbar_wrap.is_checked
1156
+ flags |= Wx::WEB::WEBVIEW_FIND_ENTIRE_WORD if @find_toolbar_wholeword.is_checked
1157
+ flags |= Wx::WEB::WEBVIEW_FIND_MATCH_CASE if @find_toolbar_matchcase.is_checked
1158
+ flags |= Wx::WEB::WEBVIEW_FIND_HIGHLIGHT_RESULT if @find_toolbar_highlight.is_checked
1159
+
1160
+ flags |= Wx::WEB::WEBVIEW_FIND_BACKWARDS if @find_toolbar_previous.get_id == evt.get_id
1161
+
1162
+ find_text = @find_ctrl.get_value
1163
+ count = @browser.find(find_text, flags)
1164
+
1165
+ if @findText != find_text
1166
+ @findCount = count
1167
+ @findText = find_text
1168
+ end
1169
+
1170
+ if count != Wx::NOT_FOUND || find_text.empty?
1171
+ @find_ctrl.set_background_colour(Wx::WHITE)
1172
+ else
1173
+ @find_ctrl.set_background_colour(Wx::Colour.new(255, 101, 101))
1174
+ end
1175
+
1176
+ @find_ctrl.refresh
1177
+
1178
+ # Log the result, note that count is zero indexed.
1179
+ count += 1 if count != @findCount
1180
+ Wx.log_message("Searching for:%s current match:%d/%d", @findText, count, @findCount)
1181
+ end
1182
+
1183
+ # def on_find_options(evt)
1184
+ #
1185
+ # end
1186
+
1187
+ def on_enable_context_menu(evt)
1188
+ @browser.enable_context_menu(evt.is_checked)
1189
+ end
1190
+
1191
+ def on_enable_dev_tools(evt)
1192
+ @browser.enable_access_to_dev_tools(evt.is_checked)
1193
+ end
1194
+
1195
+ def on_show_dev_tools(_evt)
1196
+ Wx.log_warning("Failed to show development tools window") unless @browser.show_dev_tools
1197
+ end
1198
+
1199
+ def on_enable_browser_accelerator_keys(evt)
1200
+ @browser.enable_browser_accelerator_keys(evt.is_checked)
1201
+ end
1202
+
1203
+ private
1204
+ # Return a special prefix for the "private" ("incognito") window titles.
1205
+ def get_private_prefix
1206
+ @flags.allbits?(Private) ? '[Private] ' : ''
1207
+ end
1208
+
1209
+ end
1210
+
1211
+ class WVApp < Wx::App
1212
+ def on_init
1213
+ @url = 'https://github.com/mcorino/wxRuby3/wiki'
1214
+
1215
+ # Required for virtual file system archive and memory support
1216
+ Wx::FileSystem.add_handler(Wx::ArchiveFSHandler.new)
1217
+ Wx::FileSystem.add_handler(Wx::MemoryFSHandler.new)
1218
+
1219
+ # Create the memory files
1220
+ Wx::MemoryFSHandler::add_file("logo.png",
1221
+ Wx.Bitmap(:wxruby, Wx::BITMAP_TYPE_PNG, art_path: File.join(__dir__, '../art')),
1222
+ Wx::BITMAP_TYPE_PNG)
1223
+ Wx::MemoryFSHandler::add_file("page1.htm",
1224
+ "<html><head><title>File System Example</title>" \
1225
+ "<link rel='stylesheet' type='text/css' href='memory:test.css'>" \
1226
+ "</head><body><h1>Page 1</h1>" \
1227
+ "<p><img src='memory:logo.png'></p>" \
1228
+ "<p>Some text about <a href='memory:page2.htm'>Page 2</a>.</p></body></html>")
1229
+ Wx::MemoryFSHandler::add_file("page2.htm",
1230
+ "<html><head><title>File System Example</title>" \
1231
+ "<link rel='stylesheet' type='text/css' href='memory:test.css'>" \
1232
+ "</head><body><h1>Page 2</h1>" \
1233
+ "<p><a href='memory:page1.htm'>Page 1</a> was better.</p></body></html>")
1234
+ Wx::MemoryFSHandler::add_file("test.css", "h1 {color: red;}")
1235
+
1236
+ frame = WebFrame.new(@url, WebFrame::Main)
1237
+ frame.show
1238
+
1239
+ true
1240
+ end
1241
+
1242
+ end
1243
+
1244
+ end
1245
+
1246
+ module WebViewSample
1247
+
1248
+ include WxRuby::Sample if defined? WxRuby::Sample
1249
+
1250
+ def self.describe
1251
+ { file: __FILE__,
1252
+ summary: 'wxRuby WebView example.',
1253
+ description: 'wxRuby example displaying a frame window showcasing a WebView.' }
1254
+ end
1255
+
1256
+ def self.run
1257
+ execute(__FILE__)
1258
+ end
1259
+
1260
+ if $0 == __FILE__
1261
+ WebView::WVApp.run
1262
+ end
1263
+
1264
+ end