wxruby3 0.9.4 → 0.9.7
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 +315 -78
- data/README.md +32 -21
- data/ext/wxruby3/include/wxruby-ComboPopup.h +777 -0
- data/lib/wx/core/combo_ctrl.rb +171 -0
- data/lib/wx/core/ext.rb +22 -3
- data/lib/wx/doc/comboctrl.rb +128 -3
- data/lib/wx/doc/owner_drawn_combobox.rb +5 -1
- data/lib/wx/version.rb +1 -1
- data/lib/wx/wxruby/base.rb +6 -4
- data/lib/wx/wxruby/cmd/sampler.rb +39 -29
- data/lib/wx/wxruby/cmd/setup.rb +122 -0
- data/lib/wx/wxruby/cmd/test.rb +56 -6
- data/rakefile +14 -0
- data/rakelib/bin.rake +48 -0
- data/rakelib/bin.rb +62 -0
- data/rakelib/build.rb +11 -7
- data/rakelib/config.rake +3 -1
- data/rakelib/configure.rb +28 -8
- data/rakelib/doc.rake +3 -1
- data/rakelib/gem.rake +169 -0
- data/rakelib/gem.rb +82 -0
- data/rakelib/install.rb +2 -0
- data/rakelib/lib/config/linux.rb +24 -2
- data/rakelib/lib/config/macosx.rb +16 -0
- data/rakelib/lib/config/mingw.rb +133 -9
- data/rakelib/lib/config/pkgman/arch.rb +53 -0
- data/rakelib/lib/config/pkgman/base.rb +169 -0
- data/rakelib/lib/config/pkgman/debian.rb +66 -0
- data/rakelib/lib/config/pkgman/macosx.rb +183 -0
- data/rakelib/lib/config/pkgman/rhel.rb +54 -0
- data/rakelib/lib/config/pkgman/suse.rb +54 -0
- data/rakelib/lib/config/unixish.rb +36 -19
- data/rakelib/lib/config.rb +254 -61
- data/rakelib/lib/core/include/funcall.inc +2 -1
- data/rakelib/lib/core/package.rb +47 -49
- data/rakelib/lib/director/comboctrl.rb +104 -3
- data/rakelib/lib/director/defs.rb +1 -3
- data/rakelib/lib/director/gdicommon.rb +5 -0
- data/rakelib/lib/director/menu_item.rb +1 -1
- data/rakelib/lib/director/num_validator.rb +5 -7
- data/rakelib/lib/director/owner_drawn_combobox.rb +1 -0
- data/rakelib/lib/director/persistent_window.rb +2 -2
- data/rakelib/lib/director/pgeditor.rb +1 -1
- data/rakelib/lib/director/pgproperties.rb +3 -3
- data/rakelib/lib/director/pgproperty.rb +5 -1
- data/rakelib/lib/director/richtext_style_listbox.rb +5 -0
- data/rakelib/lib/director/sizer.rb +1 -1
- data/rakelib/lib/director/window.rb +4 -0
- data/rakelib/lib/extractor/module.rb +15 -0
- data/rakelib/lib/generate/doc/combo_ctrl.yaml +135 -0
- data/rakelib/lib/generate/doc/file_dialog_customize_hook.yaml +62 -0
- data/rakelib/lib/generate/doc/file_system.yaml +28 -0
- data/rakelib/lib/generate/doc.rb +29 -14
- data/rakelib/lib/generate/interface.rb +16 -6
- data/rakelib/lib/swig_runner.rb +18 -15
- data/rakelib/lib/typemap/combo_popup.rb +42 -0
- data/rakelib/prepost.rake +9 -4
- data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +14 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +5 -5
- data/rakelib/yard/yard/relative_markdown_links.rb +7 -1
- data/tests/test_combo_ctrl.rb +196 -0
- metadata +28 -17
- data/ext/mkrf_conf_srcgem.rb +0 -67
- data/rakelib/run.rake +0 -52
data/rakelib/lib/core/package.rb
CHANGED
@@ -604,55 +604,53 @@ module WXRuby3
|
|
604
604
|
def generate_core_doc
|
605
605
|
script = <<~__SCRIPT
|
606
606
|
require 'wx'
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
__HEREDOC
|
655
|
-
end
|
607
|
+
STDOUT.puts \<<~__HEREDOC
|
608
|
+
# ----------------------------------------------------------------------------
|
609
|
+
# This file is automatically generated by the WXRuby3 documentation
|
610
|
+
# generator. Do not alter this file.
|
611
|
+
# ----------------------------------------------------------------------------
|
612
|
+
|
613
|
+
|
614
|
+
module Wx
|
615
|
+
|
616
|
+
# wxRuby version string
|
617
|
+
WXRUBY_VERSION = '\#{Wx::WXRUBY_VERSION}'
|
618
|
+
|
619
|
+
# wxRuby version release type (alpha, beta, rc)
|
620
|
+
WXRUBY_RELEASE_TYPE = '\#{Wx::WXRUBY_RELEASE_TYPE}'
|
621
|
+
# wxRuby major version number
|
622
|
+
WXRUBY_MAJOR = \#{Wx::WXRUBY_MAJOR}
|
623
|
+
# wxRuby minor version number
|
624
|
+
WXRUBY_MINOR = \#{Wx::WXRUBY_MINOR}
|
625
|
+
# wxRuby release number
|
626
|
+
WXRUBY_RELEASE = \#{Wx::WXRUBY_RELEASE}
|
627
|
+
|
628
|
+
# Convenience string for WxWidgets version info
|
629
|
+
WXWIDGETS_VERSION = '\#{Wx::WXWIDGETS_VERSION}'
|
630
|
+
|
631
|
+
# Integer constant reflecting the major version of the wxWidgets release used to build wxRuby
|
632
|
+
WXWIDGETS_MAJOR_VERSION = \#{Wx::WXWIDGETS_MAJOR_VERSION}
|
633
|
+
|
634
|
+
# Integer constant reflecting the minor version of the wxWidgets release used to build wxRuby
|
635
|
+
WXWIDGETS_MINOR_VERSION = \#{Wx::WXWIDGETS_MINOR_VERSION}
|
636
|
+
|
637
|
+
# Integer constant reflecting the release number of the wxWidgets release used to build wxRuby
|
638
|
+
WXWIDGETS_RELEASE_NUMBER = \#{Wx::WXWIDGETS_RELEASE_NUMBER}
|
639
|
+
|
640
|
+
# Integer constant reflecting the sub-release number of the wxWidgets release used to build wxRuby
|
641
|
+
WXWIDGETS_SUBRELEASE_NUMBER = \#{Wx::WXWIDGETS_SUBRELEASE_NUMBER}
|
642
|
+
|
643
|
+
# Integer constant reflecting the wxWidgets wxDEBUG_LEVEL
|
644
|
+
WXWIDGETS_DEBUG_LEVEL = \#{Wx::WXWIDGETS_DEBUG_LEVEL}
|
645
|
+
|
646
|
+
# Boolean constant indicating if wxRuby was build in debug (true) or release (false) mode
|
647
|
+
DEBUG = \#{Wx::DEBUG}
|
648
|
+
|
649
|
+
# Platform id of the wxWidgets port used to build wxRuby
|
650
|
+
PLATFORM = '\#{Wx::PLATFORM}'
|
651
|
+
|
652
|
+
end
|
653
|
+
__HEREDOC
|
656
654
|
__SCRIPT
|
657
655
|
begin
|
658
656
|
tmpfile = Tempfile.new('script')
|
@@ -14,9 +14,10 @@ module WXRuby3
|
|
14
14
|
|
15
15
|
class ComboCtrl < Window
|
16
16
|
|
17
|
+
include Typemap::ComboPopup
|
18
|
+
|
17
19
|
def setup
|
18
20
|
super
|
19
|
-
spec.items << 'wxComboPopup'
|
20
21
|
# mixin TextEntry
|
21
22
|
spec.include_mixin 'wxComboCtrl', { 'Wx::TextEntry' => 'wxTextEntryBase' }
|
22
23
|
spec.override_inheritance_chain('wxComboCtrl',
|
@@ -29,8 +30,108 @@ module WXRuby3
|
|
29
30
|
wxComboCtrl::DoSetPopupControl
|
30
31
|
wxComboCtrl::DoShowPopup
|
31
32
|
]
|
32
|
-
|
33
|
-
|
33
|
+
spec.add_header_code <<~__HEREDOC
|
34
|
+
#include "wxruby-ComboPopup.h"
|
35
|
+
|
36
|
+
static VALUE g_rb_mWxComboPopup = Qnil;
|
37
|
+
static VALUE g_rb_cComboPopupWx = Qnil;
|
38
|
+
|
39
|
+
WXRUBY_EXPORT wxComboPopup* wxRuby_ComboPopupFromRuby(VALUE popup)
|
40
|
+
{
|
41
|
+
if (!NIL_P(popup) && !rb_obj_is_kind_of(popup, g_rb_mWxComboPopup))
|
42
|
+
{
|
43
|
+
rb_raise(rb_eArgError, "Expected a Wx::ComboPopup or nil for 1");
|
44
|
+
return nullptr;
|
45
|
+
}
|
46
|
+
|
47
|
+
wxComboPopup* cpp = nullptr;
|
48
|
+
if (!NIL_P(popup))
|
49
|
+
{
|
50
|
+
VALUE rb_cp_proxy = rb_iv_get(popup, "@_wx_combo_popup_proxy");
|
51
|
+
if (NIL_P(rb_cp_proxy))
|
52
|
+
{
|
53
|
+
cpp = new WxRubyComboPopup(popup);
|
54
|
+
rb_cp_proxy = Data_Wrap_Struct(rb_cObject, 0, 0, cpp);
|
55
|
+
rb_iv_set(popup, "@_wx_combo_popup_proxy", rb_cp_proxy);
|
56
|
+
}
|
57
|
+
else
|
58
|
+
{
|
59
|
+
Data_Get_Struct(rb_cp_proxy, wxComboPopup, cpp);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
return cpp;
|
63
|
+
}
|
64
|
+
|
65
|
+
WXRUBY_EXPORT VALUE wxRuby_ComboPopupToRuby(wxComboPopup* cpp)
|
66
|
+
{
|
67
|
+
VALUE rb_cpp = Qnil;
|
68
|
+
if (cpp)
|
69
|
+
{
|
70
|
+
WxRubyComboPopup *wxrb_cpp = dynamic_cast<WxRubyComboPopup*> (cpp);
|
71
|
+
if (wxrb_cpp)
|
72
|
+
{
|
73
|
+
rb_cpp = wxrb_cpp->GetRubyComboPopup();
|
74
|
+
}
|
75
|
+
else
|
76
|
+
{
|
77
|
+
// in this case we're probably working for a wxOwnerDrawnComboBox or wxRichTextListbox
|
78
|
+
// with default popup control which is a C++ implemented class without any Ruby linkage.
|
79
|
+
// wrap this in the Wx::ComboPopupWx class to provide a Ruby interface
|
80
|
+
rb_cpp = Data_Wrap_Struct(g_rb_cComboPopupWx, 0, 0, cpp); // do not own or track
|
81
|
+
}
|
82
|
+
}
|
83
|
+
return rb_cpp;
|
84
|
+
}
|
85
|
+
|
86
|
+
static void wxRuby_markComboPopups()
|
87
|
+
{
|
88
|
+
WxRubyComboPopup::GC_mark_combo_popups();
|
89
|
+
}
|
90
|
+
__HEREDOC
|
91
|
+
# ignore these
|
92
|
+
spec.ignore 'wxComboCtrl::SetPopupControl',
|
93
|
+
'wxComboCtrl::GetPopupControl',
|
94
|
+
ignore_doc: false
|
95
|
+
# for GetPopupControl docs only
|
96
|
+
spec.map 'wxComboPopup*' => 'Wx::ComboPopup', swig: false do
|
97
|
+
map_out code: ''
|
98
|
+
end
|
99
|
+
# and replace
|
100
|
+
spec.add_extend_code 'wxComboCtrl', <<~__HEREDOC
|
101
|
+
void SetPopupControl(VALUE popup)
|
102
|
+
{
|
103
|
+
wxComboPopup* cpp = wxRuby_ComboPopupFromRuby(popup);
|
104
|
+
$self->SetPopupControl(cpp);
|
105
|
+
}
|
106
|
+
|
107
|
+
VALUE GetPopupControl()
|
108
|
+
{
|
109
|
+
return wxRuby_ComboPopupToRuby($self->GetPopupControl());
|
110
|
+
}
|
111
|
+
__HEREDOC
|
112
|
+
spec.add_init_code <<~__HEREDOC
|
113
|
+
wxRuby_AppendMarker(wxRuby_markComboPopups);
|
114
|
+
|
115
|
+
g_rb_mWxComboPopup = rb_define_module_under(mWxCore, "ComboPopup");
|
116
|
+
rb_define_method(g_rb_mWxComboPopup, "get_combo_ctrl", VALUEFUNC(wx_combo_popup_get_combo_ctrl), -1);
|
117
|
+
|
118
|
+
g_rb_cComboPopupWx = rb_define_class_under(mWxCore, "ComboPopupWx", rb_cObject);
|
119
|
+
rb_undef_alloc_func(g_rb_cComboPopupWx);
|
120
|
+
rb_define_method(g_rb_cComboPopupWx, "lazy_create", VALUEFUNC(combo_popup_wx_lazy_create), -1);
|
121
|
+
rb_define_method(g_rb_cComboPopupWx, "create", VALUEFUNC(combo_popup_wx_create), -1);
|
122
|
+
rb_define_method(g_rb_cComboPopupWx, "get_combo_ctrl", VALUEFUNC(combo_popup_wx_get_combo_ctrl), -1);
|
123
|
+
rb_define_method(g_rb_cComboPopupWx, "find_item", VALUEFUNC(combo_popup_wx_find_item), -1);
|
124
|
+
rb_define_method(g_rb_cComboPopupWx, "get_adjusted_size", VALUEFUNC(combo_popup_wx_get_adjusted_size), -1);
|
125
|
+
rb_define_method(g_rb_cComboPopupWx, "get_control", VALUEFUNC(combo_popup_wx_get_control), -1);
|
126
|
+
rb_define_method(g_rb_cComboPopupWx, "set_string_value", VALUEFUNC(combo_popup_wx_set_string_value), -1);
|
127
|
+
rb_define_method(g_rb_cComboPopupWx, "get_string_value", VALUEFUNC(combo_popup_wx_get_string_value), -1);
|
128
|
+
rb_define_method(g_rb_cComboPopupWx, "on_combo_double_click", VALUEFUNC(combo_popup_wx_on_combo_double_click), -1);
|
129
|
+
rb_define_method(g_rb_cComboPopupWx, "on_combo_key_event", VALUEFUNC(combo_popup_wx_on_combo_key_event), -1);
|
130
|
+
rb_define_method(g_rb_cComboPopupWx, "on_combo_char_event", VALUEFUNC(combo_popup_wx_on_combo_char_event), -1);
|
131
|
+
rb_define_method(g_rb_cComboPopupWx, "on_dismiss", VALUEFUNC(combo_popup_wx_on_dismiss), -1);
|
132
|
+
rb_define_method(g_rb_cComboPopupWx, "on_popup", VALUEFUNC(combo_popup_wx_on_popup), -1);
|
133
|
+
rb_define_method(g_rb_cComboPopupWx, "paint_combo_control", VALUEFUNC(combo_popup_wx_paint_combo_control), -1);
|
134
|
+
__HEREDOC
|
34
135
|
end
|
35
136
|
|
36
137
|
end # class ComboCtrl
|
@@ -49,6 +49,11 @@ module WXRuby3
|
|
49
49
|
'wxRect::Intersect(const wxRect &)',
|
50
50
|
'wxRect::Union(const wxRect &)'
|
51
51
|
]
|
52
|
+
if Config.instance.wx_version >= '3.3.0'
|
53
|
+
# ignore these as they are supposed to specify unary minus but confuse
|
54
|
+
# SWIG
|
55
|
+
spec.ignore 'wxPoint::operator-(const wxPoint&)'
|
56
|
+
end
|
52
57
|
spec.regard 'wxRect::Offset', regard_doc: false
|
53
58
|
# overrule common wxPoint mapping for wxRect ctor to fix ctor ambiguities here wrt wxSize
|
54
59
|
spec.map 'const wxPoint& topLeft', 'const wxPoint& bottomRight', as: 'Wx::Point' do
|
@@ -24,7 +24,7 @@ module WXRuby3
|
|
24
24
|
spec.ignore_unless('USE_ACCEL', 'wxMenuItem::GetAccel')
|
25
25
|
spec.no_proxy 'wxMenuItem::GetAccel'
|
26
26
|
spec.ignore 'wxMenuItem::GetBitmap(bool)' # not portable
|
27
|
-
if Config.instance.wx_version
|
27
|
+
if Config.instance.wx_version > '3.2.4'
|
28
28
|
spec.ignore_unless('WXMSW', 'wxMenuItem::SetBackgroundColour','wxMenuItem::SetFont','wxMenuItem::SetTextColour')
|
29
29
|
end
|
30
30
|
super
|
@@ -383,13 +383,11 @@ module WXRuby3
|
|
383
383
|
# hardcoded interface declarations
|
384
384
|
spec.add_interface_code <<~__HEREDOC
|
385
385
|
// Bit masks used for numeric validator styles.
|
386
|
-
enum wxNumValidatorStyle
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
wxNUM_VAL_NO_TRAILING_ZEROES = 0x4
|
392
|
-
};
|
386
|
+
enum wxNumValidatorStyle;
|
387
|
+
%constant int NumValidatorStyle_wxNUM_VAL_DEFAULT = 0x0;
|
388
|
+
%constant int NumValidatorStyle_wxNUM_VAL_THOUSANDS_SEPARATOR = 0x1;
|
389
|
+
%constant int NumValidatorStyle_wxNUM_VAL_ZERO_AS_BLANK = 0x2;
|
390
|
+
%constant int NumValidatorStyle_wxNUM_VAL_NO_TRAILING_ZEROES = 0x4;
|
393
391
|
|
394
392
|
%alias WXIntegerValidator::GetMin "min";
|
395
393
|
%alias WXIntegerValidator::SetMin "min=";
|
@@ -14,8 +14,8 @@ module WXRuby3
|
|
14
14
|
|
15
15
|
def setup
|
16
16
|
spec.items << 'wxPersistentTLW' << 'wxPersistentBookCtrl' << 'wxPersistentTreeBookCtrl'
|
17
|
-
if Config.instance.wx_version
|
18
|
-
#
|
17
|
+
if Config.instance.wx_version > '3.2.4'
|
18
|
+
# only after 3.2.4 properly available
|
19
19
|
spec.items << 'wxPersistentComboBox'
|
20
20
|
end
|
21
21
|
super
|
@@ -17,7 +17,7 @@ module WXRuby3
|
|
17
17
|
spec.items.concat %w[wxPGCheckBoxEditor wxPGChoiceEditor wxPGChoiceAndButtonEditor wxPGComboBoxEditor
|
18
18
|
wxPGTextCtrlEditor wxPGSpinCtrlEditor wxPGTextCtrlAndButtonEditor wxPGEditorDialogAdapter]
|
19
19
|
spec.includes << 'wx/propgrid/propgriddefs.h'
|
20
|
-
if Config.instance.wx_version
|
20
|
+
if Config.instance.wx_version > '3.2.4'
|
21
21
|
# make sure SWIG knows this as enum type
|
22
22
|
spec.add_swig_code 'enum wxPGPropertyFlags;'
|
23
23
|
end
|
@@ -65,7 +65,7 @@ module WXRuby3
|
|
65
65
|
'wxUIntProperty::m_prefix',
|
66
66
|
'wxDateProperty::m_format',
|
67
67
|
'wxDateProperty::m_dpStyle'
|
68
|
-
if Config.instance.wx_version
|
68
|
+
if Config.instance.wx_version > '3.2.4'
|
69
69
|
# currently missing from interface docs
|
70
70
|
spec.extend_interface 'wxEnumProperty',
|
71
71
|
'bool ValueFromString_(wxVariant& value, int* pIndex, const wxString& text,int argFlags) const',
|
@@ -111,7 +111,7 @@ module WXRuby3
|
|
111
111
|
end
|
112
112
|
# make sure the derived Enum property classes provide the protected accessors too
|
113
113
|
%w[wxCursorProperty wxEditEnumProperty wxSystemColourProperty wxColourProperty].each do |kls|
|
114
|
-
if Config.instance.wx_version
|
114
|
+
if Config.instance.wx_version > '3.2.4'
|
115
115
|
# currently missing from interface docs
|
116
116
|
spec.extend_interface kls,
|
117
117
|
'int GetIndex() const',
|
@@ -136,7 +136,7 @@ module WXRuby3
|
|
136
136
|
'wxLongStringProperty::DisplayEditorDialog',
|
137
137
|
'wxMultiChoiceProperty::DisplayEditorDialog',
|
138
138
|
'wxFontProperty::DisplayEditorDialog'
|
139
|
-
if Config.instance.wx_version
|
139
|
+
if Config.instance.wx_version > '3.2.4'
|
140
140
|
# for wxEnumProperty and derivatives ValueFromString_/ValueFromInt_
|
141
141
|
spec.map_apply 'int * OUTPUT' => 'int* pIndex'
|
142
142
|
end
|
@@ -113,7 +113,11 @@ module WXRuby3
|
|
113
113
|
# do not think this useful for wxRuby (Also; caused GC problems)
|
114
114
|
spec.ignore 'wxPGProperty::GetCellRenderer'
|
115
115
|
# obsolete
|
116
|
-
|
116
|
+
if Config.instance.wx_version < '3.3.0'
|
117
|
+
spec.ignore %w[wxPGProperty::AddChild wxPGProperty::GetValueString]
|
118
|
+
else
|
119
|
+
spec.ignore 'wxPGProperty::AddChild'
|
120
|
+
end
|
117
121
|
# not of use in Ruby
|
118
122
|
spec.ignore(%w[wxPGProperty::GetClientData wxPGProperty::SetClientData])
|
119
123
|
# only keep the const version
|
@@ -15,6 +15,7 @@ module WXRuby3
|
|
15
15
|
class RichTextStyleListBox < Window
|
16
16
|
|
17
17
|
include Typemap::RichText
|
18
|
+
include Typemap::ComboPopup
|
18
19
|
|
19
20
|
def setup
|
20
21
|
super
|
@@ -28,6 +29,10 @@ module WXRuby3
|
|
28
29
|
wxWindow
|
29
30
|
wxEvtHandler
|
30
31
|
wxObject])
|
32
|
+
# missing from docs; required so proxy calls correct override
|
33
|
+
spec.extend_interface 'wxRichTextStyleComboCtrl',
|
34
|
+
'virtual void DoSetPopupControl(wxComboPopup* popup)',
|
35
|
+
visibility: 'protected'
|
31
36
|
end
|
32
37
|
|
33
38
|
end
|
@@ -20,7 +20,7 @@ module WXRuby3
|
|
20
20
|
when 'wxSizer'
|
21
21
|
spec.items << 'wxSizerFlags'
|
22
22
|
spec.gc_as_untracked('wxSizerFlags')
|
23
|
-
|
23
|
+
unless Config.instance.wx_version > '3.2.4'
|
24
24
|
# missing from docs
|
25
25
|
spec.extend_interface 'wxSizerFlags',
|
26
26
|
'wxSizerFlags& HorzBorder()'
|
@@ -126,6 +126,10 @@ module WXRuby3
|
|
126
126
|
else
|
127
127
|
spec.ignore('wxWindow::SetAccessible',
|
128
128
|
'wxWindow::GetAccessible')
|
129
|
+
if Config.instance.wx_version > '3.2.4'
|
130
|
+
spec.ignore('wxWindow::CreateAccessible',
|
131
|
+
'wxWindow::GetOrCreateAccessible')
|
132
|
+
end
|
129
133
|
end
|
130
134
|
spec.ignore_unless('USE_HOTKEY', %w[wxWindow::RegisterHotKey wxWindow::UnregisterHotKey])
|
131
135
|
spec.ignore('wxWindow::SetSize(int, int)') # not useful as the wxSize variant will also accept an array
|
@@ -117,6 +117,13 @@ module WXRuby3
|
|
117
117
|
when 'file', 'namespace'
|
118
118
|
Extractor.extracting_msg(kind, element, 'compoundname')
|
119
119
|
element.xpath('sectiondef/memberdef').each { |node| self.add_element(node) }
|
120
|
+
# from doxygen 1.9.7 onwards some members are not included in the same XML file
|
121
|
+
# but referenced from another XML file; so we need to resolve such references
|
122
|
+
# and than add the resolved element
|
123
|
+
element.xpath('sectiondef/member').each do |node|
|
124
|
+
node = self.resolveRefId(node)
|
125
|
+
self.add_element(node)
|
126
|
+
end
|
120
127
|
|
121
128
|
else
|
122
129
|
raise ExtractorError.new('Unknown module item kind: %s' % kind)
|
@@ -124,6 +131,14 @@ module WXRuby3
|
|
124
131
|
item
|
125
132
|
end
|
126
133
|
|
134
|
+
def resolveRefId(node)
|
135
|
+
refid = node['refid'].split('_')
|
136
|
+
refid.pop
|
137
|
+
fname = File.join(Extractor.xml_dir, refid.join('_')+'.xml')
|
138
|
+
root = File.open(fname) {|f| Nokogiri::XML(f) }.root
|
139
|
+
root.at_xpath(".//sectiondef/memberdef[@id='#{node['refid']}']")
|
140
|
+
end
|
141
|
+
|
127
142
|
# Add a new C++ function into the module that is written by hand, not
|
128
143
|
# wrapped.
|
129
144
|
def add_cpp_function(type, name, argsString, body, doc = nil, **kwargs)
|
@@ -0,0 +1,135 @@
|
|
1
|
+
---
|
2
|
+
:wxComboCtrl:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /wxDECLARE_EVENT_TABLE/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class ListViewComboPopup < Wx::ListView
|
11
|
+
|
12
|
+
include Wx::ComboPopup
|
13
|
+
|
14
|
+
# Allow only default ctor
|
15
|
+
def initialize
|
16
|
+
# call default control ctor; need to call Wx::ListView#create later
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
# Initialize member variables
|
21
|
+
def init
|
22
|
+
@value = -1
|
23
|
+
end
|
24
|
+
|
25
|
+
# Create popup control
|
26
|
+
def create(parent)
|
27
|
+
# need to finish creating the list view here
|
28
|
+
# as calling super here would just call Wx::ComboPopup#create and not Wx::ListView#create
|
29
|
+
# we need to use Ruby magic
|
30
|
+
wx_lv_create = (Wx::ListView.instance_method :create).bind(self)
|
31
|
+
wx_lv_create.call(parent, 1, [0,0], Wx::DEFAULT_SIZE)
|
32
|
+
evt_motion :on_mouse_move
|
33
|
+
evt_left_up :on_mouse_click
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return pointer to the created control
|
37
|
+
def get_control
|
38
|
+
self
|
39
|
+
end
|
40
|
+
|
41
|
+
def lv_find_item(*args)
|
42
|
+
unless @wx_lv_find_item
|
43
|
+
@wx_lv_find_item = (Wx::ListView.instance_method :find_item).bind(self)
|
44
|
+
end
|
45
|
+
@wx_lv_find_item.call(*args)
|
46
|
+
end
|
47
|
+
protected :lv_find_item
|
48
|
+
|
49
|
+
# Translate string into a list selection
|
50
|
+
def set_string_value(s)
|
51
|
+
n = lv_find_item(-1, s)
|
52
|
+
if n >= 0 && n < get_item_count
|
53
|
+
select(n)
|
54
|
+
@value = n
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Get list selection as a string
|
59
|
+
def get_string_value
|
60
|
+
return get_item_text(@value) if @value >= 0
|
61
|
+
''
|
62
|
+
end
|
63
|
+
|
64
|
+
# Do mouse hot-tracking (which is typical in list popups)
|
65
|
+
def on_mouse_move(event)
|
66
|
+
# Move selection to cursor ...
|
67
|
+
end
|
68
|
+
|
69
|
+
# On mouse left up, set the value and close the popup
|
70
|
+
def on_mouse_click(_event)
|
71
|
+
@value = get_first_selected
|
72
|
+
|
73
|
+
# Send event as well ...
|
74
|
+
|
75
|
+
dismiss
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
```
|
80
|
+
- :pattern: !ruby/regexp /wxComboCtrl/
|
81
|
+
:replace: |
|
82
|
+
|
83
|
+
```ruby
|
84
|
+
comboCtrl = Wx::ComboCtrl.new(self, Wx::ID_ANY, '')
|
85
|
+
|
86
|
+
popupCtrl = ListViewComboPopup.new
|
87
|
+
|
88
|
+
# It is important to call #set_popup_control as soon as possible
|
89
|
+
comboCtrl.set_popup_control(popupCtrl)
|
90
|
+
|
91
|
+
# Populate using Wx::ListView methods
|
92
|
+
popupCtrl.insert_item((popupCtrl.item_count, 'First Item')
|
93
|
+
popupCtrl.insert_item((popupCtrl.item_count, 'Second Item')
|
94
|
+
popupCtrl.insert_item((popupCtrl.item_count, 'Third Item')
|
95
|
+
```
|
96
|
+
:wxComboCtrl.SetMainControl:
|
97
|
+
:detail:
|
98
|
+
:pre:
|
99
|
+
:programlisting:
|
100
|
+
- :pattern: !ruby/regexp /.*/
|
101
|
+
:replace: |
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
# Create the combo control using its default ctor.
|
105
|
+
combo = Wx::ComboCtrl.new
|
106
|
+
|
107
|
+
# Create the custom main control using its default ctor too.
|
108
|
+
main = SomeWindow.new
|
109
|
+
|
110
|
+
# Set the custom main control before creating the combo.
|
111
|
+
combo.set_main_control(main)
|
112
|
+
|
113
|
+
# And only create it now: Wx::TextCtrl won't be unnecessarily
|
114
|
+
# created because the combo already has a main window.
|
115
|
+
combo.create(panel, Wx::ID_ANY, '')
|
116
|
+
|
117
|
+
# Finally create the main window itself, now that its parent was
|
118
|
+
# created.
|
119
|
+
main.create(combo, ...)
|
120
|
+
```
|
121
|
+
:wxComboCtrl.SetTextCtrlStyle:
|
122
|
+
:detail:
|
123
|
+
:pre:
|
124
|
+
:programlisting:
|
125
|
+
- :pattern: !ruby/regexp /.*/
|
126
|
+
:replace: |
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
comboCtrl = Wx::ComboCtrl.new
|
130
|
+
|
131
|
+
# Let's make the text right-aligned
|
132
|
+
comboCtrl.set_text_ctrl_style(Wx::TE_RIGHT)
|
133
|
+
|
134
|
+
comboCtrl.create(parent, Wx::ID_ANY, '')
|
135
|
+
```
|
@@ -0,0 +1,62 @@
|
|
1
|
+
---
|
2
|
+
:wxFileDialogCustomizeHook:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:programlisting:
|
6
|
+
- :pattern: !ruby/regexp /.*/
|
7
|
+
:replace: |
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
class EncryptHook < Wx::FileDialogCustomizeHook
|
11
|
+
|
12
|
+
attr_reader :encrypt
|
13
|
+
|
14
|
+
# Override to add custom controls using the provided customizer object.
|
15
|
+
def add_custom_controls(customizer)
|
16
|
+
# Suppose we can encrypt files when saving them.
|
17
|
+
@checkbox = customizer.add_check_box('Encrypt')
|
18
|
+
|
19
|
+
# While @checkbox is not a Wx::CheckBox, it looks almost like one
|
20
|
+
# and, in particular, we can bind to custom control events as usual.
|
21
|
+
@checkbox.evt_checkbox(Wx::ID_ANY) do |event|
|
22
|
+
# We can also call Wx::Window-like functions on them.
|
23
|
+
@button.enable(event.checked?)
|
24
|
+
end
|
25
|
+
|
26
|
+
# The encryption parameters can be edited in a dedicated dialog.
|
27
|
+
@button = customizer.add_button('Parameters...')
|
28
|
+
@button.evt_button(Wx::ID_ANY) do |event|
|
29
|
+
# ... show the encryption parameters dialog here ...
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Override to save the values of the custom controls.
|
34
|
+
def transfer_data_from_custom_controls
|
35
|
+
# Save the checkbox value, as we won't be able to use it any more
|
36
|
+
# once this function returns.
|
37
|
+
@encrypt = @checkbox.get_value
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
# ...
|
43
|
+
|
44
|
+
def some_method
|
45
|
+
Wx.FileDialog(nil, 'Save document', '', 'file.my',
|
46
|
+
'My files (*.my)|*.my',
|
47
|
+
Wx::FD_SAVE | Wx::FD_OVERWRITE_PROMPT) do |dialog|
|
48
|
+
|
49
|
+
# This object may be destroyed before the dialog, but must remain
|
50
|
+
# alive until #show_modal returns.
|
51
|
+
customize_hook = EncryptHook.new
|
52
|
+
dialog.set_customize_hook(custom_hook)
|
53
|
+
|
54
|
+
if dialog.show_modal == Wx::ID_OK
|
55
|
+
if customize_hook.encrypt
|
56
|
+
# ... save with encryption ...
|
57
|
+
else
|
58
|
+
# ... save without encryption ...
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
```
|
@@ -0,0 +1,28 @@
|
|
1
|
+
---
|
2
|
+
:wxFileSystemHandler.CanOpen:
|
3
|
+
:detail:
|
4
|
+
:pre:
|
5
|
+
:para:
|
6
|
+
- :pattern: !ruby/regexp /Example:/
|
7
|
+
:subst: ''
|
8
|
+
:programlisting:
|
9
|
+
- :pattern: !ruby/regexp /.*/
|
10
|
+
:replace: ''
|
11
|
+
:wxFileSystemHandler.GetMimeTypeFromExt:
|
12
|
+
:detail:
|
13
|
+
:pre:
|
14
|
+
:para:
|
15
|
+
- :pattern: !ruby/regexp /Example:/
|
16
|
+
:subst: ''
|
17
|
+
:programlisting:
|
18
|
+
- :pattern: !ruby/regexp /.*/
|
19
|
+
:replace: ''
|
20
|
+
:wxMemoryFSHandler:
|
21
|
+
:detail:
|
22
|
+
:pre:
|
23
|
+
:para:
|
24
|
+
- :pattern: !ruby/regexp /Example:/
|
25
|
+
:subst: ''
|
26
|
+
:programlisting:
|
27
|
+
- :pattern: !ruby/regexp /.*/
|
28
|
+
:replace: ''
|