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.
- checksums.yaml +4 -4
- data/CREDITS.md +32 -25
- data/INSTALL.md +46 -6
- data/README.md +17 -17
- data/assets/repo-social-preview.odg +0 -0
- data/assets/repo-social-preview.xcf +0 -0
- data/ext/wxruby3/include/wxRubyApp.h +203 -91
- data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
- data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
- data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
- data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
- data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
- data/ext/wxruby3/include/wxruby-runtime.h +107 -1
- data/ext/wxruby3/swig/common.i +2 -2
- data/ext/wxruby3/swig/custom/director.swg +2 -2
- data/ext/wxruby3/swig/custom/rubyprimtypes.swg +59 -15
- data/ext/wxruby3/swig/custom/rubyrun.swg +4 -0
- data/ext/wxruby3/swig/custom/rubytracking.swg +9 -19
- data/ext/wxruby3/swig/custom/swiglabels.swg +129 -0
- data/ext/wxruby3/swig/custom/swigrun.swg +15 -0
- data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +20 -0
- data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
- data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
- data/ext/wxruby3/swig/mark_free_impl.i +83 -144
- data/ext/wxruby3/swig/memory_management.i +8 -43
- data/ext/wxruby3/swig/wx.i +88 -86
- data/lib/wx/aui/events/evt_list.rb +148 -0
- data/lib/wx/aui/require.rb +0 -1
- data/lib/wx/core/calendar_ctrl.rb +15 -0
- data/lib/wx/core/clipboard.rb +9 -13
- data/lib/wx/core/config.rb +1 -1
- data/lib/wx/core/const.rb +0 -1
- data/lib/wx/core/context_help.rb +17 -0
- data/lib/wx/core/cursor.rb +1 -0
- data/lib/wx/core/events/evt_list.rb +1458 -0
- data/lib/wx/core/font/encoding.rb +113 -0
- data/lib/wx/core/generic_validator.rb +83 -31
- data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
- data/lib/wx/core/mbconv.rb +11 -0
- data/lib/wx/core/media_ctrl.rb +31 -0
- data/lib/wx/core/tipwindow.rb +16 -0
- data/lib/wx/core/top_level_window.rb +7 -0
- data/lib/wx/core.rb +6 -0
- data/lib/wx/doc/art_provider.rb +17 -0
- data/lib/wx/doc/aui/auitabctrl.rb +35 -0
- data/lib/wx/doc/config.rb +2 -2
- data/lib/wx/doc/context_help.rb +42 -0
- data/lib/wx/doc/core.rb +0 -5
- data/lib/wx/doc/functions.rb +11 -1
- data/lib/wx/doc/gen/about_dialog_info.rb +330 -0
- data/lib/wx/doc/gen/accelerator.rb +178 -0
- data/lib/wx/doc/gen/activity_indicator.rb +83 -0
- data/lib/wx/doc/gen/affine_matrix2d.rb +286 -0
- data/lib/wx/doc/gen/animation.rb +275 -0
- data/lib/wx/doc/gen/animation_ctrl.rb +300 -0
- data/lib/wx/doc/gen/any_button.rb +191 -0
- data/lib/wx/doc/gen/app.rb +463 -0
- data/lib/wx/doc/gen/app_traits.rb +396 -0
- data/lib/wx/doc/gen/art_provider.rb +617 -0
- data/lib/wx/doc/gen/aui/aui_dock_art.rb +455 -0
- data/lib/wx/doc/gen/aui/aui_floating_frame.rb +54 -0
- data/lib/wx/doc/gen/aui/aui_manager.rb +847 -0
- data/lib/wx/doc/gen/aui/aui_manager_event.rb +131 -0
- data/lib/wx/doc/gen/aui/aui_mdi_child_frame.rb +180 -0
- data/lib/wx/doc/gen/aui/aui_mdi_client_window.rb +59 -0
- data/lib/wx/doc/gen/aui/aui_mdi_parent_frame.rb +130 -0
- data/lib/wx/doc/gen/aui/aui_notebook.rb +631 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +233 -0
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +769 -0
- data/lib/wx/doc/gen/aui/aui_tab_art.rb +352 -0
- data/lib/wx/doc/gen/aui/aui_tab_ctrl.rb +14 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar.rb +510 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_art.rb +340 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +244 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar_item.rb +257 -0
- data/lib/wx/doc/gen/aui/event_list.rb +179 -0
- data/lib/wx/doc/gen/banner_window.rb +124 -0
- data/lib/wx/doc/gen/bitmap.rb +731 -0
- data/lib/wx/doc/gen/bitmap_button.rb +123 -0
- data/lib/wx/doc/gen/bitmap_combo_box.rb +221 -0
- data/lib/wx/doc/gen/book_ctrl_base.rb +274 -0
- data/lib/wx/doc/gen/book_ctrl_event.rb +66 -0
- data/lib/wx/doc/gen/box_sizer.rb +85 -0
- data/lib/wx/doc/gen/brush.rb +251 -0
- data/lib/wx/doc/gen/busy_info.rb +157 -0
- data/lib/wx/doc/gen/button.rb +182 -0
- data/lib/wx/doc/gen/calculate_layout_event.rb +62 -0
- data/lib/wx/doc/gen/calendar_ctrl.rb +505 -0
- data/lib/wx/doc/gen/calendar_date_attr.rb +138 -0
- data/lib/wx/doc/gen/calendar_event.rb +147 -0
- data/lib/wx/doc/gen/caret.rb +97 -0
- data/lib/wx/doc/gen/check_box.rb +175 -0
- data/lib/wx/doc/gen/check_list_box.rb +121 -0
- data/lib/wx/doc/gen/choice.rb +175 -0
- data/lib/wx/doc/gen/choicebook.rb +116 -0
- data/lib/wx/doc/gen/client_dc.rb +43 -0
- data/lib/wx/doc/gen/clipboard.rb +144 -0
- data/lib/wx/doc/gen/collapsible_pane.rb +138 -0
- data/lib/wx/doc/gen/collapsible_pane_event.rb +46 -0
- data/lib/wx/doc/gen/colour.rb +333 -0
- data/lib/wx/doc/gen/colour_dialog.rb +190 -0
- data/lib/wx/doc/gen/colour_picker_ctrl.rb +110 -0
- data/lib/wx/doc/gen/colour_picker_event.rb +77 -0
- data/lib/wx/doc/gen/combo_box.rb +292 -0
- data/lib/wx/doc/gen/combo_ctrl.rb +662 -0
- data/lib/wx/doc/gen/command_link_button.rb +134 -0
- data/lib/wx/doc/gen/config_base.rb +10 -0
- data/lib/wx/doc/gen/context_help_button.rb +56 -0
- data/lib/wx/doc/gen/control.rb +277 -0
- data/lib/wx/doc/gen/control_with_items.rb +253 -0
- data/lib/wx/doc/gen/core.rb +45 -0
- data/lib/wx/doc/gen/credential_entry_dialog.rb +137 -0
- data/lib/wx/doc/gen/cursor.rb +193 -0
- data/lib/wx/doc/gen/data_format.rb +85 -0
- data/lib/wx/doc/gen/data_object.rb +436 -0
- data/lib/wx/doc/gen/data_object_simple_base.rb +10 -0
- data/lib/wx/doc/gen/date_event.rb +49 -0
- data/lib/wx/doc/gen/date_picker_ctrl.rb +161 -0
- data/lib/wx/doc/gen/dc.rb +1631 -0
- data/lib/wx/doc/gen/dc_overlay.rb +102 -0
- data/lib/wx/doc/gen/defs.rb +2802 -0
- data/lib/wx/doc/gen/dial_up_event.rb +45 -0
- data/lib/wx/doc/gen/dial_up_manager.rb +149 -0
- data/lib/wx/doc/gen/dialog.rb +541 -0
- data/lib/wx/doc/gen/dir_dialog.rb +164 -0
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +90 -0
- data/lib/wx/doc/gen/dir_picker_ctrl.rb +125 -0
- data/lib/wx/doc/gen/display.rb +238 -0
- data/lib/wx/doc/gen/drag_drop.rb +299 -0
- data/lib/wx/doc/gen/drag_image.rb +116 -0
- data/lib/wx/doc/gen/editable_list_box.rb +109 -0
- data/lib/wx/doc/gen/event.rb +990 -0
- data/lib/wx/doc/gen/event_blocker.rb +50 -0
- data/lib/wx/doc/gen/event_filter.rb +92 -0
- data/lib/wx/doc/gen/event_list.rb +1644 -0
- data/lib/wx/doc/gen/events.rb +2809 -0
- data/lib/wx/doc/gen/evt_handler.rb +229 -0
- data/lib/wx/doc/gen/ext_help_controller.rb +155 -0
- data/lib/wx/doc/gen/file_ctrl.rb +231 -0
- data/lib/wx/doc/gen/file_ctrl_event.rb +83 -0
- data/lib/wx/doc/gen/file_dialog.rb +353 -0
- data/lib/wx/doc/gen/file_dialog_custom_control.rb +165 -0
- data/lib/wx/doc/gen/file_dialog_customize_hook.rb +158 -0
- data/lib/wx/doc/gen/file_dir_picker_event.rb +100 -0
- data/lib/wx/doc/gen/file_picker_ctrl.rb +132 -0
- data/lib/wx/doc/gen/file_system.rb +232 -0
- data/lib/wx/doc/gen/find_dialog_event.rb +126 -0
- data/lib/wx/doc/gen/find_replace_data.rb +60 -0
- data/lib/wx/doc/gen/find_replace_dialog.rb +58 -0
- data/lib/wx/doc/gen/flex_grid_sizer.rb +199 -0
- data/lib/wx/doc/gen/font.rb +1379 -0
- data/lib/wx/doc/gen/font_data.rb +151 -0
- data/lib/wx/doc/gen/font_dialog.rb +88 -0
- data/lib/wx/doc/gen/font_picker_ctrl.rb +143 -0
- data/lib/wx/doc/gen/font_picker_event.rb +65 -0
- data/lib/wx/doc/gen/frame.rb +352 -0
- data/lib/wx/doc/gen/fs_file.rb +337 -0
- data/lib/wx/doc/gen/functions.rb +10 -0
- data/lib/wx/doc/gen/gauge.rb +157 -0
- data/lib/wx/doc/gen/gb_sizer_item.rb +68 -0
- data/lib/wx/doc/gen/gcdc.rb +46 -0
- data/lib/wx/doc/gen/gdi_common.rb +1271 -0
- data/lib/wx/doc/gen/gdi_object.rb +31 -0
- data/lib/wx/doc/gen/generic_about_dialog.rb +140 -0
- data/lib/wx/doc/gen/generic_dir_ctrl.rb +223 -0
- data/lib/wx/doc/gen/geometry.rb +661 -0
- data/lib/wx/doc/gen/graphics_context.rb +1184 -0
- data/lib/wx/doc/gen/graphics_object.rb +750 -0
- data/lib/wx/doc/gen/grid/event_list.rb +191 -0
- data/lib/wx/doc/gen/grid/grid_cell_activatable_editor.rb +40 -0
- data/lib/wx/doc/gen/grid/grid_cell_attr.rb +280 -0
- data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_editor.rb +35 -0
- data/lib/wx/doc/gen/grid/grid_cell_auto_wrap_string_renderer.rb +37 -0
- data/lib/wx/doc/gen/grid/grid_cell_bool_editor.rb +49 -0
- data/lib/wx/doc/gen/grid/grid_cell_bool_renderer.rb +35 -0
- data/lib/wx/doc/gen/grid/grid_cell_choice_editor.rb +46 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_editor.rb +38 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_renderer.rb +45 -0
- data/lib/wx/doc/gen/grid/grid_cell_date_time_renderer.rb +40 -0
- data/lib/wx/doc/gen/grid/grid_cell_editor.rb +197 -0
- data/lib/wx/doc/gen/grid/grid_cell_enum_editor.rb +39 -0
- data/lib/wx/doc/gen/grid/grid_cell_enum_renderer.rb +44 -0
- data/lib/wx/doc/gen/grid/grid_cell_float_editor.rb +45 -0
- data/lib/wx/doc/gen/grid/grid_cell_float_renderer.rb +79 -0
- data/lib/wx/doc/gen/grid/grid_cell_number_editor.rb +46 -0
- data/lib/wx/doc/gen/grid/grid_cell_number_renderer.rb +35 -0
- data/lib/wx/doc/gen/grid/grid_cell_renderer.rb +108 -0
- data/lib/wx/doc/gen/grid/grid_cell_string_renderer.rb +35 -0
- data/lib/wx/doc/gen/grid/grid_cell_text_editor.rb +49 -0
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +3037 -0
- data/lib/wx/doc/gen/grid/grid_editor_created_event.rb +95 -0
- data/lib/wx/doc/gen/grid/grid_event.rb +129 -0
- data/lib/wx/doc/gen/grid/grid_range_select_event.rb +104 -0
- data/lib/wx/doc/gen/grid/grid_size_event.rb +85 -0
- data/lib/wx/doc/gen/grid/grid_string_table.rb +142 -0
- data/lib/wx/doc/gen/grid/grid_table_base.rb +317 -0
- data/lib/wx/doc/gen/grid/grid_table_message.rb +81 -0
- data/lib/wx/doc/gen/grid_bag_sizer.rb +323 -0
- data/lib/wx/doc/gen/grid_sizer.rb +195 -0
- data/lib/wx/doc/gen/gui_event_loop.rb +159 -0
- data/lib/wx/doc/gen/h_scrolled_window.rb +562 -0
- data/lib/wx/doc/gen/header_ctrl.rb +880 -0
- data/lib/wx/doc/gen/header_ctrl_event.rb +133 -0
- data/lib/wx/doc/gen/help_controller.rb +238 -0
- data/lib/wx/doc/gen/help_provider.rb +98 -0
- data/lib/wx/doc/gen/html/event_list.rb +38 -0
- data/lib/wx/doc/gen/html/html_cell.rb +536 -0
- data/lib/wx/doc/gen/html/html_cell_event.rb +69 -0
- data/lib/wx/doc/gen/html/html_data_object.rb +42 -0
- data/lib/wx/doc/gen/html/html_easy_printing.rb +203 -0
- data/lib/wx/doc/gen/html/html_help_controller.rb +382 -0
- data/lib/wx/doc/gen/html/html_help_data.rb +159 -0
- data/lib/wx/doc/gen/html/html_help_window.rb +258 -0
- data/lib/wx/doc/gen/html/html_link_event.rb +41 -0
- data/lib/wx/doc/gen/html/html_list_box.rb +346 -0
- data/lib/wx/doc/gen/html/html_printout.rb +109 -0
- data/lib/wx/doc/gen/html/html_window.rb +461 -0
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +311 -0
- data/lib/wx/doc/gen/hyperlink_event.rb +44 -0
- data/lib/wx/doc/gen/icon.rb +267 -0
- data/lib/wx/doc/gen/icon_location.rb +40 -0
- data/lib/wx/doc/gen/image.rb +1371 -0
- data/lib/wx/doc/gen/image_list.rb +168 -0
- data/lib/wx/doc/gen/info_bar.rb +195 -0
- data/lib/wx/doc/gen/keyboard_state.rb +140 -0
- data/lib/wx/doc/gen/list_box.rb +304 -0
- data/lib/wx/doc/gen/list_ctrl.rb +1774 -0
- data/lib/wx/doc/gen/list_event.rb +208 -0
- data/lib/wx/doc/gen/listbook.rb +116 -0
- data/lib/wx/doc/gen/locale.rb +4293 -0
- data/lib/wx/doc/gen/log.rb +603 -0
- data/lib/wx/doc/gen/mb_conv.rb +10 -0
- data/lib/wx/doc/gen/mdi_client_window.rb +47 -0
- data/lib/wx/doc/gen/mdi_frame.rb +324 -0
- data/lib/wx/doc/gen/media_ctrl.rb +269 -0
- data/lib/wx/doc/gen/media_event.rb +117 -0
- data/lib/wx/doc/gen/memory_dc.rb +174 -0
- data/lib/wx/doc/gen/menu.rb +509 -0
- data/lib/wx/doc/gen/menu_bar.rb +287 -0
- data/lib/wx/doc/gen/menu_item.rb +362 -0
- data/lib/wx/doc/gen/message_dialog.rb +238 -0
- data/lib/wx/doc/gen/mini_frame.rb +108 -0
- data/lib/wx/doc/gen/mirror_dc.rb +22 -0
- data/lib/wx/doc/gen/mouse_state.rb +150 -0
- data/lib/wx/doc/gen/multi_choice_dialog.rb +80 -0
- data/lib/wx/doc/gen/non_owned_window.rb +49 -0
- data/lib/wx/doc/gen/notebook.rb +278 -0
- data/lib/wx/doc/gen/num_validator.rb +37 -0
- data/lib/wx/doc/gen/number_entry_dialog.rb +93 -0
- data/lib/wx/doc/gen/object.rb +59 -0
- data/lib/wx/doc/gen/owner_drawn_combo_box.rb +395 -0
- data/lib/wx/doc/gen/paint_dc.rb +27 -0
- data/lib/wx/doc/gen/palette.rb +92 -0
- data/lib/wx/doc/gen/panel.rb +127 -0
- data/lib/wx/doc/gen/pen.rb +511 -0
- data/lib/wx/doc/gen/persistence_manager.rb +135 -0
- data/lib/wx/doc/gen/persistent_object.rb +52 -0
- data/lib/wx/doc/gen/persistent_window.rb +241 -0
- data/lib/wx/doc/gen/pg/event_list.rb +106 -0
- data/lib/wx/doc/gen/pg/numeric_property_validator.rb +54 -0
- data/lib/wx/doc/gen/pg/pg_array_editor_dialog.rb +292 -0
- data/lib/wx/doc/gen/pg/pg_cell.rb +177 -0
- data/lib/wx/doc/gen/pg/pg_editor.rb +721 -0
- data/lib/wx/doc/gen/pg/pg_multi_button.rb +152 -0
- data/lib/wx/doc/gen/pg/pg_properties.rb +2829 -0
- data/lib/wx/doc/gen/pg/pg_property.rb +2078 -0
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +344 -0
- data/lib/wx/doc/gen/pg/property_grid.rb +740 -0
- data/lib/wx/doc/gen/pg/property_grid_event.rb +184 -0
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +1098 -0
- data/lib/wx/doc/gen/pg/property_grid_manager.rb +415 -0
- data/lib/wx/doc/gen/pg/property_grid_page.rb +354 -0
- data/lib/wx/doc/gen/pg/property_grid_page_state.rb +165 -0
- data/lib/wx/doc/gen/picker_base.rb +152 -0
- data/lib/wx/doc/gen/platform_info.rb +622 -0
- data/lib/wx/doc/gen/popup_window.rb +107 -0
- data/lib/wx/doc/gen/progress_dialog.rb +100 -0
- data/lib/wx/doc/gen/property_sheet_dialog.rb +216 -0
- data/lib/wx/doc/gen/prt/event_list.rb +17 -0
- data/lib/wx/doc/gen/prt/page_setup_dialog.rb +44 -0
- data/lib/wx/doc/gen/prt/post_script_dc.rb +30 -0
- data/lib/wx/doc/gen/prt/preview_frame.rb +78 -0
- data/lib/wx/doc/gen/prt/print_abort_dialog.rb +151 -0
- data/lib/wx/doc/gen/prt/print_data.rb +804 -0
- data/lib/wx/doc/gen/prt/print_dialog.rb +55 -0
- data/lib/wx/doc/gen/prt/printer.rb +518 -0
- data/lib/wx/doc/gen/prt/printer_dc.rb +37 -0
- data/lib/wx/doc/gen/query_layout_info_event.rb +106 -0
- data/lib/wx/doc/gen/radio_box.rb +306 -0
- data/lib/wx/doc/gen/radio_button.rb +159 -0
- data/lib/wx/doc/gen/rbn/event_list.rb +136 -0
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +1142 -0
- data/lib/wx/doc/gen/rbn/ribbon_bar.rb +308 -0
- data/lib/wx/doc/gen/rbn/ribbon_bar_event.rb +45 -0
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +458 -0
- data/lib/wx/doc/gen/rbn/ribbon_button_bar_event.rb +63 -0
- data/lib/wx/doc/gen/rbn/ribbon_control.rb +143 -0
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +229 -0
- data/lib/wx/doc/gen/rbn/ribbon_gallery_event.rb +55 -0
- data/lib/wx/doc/gen/rbn/ribbon_page.rb +174 -0
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +270 -0
- data/lib/wx/doc/gen/rbn/ribbon_panel_event.rb +45 -0
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +360 -0
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar_event.rb +42 -0
- data/lib/wx/doc/gen/rearrange_ctrl.rb +78 -0
- data/lib/wx/doc/gen/rearrange_list.rb +123 -0
- data/lib/wx/doc/gen/region.rb +380 -0
- data/lib/wx/doc/gen/region_iterator.rb +76 -0
- data/lib/wx/doc/gen/rich_tool_tip.rb +154 -0
- data/lib/wx/doc/gen/rt/event_list.rb +17 -0
- data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
- data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
- data/lib/wx/doc/gen/rtc/event_list.rb +125 -0
- data/lib/wx/doc/gen/rtc/rich_text_box.rb +445 -0
- data/lib/wx/doc/gen/rtc/rich_text_buffer.rb +1188 -0
- data/lib/wx/doc/gen/rtc/rich_text_buffer_data_object.rb +41 -0
- data/lib/wx/doc/gen/rtc/rich_text_composite_object.rb +538 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +2103 -0
- data/lib/wx/doc/gen/rtc/rich_text_event.rb +173 -0
- data/lib/wx/doc/gen/rtc/rich_text_file_handler.rb +181 -0
- data/lib/wx/doc/gen/rtc/rich_text_formatting_dialog.rb +319 -0
- data/lib/wx/doc/gen/rtc/rich_text_header_footer_data.rb +193 -0
- data/lib/wx/doc/gen/rtc/rich_text_html_handler.rb +102 -0
- data/lib/wx/doc/gen/rtc/rich_text_image.rb +337 -0
- data/lib/wx/doc/gen/rtc/rich_text_object.rb +2922 -0
- data/lib/wx/doc/gen/rtc/rich_text_paragraph_layout_box.rb +1240 -0
- data/lib/wx/doc/gen/rtc/rich_text_printing.rb +258 -0
- data/lib/wx/doc/gen/rtc/rich_text_style_list_box.rb +344 -0
- data/lib/wx/doc/gen/rtc/rich_text_style_organiser_dialog.rb +227 -0
- data/lib/wx/doc/gen/rtc/rich_text_xml_handler.rb +59 -0
- data/lib/wx/doc/gen/rtc/symbol_picker_dialog.rb +169 -0
- data/lib/wx/doc/gen/sash_event.rb +147 -0
- data/lib/wx/doc/gen/sash_layout_window.rb +232 -0
- data/lib/wx/doc/gen/sash_window.rb +171 -0
- data/lib/wx/doc/gen/scaled_dc.rb +10 -0
- data/lib/wx/doc/gen/screen_dc.rb +30 -0
- data/lib/wx/doc/gen/scroll_bar.rb +204 -0
- data/lib/wx/doc/gen/scrolled_canvas.rb +410 -0
- data/lib/wx/doc/gen/scrolled_control.rb +410 -0
- data/lib/wx/doc/gen/scrolled_window.rb +430 -0
- data/lib/wx/doc/gen/search_ctrl.rb +159 -0
- data/lib/wx/doc/gen/secret_store.rb +116 -0
- data/lib/wx/doc/gen/simplebook.rb +110 -0
- data/lib/wx/doc/gen/single_choice_dialog.rb +89 -0
- data/lib/wx/doc/gen/sizer.rb +945 -0
- data/lib/wx/doc/gen/sizer_item.rb +244 -0
- data/lib/wx/doc/gen/slider.rb +342 -0
- data/lib/wx/doc/gen/spin_button.rb +157 -0
- data/lib/wx/doc/gen/spin_ctrl.rb +231 -0
- data/lib/wx/doc/gen/spin_ctrl_double.rb +192 -0
- data/lib/wx/doc/gen/spin_double_event.rb +55 -0
- data/lib/wx/doc/gen/spin_event.rb +51 -0
- data/lib/wx/doc/gen/splash_screen.rb +113 -0
- data/lib/wx/doc/gen/splitter_event.rb +99 -0
- data/lib/wx/doc/gen/splitter_window.rb +498 -0
- data/lib/wx/doc/gen/static_bitmap.rb +256 -0
- data/lib/wx/doc/gen/static_box.rb +180 -0
- data/lib/wx/doc/gen/static_box_sizer.rb +85 -0
- data/lib/wx/doc/gen/static_line.rb +83 -0
- data/lib/wx/doc/gen/static_text.rb +127 -0
- data/lib/wx/doc/gen/status_bar.rb +290 -0
- data/lib/wx/doc/gen/stc/event_list.rb +221 -0
- data/lib/wx/doc/gen/stc/styled_text_ctrl.rb +4474 -0
- data/lib/wx/doc/gen/stc/styled_text_event.rb +8762 -0
- data/lib/wx/doc/gen/std_dialog_button_sizer.rb +129 -0
- data/lib/wx/doc/gen/svg_file_dc.rb +164 -0
- data/lib/wx/doc/gen/system_options.rb +129 -0
- data/lib/wx/doc/gen/system_settings.rb +507 -0
- data/lib/wx/doc/gen/task_bar_icon.rb +127 -0
- data/lib/wx/doc/gen/task_bar_icon_event.rb +88 -0
- data/lib/wx/doc/gen/text_attr.rb +756 -0
- data/lib/wx/doc/gen/text_ctrl.rb +1033 -0
- data/lib/wx/doc/gen/text_entry.rb +441 -0
- data/lib/wx/doc/gen/text_entry_dialog.rb +220 -0
- data/lib/wx/doc/gen/text_validator.rb +245 -0
- data/lib/wx/doc/gen/time_picker_ctrl.rb +128 -0
- data/lib/wx/doc/gen/timer.rb +119 -0
- data/lib/wx/doc/gen/timer_event.rb +68 -0
- data/lib/wx/doc/gen/tip_provider.rb +63 -0
- data/lib/wx/doc/gen/tip_window.rb +51 -0
- data/lib/wx/doc/gen/toggle_button.rb +182 -0
- data/lib/wx/doc/gen/tool_bar.rb +890 -0
- data/lib/wx/doc/gen/tool_tip.rb +86 -0
- data/lib/wx/doc/gen/toolbook.rb +118 -0
- data/lib/wx/doc/gen/top_level_window.rb +516 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +1052 -0
- data/lib/wx/doc/gen/tree_event.rb +127 -0
- data/lib/wx/doc/gen/treebook.rb +180 -0
- data/lib/wx/doc/gen/ui_action_simulator.rb +109 -0
- data/lib/wx/doc/gen/utils.rb +273 -0
- data/lib/wx/doc/gen/v_list_box.rb +272 -0
- data/lib/wx/doc/gen/v_scrolled_canvas.rb +195 -0
- data/lib/wx/doc/gen/v_scrolled_window.rb +191 -0
- data/lib/wx/doc/gen/validator.rb +68 -0
- data/lib/wx/doc/gen/variant.rb +294 -0
- data/lib/wx/doc/gen/web/event_list.rb +95 -0
- data/lib/wx/doc/gen/web/web_view.rb +1136 -0
- data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
- data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
- data/lib/wx/doc/gen/window.rb +2917 -0
- data/lib/wx/doc/gen/window_dc.rb +38 -0
- data/lib/wx/doc/gen/window_disabler.rb +30 -0
- data/lib/wx/doc/gen/with_images.rb +84 -0
- data/lib/wx/doc/gen/wizard.rb +257 -0
- data/lib/wx/doc/gen/wizard_event.rb +113 -0
- data/lib/wx/doc/gen/wizard_page.rb +65 -0
- data/lib/wx/doc/gen/wizard_page_simple.rb +88 -0
- data/lib/wx/doc/gen/wrap_sizer.rb +79 -0
- data/lib/wx/doc/gen/xml_node.rb +316 -0
- data/lib/wx/doc/gen/xml_resource.rb +320 -0
- data/lib/wx/doc/generic_validator.rb +5 -0
- data/lib/wx/doc/html/html_help_controller.rb +23 -1
- data/lib/wx/doc/mbconv.rb +108 -0
- data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
- data/lib/wx/doc/rt/thread_event.rb +28 -0
- data/lib/wx/doc/tip_window.rb +18 -6
- data/lib/wx/doc/webview.rb +40 -0
- data/lib/wx/grid/events/evt_list.rb +166 -0
- data/lib/wx/helpers.rb +1 -1
- data/lib/wx/html/events/evt_list.rb +27 -0
- data/lib/wx/html/htmlhelpcontroller.rb +10 -0
- data/lib/wx/html/simple_html_listbox.rb +46 -33
- data/lib/wx/keyword_defs.rb +20 -0
- data/lib/wx/pg/events/evt_list.rb +73 -0
- data/lib/wx/pg/pg_property.rb +26 -0
- data/lib/wx/pg/property_grid_interface.rb +2 -2
- data/lib/wx/rbn/events/evt_list.rb +102 -0
- data/lib/wx/rt/events/evt_list.rb +8 -0
- data/lib/wx/rt/require.rb +8 -0
- data/lib/wx/rt/thread_event.rb +14 -0
- data/lib/wx/rt.rb +16 -0
- data/lib/wx/rtc/events/evt_list.rb +98 -0
- data/lib/wx/rtc/ext/rich_text_ctrl.rb +24 -0
- data/lib/wx/stc/events/evt_list.rb +178 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/web/events/evt_list.rb +74 -0
- data/lib/wx/web/require.rb +8 -0
- data/lib/wx/web/webview.rb +106 -0
- data/lib/wx/web.rb +17 -0
- data/lib/wx/wxruby/cmd/setup.rb +21 -0
- data/lib/wx.rb +2 -0
- data/rakelib/configure.rb +33 -0
- data/rakelib/gem.rake +3 -2
- data/rakelib/gem.rb +3 -2
- data/rakelib/install.rb +54 -27
- data/rakelib/lib/config/linux.rb +1 -1
- data/rakelib/lib/config/macosx.rb +22 -6
- data/rakelib/lib/config/mingw.rb +66 -5
- data/rakelib/lib/config/pkgman/linux.rb +7 -2
- data/rakelib/lib/config/pkgman/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +7 -5
- data/rakelib/lib/config.rb +52 -7
- data/rakelib/lib/core/include/client_data.inc +38 -17
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/include/swigdirector.inc +6 -6
- data/rakelib/lib/core/include/swigrubyerrors.inc +4 -8
- data/rakelib/lib/core/include/swigrubyrun.inc +34 -30
- data/rakelib/lib/core/include/swigrun.inc +189 -0
- data/rakelib/lib/core/package.rb +3 -3
- data/rakelib/lib/director/accelerator.rb +1 -1
- data/rakelib/lib/director/animation.rb +1 -0
- data/rakelib/lib/director/app.rb +1 -8
- data/rakelib/lib/director/app_traits.rb +1 -1
- data/rakelib/lib/director/art_provider.rb +7 -3
- data/rakelib/lib/director/aui_manager.rb +21 -14
- data/rakelib/lib/director/aui_mdi_child_frame.rb +2 -0
- data/rakelib/lib/director/aui_mdi_parent_frame.rb +4 -0
- data/rakelib/lib/director/aui_notebook.rb +20 -3
- data/rakelib/lib/director/aui_tab_ctrl.rb +64 -106
- data/rakelib/lib/director/calendar_ctrl.rb +72 -14
- data/rakelib/lib/director/clipboard.rb +2 -0
- data/rakelib/lib/director/comboctrl.rb +0 -7
- data/rakelib/lib/director/context_help_button.rb +35 -2
- data/rakelib/lib/director/data_object.rb +15 -7
- data/rakelib/lib/director/date_picker_ctrl.rb +4 -1
- data/rakelib/lib/director/display.rb +81 -0
- data/rakelib/lib/director/event.rb +33 -16
- data/rakelib/lib/director/event_handler.rb +59 -30
- data/rakelib/lib/director/fs_file.rb +15 -10
- data/rakelib/lib/director/functions.rb +17 -0
- data/rakelib/lib/director/geometry.rb +5 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +14 -12
- data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
- data/rakelib/lib/director/grid_ctrl.rb +231 -117
- data/rakelib/lib/director/help_controller.rb +70 -2
- data/rakelib/lib/director/help_provider.rb +1 -1
- data/rakelib/lib/director/html_listbox.rb +16 -3
- data/rakelib/lib/director/hvscrolled.rb +7 -106
- data/rakelib/lib/director/image_list.rb +1 -0
- data/rakelib/lib/director/mb_conv.rb +30 -0
- data/rakelib/lib/director/mdi_frame.rb +4 -0
- data/rakelib/lib/director/menu.rb +113 -22
- data/rakelib/lib/director/menu_bar.rb +103 -2
- data/rakelib/lib/director/menu_item.rb +7 -1
- data/rakelib/lib/director/num_validator.rb +27 -0
- data/rakelib/lib/director/numeric_property_validator.rb +9 -0
- data/rakelib/lib/director/persistence_manager.rb +3 -2
- data/rakelib/lib/director/popup_window.rb +2 -0
- data/rakelib/lib/director/preview_frame.rb +28 -5
- data/rakelib/lib/director/printer.rb +59 -5
- data/rakelib/lib/director/property_grid.rb +37 -18
- data/rakelib/lib/director/property_grid_interface.rb +10 -8
- data/rakelib/lib/director/property_grid_manager.rb +99 -39
- data/rakelib/lib/director/property_grid_page.rb +60 -0
- data/rakelib/lib/director/rich_tooltip.rb +22 -0
- data/rakelib/lib/director/richtext_buffer.rb +5 -2
- data/rakelib/lib/director/richtext_ctrl.rb +5 -0
- data/rakelib/lib/director/richtext_object.rb +13 -4
- data/rakelib/lib/director/richtext_style_listbox.rb +4 -1
- data/rakelib/lib/director/scrolled_t.rb +3 -0
- data/rakelib/lib/director/searchctrl.rb +1 -0
- data/rakelib/lib/director/shared_evt_handler.rb +30 -0
- data/rakelib/lib/director/sizer.rb +8 -17
- data/rakelib/lib/director/sizer_item.rb +3 -4
- data/rakelib/lib/director/task_bar_icon.rb +18 -12
- data/rakelib/lib/director/text_validator.rb +9 -0
- data/rakelib/lib/director/thread_event.rb +33 -0
- data/rakelib/lib/director/tip_window.rb +117 -6
- data/rakelib/lib/director/tool_bar.rb +6 -0
- data/rakelib/lib/director/validator.rb +15 -1
- data/rakelib/lib/director/variant.rb +48 -28
- data/rakelib/lib/director/vlistbox.rb +25 -22
- data/rakelib/lib/director/webview.rb +166 -0
- data/rakelib/lib/director/webview_event.rb +37 -0
- data/rakelib/lib/director/webview_handler.rb +63 -0
- data/rakelib/lib/director/window.rb +10 -1
- data/rakelib/lib/director/xml_resource.rb +6 -0
- data/rakelib/lib/generate/doc/aui_manager.yaml +1 -1
- data/rakelib/lib/generate/doc/rich_tool_tip.yaml +26 -0
- data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
- data/rakelib/lib/generate/doc/web_view.yaml +135 -0
- data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
- data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
- data/rakelib/lib/generate/doc.rb +12 -7
- data/rakelib/lib/generate/interface.rb +16 -1
- data/rakelib/lib/specs/interfaces.rb +15 -1
- data/rakelib/lib/swig_runner.rb +10 -10
- data/rakelib/lib/typemap/aui_tabctrl.rb +46 -0
- data/rakelib/lib/typemap/common.rb +37 -4
- data/rakelib/lib/typemap/mb_conv.rb +58 -0
- data/rakelib/lib/typemap/print_page_range.rb +32 -8
- data/rakelib/prepost.rake +23 -31
- data/rakelib/prepost.rb +20 -0
- data/samples/art/wxruby-512x512.png +0 -0
- data/samples/calendar/calendar.rb +64 -1
- data/samples/dialogs/dialogs.rb +172 -0
- data/samples/dialogs/tip.xpm +157 -0
- data/samples/drawing/maths_images.rb +1 -1
- data/samples/event/event.rb +1 -1
- data/samples/event/threaded.rb +295 -42
- data/samples/event/tn_threaded.png +0 -0
- data/samples/help/doc/back.gif +0 -0
- data/samples/help/doc/contents.gif +0 -0
- data/samples/help/doc/cshelp.txt +9 -0
- data/samples/help/doc/doc.chm +0 -0
- data/samples/help/doc/doc.cnt +8 -0
- data/samples/help/doc/doc.h +7 -0
- data/samples/help/doc/doc.hhc +40 -0
- data/samples/help/doc/doc.hhk +31 -0
- data/samples/help/doc/doc.hhp +33 -0
- data/samples/help/doc/doc.hpj +21 -0
- data/samples/help/doc/doc.htm +27 -0
- data/samples/help/doc/doc1.htm +24 -0
- data/samples/help/doc/doc2.htm +12 -0
- data/samples/help/doc/doc3.htm +12 -0
- data/samples/help/doc/doc4.htm +12 -0
- data/samples/help/doc/doc5.htm +14 -0
- data/samples/help/doc/forward.gif +0 -0
- data/samples/help/doc/up.gif +0 -0
- data/samples/help/doc.chm +0 -0
- data/samples/help/doc.chw +0 -0
- data/samples/help/doc.zip +0 -0
- data/samples/help/help.rb +352 -0
- data/samples/help/tn_help.png +0 -0
- data/samples/printing/printing2.rb +1 -1
- data/samples/sampler.rb +26 -8
- data/samples/text/textctrl.rb +2 -2
- data/samples/treectrl/treectrl.rb +2 -2
- data/samples/webview/handler_advanced.html +55 -0
- data/samples/webview/tn_webview.png +0 -0
- data/samples/webview/webview.rb +1264 -0
- data/tests/assets/handler_advanced.html +55 -0
- data/tests/assets/test.css +1 -0
- data/tests/assets/test.html +9 -0
- data/tests/assets/test.zip +0 -0
- data/tests/lib/leaked_process_event_exception_test.rb +1 -1
- data/tests/lib/leaked_queued_event_exception_test.rb +1 -1
- data/tests/lib/text_entry_tests.rb +2 -2
- data/tests/lib/wxapp_runner.rb +65 -35
- data/tests/lib/wxframe_runner.rb +40 -13
- data/tests/lib/wxrb_test.rb +58 -0
- data/tests/test_app_event_filter.rb +1 -1
- data/tests/test_app_exit_exception.rb +3 -3
- data/tests/test_app_init_exception.rb +3 -3
- data/tests/test_app_traits.rb +24 -21
- data/tests/test_art.rb +14 -14
- data/tests/test_art_provider.rb +1 -1
- data/tests/test_basic.rb +2 -2
- data/tests/test_book_controls.rb +1 -1
- data/tests/test_box_sizer.rb +1 -1
- data/tests/test_clipboard.rb +9 -9
- data/tests/test_combo_ctrl.rb +2 -2
- data/tests/test_config.rb +17 -7
- data/tests/test_dc.rb +1 -1
- data/tests/test_dialog.rb +1 -1
- data/tests/test_event_handling.rb +1 -1
- data/tests/test_events.rb +1 -1
- data/tests/test_exceptions.rb +10 -8
- data/tests/test_ext_controls.rb +13 -13
- data/tests/test_file_dialog.rb +6 -6
- data/tests/test_font.rb +8 -8
- data/tests/test_gdi_object.rb +1 -1
- data/tests/test_geometry.rb +2 -2
- data/tests/test_grid_ctrl.rb +133 -0
- data/tests/test_grid_sizer.rb +2 -2
- data/tests/test_help.rb +88 -0
- data/tests/test_intl.rb +2 -2
- data/tests/test_item_data.rb +12 -12
- data/tests/test_list_ctrl.rb +1 -1
- data/tests/test_log.rb +2 -2
- data/tests/test_media_ctrl.rb +15 -7
- data/tests/test_menu.rb +81 -2
- data/tests/test_persistence.rb +1 -1
- data/tests/test_proof_check.rb +6 -6
- data/tests/test_propgrid.rb +32 -32
- data/tests/test_richtext.rb +10 -24
- data/tests/test_secret_store.rb +1 -1
- data/tests/test_shared_event_handler.rb +141 -0
- data/tests/test_sizer.rb +1 -1
- data/tests/test_std_controls.rb +13 -13
- data/tests/test_styled_text_ctrl.rb +1 -1
- data/tests/test_timer.rb +1 -1
- data/tests/test_tree_ctrl.rb +1 -1
- data/tests/test_validators.rb +79 -36
- data/tests/test_variant.rb +1 -1
- data/tests/test_webview.rb +492 -0
- data/tests/test_window.rb +14 -14
- data/tests/testapp.rb +2 -2
- data/tests/testapp_noframe.rb +2 -2
- metadata +476 -11
- 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
|