wxruby3 0.9.2 → 0.9.4
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/INSTALL.md +35 -29
- data/README.md +24 -15
- data/ext/wxruby3/include/wxruby-ClientData.h +48 -0
- data/ext/wxruby3/include/wxruby-Config.h +23 -5
- data/ext/wxruby3/include/wxruby-Persistence.h +79 -0
- data/ext/wxruby3/include/wxruby-Validator.h +39 -0
- data/ext/wxruby3/include/wxruby-ValidatorBinding.h +64 -0
- data/ext/wxruby3/swig/custom/director.swg +8 -0
- data/ext/wxruby3/swig/mark_free_impl.i +0 -33
- data/ext/wxruby3/swig/memory_management.i +6 -0
- data/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/book_ctrl_base.rb +16 -0
- data/lib/wx/core/combobox.rb +13 -3
- data/lib/wx/core/config.rb +454 -83
- data/lib/wx/core/controlwithitems.rb +40 -130
- 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/notebook.rb +10 -8
- data/lib/wx/core/owner_drawn_combobox.rb +45 -0
- data/lib/wx/core/peristent_object.rb +15 -0
- data/lib/wx/core/persistence_manager.rb +39 -0
- data/lib/wx/core/persistent_window.rb +16 -0
- data/lib/wx/core/size.rb +4 -0
- data/lib/wx/core/sizer.rb +1 -2
- data/lib/wx/core/standard_paths.rb +22 -0
- data/lib/wx/core/text_entry.rb +4 -1
- data/lib/wx/core/top_level_window.rb +16 -0
- data/lib/wx/core/treebook.rb +18 -0
- data/lib/wx/core/validator.rb +70 -5
- data/lib/wx/core/window.rb +3 -7
- data/lib/wx/core.rb +4 -0
- data/lib/wx/doc/art_locator.rb +1 -0
- data/lib/wx/doc/book_ctrl_base.rb +19 -0
- data/lib/wx/doc/comboctrl.rb +18 -0
- data/lib/wx/doc/config.rb +101 -41
- data/lib/wx/doc/controlwithitems.rb +16 -0
- 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/extra/12_client_data.md +89 -0
- data/lib/wx/doc/extra/13_validators.md +139 -0
- data/lib/wx/doc/extra/14_config.md +101 -0
- data/lib/wx/doc/extra/15_persistence.md +148 -0
- data/lib/wx/doc/gdi_common.rb +4 -0
- data/lib/wx/doc/generic_validator.rb +95 -0
- data/lib/wx/doc/html/simple_html_listbox.rb +22 -0
- data/lib/wx/doc/num_validator.rb +387 -0
- data/lib/wx/doc/owner_drawn_combobox.rb +96 -0
- data/lib/wx/doc/persistence_manager.rb +36 -0
- data/lib/wx/doc/persistent_object.rb +27 -0
- data/lib/wx/doc/pg/numeric_property_validator.rb +33 -0
- data/lib/wx/doc/static_bitmap.rb +25 -0
- data/lib/wx/doc/text_validator.rb +10 -0
- data/lib/wx/doc/top_level_window.rb +19 -0
- data/lib/wx/doc/treebook.rb +6 -1
- data/lib/wx/doc/validator.rb +113 -0
- data/lib/wx/doc/window.rb +30 -0
- data/lib/wx/html/simple_html_listbox.rb +24 -91
- data/lib/wx/keyword_defs.rb +34 -2
- data/lib/wx/rbn/ribbon_gallery.rb +0 -21
- data/lib/wx/version.rb +1 -1
- data/rakelib/build.rb +1 -1
- data/rakelib/lib/config/mingw.rb +12 -0
- 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 +39 -3
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec.rb +10 -0
- data/rakelib/lib/core/spec_helper.rb +8 -2
- data/rakelib/lib/director/app.rb +18 -0
- data/rakelib/lib/director/app_traits.rb +3 -1
- 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/config_base.rb +490 -19
- data/rakelib/lib/director/ctrl_with_items.rb +88 -21
- data/rakelib/lib/director/date_picker_ctrl.rb +8 -6
- data/rakelib/lib/director/editable_listbox.rb +30 -0
- data/rakelib/lib/director/event.rb +102 -12
- data/rakelib/lib/director/event_filter.rb +1 -1
- data/rakelib/lib/director/event_handler.rb +3 -2
- data/rakelib/lib/director/event_loop.rb +1 -1
- data/rakelib/lib/director/file_dialog_customize_hook.rb +2 -2
- data/rakelib/lib/director/functions.rb +4 -2
- data/rakelib/lib/director/generic_dirctrl.rb +17 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +1 -3
- data/rakelib/lib/director/grid_cell_renderer.rb +1 -3
- data/rakelib/lib/director/header_ctrl.rb +9 -1
- data/rakelib/lib/director/html_listbox.rb +97 -22
- 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/persistence_manager.rb +410 -0
- data/rakelib/lib/director/persistent_object.rb +70 -0
- data/rakelib/lib/director/persistent_window.rb +73 -0
- data/rakelib/lib/director/pgproperty.rb +3 -29
- data/rakelib/lib/director/ribbon_button_bar.rb +3 -3
- data/rakelib/lib/director/ribbon_gallery.rb +3 -5
- data/rakelib/lib/director/sizer.rb +15 -4
- data/rakelib/lib/director/sizer_item.rb +13 -0
- data/rakelib/lib/director/static_bitmap.rb +32 -0
- data/rakelib/lib/director/text_entry.rb +5 -1
- data/rakelib/lib/director/text_validator.rb +124 -13
- data/rakelib/lib/director/toggle_button.rb +1 -0
- data/rakelib/lib/director/top_level_window.rb +0 -2
- data/rakelib/lib/director/tree_ctrl.rb +35 -0
- data/rakelib/lib/director/utils.rb +16 -2
- data/rakelib/lib/director/validator.rb +196 -21
- data/rakelib/lib/director/window.rb +16 -2
- data/rakelib/lib/extractor/function.rb +2 -1
- data/rakelib/lib/generate/analyzer.rb +44 -44
- data/rakelib/lib/generate/doc.rb +11 -5
- data/rakelib/lib/specs/interfaces.rb +5 -0
- data/rakelib/lib/swig_runner.rb +55 -9
- data/rakelib/lib/typemap/client_data.rb +67 -0
- data/rakelib/lib/typemap/common.rb +3 -3
- data/rakelib/lib/typemap/config.rb +8 -0
- data/rakelib/lib/typemap/datetime.rb +1 -1
- data/rakelib/lib/typemap/tree_itemid.rb +2 -2
- 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 +1229 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- data/tests/test_config.rb +207 -42
- 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_persistence.rb +142 -0
- data/tests/test_sizer.rb +44 -1
- data/tests/test_validators.rb +805 -0
- metadata +109 -138
- 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
|
@@ -6,31 +6,156 @@
|
|
|
6
6
|
# wxRuby3 wxWidgets interface director
|
|
7
7
|
###
|
|
8
8
|
|
|
9
|
-
require_relative './
|
|
9
|
+
require_relative './validator'
|
|
10
10
|
|
|
11
11
|
module WXRuby3
|
|
12
12
|
|
|
13
13
|
class Director
|
|
14
14
|
|
|
15
|
-
class NumericPropertyValidator <
|
|
15
|
+
class NumericPropertyValidator < Validator
|
|
16
16
|
|
|
17
17
|
def setup
|
|
18
18
|
super
|
|
19
19
|
# need a custom implementation to handle event handler proc cleanup
|
|
20
20
|
spec.add_header_code <<~__HEREDOC
|
|
21
|
-
class WXRubyNumericPropertyValidator : public wxNumericPropertyValidator
|
|
21
|
+
class WXRubyNumericPropertyValidator : public wxNumericPropertyValidator, public wxRubyValidatorBinding
|
|
22
22
|
{
|
|
23
23
|
public:
|
|
24
24
|
WXRubyNumericPropertyValidator(NumericType numericType, int base=10)
|
|
25
|
-
: wxNumericPropertyValidator(numericType, base)
|
|
25
|
+
: wxNumericPropertyValidator(numericType, base)
|
|
26
|
+
{
|
|
27
|
+
m_stringValue = &m_valueCache;
|
|
28
|
+
}
|
|
29
|
+
WXRubyNumericPropertyValidator(const WXRubyNumericPropertyValidator& other)
|
|
30
|
+
: wxNumericPropertyValidator(other)
|
|
31
|
+
, wxRubyValidatorBinding(other)
|
|
32
|
+
{
|
|
33
|
+
m_stringValue = &m_valueCache;
|
|
34
|
+
}
|
|
26
35
|
virtual ~WXRubyNumericPropertyValidator()
|
|
27
36
|
{
|
|
28
37
|
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
29
38
|
}
|
|
39
|
+
|
|
40
|
+
virtual wxObject* Clone() const override
|
|
41
|
+
{
|
|
42
|
+
WXRubyNumericPropertyValidator *clone = new WXRubyNumericPropertyValidator(*this);
|
|
43
|
+
clone->m_valueCache = this->m_valueCache;
|
|
44
|
+
return clone;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
virtual void SetWindow(wxWindow *win) override
|
|
48
|
+
{
|
|
49
|
+
this->wxNumericPropertyValidator::SetWindow(win);
|
|
50
|
+
VALUE self = get_self();
|
|
51
|
+
// make sure Ruby does not own this validator instance anymore
|
|
52
|
+
RDATA(self)->dfree = SWIG_RubyRemoveTracking;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
virtual bool TransferFromWindow () override
|
|
56
|
+
{
|
|
57
|
+
// call super
|
|
58
|
+
if (this->wxNumericPropertyValidator::TransferFromWindow())
|
|
59
|
+
{
|
|
60
|
+
// ok, data is retrieved from window and cached
|
|
61
|
+
// now allow any defined binding handler to pass on the data
|
|
62
|
+
return this->DoOnTransferFromWindow(WXSTR_TO_RSTR(m_valueCache));
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
virtual bool TransferToWindow () override
|
|
67
|
+
{
|
|
68
|
+
// collect data from any defined binding handler
|
|
69
|
+
VALUE data = this->DoOnTransferToWindow();
|
|
70
|
+
// if Qnil returned there is no data returned from handler so we just keep what's in the store
|
|
71
|
+
if (!NIL_P(data))
|
|
72
|
+
{
|
|
73
|
+
m_valueCache = RSTR_TO_WXSTR(data);
|
|
74
|
+
}
|
|
75
|
+
// now allow standard functionality to transfer to window
|
|
76
|
+
return this->wxNumericPropertyValidator::TransferToWindow();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const wxString& GetValue () const
|
|
80
|
+
{
|
|
81
|
+
return m_valueCache;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void SetValue (const wxString& val)
|
|
85
|
+
{
|
|
86
|
+
m_valueCache = val;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private:
|
|
90
|
+
static VALUE c_NumericPropertyValidator;
|
|
91
|
+
|
|
92
|
+
virtual VALUE get_self() override
|
|
93
|
+
{
|
|
94
|
+
if (NIL_P(this->self_))
|
|
95
|
+
{
|
|
96
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
97
|
+
// if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
|
|
98
|
+
if (NIL_P(this->self_))
|
|
99
|
+
{
|
|
100
|
+
if (NIL_P(c_NumericPropertyValidator))
|
|
101
|
+
{
|
|
102
|
+
c_NumericPropertyValidator = rb_eval_string("Wx::PG::NumericPropertyValidator");
|
|
103
|
+
}
|
|
104
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_NumericPropertyValidator);
|
|
105
|
+
this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return this->self_;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
wxString m_valueCache;
|
|
30
112
|
};
|
|
31
|
-
|
|
113
|
+
|
|
114
|
+
VALUE WXRubyNumericPropertyValidator::c_NumericPropertyValidator = Qnil;
|
|
115
|
+
|
|
116
|
+
static void GC_mark_wxNumericPropertyValidator(void* ptr)
|
|
117
|
+
{
|
|
118
|
+
if (ptr)
|
|
119
|
+
{
|
|
120
|
+
wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
|
|
121
|
+
WXRubyNumericPropertyValidator* rbvp = dynamic_cast<WXRubyNumericPropertyValidator*> (vp);
|
|
122
|
+
// This might be a pointer to a non-customized validator (or clone thereof) created internally
|
|
123
|
+
// by wxWidgets C++ code
|
|
124
|
+
if (rbvp) rbvp->GC_Mark();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
__HEREDOC
|
|
128
|
+
spec.add_swig_code '%markfunc wxValidator "GC_mark_wxValidator";'
|
|
129
|
+
# make Ruby director and wrappers use custom implementation
|
|
32
130
|
spec.use_class_implementation 'wxNumericPropertyValidator', 'WXRubyNumericPropertyValidator'
|
|
33
|
-
spec.
|
|
131
|
+
spec.new_object 'wxNumericPropertyValidator::Clone'
|
|
132
|
+
# add wxRuby extensions
|
|
133
|
+
spec.add_extend_code 'wxNumericPropertyValidator', <<~__HEREDOC
|
|
134
|
+
VALUE GetValue()
|
|
135
|
+
{
|
|
136
|
+
WXRubyNumericPropertyValidator* rb_self = dynamic_cast<WXRubyNumericPropertyValidator*> ($self);
|
|
137
|
+
if (rb_self)
|
|
138
|
+
return WXSTR_TO_RSTR(rb_self->GetValue());
|
|
139
|
+
else
|
|
140
|
+
return Qnil;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
void SetValue(const wxString& val)
|
|
144
|
+
{
|
|
145
|
+
WXRubyNumericPropertyValidator* rb_self = dynamic_cast<WXRubyNumericPropertyValidator*> ($self);
|
|
146
|
+
if (rb_self)
|
|
147
|
+
rb_self->SetValue(val);
|
|
148
|
+
}
|
|
149
|
+
__HEREDOC
|
|
150
|
+
# handle clone mapping
|
|
151
|
+
spec.map 'wxObject *' => 'Wx::PG::NumericPropertyValidator' do
|
|
152
|
+
map_out code: <<~__CODE
|
|
153
|
+
$result = SWIG_NewPointerObj(SWIG_as_voidptr($1), SWIGTYPE_p_wxTextValidator, SWIG_POINTER_OWN);
|
|
154
|
+
__CODE
|
|
155
|
+
end
|
|
156
|
+
spec.suppress_warning(473, 'wxNumericPropertyValidator::Clone')
|
|
157
|
+
spec.extend_interface 'wxNumericPropertyValidator',
|
|
158
|
+
'wxNumericPropertyValidator(const wxNumericPropertyValidator &other)'
|
|
34
159
|
spec.do_not_generate :variables, :defines, :enums, :functions
|
|
35
160
|
end
|
|
36
161
|
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
###
|
|
6
|
+
# wxRuby3 wxWidgets interface director
|
|
7
|
+
###
|
|
8
|
+
|
|
9
|
+
require_relative './window'
|
|
10
|
+
|
|
11
|
+
module WXRuby3
|
|
12
|
+
|
|
13
|
+
class Director
|
|
14
|
+
|
|
15
|
+
class OwnerDrawnComboBox < Window
|
|
16
|
+
|
|
17
|
+
include Typemap::ClientData
|
|
18
|
+
|
|
19
|
+
def setup
|
|
20
|
+
super
|
|
21
|
+
spec.items << 'wxItemContainer'
|
|
22
|
+
# override inheritance chain
|
|
23
|
+
spec.override_inheritance_chain('wxOwnerDrawnComboBox', %w[wxComboCtrl wxControl wxWindow wxEvtHandler wxObject])
|
|
24
|
+
spec.fold_bases('wxOwnerDrawnComboBox' => %w[wxItemContainer])
|
|
25
|
+
spec.regard %w[
|
|
26
|
+
wxOwnerDrawnComboBox::OnDrawBackground
|
|
27
|
+
wxOwnerDrawnComboBox::OnDrawItem
|
|
28
|
+
wxOwnerDrawnComboBox::OnMeasureItem
|
|
29
|
+
wxOwnerDrawnComboBox::OnMeasureItemWidth
|
|
30
|
+
]
|
|
31
|
+
# unuseful overloads
|
|
32
|
+
spec.ignore 'wxOwnerDrawnComboBox::wxOwnerDrawnComboBox(wxWindow *, wxWindowID, const wxString &, const wxPoint &, const wxSize &, int, const wxString [], long, const wxValidator &, const wxString &)',
|
|
33
|
+
'wxOwnerDrawnComboBox::Create(wxWindow *, wxWindowID, const wxString &, const wxPoint &, const wxSize &, int, const wxString [], long, const wxValidator &, const wxString &)'
|
|
34
|
+
spec.ignore('wxItemContainer::Append(const wxString &, void *)',
|
|
35
|
+
'wxItemContainer::Append(const std::vector< wxString > &)',
|
|
36
|
+
'wxItemContainer::Append(const wxArrayString &, void **)',
|
|
37
|
+
'wxItemContainer::Append(unsigned int, const wxString *)',
|
|
38
|
+
'wxItemContainer::Append(unsigned int, const wxString *, void **)',
|
|
39
|
+
'wxItemContainer::Append(unsigned int, const wxString *, wxClientData **)',
|
|
40
|
+
'wxItemContainer::Insert(const wxString &, unsigned int, void *)',
|
|
41
|
+
'wxItemContainer::Insert(const std::vector< wxString > &)',
|
|
42
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
|
|
43
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int)',
|
|
44
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, void **)',
|
|
45
|
+
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, wxClientData **)',
|
|
46
|
+
'wxItemContainer::Set(const std::vector< wxString > &)',
|
|
47
|
+
'wxItemContainer::Set(const wxArrayString &, void **)',
|
|
48
|
+
'wxItemContainer::Set(unsigned int, const wxString *)',
|
|
49
|
+
'wxItemContainer::Set(unsigned int, const wxString *, void **)',
|
|
50
|
+
'wxItemContainer::Set(unsigned int, const wxString *, wxClientData **)',
|
|
51
|
+
'wxItemContainer::GetClientData',
|
|
52
|
+
'wxItemContainer::SetClientData',
|
|
53
|
+
'wxItemContainer::HasClientUntypedData',
|
|
54
|
+
'wxItemContainer::Clear')
|
|
55
|
+
# ignore these but keep docs; will add custom versions below
|
|
56
|
+
spec.ignore([
|
|
57
|
+
'wxItemContainer::DetachClientObject',
|
|
58
|
+
'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
|
|
59
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
|
|
60
|
+
'wxItemContainer::Set(const wxArrayString &, wxClientData **)'], ignore_doc: false)
|
|
61
|
+
# ambiguous
|
|
62
|
+
spec.ignore 'wxOwnerDrawnComboBox::IsEmpty', ignore_doc: false
|
|
63
|
+
# missing from docs; needed to override TextEntry version
|
|
64
|
+
spec.extend_interface 'wxOwnerDrawnComboBox', 'void Clear()'
|
|
65
|
+
# missing from docs; required so proxy calls correct override
|
|
66
|
+
spec.extend_interface 'wxOwnerDrawnComboBox',
|
|
67
|
+
'virtual void DoSetPopupControl(wxComboPopup* popup)',
|
|
68
|
+
visibility: 'protected'
|
|
69
|
+
# missing from docs; implementations of wxItemContainerImmutable methods
|
|
70
|
+
spec.extend_interface 'wxOwnerDrawnComboBox',
|
|
71
|
+
'unsigned int GetCount() const',
|
|
72
|
+
'wxString GetString(unsigned int n) const',
|
|
73
|
+
'void SetString(unsigned int n, const wxString& s)',
|
|
74
|
+
'int FindString(const wxString& s, bool bCase = false) const',
|
|
75
|
+
'void Select(int n)',
|
|
76
|
+
'wxArrayString GetStrings() const'
|
|
77
|
+
# for doc only
|
|
78
|
+
spec.map 'void** clientData' => 'Array', swig: false do
|
|
79
|
+
map_in code: ''
|
|
80
|
+
end
|
|
81
|
+
# Replace the old Wx definitions of these methods adding
|
|
82
|
+
# proper checks on the data arrays.
|
|
83
|
+
# Also add an item enumerator.
|
|
84
|
+
spec.add_extend_code 'wxOwnerDrawnComboBox', <<~__HEREDOC
|
|
85
|
+
wxString GetListStringSelection()
|
|
86
|
+
{
|
|
87
|
+
return $self->wxItemContainerImmutable::GetStringSelection();
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
bool SetListStringSelection(const wxString& string)
|
|
91
|
+
{
|
|
92
|
+
return $self->wxItemContainerImmutable::SetStringSelection(string);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
void SetListSelection(int n)
|
|
96
|
+
{
|
|
97
|
+
$self->SetSelection(n);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
int GetListSelection()
|
|
101
|
+
{
|
|
102
|
+
return $self->GetSelection();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
VALUE DetachClientObject(unsigned int n)
|
|
106
|
+
{
|
|
107
|
+
VALUE rc = Qnil;
|
|
108
|
+
wxClientData *wxcd = $self->DetachClientObject(n);
|
|
109
|
+
wxRubyClientData *rbcd = wxcd ? dynamic_cast<wxRubyClientData*> (wxcd) : nullptr;
|
|
110
|
+
if (rbcd)
|
|
111
|
+
{
|
|
112
|
+
rc = rbcd->GetData();
|
|
113
|
+
delete rbcd;
|
|
114
|
+
}
|
|
115
|
+
return rc;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
int Append(const wxArrayString &items, VALUE rb_clientData)
|
|
119
|
+
{
|
|
120
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
121
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
122
|
+
{
|
|
123
|
+
rb_raise(rb_eArgError,
|
|
124
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
125
|
+
"expected Array for client_data" :
|
|
126
|
+
"client_data Array needs to be equal in size to items Array");
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
130
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
131
|
+
{
|
|
132
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
133
|
+
}
|
|
134
|
+
return $self->Append(items, cd_arr.get());
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
int Insert(const wxArrayString &items, unsigned int pos, VALUE rb_clientData)
|
|
138
|
+
{
|
|
139
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
140
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
141
|
+
{
|
|
142
|
+
rb_raise(rb_eArgError,
|
|
143
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
144
|
+
"expected Array for client_data" :
|
|
145
|
+
"client_data Array needs to be equal in size to items Array");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
149
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
150
|
+
{
|
|
151
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
152
|
+
}
|
|
153
|
+
return $self->Insert(items, pos, cd_arr.get());
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
void Set(const wxArrayString &items, VALUE rb_clientData)
|
|
157
|
+
{
|
|
158
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
159
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
160
|
+
{
|
|
161
|
+
rb_raise(rb_eArgError,
|
|
162
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
163
|
+
"expected Array for client_data" :
|
|
164
|
+
"client_data Array needs to be equal in size to items Array");
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
168
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
169
|
+
{
|
|
170
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
171
|
+
}
|
|
172
|
+
$self->Set(items, cd_arr.get());
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
VALUE each_string()
|
|
176
|
+
{
|
|
177
|
+
VALUE rc = Qnil;
|
|
178
|
+
for (unsigned int i=0; i<$self->GetCount() ;++i)
|
|
179
|
+
{
|
|
180
|
+
VALUE rb_s = WXSTR_TO_RSTR($self->GetString(i));
|
|
181
|
+
rc = rb_yield(rb_s);
|
|
182
|
+
}
|
|
183
|
+
return rc;
|
|
184
|
+
}
|
|
185
|
+
__HEREDOC
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
end # class OwnerDrawnComboBox
|
|
189
|
+
|
|
190
|
+
end # class Director
|
|
191
|
+
|
|
192
|
+
end # module WXRuby3
|