wxruby3 0.9.2 → 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/INSTALL.md +35 -29
- data/README.md +24 -15
- data/ext/wxruby3/include/wxruby-ClientData.h +48 -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/lib/wx/core/bitmap_combobox.rb +17 -21
- data/lib/wx/core/combobox.rb +13 -3
- 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/owner_drawn_combobox.rb +45 -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/validator.rb +70 -5
- data/lib/wx/core/window.rb +3 -7
- data/lib/wx/doc/art_locator.rb +1 -0
- data/lib/wx/doc/comboctrl.rb +18 -0
- 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/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/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/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/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 +17 -2
- data/rakelib/lib/core/parameter.rb +1 -1
- data/rakelib/lib/core/spec_helper.rb +7 -1
- 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/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_handler.rb +3 -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 +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/header_ctrl.rb +6 -1
- data/rakelib/lib/director/html_listbox.rb +96 -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/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 +28 -0
- data/rakelib/lib/director/text_entry.rb +4 -0
- 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 +1 -1
- data/rakelib/lib/generate/doc.rb +10 -4
- data/rakelib/lib/specs/interfaces.rb +2 -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/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 +1233 -0
- data/samples/xrc/custom_xrc_sample.rb +47 -41
- data/samples/xrc/xrc_sample.rb +53 -47
- 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_sizer.rb +44 -1
- data/tests/test_validators.rb +805 -0
- metadata +92 -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
|
@@ -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
|
|
@@ -18,6 +18,8 @@ module WXRuby3
|
|
|
18
18
|
|
|
19
19
|
include Typemap::PGCell
|
|
20
20
|
|
|
21
|
+
include Typemap::ClientData
|
|
22
|
+
|
|
21
23
|
def setup
|
|
22
24
|
super
|
|
23
25
|
if spec.module_name == 'wxPGProperty'
|
|
@@ -113,7 +115,7 @@ module WXRuby3
|
|
|
113
115
|
# obsolete
|
|
114
116
|
spec.ignore %w[wxPGProperty::AddChild wxPGProperty::GetValueString]
|
|
115
117
|
# not of use in Ruby
|
|
116
|
-
spec.ignore(%w[wxPGProperty::
|
|
118
|
+
spec.ignore(%w[wxPGProperty::GetClientData wxPGProperty::SetClientData])
|
|
117
119
|
# only keep the const version
|
|
118
120
|
spec.ignore 'wxPGProperty::GetCell'
|
|
119
121
|
spec.regard 'wxPGProperty::GetCell(unsigned int) const'
|
|
@@ -146,32 +148,6 @@ module WXRuby3
|
|
|
146
148
|
spec.suppress_warning(473,
|
|
147
149
|
'wxPGProperty::DoGetEditorClass',
|
|
148
150
|
'wxPGProperty::DoGetValidator')
|
|
149
|
-
spec.add_header_code <<~__HEREDOC
|
|
150
|
-
extern void GC_mark_wxPGProperty(void* ptr)
|
|
151
|
-
{
|
|
152
|
-
#ifdef __WXRB_DEBUG__
|
|
153
|
-
if (wxRuby_TraceLevel()>1)
|
|
154
|
-
{
|
|
155
|
-
std::wcout << "> GC_mark_wxPGProperty : " << ptr;
|
|
156
|
-
if (ptr) std::wcout << " (" << ((wxPGProperty*)ptr)->GetName() << ')';
|
|
157
|
-
std::wcout << std::endl;
|
|
158
|
-
}
|
|
159
|
-
#endif
|
|
160
|
-
if (ptr)
|
|
161
|
-
{
|
|
162
|
-
VALUE object = (VALUE)((wxPGProperty*)ptr)->GetClientData();
|
|
163
|
-
if (object && !NIL_P(object))
|
|
164
|
-
{
|
|
165
|
-
#ifdef __WXRB_DEBUG__
|
|
166
|
-
if (wxRuby_TraceLevel()>2)
|
|
167
|
-
std::wcout << "*** marking property data " << ptr << std::endl;
|
|
168
|
-
#endif
|
|
169
|
-
rb_gc_mark(object);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
__HEREDOC
|
|
174
|
-
spec.add_swig_code '%markfunc wxPGProperty "GC_mark_wxPGProperty";'
|
|
175
151
|
spec.ignore 'wxPGProperty::m_clientData' # not wanted for wxRuby
|
|
176
152
|
# take protected members into account
|
|
177
153
|
spec.regard 'wxPGProperty::wxPGProperty',
|
|
@@ -237,7 +213,6 @@ module WXRuby3
|
|
|
237
213
|
}
|
|
238
214
|
__CODE
|
|
239
215
|
else
|
|
240
|
-
spec.add_header_code 'extern void GC_mark_wxPGProperty(void* ptr);'
|
|
241
216
|
spec.items.each do |itm|
|
|
242
217
|
unless itm == 'wxColourPropertyValue'
|
|
243
218
|
# add protected member methods and var to complement base class
|
|
@@ -250,7 +225,6 @@ module WXRuby3
|
|
|
250
225
|
'wxVariant m_value',
|
|
251
226
|
visibility: 'protected'
|
|
252
227
|
spec.rename_for_ruby 'value_' => "#{itm}::m_value"
|
|
253
|
-
spec.add_swig_code %Q{%markfunc #{itm} "GC_mark_wxPGProperty";}
|
|
254
228
|
spec.new_object %Q{#{itm}::GetEditorDialog}
|
|
255
229
|
spec.suppress_warning(473, "#{itm}::GetEditorDialog")
|
|
256
230
|
end
|
|
@@ -14,13 +14,13 @@ module WXRuby3
|
|
|
14
14
|
|
|
15
15
|
class RibbonButtonBar < Window
|
|
16
16
|
|
|
17
|
+
include Typemap::ClientData
|
|
18
|
+
|
|
17
19
|
def setup
|
|
18
20
|
super
|
|
19
21
|
# exclude these; far better done in pure Ruby
|
|
20
22
|
spec.ignore 'wxRibbonButtonBar::SetItemClientData',
|
|
21
|
-
'wxRibbonButtonBar::GetItemClientData'
|
|
22
|
-
spec.ignore 'wxRibbonButtonBar::SetItemClientObject',
|
|
23
|
-
'wxRibbonButtonBar::GetItemClientObject'
|
|
23
|
+
'wxRibbonButtonBar::GetItemClientData'
|
|
24
24
|
# not needed because of type mapping
|
|
25
25
|
spec.ignore 'wxRibbonButtonBar::GetItemId',
|
|
26
26
|
'wxRibbonButtonBar::GetItemById'
|
|
@@ -14,15 +14,13 @@ module WXRuby3
|
|
|
14
14
|
|
|
15
15
|
class RibbonGallery < Window
|
|
16
16
|
|
|
17
|
+
include Typemap::ClientData
|
|
18
|
+
|
|
17
19
|
def setup
|
|
18
20
|
super
|
|
19
|
-
# exclude these; far better done in pure Ruby
|
|
20
|
-
spec.ignore 'wxRibbonGallery::SetItemClientObject',
|
|
21
|
-
'wxRibbonGallery::GetItemClientObject',
|
|
22
|
-
'wxRibbonGallery::Append(const wxBitmap &, int, wxClientData *)'
|
|
23
21
|
spec.ignore 'wxRibbonGallery::SetItemClientData',
|
|
24
22
|
'wxRibbonGallery::GetItemClientData',
|
|
25
|
-
'wxRibbonGallery::Append(const wxBitmap &, int, void *)'
|
|
23
|
+
'wxRibbonGallery::Append(const wxBitmap &, int, void *)'
|
|
26
24
|
spec.map 'wxRibbonGalleryItem*' => 'Integer' do
|
|
27
25
|
map_out code: '$result = ULL2NUM(reinterpret_cast<uintptr_t> ($1));'
|
|
28
26
|
map_directorout code: '$result = reinterpret_cast<wxRibbonGalleryItem*> ((uintptr_t)NUM2ULL($1));'
|
|
@@ -12,12 +12,19 @@ module WXRuby3
|
|
|
12
12
|
|
|
13
13
|
class Sizer < Director
|
|
14
14
|
|
|
15
|
+
include Typemap::ClientData
|
|
16
|
+
|
|
15
17
|
def setup
|
|
16
|
-
# Any nested sizers passed to Add() in are owned by C++, not GC
|
|
18
|
+
# Any nested sizers passed to Add() in are owned by C++, not GC-ed by Ruby
|
|
17
19
|
case spec.module_name
|
|
18
20
|
when 'wxSizer'
|
|
19
21
|
spec.items << 'wxSizerFlags'
|
|
20
22
|
spec.gc_as_untracked('wxSizerFlags')
|
|
23
|
+
if Config.instance.wx_version < '3.3.0'
|
|
24
|
+
# missing from docs
|
|
25
|
+
spec.extend_interface 'wxSizerFlags',
|
|
26
|
+
'wxSizerFlags& HorzBorder()'
|
|
27
|
+
end
|
|
21
28
|
spec.make_abstract('wxSizer')
|
|
22
29
|
spec.ignore %w[wxSizer::IsShown wxSizer::SetVirtualSizeHints]
|
|
23
30
|
# cannot use these with wxRuby
|
|
@@ -45,7 +52,7 @@ module WXRuby3
|
|
|
45
52
|
spec.ignore 'wxSizer::Detach(wxSizer*)',
|
|
46
53
|
'wxSizer::Detach(int)', ignore_doc: false
|
|
47
54
|
spec.add_extend_code 'wxSizer', <<~__HEREDOC
|
|
48
|
-
bool
|
|
55
|
+
bool Detach(wxSizer* szr)
|
|
49
56
|
{
|
|
50
57
|
if ($self->Detach(szr))
|
|
51
58
|
{
|
|
@@ -60,7 +67,7 @@ module WXRuby3
|
|
|
60
67
|
return false;
|
|
61
68
|
}
|
|
62
69
|
|
|
63
|
-
bool
|
|
70
|
+
bool Detach(int itm_nr)
|
|
64
71
|
{
|
|
65
72
|
wxSizerItem* itm = $self->GetItem(itm_nr);
|
|
66
73
|
if (itm)
|
|
@@ -124,9 +131,13 @@ module WXRuby3
|
|
|
124
131
|
spec.ignore 'wxGridBagSizer::Add(wxGBSizerItem *)'
|
|
125
132
|
# need to adjust sizer arg name to apply disown specs
|
|
126
133
|
spec.ignore 'wxGridBagSizer::Add(wxSizer *, const wxGBPosition &, const wxGBSpan &, int, int, wxObject *)',
|
|
134
|
+
'wxGridBagSizer::Add(wxWindow *, const wxGBPosition &, const wxGBSpan &, int, int, wxObject *)',
|
|
135
|
+
'wxGridBagSizer::Add(int, int, const wxGBPosition &, const wxGBSpan &, int, int, wxObject *)',
|
|
127
136
|
ignore_doc: false
|
|
128
137
|
spec.extend_interface 'wxGridBagSizer',
|
|
129
|
-
'wxSizerItem *Add(wxSizer *sizer_disown, const wxGBPosition &pos, const wxGBSpan &span=wxDefaultSpan, int flag=0, int border=0, wxObject *userData=NULL)'
|
|
138
|
+
'wxSizerItem * Add(wxSizer *sizer_disown, const wxGBPosition &pos, const wxGBSpan &span=wxDefaultSpan, int flag=0, int border=0, wxObject *userData=NULL)',
|
|
139
|
+
'wxSizerItem * Add(wxWindow *window, const wxGBPosition &pos, const wxGBSpan &span=wxDefaultSpan, int flag=0, int border=0, wxObject *userData=NULL)',
|
|
140
|
+
'wxSizerItem * Add(int width, int height, const wxGBPosition &pos, const wxGBSpan &span=wxDefaultSpan, int flag=0, int border=0, wxObject *userData=NULL)'
|
|
130
141
|
spec.disown 'wxSizer* sizer_disown'
|
|
131
142
|
end
|
|
132
143
|
# no real use for allowing these to be overloaded but a whole lot of grieve
|
|
@@ -12,15 +12,27 @@ module WXRuby3
|
|
|
12
12
|
|
|
13
13
|
class SizerItem < Director
|
|
14
14
|
|
|
15
|
+
include Typemap::ClientData
|
|
16
|
+
|
|
15
17
|
def setup
|
|
16
18
|
spec.disable_proxies
|
|
17
19
|
# do not allow creating SizerItems in Ruby; this has limited benefits and
|
|
18
20
|
# memory management of sizer items is a nightmare
|
|
19
21
|
case spec.module_name
|
|
20
22
|
when 'wxSizerItem'
|
|
23
|
+
spec.gc_as_untracked 'wxSizerItem'
|
|
21
24
|
spec.make_abstract 'wxSizerItem'
|
|
22
25
|
# ignore constructors
|
|
23
26
|
spec.ignore 'wxSizerItem::wxSizerItem'
|
|
27
|
+
# needs more discriminating return type for type map
|
|
28
|
+
spec.ignore 'wxSizerItem::GetUserData', ignore_doc: false
|
|
29
|
+
spec.add_header_code 'typedef wxObject* WxUserDataObject;'
|
|
30
|
+
spec.extend_interface 'wxSizerItem',
|
|
31
|
+
'WxUserDataObject GetUserData() const'
|
|
32
|
+
# for doc gen only
|
|
33
|
+
spec.map 'wxObject*' => 'Object', swig: false do
|
|
34
|
+
map_out code: ''
|
|
35
|
+
end
|
|
24
36
|
spec.ignore(%w[wxSizerItem::SetSizer wxSizerItem::SetSpacer wxSizerItem::SetWindow])
|
|
25
37
|
# need to adjust sizer arg name to apply disown specs
|
|
26
38
|
spec.ignore 'wxSizerItem::AssignSizer(wxSizer *)', ignore_doc: false
|
|
@@ -45,6 +57,7 @@ module WXRuby3
|
|
|
45
57
|
}
|
|
46
58
|
__HEREDOC
|
|
47
59
|
when 'wxGBSizerItem'
|
|
60
|
+
spec.gc_as_untracked 'wxGBSizerItem'
|
|
48
61
|
spec.make_abstract 'wxGBSizerItem'
|
|
49
62
|
# ignore constructors
|
|
50
63
|
spec.ignore 'wxGBSizerItem::wxGBSizerItem',
|
|
@@ -20,6 +20,34 @@ module WXRuby3
|
|
|
20
20
|
__HEREDOC
|
|
21
21
|
super
|
|
22
22
|
end
|
|
23
|
+
|
|
24
|
+
def process(gendoc: false)
|
|
25
|
+
defmod = super
|
|
26
|
+
spec.include 'wx/generic/statbmpg.h'
|
|
27
|
+
def_statbmp = defmod.find_item('wxStaticBitmap')
|
|
28
|
+
# create a definition for 'wxGenericStaticBitmap' which is not documented
|
|
29
|
+
def_genstatbmp = def_statbmp.dup
|
|
30
|
+
def_genstatbmp.name = 'wxGenericStaticBitmap'
|
|
31
|
+
def_genstatbmp.brief_doc = nil
|
|
32
|
+
def_genstatbmp.detailed_doc = nil
|
|
33
|
+
def_genstatbmp.items = def_genstatbmp.items.collect { |itm| itm.dup }
|
|
34
|
+
def_genstatbmp.items.each do |itm|
|
|
35
|
+
if itm.is_a?(Extractor::MethodDef)
|
|
36
|
+
itm.overloads = itm.overloads.collect { |ovl| ovl.dup }
|
|
37
|
+
itm.all.each do |ovl|
|
|
38
|
+
ovl.name = 'wxGenericStaticBitmap' if ovl.is_ctor
|
|
39
|
+
ovl.class_name = 'wxGenericStaticBitmap'
|
|
40
|
+
ovl.update_attributes(klass: def_genstatbmp)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
def_genstatbmp.items.delete_if { |itm| itm.is_a?(Extractor::EnumDef) && itm.name == 'ScaleMode' }
|
|
45
|
+
spec.add_swig_code %Q{typedef wxStaticBitmap::ScaleMode ScaleMode; }
|
|
46
|
+
spec.add_header_code %Q{typedef wxStaticBitmap::ScaleMode ScaleMode; }
|
|
47
|
+
defmod.items << def_genstatbmp
|
|
48
|
+
defmod
|
|
49
|
+
end
|
|
50
|
+
|
|
23
51
|
end # class StaticBitmap
|
|
24
52
|
|
|
25
53
|
end # class Director
|
|
@@ -26,6 +26,10 @@ module WXRuby3
|
|
|
26
26
|
spec.add_header_code '#define wxTextEntry wxTextEntryBase'
|
|
27
27
|
spec.disown 'wxTextCompleter *completer' # managed by wxWidgets after passing in
|
|
28
28
|
spec.map_apply 'long * OUTPUT' => 'long *' # for GetSelection
|
|
29
|
+
# missing non-pure virtual overrides in docs for wxTextCompleterSimple
|
|
30
|
+
spec.extend_interface 'wxTextCompleterSimple',
|
|
31
|
+
'virtual bool Start(const wxString &prefix)',
|
|
32
|
+
'virtual wxString GetNext()'
|
|
29
33
|
# for wxTextCompleterSimple::GetCompletions
|
|
30
34
|
spec.map 'wxArrayString &res' => 'Array<String>' do
|
|
31
35
|
|
|
@@ -6,48 +6,159 @@
|
|
|
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 TextValidator <
|
|
15
|
+
class TextValidator < 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 WXRubyTextValidator : public wxTextValidator
|
|
21
|
+
class WXRubyTextValidator : public wxTextValidator, public wxRubyValidatorBinding
|
|
22
22
|
{
|
|
23
23
|
public:
|
|
24
|
-
WXRubyTextValidator(const wxTextValidator& v)
|
|
25
|
-
: wxTextValidator(v) {}
|
|
26
24
|
WXRubyTextValidator(long style=wxFILTER_NONE)
|
|
27
|
-
: wxTextValidator(style)
|
|
25
|
+
: wxTextValidator(style, &m_valueCache)
|
|
26
|
+
{
|
|
27
|
+
}
|
|
28
|
+
WXRubyTextValidator(const WXRubyTextValidator& other)
|
|
29
|
+
: wxTextValidator(other.GetStyle(), &m_valueCache)
|
|
30
|
+
, wxRubyValidatorBinding(other)
|
|
31
|
+
{
|
|
32
|
+
}
|
|
28
33
|
virtual ~WXRubyTextValidator()
|
|
29
34
|
{
|
|
30
35
|
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
31
|
-
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
virtual wxObject* Clone() const override
|
|
39
|
+
{
|
|
40
|
+
WXRubyTextValidator* clone = new WXRubyTextValidator(*this);
|
|
41
|
+
clone->m_valueCache = this->m_valueCache;
|
|
42
|
+
return clone;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
virtual void SetWindow(wxWindow *win) override
|
|
46
|
+
{
|
|
47
|
+
this->wxTextValidator::SetWindow(win);
|
|
48
|
+
VALUE self = this->get_self();
|
|
49
|
+
// make sure Ruby does not own this validator instance anymore
|
|
50
|
+
RDATA(self)->dfree = SWIG_RubyRemoveTracking;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
virtual bool TransferFromWindow () override
|
|
54
|
+
{
|
|
55
|
+
// call super
|
|
56
|
+
if (this->wxTextValidator::TransferFromWindow())
|
|
57
|
+
{
|
|
58
|
+
// ok, data is retrieved from window and cached
|
|
59
|
+
// now allow any defined binding handler to pass on the data
|
|
60
|
+
return this->DoOnTransferFromWindow(WXSTR_TO_RSTR(m_valueCache));
|
|
61
|
+
}
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
virtual bool TransferToWindow () override
|
|
65
|
+
{
|
|
66
|
+
// collect data from any defined binding handler
|
|
67
|
+
VALUE data = this->DoOnTransferToWindow();
|
|
68
|
+
// if Qnil returned there is no data returned from handler so we just keep what's in the store
|
|
69
|
+
if (!NIL_P(data))
|
|
70
|
+
{
|
|
71
|
+
m_valueCache = RSTR_TO_WXSTR(data);
|
|
72
|
+
}
|
|
73
|
+
// now allow standard functionality to transfer to window
|
|
74
|
+
return this->wxTextValidator::TransferToWindow();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const wxString& GetValue () const
|
|
78
|
+
{
|
|
79
|
+
return m_valueCache;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
void SetValue (const wxString& val)
|
|
83
|
+
{
|
|
84
|
+
m_valueCache = val;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
private:
|
|
88
|
+
static VALUE c_TextValidator;
|
|
89
|
+
|
|
90
|
+
virtual VALUE get_self() override
|
|
91
|
+
{
|
|
92
|
+
if (NIL_P(this->self_))
|
|
93
|
+
{
|
|
94
|
+
this->self_ = SWIG_RubyInstanceFor(this);
|
|
95
|
+
// if this is a C++ created clone (wxWidgets clones validators that are set) it's not tracked yet
|
|
96
|
+
if (NIL_P(this->self_))
|
|
97
|
+
{
|
|
98
|
+
if (NIL_P(c_TextValidator))
|
|
99
|
+
{
|
|
100
|
+
c_TextValidator = rb_const_get(mWxCore, rb_intern("TextValidator"));
|
|
101
|
+
}
|
|
102
|
+
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(c_TextValidator);
|
|
103
|
+
this->self_ = SWIG_NewPointerObj(this, swig_type, 0); // wrap but don't make Ruby own it
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return this->self_;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
wxString m_valueCache;
|
|
32
110
|
};
|
|
33
|
-
|
|
111
|
+
|
|
112
|
+
VALUE WXRubyTextValidator::c_TextValidator = Qnil;
|
|
113
|
+
|
|
114
|
+
static void GC_mark_wxTextValidator(void* ptr)
|
|
115
|
+
{
|
|
116
|
+
if (ptr)
|
|
117
|
+
{
|
|
118
|
+
wxValidator* vp = reinterpret_cast<wxValidator*> (ptr);
|
|
119
|
+
WXRubyTextValidator* rbvp = dynamic_cast<WXRubyTextValidator*> (vp);
|
|
120
|
+
// This might be a pointer to a non-customized validator (or clone thereof) created internally
|
|
121
|
+
// by wxWidgets C++ code
|
|
122
|
+
if (rbvp) rbvp->GC_Mark();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
__HEREDOC
|
|
127
|
+
spec.add_swig_code '%markfunc wxTextValidator "GC_mark_wxTextValidator";'
|
|
128
|
+
# make Ruby director and wrappers use custom implementation
|
|
34
129
|
spec.use_class_implementation 'wxTextValidator', 'WXRubyTextValidator'
|
|
35
|
-
# ignore copy ctor doc
|
|
36
|
-
spec.regard 'wxTextValidator::wxTextValidator(const wxTextValidator&)', regard_doc: false
|
|
37
130
|
# ignore this ctor
|
|
38
131
|
spec.ignore 'wxTextValidator::wxTextValidator(long, wxString*)'
|
|
39
132
|
# add alternative
|
|
40
133
|
spec.extend_interface 'wxTextValidator', 'wxTextValidator(long style=wxFILTER_NONE)'
|
|
41
|
-
#
|
|
134
|
+
# add wxRuby extensions
|
|
135
|
+
spec.add_extend_code 'wxTextValidator', <<~__HEREDOC
|
|
136
|
+
VALUE GetValue()
|
|
137
|
+
{
|
|
138
|
+
WXRubyTextValidator* rb_self = dynamic_cast<WXRubyTextValidator*> ($self);
|
|
139
|
+
if (rb_self)
|
|
140
|
+
return WXSTR_TO_RSTR(rb_self->GetValue());
|
|
141
|
+
else
|
|
142
|
+
return Qnil;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
void SetValue(const wxString& val)
|
|
146
|
+
{
|
|
147
|
+
WXRubyTextValidator* rb_self = dynamic_cast<WXRubyTextValidator*> ($self);
|
|
148
|
+
if (rb_self)
|
|
149
|
+
rb_self->SetValue(val);
|
|
150
|
+
}
|
|
151
|
+
__HEREDOC
|
|
152
|
+
# ignore non-virtual standard handler (not useful in Ruby)
|
|
42
153
|
spec.ignore 'wxTextValidator::OnChar'
|
|
43
|
-
spec.no_proxy 'wxTextValidator::Clone'
|
|
44
154
|
spec.new_object 'wxTextValidator::Clone'
|
|
45
155
|
# handle clone mapping
|
|
46
156
|
spec.map 'wxObject *' => 'Wx::TextValidator' do
|
|
47
157
|
map_out code: <<~__CODE
|
|
48
|
-
$result = SWIG_NewPointerObj(SWIG_as_voidptr($1), SWIGTYPE_p_wxTextValidator, SWIG_POINTER_OWN
|
|
158
|
+
$result = SWIG_NewPointerObj(SWIG_as_voidptr($1), SWIGTYPE_p_wxTextValidator, SWIG_POINTER_OWN);
|
|
49
159
|
__CODE
|
|
50
160
|
end
|
|
161
|
+
spec.suppress_warning(473, 'wxTextValidator::Clone')
|
|
51
162
|
# not provided in Ruby
|
|
52
163
|
spec.ignore %w[wxTextValidator::TransferFromWindow wxTextValidator::TransferToWindow]
|
|
53
164
|
end
|
|
@@ -26,10 +26,8 @@ module WXRuby3
|
|
|
26
26
|
# for upcalls
|
|
27
27
|
spec.extend_interface('wxTopLevelWindow',
|
|
28
28
|
'virtual bool Destroy() override',
|
|
29
|
-
#'virtual bool IsTopLevel() override',
|
|
30
29
|
'virtual void SetLayoutDirection(wxLayoutDirection dir) override',
|
|
31
30
|
'virtual bool Show(bool show = true) override',
|
|
32
|
-
'virtual void Raise() override',
|
|
33
31
|
'virtual void Refresh(bool eraseBackground = true, wxRect const *rect = NULL) override')
|
|
34
32
|
spec.add_wrapper_code <<~__HEREDOC
|
|
35
33
|
extern VALUE wxRuby_GetTopLevelWindowClass() {
|
|
@@ -50,6 +50,41 @@ module WXRuby3
|
|
|
50
50
|
wxTreeCtrl::GetFirstChild
|
|
51
51
|
wxTreeCtrl::GetNextChild
|
|
52
52
|
]
|
|
53
|
+
if Config.instance.wx_version >= '3.3.0'
|
|
54
|
+
# new method with bitmap bundle vector
|
|
55
|
+
spec.no_proxy 'wxTreeCtrl::SetStateImages'
|
|
56
|
+
spec.map 'const wxVector<wxBitmapBundle>& images' => 'Array<Wx::ImageBundle>' do
|
|
57
|
+
map_in temp: 'wxVector<wxBitmapBundle> tmp', code: <<~__CODE
|
|
58
|
+
if ($input != Qnil)
|
|
59
|
+
{
|
|
60
|
+
if (TYPE($input) == T_ARRAY)
|
|
61
|
+
{
|
|
62
|
+
for (int i=0; i<RARRAY_LEN($input) ;++i)
|
|
63
|
+
{
|
|
64
|
+
void* ptr;
|
|
65
|
+
VALUE rb_image = rb_ary_entry($input, i);
|
|
66
|
+
int res = SWIG_ConvertPtr(rb_image, &ptr, wxRuby_GetSwigTypeForClassName("BitmapBundle"), 0);
|
|
67
|
+
if (!SWIG_IsOK(res))
|
|
68
|
+
{
|
|
69
|
+
VALUE msg = rb_inspect(rb_image);
|
|
70
|
+
rb_raise(rb_eTypeError, "Expected Wx::ImageBundle at index %d but got %s", i, StringValuePtr(msg));
|
|
71
|
+
}
|
|
72
|
+
tmp.push_back(*static_cast<wxBitmapBundle*>(ptr));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else
|
|
76
|
+
{
|
|
77
|
+
VALUE msg = rb_inspect($input);
|
|
78
|
+
rb_raise(rb_eArgError, "Expected Array of Wx::ImageBundle for $argnum but got %s", StringValuePtr(msg));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
$1 = &tmp;
|
|
82
|
+
__CODE
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
# don't see how supporting overloading this one in Ruby is helpful
|
|
86
|
+
# (also seeing SetButtonsImageList isn't virtual at all)
|
|
87
|
+
spec.no_proxy 'wxTreeCtrl::SetStateImageList'
|
|
53
88
|
# these are potentially involved in GC mark phase so
|
|
54
89
|
# we can't have them redirecting to Ruby calls
|
|
55
90
|
spec.no_proxy %w[
|