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
|
@@ -14,6 +14,8 @@ module WXRuby3
|
|
|
14
14
|
|
|
15
15
|
class HtmlListBox < Window
|
|
16
16
|
|
|
17
|
+
include Typemap::ClientData
|
|
18
|
+
|
|
17
19
|
def setup
|
|
18
20
|
spec.items << 'wxSimpleHtmlListBox' << 'wxItemContainer'
|
|
19
21
|
super
|
|
@@ -72,47 +74,120 @@ module WXRuby3
|
|
|
72
74
|
spec.extend_interface 'wxSimpleHtmlListBox',
|
|
73
75
|
'virtual wxString GetString(unsigned int n) const',
|
|
74
76
|
'virtual void SetString(unsigned int n, const wxString &string)'
|
|
75
|
-
spec.ignore([ 'wxItemContainer::Append(const wxString &,
|
|
77
|
+
spec.ignore([ 'wxItemContainer::Append(const wxString &, void *)',
|
|
76
78
|
'wxItemContainer::Append(const std::vector< wxString > &)',
|
|
77
|
-
'wxItemContainer::Append(const wxArrayString &,
|
|
79
|
+
'wxItemContainer::Append(const wxArrayString &, void **)',
|
|
78
80
|
'wxItemContainer::Append(unsigned int, const wxString *)',
|
|
79
81
|
'wxItemContainer::Append(unsigned int, const wxString *, void **)',
|
|
80
82
|
'wxItemContainer::Append(unsigned int, const wxString *, wxClientData **)',
|
|
81
|
-
'wxItemContainer::Insert(const wxString &, unsigned int,
|
|
83
|
+
'wxItemContainer::Insert(const wxString &, unsigned int, void *)',
|
|
82
84
|
'wxItemContainer::Insert(const std::vector< wxString > &)',
|
|
83
|
-
'wxItemContainer::Insert(const wxArrayString &, unsigned int,
|
|
85
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
|
|
84
86
|
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int)',
|
|
85
87
|
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, void **)',
|
|
86
88
|
'wxItemContainer::Insert(unsigned int, const wxString *, unsigned int, wxClientData **)',
|
|
87
89
|
'wxItemContainer::Set(const std::vector< wxString > &)',
|
|
88
|
-
'wxItemContainer::Set(const wxArrayString &,
|
|
90
|
+
'wxItemContainer::Set(const wxArrayString &, void **)',
|
|
89
91
|
'wxItemContainer::Set(unsigned int, const wxString *)',
|
|
90
92
|
'wxItemContainer::Set(unsigned int, const wxString *, void **)',
|
|
91
93
|
'wxItemContainer::Set(unsigned int, const wxString *, wxClientData **)',
|
|
92
|
-
'wxItemContainer::
|
|
93
|
-
'wxItemContainer::
|
|
94
|
-
'wxItemContainer::GetClientObject',
|
|
95
|
-
'wxItemContainer::SetClientObject',
|
|
94
|
+
'wxItemContainer::GetClientData',
|
|
95
|
+
'wxItemContainer::SetClientData',
|
|
96
96
|
'wxItemContainer::HasClientUntypedData',
|
|
97
97
|
'wxItemContainer::Clear'])
|
|
98
|
-
spec.ignore([ 'wxItemContainer::
|
|
99
|
-
'wxItemContainer::
|
|
100
|
-
'wxItemContainer::
|
|
98
|
+
spec.ignore([ 'wxItemContainer::DetachClientObject',
|
|
99
|
+
'wxItemContainer::Append(const wxArrayString &, wxClientData **)',
|
|
100
|
+
'wxItemContainer::Insert(const wxArrayString &, unsigned int, wxClientData **)',
|
|
101
|
+
'wxItemContainer::Set(const wxArrayString &, wxClientData **)'], ignore_doc: false)
|
|
101
102
|
# for doc only
|
|
102
103
|
spec.map 'void** clientData' => 'Array', swig: false do
|
|
103
104
|
map_in code: ''
|
|
104
105
|
end
|
|
105
|
-
|
|
106
|
-
#
|
|
107
|
-
#
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
106
|
+
# Replace the old Wx definitions of these methods adding
|
|
107
|
+
# proper checks on the data arrays.
|
|
108
|
+
# Also add an item enumerator.
|
|
109
|
+
spec.add_extend_code 'wxSimpleHtmlListBox', <<~__HEREDOC
|
|
110
|
+
VALUE DetachClientObject(unsigned int n)
|
|
111
|
+
{
|
|
112
|
+
VALUE rc = Qnil;
|
|
113
|
+
wxClientData *wxcd = $self->DetachClientObject(n);
|
|
114
|
+
wxRubyClientData *rbcd = wxcd ? dynamic_cast<wxRubyClientData*> (wxcd) : nullptr;
|
|
115
|
+
if (rbcd)
|
|
116
|
+
{
|
|
117
|
+
rc = rbcd->GetData();
|
|
118
|
+
delete rbcd;
|
|
113
119
|
}
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
return rc;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
int Append(const wxArrayString &items, VALUE rb_clientData)
|
|
124
|
+
{
|
|
125
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
126
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
127
|
+
{
|
|
128
|
+
rb_raise(rb_eArgError,
|
|
129
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
130
|
+
"expected Array for client_data" :
|
|
131
|
+
"client_data Array needs to be equal in size to items Array");
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
135
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
136
|
+
{
|
|
137
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
138
|
+
}
|
|
139
|
+
return $self->Append(items, cd_arr.get());
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
int Insert(const wxArrayString &items, unsigned int pos, VALUE rb_clientData)
|
|
143
|
+
{
|
|
144
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
145
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
146
|
+
{
|
|
147
|
+
rb_raise(rb_eArgError,
|
|
148
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
149
|
+
"expected Array for client_data" :
|
|
150
|
+
"client_data Array needs to be equal in size to items Array");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
154
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
155
|
+
{
|
|
156
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
157
|
+
}
|
|
158
|
+
return $self->Insert(items, pos, cd_arr.get());
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
void Set(const wxArrayString &items, VALUE rb_clientData)
|
|
162
|
+
{
|
|
163
|
+
if (TYPE(rb_clientData) != T_ARRAY ||
|
|
164
|
+
static_cast<unsigned int> (RARRAY_LEN(rb_clientData)) != items.GetCount())
|
|
165
|
+
{
|
|
166
|
+
rb_raise(rb_eArgError,
|
|
167
|
+
TYPE(rb_clientData) == T_ARRAY ?
|
|
168
|
+
"expected Array for client_data" :
|
|
169
|
+
"client_data Array needs to be equal in size to items Array");
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
std::unique_ptr<wxClientData*[]> cd_arr = std::make_unique<wxClientData*[]> (RARRAY_LEN(rb_clientData));
|
|
173
|
+
for (int i=0; i<RARRAY_LEN(rb_clientData) ;++i)
|
|
174
|
+
{
|
|
175
|
+
cd_arr[i] = new wxRubyClientData(rb_ary_entry(rb_clientData, i));
|
|
176
|
+
}
|
|
177
|
+
$self->Set(items, cd_arr.get());
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
VALUE each_string()
|
|
181
|
+
{
|
|
182
|
+
VALUE rc = Qnil;
|
|
183
|
+
for (unsigned int i=0; i<$self->GetCount() ;++i)
|
|
184
|
+
{
|
|
185
|
+
VALUE rb_s = WXSTR_TO_RSTR($self->GetString(i));
|
|
186
|
+
rc = rb_yield(rb_s);
|
|
187
|
+
}
|
|
188
|
+
return rc;
|
|
189
|
+
}
|
|
190
|
+
__HEREDOC
|
|
116
191
|
end
|
|
117
192
|
end # class HtmlListBox
|
|
118
193
|
|
|
@@ -0,0 +1,495 @@
|
|
|
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 './validator'
|
|
10
|
+
|
|
11
|
+
module WXRuby3
|
|
12
|
+
|
|
13
|
+
class Director
|
|
14
|
+
|
|
15
|
+
class NumValidator < Validator
|
|
16
|
+
|
|
17
|
+
def setup
|
|
18
|
+
spec.items.replace ['valnum.h'] # enum from XML but only manually defined custom wxRuby classes
|
|
19
|
+
super
|
|
20
|
+
spec.initialize_at_end = true # no inheritance/XML info to analyze
|
|
21
|
+
spec.ignore 'wxMakeIntegerValidator', 'wxMakeFloatingPointValidator'
|
|
22
|
+
# need to explicitly declare this here as we do not have any XML extracted items
|
|
23
|
+
# so the post processing of the EvtHandler director does not work
|
|
24
|
+
spec.add_header_code <<~__HEREDOC
|
|
25
|
+
static WxRuby_ID __wxrb_try_before_id("try_before");
|
|
26
|
+
static WxRuby_ID __wxrb_try_after_id("try_after");
|
|
27
|
+
__HEREDOC
|
|
28
|
+
# provide custom wxRuby numeric validator classes
|
|
29
|
+
spec.add_header_code <<~__HEREDOC
|
|
30
|
+
#include <wx/valnum.h>
|
|
31
|
+
|
|
32
|
+
#ifdef wxLongLong_t
|
|
33
|
+
typedef wxLongLong_t LongestValueType;
|
|
34
|
+
typedef wxULongLong_t ULongestValueType;
|
|
35
|
+
#else
|
|
36
|
+
typedef long LongestValueType;
|
|
37
|
+
typedef unsigned long ULongestValueType;
|
|
38
|
+
#endif
|
|
39
|
+
class WXIntegerValidator : public wxIntegerValidator<LongestValueType>, public wxRubyValidatorBinding
|
|
40
|
+
{
|
|
41
|
+
public:
|
|
42
|
+
WXIntegerValidator(const WXIntegerValidator& v)
|
|
43
|
+
: wxIntegerValidator(v)
|
|
44
|
+
, wxRubyValidatorBinding(v)
|
|
45
|
+
{
|
|
46
|
+
// this is horrible but why they needed to explicitly declare this as a const member is beyond me
|
|
47
|
+
*reinterpret_cast<LongestValueType**> ((void*)&m_value) = &m_valueCache;
|
|
48
|
+
}
|
|
49
|
+
WXIntegerValidator(long style=wxNUM_VAL_DEFAULT)
|
|
50
|
+
: wxIntegerValidator(&m_valueCache, style)
|
|
51
|
+
{}
|
|
52
|
+
WXIntegerValidator(LongestValueType min, LongestValueType max, long style=wxFILTER_NONE)
|
|
53
|
+
: wxIntegerValidator(&m_valueCache, min, max, style)
|
|
54
|
+
{}
|
|
55
|
+
virtual ~WXIntegerValidator()
|
|
56
|
+
{
|
|
57
|
+
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
virtual wxObject* Clone() const override
|
|
61
|
+
{
|
|
62
|
+
WXIntegerValidator* clone = new WXIntegerValidator(*this);
|
|
63
|
+
clone->m_valueCache = this->m_valueCache;
|
|
64
|
+
return clone;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
virtual void SetWindow(wxWindow *win) override
|
|
68
|
+
{
|
|
69
|
+
this->wxIntegerValidator::SetWindow(win);
|
|
70
|
+
VALUE self = get_self();
|
|
71
|
+
// make sure Ruby does not own this validator instance anymore
|
|
72
|
+
RDATA(self)->dfree = SWIG_RubyRemoveTracking;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
virtual bool TransferFromWindow () override
|
|
76
|
+
{
|
|
77
|
+
// call super
|
|
78
|
+
if (this->wxIntegerValidator::TransferFromWindow())
|
|
79
|
+
{
|
|
80
|
+
// ok, data is retrieved from window and cached
|
|
81
|
+
// now allow any defined binding handler to pass on the data
|
|
82
|
+
return this->DoOnTransferFromWindow(LL2NUM(m_valueCache));
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
virtual bool TransferToWindow () override
|
|
87
|
+
{
|
|
88
|
+
// collect data from any defined binding handler
|
|
89
|
+
VALUE data = this->DoOnTransferToWindow();
|
|
90
|
+
// if Qnil returned there is no data returned from handler so we just keep what's in the store
|
|
91
|
+
if (!NIL_P(data))
|
|
92
|
+
{
|
|
93
|
+
m_valueCache = NUM2LL(data);
|
|
94
|
+
}
|
|
95
|
+
// now allow standard functionality to transfer to window
|
|
96
|
+
return this->wxIntegerValidator::TransferToWindow();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
LongestValueType GetValue () const
|
|
100
|
+
{
|
|
101
|
+
return m_valueCache;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
void SetValue (LongestValueType val)
|
|
105
|
+
{
|
|
106
|
+
m_valueCache = val;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
protected:
|
|
110
|
+
static VALUE c_IntegerValidator;
|
|
111
|
+
|
|
112
|
+
virtual VALUE get_self() override
|
|
113
|
+
{
|
|
114
|
+
if (NIL_P(this->self_))
|
|
115
|
+
{
|
|
116
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
117
|
+
// if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
|
|
118
|
+
if (NIL_P(this->self_))
|
|
119
|
+
{
|
|
120
|
+
if (NIL_P(c_IntegerValidator))
|
|
121
|
+
{
|
|
122
|
+
c_IntegerValidator = rb_const_get(mWxCore, rb_intern("IntegerValidator"));
|
|
123
|
+
}
|
|
124
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_IntegerValidator);
|
|
125
|
+
this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return this->self_;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
LongestValueType m_valueCache {};
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
VALUE WXIntegerValidator::c_IntegerValidator = Qnil;
|
|
135
|
+
|
|
136
|
+
static void GC_mark_wxIntegerValidator(void* ptr)
|
|
137
|
+
{
|
|
138
|
+
if (ptr)
|
|
139
|
+
{
|
|
140
|
+
wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
|
|
141
|
+
WXIntegerValidator* rbvp = dynamic_cast<WXIntegerValidator*> (vp);
|
|
142
|
+
// This might be a pointer to a non-customized validator (or clone thereof) created internally
|
|
143
|
+
// by wxWidgets C++ code
|
|
144
|
+
if (rbvp) rbvp->GC_Mark();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
class WXUnsignedValidator : public wxIntegerValidator<ULongestValueType>, public wxRubyValidatorBinding
|
|
149
|
+
{
|
|
150
|
+
public:
|
|
151
|
+
WXUnsignedValidator(const WXUnsignedValidator& v)
|
|
152
|
+
: wxIntegerValidator(v)
|
|
153
|
+
, wxRubyValidatorBinding(v)
|
|
154
|
+
{
|
|
155
|
+
// this is horrible but why they needed to explicitly declare this as a const member is beyond me
|
|
156
|
+
*reinterpret_cast<ULongestValueType**> ((void*)&m_value) = &m_valueCache;
|
|
157
|
+
}
|
|
158
|
+
WXUnsignedValidator(long style=wxFILTER_NONE)
|
|
159
|
+
: wxIntegerValidator(&m_valueCache, style)
|
|
160
|
+
{}
|
|
161
|
+
WXUnsignedValidator(LongestValueType min, LongestValueType max, long style=wxFILTER_NONE)
|
|
162
|
+
: wxIntegerValidator(&m_valueCache, min, max, style)
|
|
163
|
+
{}
|
|
164
|
+
virtual ~WXUnsignedValidator()
|
|
165
|
+
{
|
|
166
|
+
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
virtual wxObject* Clone() const override
|
|
170
|
+
{
|
|
171
|
+
WXUnsignedValidator* clone = new WXUnsignedValidator(*this);
|
|
172
|
+
clone->m_valueCache = this->m_valueCache;
|
|
173
|
+
return clone;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
virtual void SetWindow(wxWindow *win) override
|
|
177
|
+
{
|
|
178
|
+
this->wxIntegerValidator::SetWindow(win);
|
|
179
|
+
VALUE self = get_self();
|
|
180
|
+
// make sure Ruby does not own this validator instance anymore
|
|
181
|
+
RDATA(self)->dfree = SWIG_RubyRemoveTracking;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
virtual bool TransferFromWindow () override
|
|
185
|
+
{
|
|
186
|
+
// call super
|
|
187
|
+
if (this->wxIntegerValidator::TransferFromWindow())
|
|
188
|
+
{
|
|
189
|
+
// ok, data is retrieved from window and cached
|
|
190
|
+
// now allow any defined binding handler to pass on the data
|
|
191
|
+
return this->DoOnTransferFromWindow(ULL2NUM(m_valueCache));
|
|
192
|
+
}
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
virtual bool TransferToWindow () override
|
|
196
|
+
{
|
|
197
|
+
// collect data from any defined binding handler
|
|
198
|
+
VALUE data = this->DoOnTransferToWindow();
|
|
199
|
+
// if Qnil returned there is no data returned from handler so we just keep what's in the store
|
|
200
|
+
if (!NIL_P(data))
|
|
201
|
+
{
|
|
202
|
+
m_valueCache = NUM2ULL(data);
|
|
203
|
+
}
|
|
204
|
+
// now allow standard functionality to transfer to window
|
|
205
|
+
return this->wxIntegerValidator::TransferToWindow();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
ULongestValueType GetValue () const
|
|
209
|
+
{
|
|
210
|
+
return m_valueCache;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
void SetValue (ULongestValueType val)
|
|
214
|
+
{
|
|
215
|
+
m_valueCache = val;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
protected:
|
|
219
|
+
static VALUE c_UnsignedValidator;
|
|
220
|
+
|
|
221
|
+
virtual VALUE get_self() override
|
|
222
|
+
{
|
|
223
|
+
if (NIL_P(this->self_))
|
|
224
|
+
{
|
|
225
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
226
|
+
// if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
|
|
227
|
+
if (NIL_P(this->self_))
|
|
228
|
+
{
|
|
229
|
+
if (NIL_P(c_UnsignedValidator))
|
|
230
|
+
{
|
|
231
|
+
c_UnsignedValidator = rb_const_get(mWxCore, rb_intern("UnsignedValidator"));
|
|
232
|
+
}
|
|
233
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_UnsignedValidator);
|
|
234
|
+
this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return this->self_;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
ULongestValueType m_valueCache {};
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
VALUE WXUnsignedValidator::c_UnsignedValidator = Qnil;
|
|
244
|
+
|
|
245
|
+
static void GC_mark_wxUnsignedValidator(void* ptr)
|
|
246
|
+
{
|
|
247
|
+
if (ptr)
|
|
248
|
+
{
|
|
249
|
+
wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
|
|
250
|
+
WXUnsignedValidator* rbvp = dynamic_cast<WXUnsignedValidator*> (vp);
|
|
251
|
+
// This might be a pointer to a non-customized validator (or clone thereof) created internally
|
|
252
|
+
// by wxWidgets C++ code
|
|
253
|
+
if (rbvp) rbvp->GC_Mark();
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
class WXFloatValidator : public wxFloatingPointValidator<double>, public wxRubyValidatorBinding
|
|
258
|
+
{
|
|
259
|
+
public:
|
|
260
|
+
WXFloatValidator(const WXFloatValidator& v)
|
|
261
|
+
: wxFloatingPointValidator(v)
|
|
262
|
+
, wxRubyValidatorBinding(v)
|
|
263
|
+
{
|
|
264
|
+
// this is horrible but why they needed to explicitly declare this as a const member is beyond me
|
|
265
|
+
*reinterpret_cast<double**> ((void*)&m_value) = &m_valueCache;
|
|
266
|
+
}
|
|
267
|
+
WXFloatValidator(long style=wxFILTER_NONE)
|
|
268
|
+
: wxFloatingPointValidator(&m_valueCache, style)
|
|
269
|
+
{}
|
|
270
|
+
WXFloatValidator(int precision, long style=wxFILTER_NONE)
|
|
271
|
+
: wxFloatingPointValidator(precision, &m_valueCache, style)
|
|
272
|
+
{}
|
|
273
|
+
virtual ~WXFloatValidator()
|
|
274
|
+
{
|
|
275
|
+
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
virtual wxObject* Clone() const override
|
|
279
|
+
{
|
|
280
|
+
return new WXFloatValidator(*this);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
virtual void SetWindow(wxWindow *win) override
|
|
284
|
+
{
|
|
285
|
+
this->wxFloatingPointValidator::SetWindow(win);
|
|
286
|
+
VALUE self = get_self();
|
|
287
|
+
// make sure Ruby does not own this validator instance anymore
|
|
288
|
+
RDATA(self)->dfree = SWIG_RubyRemoveTracking;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
virtual bool TransferFromWindow () override
|
|
292
|
+
{
|
|
293
|
+
// call super
|
|
294
|
+
if (this->wxFloatingPointValidator::TransferFromWindow())
|
|
295
|
+
{
|
|
296
|
+
// ok, data is retrieved from window and cached
|
|
297
|
+
// now allow any defined binding handler to pass on the data
|
|
298
|
+
return this->DoOnTransferFromWindow(DBL2NUM(m_valueCache));
|
|
299
|
+
}
|
|
300
|
+
return false;
|
|
301
|
+
}
|
|
302
|
+
virtual bool TransferToWindow () override
|
|
303
|
+
{
|
|
304
|
+
// collect data from any defined binding handler
|
|
305
|
+
VALUE data = this->DoOnTransferToWindow();
|
|
306
|
+
// if Qnil returned there is no data returned from handler so we just keep what's in the store
|
|
307
|
+
if (!NIL_P(data))
|
|
308
|
+
{
|
|
309
|
+
m_valueCache = NUM2DBL(data);
|
|
310
|
+
}
|
|
311
|
+
// now allow standard functionality to transfer to window
|
|
312
|
+
return this->wxFloatingPointValidator::TransferToWindow();
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
double GetValue () const
|
|
316
|
+
{
|
|
317
|
+
return m_valueCache;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
void SetValue (double val)
|
|
321
|
+
{
|
|
322
|
+
m_valueCache = val;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
protected:
|
|
326
|
+
static VALUE c_FloatValidator;
|
|
327
|
+
|
|
328
|
+
virtual VALUE get_self() override
|
|
329
|
+
{
|
|
330
|
+
if (NIL_P(this->self_))
|
|
331
|
+
{
|
|
332
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
333
|
+
// if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
|
|
334
|
+
if (NIL_P(this->self_))
|
|
335
|
+
{
|
|
336
|
+
if (NIL_P(c_FloatValidator))
|
|
337
|
+
{
|
|
338
|
+
c_FloatValidator = rb_const_get(mWxCore, rb_intern("FloatValidator"));
|
|
339
|
+
}
|
|
340
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_FloatValidator);
|
|
341
|
+
this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return this->self_;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
double m_valueCache {};
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
VALUE WXFloatValidator::c_FloatValidator = Qnil;
|
|
351
|
+
|
|
352
|
+
static void GC_mark_wxFloatValidator(void* ptr)
|
|
353
|
+
{
|
|
354
|
+
if (ptr)
|
|
355
|
+
{
|
|
356
|
+
wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
|
|
357
|
+
WXFloatValidator* rbvp = dynamic_cast<WXFloatValidator*> (vp);
|
|
358
|
+
// This might be a pointer to a non-customized validator (or clone thereof) created internally
|
|
359
|
+
// by wxWidgets C++ code
|
|
360
|
+
if (rbvp) rbvp->GC_Mark();
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
__HEREDOC
|
|
364
|
+
spec.add_swig_code 'GC_MANAGE_AS_OBJECT(WXIntegerValidator);',
|
|
365
|
+
'%markfunc WXIntegerValidator "GC_mark_wxIntegerValidator";',
|
|
366
|
+
'GC_MANAGE_AS_OBJECT(WXUnsignedValidator);',
|
|
367
|
+
'%markfunc WXUnsignedValidator "GC_mark_wxUnsignedValidator";',
|
|
368
|
+
'GC_MANAGE_AS_OBJECT(WXFloatValidator);',
|
|
369
|
+
'%markfunc WXFloatValidator "GC_mark_wxFloatValidator";'
|
|
370
|
+
spec.new_object 'WXIntegerValidator::Clone',
|
|
371
|
+
'WXUnsignedValidator::Clone',
|
|
372
|
+
'WXFloatValidator::Clone'
|
|
373
|
+
spec.suppress_warning(473,
|
|
374
|
+
'WXIntegerValidator::Clone',
|
|
375
|
+
'WXUnsignedValidator::Clone',
|
|
376
|
+
'WXFloatValidator::Clone')
|
|
377
|
+
spec.map_apply 'long long * OUTPUT' => ['wxLongLong_t& min', 'wxLongLong_t& max']
|
|
378
|
+
spec.map_apply 'unsigned long long * OUTPUT' => ['wxULongLong_t& min', 'wxULongLong_t& max']
|
|
379
|
+
spec.map_apply 'double * OUTPUT' => ['double& min', 'double& max']
|
|
380
|
+
spec.swig_import 'swig/classes/include/wxObject.h'
|
|
381
|
+
spec.swig_import 'swig/classes/include/wxEvtHandler.h'
|
|
382
|
+
spec.swig_import 'swig/classes/include/wxValidator.h'
|
|
383
|
+
# hardcoded interface declarations
|
|
384
|
+
spec.add_interface_code <<~__HEREDOC
|
|
385
|
+
// Bit masks used for numeric validator styles.
|
|
386
|
+
enum wxNumValidatorStyle
|
|
387
|
+
{
|
|
388
|
+
wxNUM_VAL_DEFAULT = 0x0,
|
|
389
|
+
wxNUM_VAL_THOUSANDS_SEPARATOR = 0x1,
|
|
390
|
+
wxNUM_VAL_ZERO_AS_BLANK = 0x2,
|
|
391
|
+
wxNUM_VAL_NO_TRAILING_ZEROES = 0x4
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
%alias WXIntegerValidator::GetMin "min";
|
|
395
|
+
%alias WXIntegerValidator::SetMin "min=";
|
|
396
|
+
%alias WXIntegerValidator::GetMax "max";
|
|
397
|
+
%alias WXIntegerValidator::SetMax "max=";
|
|
398
|
+
%alias WXIntegerValidator::SetStyle "style=";
|
|
399
|
+
%alias WXIntegerValidator::GetValue "value";
|
|
400
|
+
%alias WXIntegerValidator::SetValue "value=";
|
|
401
|
+
|
|
402
|
+
class WXIntegerValidator : public wxValidator
|
|
403
|
+
{
|
|
404
|
+
public:
|
|
405
|
+
WXIntegerValidator(const WXIntegerValidator& v);
|
|
406
|
+
WXIntegerValidator(long style=wxNUM_VAL_DEFAULT);
|
|
407
|
+
WXIntegerValidator(wxLongLong_t min, wxLongLong_t max, long style=wxFILTER_NONE);
|
|
408
|
+
virtual ~WXIntegerValidator();
|
|
409
|
+
|
|
410
|
+
virtual WXIntegerValidator* Clone() const;
|
|
411
|
+
|
|
412
|
+
void SetMin(wxLongLong_t min);
|
|
413
|
+
wxLongLong_t GetMin() const;
|
|
414
|
+
void SetMax(wxLongLong_t max);
|
|
415
|
+
wxLongLong_t GetMax() const;
|
|
416
|
+
void SetRange(wxLongLong_t min, wxLongLong_t max);
|
|
417
|
+
void GetRange(wxLongLong_t& min, wxLongLong_t& max) const;
|
|
418
|
+
void SetStyle(int style);
|
|
419
|
+
|
|
420
|
+
// wxRuby extensions
|
|
421
|
+
wxLongLong_t GetValue () const;
|
|
422
|
+
void SetValue (wxLongLong_t val);
|
|
423
|
+
};
|
|
424
|
+
|
|
425
|
+
%alias WXUnsignedValidator::GetMin "min";
|
|
426
|
+
%alias WXUnsignedValidator::SetMin "min=";
|
|
427
|
+
%alias WXUnsignedValidator::GetMax "max";
|
|
428
|
+
%alias WXUnsignedValidator::SetMax "max=";
|
|
429
|
+
%alias WXUnsignedValidator::SetStyle "style=";
|
|
430
|
+
%alias WXUnsignedValidator::GetValue "value";
|
|
431
|
+
%alias WXUnsignedValidator::SetValue "value=";
|
|
432
|
+
|
|
433
|
+
class WXUnsignedValidator : public wxValidator
|
|
434
|
+
{
|
|
435
|
+
public:
|
|
436
|
+
WXUnsignedValidator(const WXUnsignedValidator& v);
|
|
437
|
+
WXUnsignedValidator(long style=wxNUM_VAL_DEFAULT);
|
|
438
|
+
WXUnsignedValidator(wxULongLong_t min, wxULongLong_t max, long style=wxFILTER_NONE);
|
|
439
|
+
virtual ~WXUnsignedValidator();
|
|
440
|
+
|
|
441
|
+
virtual WXUnsignedValidator* Clone() const;
|
|
442
|
+
|
|
443
|
+
void SetMin(wxULongLong_t min);
|
|
444
|
+
wxULongLong_t GetMin() const;
|
|
445
|
+
void SetMax(wxULongLong_t max);
|
|
446
|
+
wxULongLong_t GetMax() const;
|
|
447
|
+
void SetRange(wxULongLong_t min, wxULongLong_t max);
|
|
448
|
+
void GetRange(wxULongLong_t& min, wxULongLong_t& max) const;
|
|
449
|
+
void SetStyle(int style);
|
|
450
|
+
|
|
451
|
+
// wxRuby extensions
|
|
452
|
+
wxULongLong_t GetValue () const;
|
|
453
|
+
void SetValue (wxULongLong_t val);
|
|
454
|
+
};
|
|
455
|
+
|
|
456
|
+
%alias WXFloatValidator::GetMin "min";
|
|
457
|
+
%alias WXFloatValidator::SetMin "min=";
|
|
458
|
+
%alias WXFloatValidator::GetMax "max";
|
|
459
|
+
%alias WXFloatValidator::SetMax "max=";
|
|
460
|
+
%alias WXFloatValidator::SetStyle "style=";
|
|
461
|
+
%alias WXFloatValidator::GetValue "value";
|
|
462
|
+
%alias WXFloatValidator::SetValue "value=";
|
|
463
|
+
|
|
464
|
+
class WXFloatValidator : public wxValidator
|
|
465
|
+
{
|
|
466
|
+
public:
|
|
467
|
+
WXFloatValidator(const WXFloatValidator& v);
|
|
468
|
+
WXFloatValidator(long style=wxNUM_VAL_DEFAULT);
|
|
469
|
+
WXFloatValidator(int precision, long style);
|
|
470
|
+
virtual ~WXFloatValidator();
|
|
471
|
+
|
|
472
|
+
virtual WXFloatValidator* Clone() const;
|
|
473
|
+
|
|
474
|
+
void SetMin(double min);
|
|
475
|
+
double GetMin() const;
|
|
476
|
+
void SetMax(double max);
|
|
477
|
+
double GetMax() const;
|
|
478
|
+
void SetRange(double min, double max);
|
|
479
|
+
void GetRange(double& min, double& max) const;
|
|
480
|
+
void SetStyle(int style);
|
|
481
|
+
|
|
482
|
+
void SetPrecision(unsigned precision);
|
|
483
|
+
void SetFactor(double factor);
|
|
484
|
+
|
|
485
|
+
// wxRuby extensions
|
|
486
|
+
double GetValue () const;
|
|
487
|
+
void SetValue (double val);
|
|
488
|
+
};
|
|
489
|
+
__HEREDOC
|
|
490
|
+
end
|
|
491
|
+
end # class NumValidator
|
|
492
|
+
|
|
493
|
+
end # class Director
|
|
494
|
+
|
|
495
|
+
end # module WXRuby3
|