wxruby3 0.9.1 → 0.9.3
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/.yardopts +1 -0
- data/INSTALL.md +35 -29
- data/README.md +24 -15
- data/ext/wxruby3/include/wxRubyApp.h +338 -0
- data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
- data/ext/wxruby3/include/wxruby-Config.h +6 -6
- data/ext/wxruby3/include/wxruby-Validator.h +39 -0
- data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
- data/ext/wxruby3/swig/common.i +1 -1
- data/ext/wxruby3/swig/custom/director.swg +8 -0
- data/ext/wxruby3/swig/mark_free_impl.i +0 -33
- data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
- data/lib/wx/aui/auinotebook.rb +6 -2
- data/lib/wx/aui/require.rb +1 -0
- data/lib/wx/core/app.rb +2 -2
- data/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/collapsible_pane.rb +1 -1
- data/lib/wx/core/combobox.rb +13 -3
- data/lib/wx/core/controlwithitems.rb +40 -128
- data/lib/wx/core/enum.rb +17 -1
- data/lib/wx/core/event.rb +6 -1
- data/lib/wx/core/evthandler.rb +8 -2
- data/lib/wx/core/generic_validator.rb +312 -0
- data/lib/wx/core/listbox.rb +2 -2
- data/lib/wx/core/log.rb +1 -1
- data/lib/wx/core/menu.rb +10 -0
- data/lib/wx/core/notebook.rb +6 -2
- data/lib/wx/core/owner_drawn_combobox.rb +45 -0
- data/lib/wx/core/size.rb +4 -0
- data/lib/wx/core/sizer.rb +12 -2
- data/lib/wx/core/standard_paths.rb +22 -0
- data/lib/wx/core/task_bar_button.rb +19 -0
- data/lib/wx/core/text_entry.rb +4 -1
- data/lib/wx/core/textctrl.rb +11 -1
- data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
- data/lib/wx/core/validator.rb +70 -5
- data/lib/wx/core/window.rb +13 -7
- data/lib/wx/doc/app.rb +48 -38
- data/lib/wx/doc/art_locator.rb +48 -43
- data/lib/wx/doc/aui/auimanager.rb +16 -8
- data/lib/wx/doc/aui/auinotebook.rb +20 -5
- data/lib/wx/doc/clipboard.rb +11 -7
- data/lib/wx/doc/colour_dialog.rb +14 -10
- data/lib/wx/doc/comboctrl.rb +18 -0
- data/lib/wx/doc/controlwithitems.rb +34 -8
- data/lib/wx/doc/data_object.rb +2 -2
- data/lib/wx/doc/date_picker_ctrl.rb +23 -0
- data/lib/wx/doc/editable_listbox.rb +44 -0
- data/lib/wx/doc/enum.rb +15 -0
- data/lib/wx/doc/event.rb +12 -0
- data/lib/wx/doc/evthandler.rb +113 -108
- data/lib/wx/doc/extra/12_client_data.md +89 -0
- data/lib/wx/doc/extra/13_validators.md +139 -0
- data/lib/wx/doc/font.rb +1 -0
- data/lib/wx/doc/gc_dc.rb +6 -1
- data/lib/wx/doc/gdi_common.rb +4 -0
- data/lib/wx/doc/generic_validator.rb +95 -0
- data/lib/wx/doc/graphics_context.rb +1 -0
- data/lib/wx/doc/grid/grid.rb +22 -1
- data/lib/wx/doc/help_controller.rb +11 -7
- data/lib/wx/doc/html/html_help_controller.rb +12 -4
- data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
- data/lib/wx/doc/list_ctrl.rb +33 -29
- data/lib/wx/doc/menu.rb +20 -0
- data/lib/wx/doc/notebook.rb +21 -0
- data/lib/wx/doc/num_validator.rb +387 -0
- data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
- data/lib/wx/doc/pg/events.rb +13 -9
- data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
- data/lib/wx/doc/pg/pg_property.rb +18 -0
- data/lib/wx/doc/progress_dialog.rb +36 -32
- data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
- data/lib/wx/doc/prt/print_data.rb +13 -5
- data/lib/wx/doc/prt/print_dialog.rb +31 -23
- data/lib/wx/doc/prt/printer.rb +20 -12
- data/lib/wx/doc/radio_box.rb +19 -15
- data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
- data/lib/wx/doc/region_iterator.rb +32 -28
- data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
- data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
- data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
- data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
- data/lib/wx/doc/sizer.rb +20 -0
- data/lib/wx/doc/static_bitmap.rb +25 -0
- data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
- data/lib/wx/doc/stream.rb +39 -35
- data/lib/wx/doc/system_settings.rb +30 -26
- data/lib/wx/doc/text_validator.rb +23 -9
- data/lib/wx/doc/textctrl.rb +16 -0
- data/lib/wx/doc/tree_ctrl.rb +95 -0
- data/lib/wx/doc/treebook.rb +9 -5
- data/lib/wx/doc/v_list_box.rb +9 -5
- data/lib/wx/doc/validator.rb +113 -0
- data/lib/wx/doc/variant.rb +164 -160
- data/lib/wx/doc/window.rb +87 -47
- data/lib/wx/doc/window_disabler.rb +10 -6
- data/lib/wx/grid/grid.rb +27 -4
- data/lib/wx/html/simple_html_listbox.rb +24 -91
- data/lib/wx/keyword_defs.rb +34 -2
- data/lib/wx/pg/pg_property.rb +22 -0
- data/lib/wx/rbn/ribbon_gallery.rb +0 -21
- data/lib/wx/rtc/require.rb +3 -0
- data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
- data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
- data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
- data/lib/wx/stc/require.rb +1 -0
- data/lib/wx/stc/styled_text_ctrl.rb +25 -0
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/config/linux.rb +0 -3
- data/rakelib/lib/config/macosx.rb +2 -2
- data/rakelib/lib/config/mingw.rb +13 -1
- data/rakelib/lib/config/unixish.rb +1 -1
- data/rakelib/lib/config.rb +14 -4
- data/rakelib/lib/core/include/client_data.inc +65 -0
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/package.rb +31 -9
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec.rb +6 -1
- data/rakelib/lib/core/spec_helper.rb +7 -1
- data/rakelib/lib/director/accelerator.rb +2 -3
- data/rakelib/lib/director/accessible.rb +47 -0
- data/rakelib/lib/director/app.rb +30 -319
- data/rakelib/lib/director/app_traits.rb +13 -13
- data/rakelib/lib/director/bitmap_combobox.rb +2 -2
- data/rakelib/lib/director/combobox.rb +22 -0
- data/rakelib/lib/director/comboctrl.rb +1 -55
- data/rakelib/lib/director/ctrl_with_items.rb +105 -26
- data/rakelib/lib/director/data_format.rb +1 -1
- data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
- data/rakelib/lib/director/derived_dc.rb +1 -1
- data/rakelib/lib/director/dialog.rb +1 -0
- data/rakelib/lib/director/drag_image.rb +2 -3
- data/rakelib/lib/director/editable_listbox.rb +30 -0
- data/rakelib/lib/director/event.rb +104 -14
- data/rakelib/lib/director/event_handler.rb +3 -2
- data/rakelib/lib/director/frame.rb +1 -3
- data/rakelib/lib/director/functions.rb +4 -2
- data/rakelib/lib/director/gdicommon.rb +8 -10
- data/rakelib/lib/director/generic_dirctrl.rb +17 -0
- data/rakelib/lib/director/graphics_context.rb +2 -4
- data/rakelib/lib/director/grid_cell_attr.rb +0 -2
- data/rakelib/lib/director/grid_cell_editor.rb +0 -2
- data/rakelib/lib/director/grid_cell_renderer.rb +0 -2
- data/rakelib/lib/director/grid_ctrl.rb +34 -3
- data/rakelib/lib/director/header_ctrl.rb +6 -1
- data/rakelib/lib/director/html_listbox.rb +96 -22
- data/rakelib/lib/director/icon.rb +5 -2
- data/rakelib/lib/director/list_ctrl.rb +5 -6
- data/rakelib/lib/director/locale.rb +1 -3
- data/rakelib/lib/director/log.rb +1 -4
- data/rakelib/lib/director/media_ctrl.rb +54 -0
- data/rakelib/lib/director/menu.rb +16 -1
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/num_validator.rb +495 -0
- data/rakelib/lib/director/numeric_property_validator.rb +131 -6
- data/rakelib/lib/director/owner_drawn_combobox.rb +192 -0
- data/rakelib/lib/director/pgproperties.rb +1 -1
- data/rakelib/lib/director/pgproperty.rb +27 -30
- data/rakelib/lib/director/property_grid_interface.rb +5 -10
- data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
- data/rakelib/lib/director/ribbon_gallery.rb +3 -5
- data/rakelib/lib/director/richtext_composite_object.rb +25 -0
- data/rakelib/lib/director/richtext_ctrl.rb +14 -4
- data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
- data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
- data/rakelib/lib/director/sizer.rb +30 -4
- data/rakelib/lib/director/sizer_item.rb +13 -0
- data/rakelib/lib/director/static_bitmap.rb +28 -0
- data/rakelib/lib/director/static_box.rb +4 -5
- data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
- data/rakelib/lib/director/task_bar_button.rb +30 -0
- data/rakelib/lib/director/task_bar_icon.rb +5 -13
- data/rakelib/lib/director/text_entry.rb +4 -0
- data/rakelib/lib/director/text_validator.rb +124 -13
- data/rakelib/lib/director/textctrl.rb +12 -1
- data/rakelib/lib/director/toggle_button.rb +1 -0
- data/rakelib/lib/director/tool_tip.rb +1 -1
- data/rakelib/lib/director/top_level_window.rb +4 -7
- data/rakelib/lib/director/tree_ctrl.rb +40 -6
- data/rakelib/lib/director/utils.rb +16 -2
- data/rakelib/lib/director/validator.rb +196 -21
- data/rakelib/lib/director/variant.rb +1 -1
- data/rakelib/lib/director/window.rb +40 -7
- data/rakelib/lib/director.rb +4 -4
- data/rakelib/lib/extractor/function.rb +8 -7
- data/rakelib/lib/extractor.rb +34 -5
- data/rakelib/lib/generate/analyzer.rb +9 -4
- data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
- data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
- data/rakelib/lib/generate/doc/cursor.yaml +0 -2
- data/rakelib/lib/generate/doc/panel.yaml +7 -0
- data/rakelib/lib/generate/doc.rb +85 -17
- data/rakelib/lib/specs/interfaces.rb +163 -160
- data/rakelib/lib/swig_runner.rb +55 -9
- data/rakelib/lib/typemap/client_data.rb +67 -0
- data/rakelib/lib/typemap/common.rb +33 -4
- data/rakelib/lib/typemap/datetime.rb +1 -1
- data/rakelib/lib/typemap/tree_itemid.rb +2 -2
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
- data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
- data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
- data/rakelib/yard/templates/default/tags/setup.rb +16 -0
- data/rakelib/yard/yard-custom-templates.rb +3 -0
- data/samples/aui/aui.rb +1237 -1233
- data/samples/calendar/calendar.rb +293 -289
- data/samples/controls/get_item_sample.rb +83 -79
- data/samples/controls/htlbox.rb +331 -327
- data/samples/dialogs/dialogs.rb +682 -694
- data/samples/dialogs/wizard.rb +52 -55
- data/samples/dragdrop/dragdrop.rb +146 -142
- data/samples/drawing/bitmap.rb +29 -26
- data/samples/drawing/bitmap_image.rb +84 -80
- data/samples/drawing/graphics_drawing.rb +209 -205
- data/samples/drawing/image_prt.rb +344 -340
- data/samples/drawing/maths_images.rb +18 -1
- data/samples/drawing/rmagic_bitmap_image.rb +88 -84
- data/samples/etc/caret.rb +306 -0
- data/samples/etc/miniframe.rb +65 -60
- data/samples/etc/sash.rb +109 -105
- data/samples/etc/scrollwin.rb +86 -80
- data/samples/etc/system_settings.rb +216 -209
- data/samples/event/activation.rb +72 -67
- data/samples/event/event.rb +160 -153
- data/samples/event/threaded.rb +8 -1
- data/samples/event/update_ui_event.rb +67 -60
- data/samples/grid/grid.rb +188 -181
- data/samples/grid/gridtablebase.rb +136 -129
- data/samples/html/html.rb +208 -204
- data/samples/mdi/mdi.rb +59 -54
- data/samples/minimal/minimal.rb +54 -51
- data/samples/minimal/nothing.rb +1 -0
- data/samples/printing/printing.rb +367 -377
- data/samples/printing/printing2.rb +203 -198
- data/samples/propgrid/propgrid.rb +2312 -2308
- data/samples/propgrid/propgrid_minimal.rb +57 -50
- data/samples/ribbon/ribbon.rb +780 -774
- data/samples/sampler/ext.rb +0 -33
- data/samples/sampler/sample.rb +4 -9
- data/samples/sampler.rb +1 -1
- data/samples/splash/splash.rb +118 -116
- data/samples/text/rich_textctrl.rb +207 -201
- data/samples/text/richtext.rb +1409 -1405
- data/samples/text/scintilla.rb +137 -128
- data/samples/text/textctrl.rb +89 -83
- data/samples/text/unicode.rb +175 -168
- data/samples/treectrl/treectrl.rb +1430 -1426
- data/samples/widgets/activityindicator.rb +95 -0
- data/samples/widgets/art/widgets/activityindicator.xpm +278 -0
- data/samples/widgets/art/widgets/bmpbtn.xpm +37 -0
- data/samples/widgets/art/widgets/bmpcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/button.xpm +54 -0
- data/samples/widgets/art/widgets/checkbox.xpm +54 -0
- data/samples/{bigdemo/icons → widgets/art/widgets}/choice.xpm +1 -1
- data/samples/widgets/art/widgets/choicebk.xpm +54 -0
- data/samples/widgets/art/widgets/clrpicker.xpm +193 -0
- data/samples/widgets/art/widgets/combobox.xpm +54 -0
- data/samples/widgets/art/widgets/datepick.xpm +200 -0
- data/samples/widgets/art/widgets/dirctrl.xpm +54 -0
- data/samples/widgets/art/widgets/dirpicker.xpm +213 -0
- data/samples/widgets/art/widgets/filepicker.xpm +214 -0
- data/samples/widgets/art/widgets/fontpicker.xpm +185 -0
- data/samples/widgets/art/widgets/gauge.xpm +54 -0
- data/samples/widgets/art/widgets/header.xpm +54 -0
- data/samples/widgets/art/widgets/hyperlnk.xpm +54 -0
- data/samples/widgets/art/widgets/listbook.xpm +54 -0
- data/samples/widgets/art/widgets/listbox.xpm +54 -0
- data/samples/widgets/art/widgets/native.xpm +81 -0
- data/samples/widgets/art/widgets/notebook.xpm +54 -0
- data/samples/widgets/art/widgets/odcombobox.xpm +54 -0
- data/samples/widgets/art/widgets/radiobox.xpm +54 -0
- data/samples/widgets/art/widgets/scrolbar.xpm +54 -0
- data/samples/widgets/art/widgets/slider.xpm +54 -0
- data/samples/widgets/art/widgets/spinbtn.xpm +40 -0
- data/samples/widgets/art/widgets/statbmp.xpm +40 -0
- data/samples/widgets/art/widgets/statbox.xpm +54 -0
- data/samples/widgets/art/widgets/stattext.xpm +54 -0
- data/samples/widgets/art/widgets/text.xpm +54 -0
- data/samples/widgets/art/widgets/timepick.xpm +207 -0
- data/samples/widgets/art/widgets/toggle.xpm +54 -0
- data/samples/widgets/art/widgets/toucan.png +0 -0
- data/samples/widgets/bmpcombobox.rb +651 -0
- data/samples/widgets/button.rb +462 -0
- data/samples/widgets/checkbox.rb +211 -0
- data/samples/widgets/choice.rb +287 -0
- data/samples/widgets/clrpicker.rb +156 -0
- data/samples/widgets/combobox.rb +516 -0
- data/samples/widgets/datepick.rb +215 -0
- data/samples/widgets/dirctrl.rb +265 -0
- data/samples/widgets/dirpicker.rb +158 -0
- data/samples/widgets/editlbox.rb +122 -0
- data/samples/widgets/filectrl.rb +216 -0
- data/samples/widgets/filepicker.rb +214 -0
- data/samples/widgets/fontpicker.rb +135 -0
- data/samples/widgets/gauge.rb +311 -0
- data/samples/widgets/headerctrl.rb +236 -0
- data/samples/widgets/hyperlink.rb +203 -0
- data/samples/widgets/itemcontainer.rb +185 -0
- data/samples/widgets/listbox.rb +473 -0
- data/samples/widgets/notebook.rb +488 -0
- data/samples/widgets/odcombobox.rb +608 -0
- data/samples/widgets/radiobox.rb +328 -0
- data/samples/widgets/searchctrl.rb +159 -0
- data/samples/widgets/slider.rb +594 -0
- data/samples/widgets/spinbtn.rb +443 -0
- data/samples/widgets/statbmp.rb +130 -0
- data/samples/widgets/static.rb +436 -0
- data/samples/widgets/textctrl.rb +700 -0
- data/samples/widgets/timepick.rb +148 -0
- data/samples/widgets/tn_widgets.png +0 -0
- data/samples/widgets/toggle.rb +385 -0
- data/samples/widgets/widgets.rb +1233 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- data/tests/media/beep_lo.wav +0 -0
- data/tests/test_event_handling.rb +52 -34
- data/tests/test_events.rb +7 -0
- data/tests/test_item_data.rb +24 -0
- data/tests/test_list_ctrl.rb +1 -1
- data/tests/test_media_ctrl.rb +38 -0
- data/tests/test_menu.rb +69 -0
- data/tests/test_pg.rb +27 -0
- data/tests/test_richtext.rb +45 -0
- data/tests/test_sizer.rb +59 -0
- data/tests/test_std_controls.rb +42 -1
- data/tests/test_styled_text_ctrl.rb +46 -0
- data/tests/test_tree_ctrl.rb +138 -0
- data/tests/test_validators.rb +805 -0
- data/tests/test_window.rb +12 -0
- data/tests/testapp_noframe.rb +1 -1
- metadata +121 -139
- data/lib/wx/core/choice.rb +0 -14
- data/lib/wx/core/combo_ctrl.rb +0 -110
- data/rakelib/lib/typemap/grid_client_data.rb +0 -58
- data/samples/bigdemo/About.rbw +0 -39
- data/samples/bigdemo/ColorPanel.rbw +0 -23
- data/samples/bigdemo/GridSimple.rbw +0 -78
- data/samples/bigdemo/MDIDemo.rbw +0 -57
- data/samples/bigdemo/PopupMenu.rbw +0 -146
- data/samples/bigdemo/ShapedWindow.rbw +0 -128
- data/samples/bigdemo/Sizers.rbw +0 -541
- data/samples/bigdemo/bigdemo.rb +0 -817
- data/samples/bigdemo/demoTemplate.rbw +0 -33
- data/samples/bigdemo/helpfile.htb +0 -0
- data/samples/bigdemo/icons/Test 015.jpg +0 -0
- data/samples/bigdemo/icons/Test 015.png +0 -0
- data/samples/bigdemo/icons/choice.bmp +0 -0
- data/samples/bigdemo/icons/combo.bmp +0 -0
- data/samples/bigdemo/icons/combo.xpm +0 -27
- data/samples/bigdemo/icons/copy.xpm +0 -25
- data/samples/bigdemo/icons/cut.xpm +0 -24
- data/samples/bigdemo/icons/gauge.bmp +0 -0
- data/samples/bigdemo/icons/gauge.xpm +0 -27
- data/samples/bigdemo/icons/help.xpm +0 -25
- data/samples/bigdemo/icons/list.bmp +0 -0
- data/samples/bigdemo/icons/list.xpm +0 -27
- data/samples/bigdemo/icons/mondrian.ico +0 -0
- data/samples/bigdemo/icons/mondrian.xpm +0 -44
- data/samples/bigdemo/icons/new.xpm +0 -24
- data/samples/bigdemo/icons/ogl.ico +0 -0
- data/samples/bigdemo/icons/ogl.xpm +0 -45
- data/samples/bigdemo/icons/open.xpm +0 -26
- data/samples/bigdemo/icons/paste.bmp +0 -0
- data/samples/bigdemo/icons/paste.xpm +0 -38
- data/samples/bigdemo/icons/pointy.png +0 -0
- data/samples/bigdemo/icons/preview.xpm +0 -26
- data/samples/bigdemo/icons/print.xpm +0 -26
- data/samples/bigdemo/icons/radio.bmp +0 -0
- data/samples/bigdemo/icons/radio.xpm +0 -27
- data/samples/bigdemo/icons/robert.xpm +0 -415
- data/samples/bigdemo/icons/sashtest.ico +0 -0
- data/samples/bigdemo/icons/save.xpm +0 -25
- data/samples/bigdemo/icons/smiles.bmp +0 -0
- data/samples/bigdemo/icons/smiles.xpm +0 -39
- data/samples/bigdemo/icons/smiley.ico +0 -0
- data/samples/bigdemo/icons/smiley.xpm +0 -42
- data/samples/bigdemo/icons/stattext.xpm +0 -24
- data/samples/bigdemo/icons/test2.bmp +0 -0
- data/samples/bigdemo/icons/test2.png +0 -0
- data/samples/bigdemo/icons/test2.xpm +0 -79
- data/samples/bigdemo/icons/text.bmp +0 -0
- data/samples/bigdemo/icons/text.xpm +0 -27
- data/samples/bigdemo/icons/tog1.bmp +0 -0
- data/samples/bigdemo/icons/tog1.xpm +0 -38
- data/samples/bigdemo/icons/tog2.bmp +0 -0
- data/samples/bigdemo/icons/tog2.xpm +0 -38
- data/samples/bigdemo/icons/wxruby-128x128.png +0 -0
- data/samples/bigdemo/icons/wxwin.ico +0 -0
- data/samples/bigdemo/icons/wxwin16x16.png +0 -0
- data/samples/bigdemo/icons/wxwin16x16.xpm +0 -25
- data/samples/bigdemo/icons/wxwin32x32.png +0 -0
- data/samples/bigdemo/icons/wxwin48x48.png +0 -0
- data/samples/bigdemo/run.rb +0 -98
- data/samples/bigdemo/tips.txt +0 -7
- data/samples/bigdemo/utils.rb +0 -20
- data/samples/bigdemo/wxArtProvider.rbw +0 -282
- data/samples/bigdemo/wxBitmapButton.rbw +0 -65
- data/samples/bigdemo/wxButton.rbw +0 -64
- data/samples/bigdemo/wxCalendarCtrl.rbw +0 -59
- data/samples/bigdemo/wxCheckBox.rbw +0 -50
- data/samples/bigdemo/wxCheckListBox.rbw +0 -65
- data/samples/bigdemo/wxChoice.rbw +0 -47
- data/samples/bigdemo/wxChoicebook.rbw +0 -78
- data/samples/bigdemo/wxColourDialog.rbw +0 -33
- data/samples/bigdemo/wxComboBox.rbw +0 -77
- data/samples/bigdemo/wxCursor.rbw +0 -136
- data/samples/bigdemo/wxDialog.rbw +0 -74
- data/samples/bigdemo/wxDirDialog.rbw +0 -29
- data/samples/bigdemo/wxDragImage.rbw +0 -70
- data/samples/bigdemo/wxFileDialog.rbw +0 -37
- data/samples/bigdemo/wxFileDialog_Save.rbw +0 -35
- data/samples/bigdemo/wxFindReplaceDialog.rbw +0 -82
- data/samples/bigdemo/wxFontDialog.rbw +0 -200
- data/samples/bigdemo/wxFrame.rbw +0 -53
- data/samples/bigdemo/wxGauge.rbw +0 -65
- data/samples/bigdemo/wxGenericDirCtrl.rbw +0 -74
- data/samples/bigdemo/wxGrid.rbw +0 -66
- data/samples/bigdemo/wxHtmlHelpController.rbw +0 -52
- data/samples/bigdemo/wxListBox.rbw +0 -140
- data/samples/bigdemo/wxListCtrl_virtual.rbw +0 -112
- data/samples/bigdemo/wxMDIWindows.rbw +0 -50
- data/samples/bigdemo/wxMenu.rbw +0 -247
- data/samples/bigdemo/wxMessageDialog.rbw +0 -27
- data/samples/bigdemo/wxMiniFrame.rbw +0 -70
- data/samples/bigdemo/wxMultipleChoiceDialog.rbw +0 -29
- data/samples/bigdemo/wxNotebook.rbw +0 -136
- data/samples/bigdemo/wxProgressDialog.rbw +0 -43
- data/samples/bigdemo/wxRadioBox.rbw +0 -72
- data/samples/bigdemo/wxRadioButton.rbw +0 -125
- data/samples/bigdemo/wxSashWindow.rbw +0 -141
- data/samples/bigdemo/wxScrolledMessageDialog.rbw +0 -57
- data/samples/bigdemo/wxScrolledWindow.rbw +0 -199
- data/samples/bigdemo/wxSingleChoiceDialog.rbw +0 -33
- data/samples/bigdemo/wxSlider.rbw +0 -42
- data/samples/bigdemo/wxSpinButton.rbw +0 -50
- data/samples/bigdemo/wxSpinCtrl.rbw +0 -51
- data/samples/bigdemo/wxSplitterWindow.rbw +0 -63
- data/samples/bigdemo/wxStaticBitmap.rbw +0 -47
- data/samples/bigdemo/wxStaticText.rbw +0 -55
- data/samples/bigdemo/wxStatusBar.rbw +0 -126
- data/samples/bigdemo/wxTextCtrl.rbw +0 -149
- data/samples/bigdemo/wxTextEntryDialog.rbw +0 -31
- data/samples/bigdemo/wxToggleButton.rbw +0 -49
- data/samples/bigdemo/wxToolBar.rbw +0 -131
- data/samples/bigdemo/wxTreeCtrl.rbw +0 -191
- data/samples/caret/caret.rb +0 -298
- data/samples/caret/mondrian.xpm +0 -44
- data/samples/controls/books.rb +0 -189
- data/samples/controls/choice.xpm +0 -27
- data/samples/controls/combo.xpm +0 -27
- data/samples/controls/controls.rb +0 -1099
- data/samples/controls/gauge.xpm +0 -27
- data/samples/controls/list.xpm +0 -27
- data/samples/controls/mondrian.ico +0 -0
- data/samples/controls/mondrian.xpm +0 -44
- data/samples/controls/radio.xpm +0 -27
- data/samples/controls/stattext.xpm +0 -24
- data/samples/controls/test2.bmp +0 -0
- data/samples/controls/text.xpm +0 -27
- data/samples/controls/tn_books.png +0 -0
- data/samples/controls/tn_controls.png +0 -0
- data/samples/etc/choice.rb +0 -87
- data/samples/etc/tn_choice.png +0 -0
- data/samples/text/mondrian.ico +0 -0
- data/samples/text/mondrian.xpm +0 -44
- /data/samples/{caret → etc}/tn_caret.png +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ef007e75aefb2b02a91a0818c8ef2d5191075e280c4dbd01bda827cdd65f9957
|
|
4
|
+
data.tar.gz: d52b47712bd0d0d9705270e8c1487e2a1d797bcc52a46253b866e0fe4c6a1617
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ba7a127d408a2ab7ce745b0ad1d6d88eee710953ecceaa42a7880c6fb258a4b684cbc9f8bf11d36b1473bb99a55fd219a8fd434475f7352c238b1c2d03bdce9e
|
|
7
|
+
data.tar.gz: 2d99560d20e4d04a1b5c6abacba8579e0973bca2251fb402caa1a301e8a99317eed6a864892a47b8740a87a3861aeb6692791e97fc61c0a57e20d8b41727e930
|
data/.yardopts
CHANGED
data/INSTALL.md
CHANGED
|
@@ -10,14 +10,14 @@ Below are installation instructions for Linux, Windows, and Mac (both AMD64 and
|
|
|
10
10
|
|
|
11
11
|
The minimal requirements for installing any source based setup (gem, source package or Github clone) of wxRuby3 are:
|
|
12
12
|
|
|
13
|
-
| Sofware | Notes
|
|
14
|
-
|
|
15
|
-
| Ruby | A supported version of the Ruby interpreter needs to be installed.
|
|
16
|
-
| C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed via
|
|
17
|
-
| Git version control toolkit |
|
|
18
|
-
| SWIG >= 3.0.12 | On MacOS install
|
|
19
|
-
| Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files.<br>On MacOS:
|
|
20
|
-
| wxWidgets (>= 3.2) | See
|
|
13
|
+
| Sofware | Notes |
|
|
14
|
+
|-----------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
15
|
+
| Ruby | A supported version of the Ruby interpreter needs to be installed. |
|
|
16
|
+
| C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed via <code>sudo xcode-select --install</code> |
|
|
17
|
+
| Git version control toolkit | |
|
|
18
|
+
| SWIG >= 3.0.12 | On MacOS install Homebrew (https://brew.sh) and than <code>brew install swig</code> |
|
|
19
|
+
| Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files.<br>On MacOS: <code>brew tap mcorino/wxruby3</code> and than `brew install doxygen@1.9.6` (default brew recipe installs 1.9.7) |
|
|
20
|
+
| wxWidgets (>= 3.2) | See the <b>wxWidgets installation</b> section below. |
|
|
21
21
|
|
|
22
22
|
The wxRuby3 build process requires `git` to clone a copy of the wxWidgets Github repository to extract the interface
|
|
23
23
|
specifications from.<br>
|
|
@@ -57,46 +57,41 @@ gem install wxruby3 -- WITH_WXWIN=1
|
|
|
57
57
|
|
|
58
58
|
Also a wxWidgets installation (version 3.2 or later) is required for which there are multiple options.
|
|
59
59
|
|
|
60
|
-
1. System installed wxWidgets version (including development package)<br
|
|
61
|
-
<br
|
|
60
|
+
1. System installed wxWidgets version (including development package)<br/>
|
|
61
|
+
<br/>
|
|
62
62
|
This is the default method used when installing the source gem without any options.<br>
|
|
63
63
|
The wxRuby build procedure will determine the availability and version of wxWidgets by locating and calling
|
|
64
64
|
the `wx-config` utility script. In case no (compatible) wxWidgets version is found installation ends with an error.<br>
|
|
65
65
|
Please note that even with this method a copy of the wxWidgets project will be checked out from GitHUb as the wxRuby3
|
|
66
66
|
build procedure requires access to the wxWidgets interface specification sources which are not normally part of any of
|
|
67
|
-
the standard distribution packages
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
```shell
|
|
67
|
+
the standard distribution packages.<br/>
|
|
68
|
+
<br/>
|
|
69
|
+
On MacOS, you can install wxWidgets via [Homebrew](https://brew.sh/):
|
|
70
|
+
```shell
|
|
72
71
|
brew install wxwidgets
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
```shell
|
|
72
|
+
```
|
|
73
|
+
Afterwards, you can install the Ruby gem and it will detect wxWidgets in the system automatically:
|
|
74
|
+
```shell
|
|
78
75
|
gem install wxruby3
|
|
79
|
-
```
|
|
76
|
+
```
|
|
80
77
|
|
|
81
78
|
2. User installed wxWidgets version<br>
|
|
82
79
|
<br>
|
|
83
80
|
In case the system being installed on does not provide (a compatible) wxWidgets version or a specific (possibly updated)
|
|
84
81
|
wxWidgets version is required the source gem can be installed using a user installed version like this (where the
|
|
85
82
|
`WXWIN` path should provide the location where the wxWidgets binaries are installed under `<wxwin path>/bin`):<br>
|
|
86
|
-
|
|
87
|
-
```shell
|
|
83
|
+
```shell
|
|
88
84
|
gem install wxruby3 -- WXWIN=/path/to/wx/install
|
|
89
|
-
```
|
|
85
|
+
```
|
|
90
86
|
|
|
91
87
|
3. Automatic installed, embedded, wxWidgets version<br>
|
|
92
88
|
<br>
|
|
93
89
|
This is the easiest method when the system being installed on does not provide (a compatible) wxWidgets version (and
|
|
94
90
|
no specific user defined version is required) and can be used by installing the source gem like this (which will
|
|
95
91
|
cause automatic checkout and building of the latest stable wxWidgets release (>= 3.2) from GitHub:
|
|
96
|
-
|
|
97
|
-
```shell
|
|
92
|
+
```shell
|
|
98
93
|
gem install wxruby3 -- WITH_WXWIN=1
|
|
99
|
-
```
|
|
94
|
+
```
|
|
100
95
|
|
|
101
96
|
In case of option **2** it is also possible to do the doxygen XML generation as part of the wxWidgets user installation
|
|
102
97
|
and use that for the gem installation. In that case the user is required to generate the XML interface specs using the
|
|
@@ -104,16 +99,27 @@ and use that for the gem installation. In that case the user is required to gene
|
|
|
104
99
|
provided to the gem installation as follows:
|
|
105
100
|
|
|
106
101
|
```shell
|
|
107
|
-
|
|
102
|
+
gem install wxruby3 -- WXWIN=/path/to/wx/install WXXML=/path/to/wx/doxygen/xml
|
|
108
103
|
```
|
|
109
104
|
|
|
110
|
-
Please also not that in case of option
|
|
105
|
+
Please also not that in case of option **2** the user is responsible to make sure the wxWidgets shared libraries can be
|
|
111
106
|
found by the system's dynamic loader at runtime.
|
|
112
107
|
|
|
113
108
|
> **NOTE:** Be patient when installing the source gem. Building wxRuby3 takes a while and when wxWidgets is included event more.
|
|
114
109
|
|
|
115
110
|
> **NOTE:** Be aware that for prerelease versions of the gem you should add the `--pre` argument to the `gem install` command.
|
|
116
111
|
|
|
112
|
+
### Bundled CLI
|
|
113
|
+
|
|
114
|
+
Installing the wxRuby3 gem will also install the bundled `wxruby` CLI binary.
|
|
115
|
+
|
|
116
|
+
Currently this binary can be used to run the bundled regression tests and access (run or copy) the bundled examples.
|
|
117
|
+
Run the following command to see the options:
|
|
118
|
+
|
|
119
|
+
```shell
|
|
120
|
+
wxruby --help
|
|
121
|
+
```
|
|
122
|
+
|
|
117
123
|
## Building from source
|
|
118
124
|
|
|
119
125
|
Checkout the wxRuby3 sources from [GitHub](https://github.com/mcorino/wxRuby3) or download and unpack a release package.
|
data/README.md
CHANGED
|
@@ -96,11 +96,11 @@ of these products.
|
|
|
96
96
|
|
|
97
97
|
Currently the following are fully supported:
|
|
98
98
|
|
|
99
|
-
| Platform | Ruby version(s)
|
|
100
|
-
|
|
101
|
-
| Windows 10 (tested)<br>(most likely also Windows 11) | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2
|
|
102
|
-
| Linux (tested; any AMD-64 distribution)<br>(most likely also i686 and ARM) | Ruby >= 2.5
|
|
103
|
-
| MacOS >= 10.10 using Cocoa (tested on AMD-64 and ARM64 M2 Chip) | Ruby >= 2.5
|
|
99
|
+
| Platform | Ruby version(s) | wxWidgets version(s) |
|
|
100
|
+
|----------------------------------------------------------------------------|---------------------------------------------|----------------------|
|
|
101
|
+
| Windows 10 (tested)<br>(most likely also Windows 11) | Ruby >= 2.5<br>(RubyInstaller MSYS2-DevKit) | wxWidgets >= 3.2 |
|
|
102
|
+
| Linux (tested; any AMD-64 distribution)<br>(most likely also i686 and ARM) | Ruby >= 2.5 | wxWidgets >= 3.2 |
|
|
103
|
+
| MacOS >= 10.10 using Cocoa (tested on AMD-64 and ARM64 M2 Chip) | Ruby >= 2.5 | wxWidgets >= 3.2 |
|
|
104
104
|
|
|
105
105
|
Support for other platforms is not being actively developed at present,
|
|
106
106
|
but patches are welcome. It is likely to be much simpler to get wxRuby
|
|
@@ -118,14 +118,16 @@ Installing the binary gem version on Windows requires no additional software to
|
|
|
118
118
|
version of the Ruby interpreter.<br>
|
|
119
119
|
To install the source-only gem the following software is required:
|
|
120
120
|
|
|
121
|
-
| Sofware | Notes
|
|
122
|
-
|
|
123
|
-
| Ruby | A supported version of the Ruby interpreter needs to be installed.
|
|
124
|
-
| C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed
|
|
125
|
-
| Git version control toolkit |
|
|
126
|
-
| SWIG >= 3.0.12 | On MacOS install
|
|
127
|
-
| Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files
|
|
128
|
-
| wxWidgets >= 3.2 (*OPTIONAL*) | On Linux most distributions provide system installable (development) packages for wxWidgets providing a supported version
|
|
121
|
+
| Sofware | Notes |
|
|
122
|
+
|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
123
|
+
| Ruby | A supported version of the Ruby interpreter needs to be installed. |
|
|
124
|
+
| C++ compiler<br>(incl. dev tools like `make`) | On linux a recent version of the GNU C++ compiler (with c++-14 support) needs to be installed<br>On Windows the RubyInstaller MSYS2-Devkit needs to be installed<br>On MacOS XCode with commandline tools needs to be installed |
|
|
125
|
+
| Git version control toolkit | |
|
|
126
|
+
| SWIG >= 3.0.12 | On MacOS install with Homebrew |
|
|
127
|
+
| Doxygen (>= 1.9.1, <= 1.9.6) | Doxygen > 1.9.6 has changes that cause problems with the wxWidgets doxygen files. |
|
|
128
|
+
| wxWidgets >= 3.2 (*OPTIONAL*) | On Linux most distributions provide system installable (development) packages for wxWidgets providing a supported version.<br>Alternatively you can fairly easily install your own preferred version manually. |
|
|
129
|
+
|
|
130
|
+
See the [INSTALL](INSTALL.md) document for more details.
|
|
129
131
|
|
|
130
132
|
In case the prerequisites above are met the (source-only or binary) gem can be installed executing the following command:
|
|
131
133
|
|
|
@@ -154,7 +156,9 @@ distribution comes with numerous samples which illustrate how to use
|
|
|
154
156
|
many specific parts of the API. A good one to start with is the
|
|
155
157
|
'minimal' sample, which provides an application skeleton. All the
|
|
156
158
|
bundled samples are expected to work with current wxRuby3, although
|
|
157
|
-
some use a more modern coding style than others.
|
|
159
|
+
some use a more modern coding style than others. Use the bundled `wxruby`
|
|
160
|
+
CLI to access the samples (see the section **Bundled CLI** in
|
|
161
|
+
the [INSTALL](INSTALL.md) document for more details).
|
|
158
162
|
|
|
159
163
|
Complete (more or less) wxRuby API documentation should be part of any
|
|
160
164
|
complete wxRuby3 build. This tends to focus on providing a reference
|
|
@@ -213,4 +217,9 @@ this doesn't help, please post your question using GitHub Issues.
|
|
|
213
217
|
|
|
214
218
|
### Is there another, more declarative way, for writing wxRuby3 desktop GUI applications?
|
|
215
219
|
|
|
216
|
-
Yes. [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) enables software engineers to build GUI
|
|
220
|
+
Yes. [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) enables software engineers to build GUI
|
|
221
|
+
using wxruby3 following the Ruby way with the least amount of code possible. That is by offering a minimalistic
|
|
222
|
+
declarative high-level DSL that maps visually to the way software engineers think about the GUI hierarchy in addition
|
|
223
|
+
to adopting Rails' strategy of Convention over Configuration via smart defaults and automation of wxruby3 low-level
|
|
224
|
+
details. You can check out the [Glimmer DSL for WX README "Coming From wxruby3" section](https://github.com/AndyObtiva/glimmer-dsl-wx#coming-from-wxruby3) for more information on
|
|
225
|
+
how to translate wxruby3 apps to [Glimmer DSL for WX](https://github.com/AndyObtiva/glimmer-dsl-wx) syntax.
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
// Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
//
|
|
3
|
+
// This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
#include <memory>
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* WxRuby3 App class
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
class wxRubyApp : public wxApp
|
|
12
|
+
{
|
|
13
|
+
private:
|
|
14
|
+
bool is_running_ = false;
|
|
15
|
+
VALUE self_ = Qnil;
|
|
16
|
+
public:
|
|
17
|
+
static wxRubyApp* GetInstance () { return dynamic_cast<wxRubyApp*> (wxApp::GetInstance()); }
|
|
18
|
+
|
|
19
|
+
virtual ~wxRubyApp()
|
|
20
|
+
{
|
|
21
|
+
#ifdef __WXTRACE__
|
|
22
|
+
std::wcout << "~wxRubyApp" << std::endl;
|
|
23
|
+
#endif
|
|
24
|
+
// unlink
|
|
25
|
+
if (this->self_ != Qnil)
|
|
26
|
+
{
|
|
27
|
+
DATA_PTR(this->self_) = 0;
|
|
28
|
+
}
|
|
29
|
+
this->self_ = Qnil;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// special event handler for destruction of windows which is done
|
|
33
|
+
// automatically by wxWidgets. Tag the object as having been destroyed
|
|
34
|
+
// by WxWidgets.
|
|
35
|
+
void OnWindowDestroy(wxWindowDestroyEvent &event)
|
|
36
|
+
{
|
|
37
|
+
wxObject* wx_obj = event.GetEventObject();
|
|
38
|
+
#ifdef __WXRB_DEBUG__
|
|
39
|
+
if (wxRuby_TraceLevel()>0)
|
|
40
|
+
std::wcout << "<= OnWindowDestroy [" << wx_obj << "]" << std::endl;
|
|
41
|
+
#endif
|
|
42
|
+
GC_SetWindowDeleted((void *)wx_obj);
|
|
43
|
+
event.Skip();
|
|
44
|
+
#ifdef __WXRB_DEBUG__
|
|
45
|
+
if (wxRuby_TraceLevel()>0)
|
|
46
|
+
std::wcout << "=> OnWindowDestroy [" << wx_obj << "]" << std::endl;
|
|
47
|
+
#endif
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
bool IsRunning() const { return this->is_running_; }
|
|
51
|
+
|
|
52
|
+
// When ruby's garbage collection runs, if the app is still active, it
|
|
53
|
+
// cycles through all currently known SWIG objects and calls this
|
|
54
|
+
// function on each to preserve still active Wx::Windows, and also
|
|
55
|
+
// pending Wx::Events which have been queued from the Ruby side (the
|
|
56
|
+
// only sort of events that will be in the tracking hash.
|
|
57
|
+
static void markIterate(void* ptr, VALUE rb_obj)
|
|
58
|
+
{
|
|
59
|
+
// Check if it's a valid object (sometimes SWIG doesn't return what we're
|
|
60
|
+
// expecting), a descendant of Wx::Window (but not a Dialog), and if it has not yet been
|
|
61
|
+
// deleted by WxWidgets; if so, mark it.
|
|
62
|
+
if ( TYPE(rb_obj) == T_DATA )
|
|
63
|
+
{
|
|
64
|
+
if ( rb_obj_is_kind_of(rb_obj, wxRuby_GetWindowClass()) )
|
|
65
|
+
{
|
|
66
|
+
rb_gc_mark(rb_obj);
|
|
67
|
+
}
|
|
68
|
+
else if (rb_obj_is_kind_of(rb_obj, wxRuby_GetDefaultEventClass()) )
|
|
69
|
+
rb_gc_mark(rb_obj);
|
|
70
|
+
}
|
|
71
|
+
else if (TYPE(rb_obj) == T_ARRAY )
|
|
72
|
+
{
|
|
73
|
+
VALUE proc = rb_ary_entry(rb_obj, 0);
|
|
74
|
+
if (rb_obj_is_kind_of(proc, rb_cProc) || rb_obj_is_kind_of(proc, rb_cMethod))
|
|
75
|
+
{
|
|
76
|
+
// keep the async call alive
|
|
77
|
+
rb_gc_mark(rb_obj);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Implements GC protection across wxRuby. Always called because
|
|
83
|
+
// Wx::THE_APP is a constant so always checked in GC mark phase.
|
|
84
|
+
static void mark_wxRubyApp(void *ptr)
|
|
85
|
+
{
|
|
86
|
+
|
|
87
|
+
#ifdef __WXRB_DEBUG__
|
|
88
|
+
if (wxRuby_TraceLevel()>0)
|
|
89
|
+
std::wcout << "=== Starting App GC mark phase" << std::endl;
|
|
90
|
+
#endif
|
|
91
|
+
|
|
92
|
+
// If the App has ended, the ruby object will have been unlinked from
|
|
93
|
+
// the C++ one; this implies that all Windows have already been destroyed
|
|
94
|
+
// so there is no point trying to mark them, and doing so may cause
|
|
95
|
+
// errors.
|
|
96
|
+
if ( !wxRubyApp::GetInstance() || !wxRubyApp::GetInstance()->IsRunning() )
|
|
97
|
+
{
|
|
98
|
+
#ifdef __WXRB_DEBUG__
|
|
99
|
+
if (wxRuby_TraceLevel()>0)
|
|
100
|
+
std::wcout << "=== App not started yet or has ended, skipping mark phase" << std::endl;
|
|
101
|
+
#endif
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Mark any active (tracked) log target
|
|
106
|
+
wxLog* curLog = wxLog::GetActiveTarget();
|
|
107
|
+
VALUE rb_cur_log = wxRuby_FindTracking(curLog);
|
|
108
|
+
if (!NIL_P(rb_cur_log))
|
|
109
|
+
{
|
|
110
|
+
rb_gc_mark(rb_cur_log);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Mark evt handler procs associated with live windows - see
|
|
114
|
+
// classes/EvtHandler.i
|
|
115
|
+
wxRuby_MarkProtectedEvtHandlerProcs();
|
|
116
|
+
|
|
117
|
+
// run registered markers
|
|
118
|
+
for (wxVector<WXRBMarkFunction>::iterator it = WXRuby_Mark_List.begin();
|
|
119
|
+
it != WXRuby_Mark_List.end() ;++it)
|
|
120
|
+
{
|
|
121
|
+
(*it) ();
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// To do the main marking, primarily of Windows, iterate over SWIG's
|
|
125
|
+
// list of tracked objects
|
|
126
|
+
wxRuby_IterateTracking(&wxRubyApp::markIterate);
|
|
127
|
+
|
|
128
|
+
#ifdef __WXRB_DEBUG__
|
|
129
|
+
if (wxRuby_TraceLevel()>0)
|
|
130
|
+
std::wcout << "=== App GC mark phase completed" << std::endl;
|
|
131
|
+
#endif
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// This is the method run when main_loop is called in Ruby
|
|
135
|
+
// wxEntry calls the C++ App::OnInit method
|
|
136
|
+
int main_loop()
|
|
137
|
+
{
|
|
138
|
+
int rc = 0;
|
|
139
|
+
|
|
140
|
+
// There should ever only be only a single App instance running
|
|
141
|
+
if (rb_const_defined(mWxCore, rb_intern("THE_APP")))
|
|
142
|
+
{
|
|
143
|
+
rb_raise(rb_eRuntimeError, "There is already another App instance running");
|
|
144
|
+
return -1;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Set self reference and global THE_APP constant
|
|
148
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
149
|
+
rb_define_const(mWxCore, "THE_APP", this->self_);
|
|
150
|
+
// Also cache the Ruby App reference on the stack here as after
|
|
151
|
+
// wxEntry returns the C++ App instance will have been destroyed
|
|
152
|
+
// and we cannot reference it (or it's members) anymore
|
|
153
|
+
VALUE the_app = this->self_;
|
|
154
|
+
|
|
155
|
+
this->Connect(wxEVT_DESTROY,
|
|
156
|
+
wxWindowDestroyEventHandler(wxRubyApp::OnWindowDestroy));
|
|
157
|
+
|
|
158
|
+
#ifdef __WXRB_DEBUG__
|
|
159
|
+
if (wxRuby_TraceLevel()>0)
|
|
160
|
+
std::wcout << "Calling wxEntry, this=" << this << std::endl;
|
|
161
|
+
#endif
|
|
162
|
+
|
|
163
|
+
// collect ruby app name and arguments array
|
|
164
|
+
VALUE rb_args = rb_get_argv();
|
|
165
|
+
int argc = 1 + RARRAY_LEN(rb_args);
|
|
166
|
+
std::unique_ptr<char*[]> argv_safe = std::make_unique<char*[]> (argc);
|
|
167
|
+
VALUE sval = rb_gv_get("$0");
|
|
168
|
+
argv_safe[0] = StringValuePtr(sval);
|
|
169
|
+
for (int i=0; i<RARRAY_LEN(rb_args) ;++i)
|
|
170
|
+
{
|
|
171
|
+
sval = rb_ary_entry(rb_args, i);
|
|
172
|
+
argv_safe[1+i] = StringValuePtr(sval);
|
|
173
|
+
}
|
|
174
|
+
// there is no need to copy the strings as we only need them until
|
|
175
|
+
// wxEntry returns
|
|
176
|
+
|
|
177
|
+
#ifdef __WXMSW__
|
|
178
|
+
wxApp::m_nCmdShow = SW_NORMAL;
|
|
179
|
+
#endif
|
|
180
|
+
rc = wxEntry(argc, argv_safe.get());
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
At this point the C++ wxRubyApp instance has been destroyed so take care NOT to reference
|
|
184
|
+
it or any of it's members anymore but only unroll the callstack.
|
|
185
|
+
*/
|
|
186
|
+
|
|
187
|
+
#ifdef __WXRB_DEBUG__
|
|
188
|
+
if (wxRuby_TraceLevel()>0)
|
|
189
|
+
std::wcout << "returned from wxEntry..." << std::endl;
|
|
190
|
+
#endif
|
|
191
|
+
rb_gc_start();
|
|
192
|
+
#ifdef __WXRB_DEBUG__
|
|
193
|
+
if (wxRuby_TraceLevel()>0)
|
|
194
|
+
std::wcout << "survived gc" << std::endl;
|
|
195
|
+
#endif
|
|
196
|
+
|
|
197
|
+
rb_const_remove(mWxCore, rb_intern("THE_APP"));
|
|
198
|
+
|
|
199
|
+
VALUE exc = rb_iv_get(the_app, "@exception");
|
|
200
|
+
if (!NIL_P(exc))
|
|
201
|
+
{
|
|
202
|
+
rb_exc_raise(exc);
|
|
203
|
+
}
|
|
204
|
+
return rc;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// This method initializes the stock objects (Pens, Brushes, Fonts)
|
|
208
|
+
// before yielding to ruby by calling the App's on_init method.
|
|
209
|
+
// Note that as of wxWidget 2.8, the stock fonts in particular cannot
|
|
210
|
+
// be initialized any earlier than this without crashing
|
|
211
|
+
bool OnInit() override
|
|
212
|
+
{
|
|
213
|
+
#ifdef __WXRB_DEBUG__
|
|
214
|
+
if (wxRuby_TraceLevel()>0)
|
|
215
|
+
std::wcout << "OnInit..." << std::endl;
|
|
216
|
+
#endif
|
|
217
|
+
|
|
218
|
+
if (!wxApp::OnInit())
|
|
219
|
+
return false;
|
|
220
|
+
|
|
221
|
+
// Signal that we've started
|
|
222
|
+
this->is_running_ = true;
|
|
223
|
+
// Set up the GDI objects
|
|
224
|
+
Init_wxRubyStockObjects();
|
|
225
|
+
// Get the ruby representation of the App object, and call the
|
|
226
|
+
// ruby on_init method to set up the initial window state
|
|
227
|
+
bool ex_caught = false;
|
|
228
|
+
VALUE result = wxRuby_Funcall(ex_caught, this->self_, rb_intern("on_ruby_init"), 0, 0);
|
|
229
|
+
|
|
230
|
+
if (ex_caught)
|
|
231
|
+
{
|
|
232
|
+
#ifdef __WXRB_DEBUG__
|
|
233
|
+
wxRuby_PrintException(result);
|
|
234
|
+
#endif
|
|
235
|
+
rb_iv_set(this->self_, "@exception", result);
|
|
236
|
+
result = Qfalse; // exit app
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// If on_init return any (ruby) true value, signal to wxWidgets to
|
|
240
|
+
// enter the main event loop by returning true, else return false
|
|
241
|
+
// which will make wxWidgets exit.
|
|
242
|
+
if ( result == Qfalse || result == Qnil )
|
|
243
|
+
{
|
|
244
|
+
this->is_running_ = false;
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
else
|
|
248
|
+
{
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
int OnExit() override
|
|
254
|
+
{
|
|
255
|
+
#ifdef __WXRB_DEBUG__
|
|
256
|
+
if (wxRuby_TraceLevel()>0)
|
|
257
|
+
std::wcout << "OnExit..." << std::endl;
|
|
258
|
+
#endif
|
|
259
|
+
|
|
260
|
+
// Get the ruby representation of the App object, and call the
|
|
261
|
+
// ruby on_exit method (if any) for application level cleanup
|
|
262
|
+
ID on_exit_id = rb_intern("on_exit");
|
|
263
|
+
if (rb_funcall(this->self_, rb_intern("respond_to?"), 1, ID2SYM(on_exit_id)) == Qtrue)
|
|
264
|
+
{
|
|
265
|
+
bool ex_caught = false;
|
|
266
|
+
VALUE rc = wxRuby_Funcall(ex_caught, this->self_, on_exit_id, 0, 0);
|
|
267
|
+
if (ex_caught)
|
|
268
|
+
{
|
|
269
|
+
#ifdef __WXRB_DEBUG__
|
|
270
|
+
wxRuby_PrintException(rc);
|
|
271
|
+
#endif
|
|
272
|
+
rb_iv_set(this->self_, "@exception", rc);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
// perform wxRuby cleanup
|
|
277
|
+
_wxRuby_Cleanup();
|
|
278
|
+
|
|
279
|
+
// execute base wxWidgets functionality
|
|
280
|
+
return this->wxApp::OnExit();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
// actually implemented in ruby in classes/app.rb
|
|
284
|
+
virtual void OnAssertFailure(const wxChar *file, int line, const wxChar *func, const wxChar *cond, const wxChar *msg) override
|
|
285
|
+
{
|
|
286
|
+
if (rb_during_gc() || NIL_P(this->self_))
|
|
287
|
+
{
|
|
288
|
+
std::wcerr << file << "(" << line << "): ASSERT " << cond
|
|
289
|
+
<< (NIL_P(this->self_) ? " fired without THE_APP in " : " fired during GC phase in ")
|
|
290
|
+
<< func << "() with message [" << msg << "]" << std::endl;
|
|
291
|
+
}
|
|
292
|
+
else
|
|
293
|
+
{
|
|
294
|
+
VALUE obj0 = Qnil ;
|
|
295
|
+
VALUE obj1 = Qnil ;
|
|
296
|
+
VALUE obj2 = Qnil ;
|
|
297
|
+
VALUE obj3 = Qnil ;
|
|
298
|
+
VALUE obj4 = Qnil ;
|
|
299
|
+
|
|
300
|
+
obj0 = rb_str_new2((const char *)wxString(file).utf8_str());
|
|
301
|
+
obj1 = INT2NUM(line);
|
|
302
|
+
obj2 = rb_str_new2((const char *)wxString(func).utf8_str());
|
|
303
|
+
obj3 = rb_str_new2((const char *)wxString(cond).utf8_str());
|
|
304
|
+
obj4 = rb_str_new2((const char *)wxString(msg).utf8_str());
|
|
305
|
+
(void)wxRuby_Funcall(this->self_, rb_intern("on_assert_failure"), 5,obj0,obj1,obj2,obj3,obj4);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
void _wxRuby_Cleanup()
|
|
310
|
+
{
|
|
311
|
+
#ifdef __WXRB_DEBUG__
|
|
312
|
+
if (wxRuby_TraceLevel()>0)
|
|
313
|
+
std::wcout << "wxRuby_Cleanup..." << std::endl;
|
|
314
|
+
#endif
|
|
315
|
+
// Note in a global variable that the App has ended, so that we
|
|
316
|
+
// can skip any GC marking later
|
|
317
|
+
this->is_running_ = false;
|
|
318
|
+
|
|
319
|
+
// if a Ruby implemented logger has been installed clean that up
|
|
320
|
+
// before we exit, otherwise let wxWidgets handle things
|
|
321
|
+
wxLog *oldlog = wxLog::GetActiveTarget();
|
|
322
|
+
if (wxRuby_FindTracking(oldlog) != Qnil)
|
|
323
|
+
{
|
|
324
|
+
oldlog = wxLog::SetActiveTarget(new wxLogStderr);
|
|
325
|
+
}
|
|
326
|
+
else
|
|
327
|
+
{
|
|
328
|
+
oldlog = 0;
|
|
329
|
+
}
|
|
330
|
+
SetTopWindow(0);
|
|
331
|
+
if ( oldlog )
|
|
332
|
+
{
|
|
333
|
+
SWIG_RubyUnlinkObjects(oldlog);
|
|
334
|
+
SWIG_RubyRemoveTracking(oldlog);
|
|
335
|
+
delete oldlog;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
//
|
|
3
|
+
// This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
* WxRuby3 wxRubyClientData class
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
#ifndef _WXRUBY_CLIENT_DATA_H
|
|
10
|
+
#define _WXRUBY_CLIENT_DATA_H
|
|
11
|
+
|
|
12
|
+
#include <wx/clntdata.h>
|
|
13
|
+
|
|
14
|
+
class WXRUBY_EXPORT wxRubyClientData;
|
|
15
|
+
|
|
16
|
+
WXRUBY_EXPORT void wxRuby_RegisterClientData(wxRubyClientData* pcd);
|
|
17
|
+
WXRUBY_EXPORT void wxRuby_UnregisterClientData(wxRubyClientData* pcd);
|
|
18
|
+
|
|
19
|
+
class WXRUBY_EXPORT wxRubyClientData : public wxClientData
|
|
20
|
+
{
|
|
21
|
+
public:
|
|
22
|
+
wxRubyClientData() : rb_data(Qnil) { }
|
|
23
|
+
wxRubyClientData (VALUE data) : rb_data(data) { wxRuby_RegisterClientData(this); }
|
|
24
|
+
virtual ~wxRubyClientData () { wxRuby_UnregisterClientData(this); }
|
|
25
|
+
VALUE GetData() const { return rb_data; }
|
|
26
|
+
private:
|
|
27
|
+
VALUE rb_data;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
class WXRUBY_EXPORT wxRubyUserData;
|
|
31
|
+
|
|
32
|
+
WXRUBY_EXPORT void wxRuby_RegisterUserData(wxRubyUserData* pud);
|
|
33
|
+
WXRUBY_EXPORT void wxRuby_UnregisterUserData(wxRubyUserData* pud);
|
|
34
|
+
|
|
35
|
+
class WXRUBY_EXPORT wxRubyUserData : public wxObject
|
|
36
|
+
{
|
|
37
|
+
public:
|
|
38
|
+
wxRubyUserData() : rb_data(Qnil) { }
|
|
39
|
+
wxRubyUserData (VALUE data) : rb_data(data) { wxRuby_RegisterUserData(this); }
|
|
40
|
+
virtual ~wxRubyUserData () { wxRuby_UnregisterUserData(this); }
|
|
41
|
+
VALUE GetData() const { return rb_data; }
|
|
42
|
+
private:
|
|
43
|
+
VALUE rb_data;
|
|
44
|
+
|
|
45
|
+
wxDECLARE_NO_COPY_CLASS(wxRubyUserData);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
#endif /* _WXRUBY_CLIENT_DATA_H */
|
|
@@ -456,7 +456,7 @@ protected:
|
|
|
456
456
|
}
|
|
457
457
|
|
|
458
458
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
459
|
-
virtual bool DoReadLongLong(const wxString& key, wxLongLong_t *pll) const
|
|
459
|
+
virtual bool DoReadLongLong(const wxString& key, wxLongLong_t *pll) const override
|
|
460
460
|
{
|
|
461
461
|
wxConfigPathChanger path(this, key);
|
|
462
462
|
|
|
@@ -487,7 +487,7 @@ protected:
|
|
|
487
487
|
}
|
|
488
488
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
489
489
|
|
|
490
|
-
virtual bool DoReadDouble(const wxString& key, double* val) const
|
|
490
|
+
virtual bool DoReadDouble(const wxString& key, double* val) const override
|
|
491
491
|
{
|
|
492
492
|
wxConfigPathChanger path(this, key);
|
|
493
493
|
|
|
@@ -517,7 +517,7 @@ protected:
|
|
|
517
517
|
}
|
|
518
518
|
}
|
|
519
519
|
|
|
520
|
-
virtual bool DoReadBool(const wxString& key, bool* val) const
|
|
520
|
+
virtual bool DoReadBool(const wxString& key, bool* val) const override
|
|
521
521
|
{
|
|
522
522
|
wxConfigPathChanger path(this, key);
|
|
523
523
|
|
|
@@ -637,7 +637,7 @@ protected:
|
|
|
637
637
|
}
|
|
638
638
|
|
|
639
639
|
#ifdef wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
640
|
-
virtual bool DoWriteLongLong(const wxString& key, wxLongLong_t value)
|
|
640
|
+
virtual bool DoWriteLongLong(const wxString& key, wxLongLong_t value) override
|
|
641
641
|
{
|
|
642
642
|
wxConfigPathChanger path(this, key);
|
|
643
643
|
wxString strName = path.Name();
|
|
@@ -675,7 +675,7 @@ protected:
|
|
|
675
675
|
}
|
|
676
676
|
#endif // wxHAS_LONG_LONG_T_DIFFERENT_FROM_LONG
|
|
677
677
|
|
|
678
|
-
virtual bool DoWriteDouble(const wxString& key, double value)
|
|
678
|
+
virtual bool DoWriteDouble(const wxString& key, double value) override
|
|
679
679
|
{
|
|
680
680
|
wxConfigPathChanger path(this, key);
|
|
681
681
|
wxString strName = path.Name();
|
|
@@ -712,7 +712,7 @@ protected:
|
|
|
712
712
|
return true;
|
|
713
713
|
}
|
|
714
714
|
|
|
715
|
-
virtual bool DoWriteBool(const wxString& key, bool value)
|
|
715
|
+
virtual bool DoWriteBool(const wxString& key, bool value) override
|
|
716
716
|
{
|
|
717
717
|
wxConfigPathChanger path(this, key);
|
|
718
718
|
wxString strName = path.Name();
|