wxruby3 0.9.0 → 0.9.1
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/ext/wxruby3/include/wxruby-runtime.h +3 -0
- data/ext/wxruby3/swig/common.i +22 -0
- data/ext/wxruby3/swig/custom/director.swg +296 -0
- data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
- data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
- data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
- data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
- data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
- data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
- data/ext/wxruby3/swig/wx.i +50 -30
- data/lib/wx/core/const.rb +83 -0
- data/lib/wx/doc/const.rb +66 -66
- data/lib/wx/doc/event.rb +0 -6
- data/lib/wx/doc/functions.rb +9 -9
- data/lib/wx/doc/window.rb +5 -0
- data/lib/wx/keyword_defs.rb +43 -6
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/config/macosx.rb +1 -1
- data/rakelib/lib/core/include/funcall.inc +33 -14
- data/rakelib/lib/core/include/swigdirector.inc +384 -0
- data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
- data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
- data/rakelib/lib/core/include/swigrun.inc +700 -0
- data/rakelib/lib/core/package.rb +5 -2
- data/rakelib/lib/core/parameter.rb +3 -0
- data/rakelib/lib/director/accelerator.rb +1 -1
- data/rakelib/lib/director/animation.rb +1 -1
- data/rakelib/lib/director/animation_ctrl.rb +20 -0
- data/rakelib/lib/director/app.rb +23 -5
- data/rakelib/lib/director/art_provider.rb +1 -1
- data/rakelib/lib/director/data_object_simple_base.rb +1 -2
- data/rakelib/lib/director/dialog.rb +5 -0
- data/rakelib/lib/director/dialup_event.rb +44 -0
- data/rakelib/lib/director/dialup_manager.rb +45 -0
- data/rakelib/lib/director/event.rb +20 -2
- data/rakelib/lib/director/file_ctrl.rb +35 -0
- data/rakelib/lib/director/file_ctrl_event.rb +26 -0
- data/rakelib/lib/director/gdicommon.rb +19 -1
- data/rakelib/lib/director/grid_cell_editor.rb +6 -6
- data/rakelib/lib/director/help_controller.rb +1 -1
- data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
- data/rakelib/lib/director/pgeditor.rb +2 -2
- data/rakelib/lib/director/pgproperties.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +1 -1
- data/rakelib/lib/director/richtext_ctrl.rb +1 -1
- data/rakelib/lib/director/sash_event.rb +42 -0
- data/rakelib/lib/director/sizer.rb +64 -1
- data/rakelib/lib/director/sizer_item.rb +22 -0
- data/rakelib/lib/director/task_bar_icon.rb +1 -1
- data/rakelib/lib/director/tree_ctrl.rb +19 -44
- data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
- data/rakelib/lib/generate/doc/events.yaml +10 -4
- data/rakelib/lib/generate/doc/static_box.yaml +8 -0
- data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
- data/rakelib/lib/generate/doc.rb +14 -3
- data/rakelib/lib/generate/interface.rb +4 -3
- data/rakelib/lib/specs/interfaces.rb +5 -1
- data/rakelib/lib/swig_runner.rb +4 -50
- data/rakelib/lib/typemap/common.rb +24 -9
- data/rakelib/lib/typemap/data_format.rb +1 -1
- data/rakelib/lib/typemap/data_object_data.rb +2 -2
- data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
- data/rakelib/lib/typemap/points_list.rb +5 -7
- data/rakelib/lib/util/string.rb +10 -8
- data/samples/text/richtext.rb +0 -30
- data/tests/test_app_exit_exception.rb +36 -0
- data/tests/test_app_init_exception.rb +20 -0
- data/tests/test_book_controls.rb +29 -0
- data/tests/test_exceptions.rb +41 -0
- data/tests/test_sizer.rb +43 -0
- data/tests/test_std_controls.rb +36 -0
- metadata +25 -4
- data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -16,6 +16,9 @@ module WXRuby3
|
|
16
16
|
CONST_RE = /(\A|\W)const(\W|\Z)/
|
17
17
|
MULTI_WORD_TYPES = %w[char short int long]
|
18
18
|
def initialize(param)
|
19
|
+
# prevent unwanted splitting on whitespaces in template type decls
|
20
|
+
param = param.gsub(/\<\s+/, '<')
|
21
|
+
param.gsub!(/\s+\>/, '>')
|
19
22
|
@array = false
|
20
23
|
if ::Array === param
|
21
24
|
@ctype, @name, arr = param
|
@@ -69,7 +69,7 @@ module WXRuby3
|
|
69
69
|
for (int i = 0; i < RARRAY_LEN($input); i++)
|
70
70
|
{
|
71
71
|
SWIG_ConvertPtr(rb_ary_entry($input,i), (void **) &wx_acc_ent,
|
72
|
-
SWIGTYPE_p_wxAcceleratorEntry,
|
72
|
+
SWIGTYPE_p_wxAcceleratorEntry, 0);
|
73
73
|
if (wx_acc_ent == NULL)
|
74
74
|
rb_raise(rb_eTypeError, "Reference to null wxAcceleratorEntry");
|
75
75
|
arr[i] = *wx_acc_ent;
|
@@ -60,7 +60,7 @@ module WXRuby3
|
|
60
60
|
void* ptr = 0;
|
61
61
|
int res$argnum = SWIG_ConvertPtr($result, &ptr, SWIGTYPE_p_wxImage, 0 );
|
62
62
|
if (!SWIG_IsOK(res$argnum)) {
|
63
|
-
Swig::DirectorTypeMismatchException::raise(rb_eTypeError, "Expected Wx::Image result");
|
63
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", rb_eTypeError, "Expected Wx::Image result");
|
64
64
|
}
|
65
65
|
*$1 = *reinterpret_cast<wxImage*> (ptr);
|
66
66
|
__CODE
|
@@ -18,6 +18,26 @@ module WXRuby3
|
|
18
18
|
|
19
19
|
def setup
|
20
20
|
super
|
21
|
+
if Config.instance.wx_version >= '3.3.0'
|
22
|
+
spec.items << 'wxAnimationBundle'
|
23
|
+
spec.ignore 'wxAnimationBundle::GetAll', ignore_doc: false
|
24
|
+
spec.add_extend_code 'wxAnimationBundle', <<~__HEREDOC
|
25
|
+
VALUE get_all() const
|
26
|
+
{
|
27
|
+
const std::vector<wxAnimation>& ani_list = $self->GetAll();
|
28
|
+
VALUE rb_ani_list = rb_ary_new();
|
29
|
+
for (const wxAnimation& ani : ani_list)
|
30
|
+
{
|
31
|
+
VALUE rb_ani = SWIG_NewPointerObj(new wxAnimation(ani), SWIGTYPE_p_wxAnimation, SWIG_POINTER_OWN);
|
32
|
+
rb_ary_push(rb_ani_list, rb_ani);
|
33
|
+
}
|
34
|
+
return rb_ani_list;
|
35
|
+
}
|
36
|
+
__HEREDOC
|
37
|
+
spec.map 'const std::vector<wxAnimation>&' => 'Array<Wx::Animation>', swig: false do
|
38
|
+
map_out code: ''
|
39
|
+
end
|
40
|
+
end
|
21
41
|
spec.do_not_generate :variables, :enums, :defines, :functions
|
22
42
|
end
|
23
43
|
end # class AnimationCtrl
|
data/rakelib/lib/director/app.rb
CHANGED
@@ -341,7 +341,17 @@ module WXRuby3
|
|
341
341
|
// Get the ruby representation of the App object, and call the
|
342
342
|
// ruby on_init method to set up the initial window state
|
343
343
|
VALUE the_app = rb_const_get(#{spec.package.module_variable}, rb_intern("THE_APP"));
|
344
|
-
|
344
|
+
bool ex_caught = false;
|
345
|
+
VALUE result = wxRuby_Funcall(ex_caught, the_app, rb_intern("on_ruby_init"), 0, 0);
|
346
|
+
|
347
|
+
if (ex_caught)
|
348
|
+
{
|
349
|
+
#ifdef __WXRB_DEBUG__
|
350
|
+
wxRuby_PrintException(result);
|
351
|
+
#endif
|
352
|
+
rb_iv_set(the_app, "@exception", result);
|
353
|
+
result = Qfalse; // exit app
|
354
|
+
}
|
345
355
|
|
346
356
|
// If on_init return any (ruby) true value, signal to wxWidgets to
|
347
357
|
// enter the main event loop by returning true, else return false
|
@@ -371,7 +381,15 @@ module WXRuby3
|
|
371
381
|
ID on_exit_id = rb_intern("on_exit");
|
372
382
|
if (rb_funcall(the_app, rb_intern("respond_to?"), 1, ID2SYM(on_exit_id)) == Qtrue)
|
373
383
|
{
|
374
|
-
|
384
|
+
bool ex_caught = false;
|
385
|
+
VALUE rc = wxRuby_Funcall(ex_caught, the_app, on_exit_id, 0, 0);
|
386
|
+
if (ex_caught)
|
387
|
+
{
|
388
|
+
#ifdef __WXRB_DEBUG__
|
389
|
+
wxRuby_PrintException(rc);
|
390
|
+
#endif
|
391
|
+
rb_iv_set(the_app, "@exception", rc);
|
392
|
+
}
|
375
393
|
}
|
376
394
|
|
377
395
|
// perform wxRuby cleanup
|
@@ -470,10 +488,10 @@ module WXRuby3
|
|
470
488
|
VALUE msg = rb_funcall(err, message_id(), 0);
|
471
489
|
VALUE err_name = rb_funcall(rb_funcall(err, class_id(), 0), name_id(), 0);
|
472
490
|
VALUE bt = rb_funcall(err, backtrace_id(), 0);
|
473
|
-
bt = rb_funcall(bt, join_id(), 1, rb_str_new2("\\n"));
|
491
|
+
bt = rb_funcall(bt, join_id(), 1, rb_str_new2("\\n\\tfrom "));
|
474
492
|
std::cerr << std::endl
|
475
|
-
<< ' ' << StringValuePtr(
|
476
|
-
<< StringValuePtr(bt) << std::endl;
|
493
|
+
<< ' ' << StringValuePtr(msg) << '(' << StringValuePtr(err_name) << ')' << std::endl
|
494
|
+
<< "\\tfrom " << StringValuePtr(bt) << std::endl << std::endl;
|
477
495
|
}
|
478
496
|
__HEREDOC
|
479
497
|
super
|
@@ -53,7 +53,7 @@ module WXRuby3
|
|
53
53
|
if ( TYPE(v_ret) == T_DATA )
|
54
54
|
{
|
55
55
|
void* ptr;
|
56
|
-
SWIG_ConvertPtr(v_ret, &ptr, SWIGTYPE_p_wxSize,
|
56
|
+
SWIG_ConvertPtr(v_ret, &ptr, SWIGTYPE_p_wxSize, 0);
|
57
57
|
return *reinterpret_cast< wxSize * >(ptr);
|
58
58
|
}
|
59
59
|
else if ( TYPE(v_ret) == T_ARRAY )
|
@@ -105,8 +105,7 @@ module WXRuby3
|
|
105
105
|
}
|
106
106
|
else
|
107
107
|
{
|
108
|
-
Swig::DirectorTypeMismatchException::raise(rb_eTypeError,
|
109
|
-
"get_data_here should return a string, or nil on failure");
|
108
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", rb_eTypeError, "get_data_here should return a string, or nil on failure");
|
110
109
|
}
|
111
110
|
}
|
112
111
|
else
|
@@ -87,6 +87,11 @@ module WXRuby3
|
|
87
87
|
end
|
88
88
|
spec.do_not_generate :functions
|
89
89
|
when 'wxPropertySheetDialog'
|
90
|
+
# need to adjust sizer arg name to apply disown specs
|
91
|
+
spec.ignore 'wxPropertySheetDialog::SetInnerSizer(wxSizer *)', ignore_doc: false
|
92
|
+
spec.extend_interface 'wxPropertySheetDialog',
|
93
|
+
'void SetInnerSizer(wxSizer *sizer_disown)'
|
94
|
+
spec.disown 'wxSizer *sizer_disown'
|
90
95
|
spec.ignore 'wxPropertySheetDialog::GetContentWindow'
|
91
96
|
# In Ruby a derived class with customized '#initialize' is far easier
|
92
97
|
spec.ignore 'wxPropertySheetDialog::CreateBookCtrl'
|
@@ -0,0 +1,44 @@
|
|
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 './event'
|
10
|
+
|
11
|
+
module WXRuby3
|
12
|
+
|
13
|
+
class Director
|
14
|
+
|
15
|
+
class DialUpEvent < Event
|
16
|
+
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
spec.disable_proxies
|
20
|
+
# missing from interface docs
|
21
|
+
spec.add_swig_code '%constant int EVT_DIALUP_CONNECTED = wxEVT_DIALUP_CONNECTED;'
|
22
|
+
spec.add_swig_code '%constant int EVT_DIALUP_DISCONNECTED = wxEVT_DIALUP_DISCONNECTED;'
|
23
|
+
end
|
24
|
+
|
25
|
+
def doc_generator
|
26
|
+
DialUpEventDocGenerator.new(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
end # class DialupEvent
|
30
|
+
|
31
|
+
end # class Director
|
32
|
+
|
33
|
+
class DialUpEventDocGenerator < DocGenerator
|
34
|
+
|
35
|
+
protected def gen_constants_doc(fdoc)
|
36
|
+
super
|
37
|
+
xref_table = package.all_modules.reduce(DocGenerator.constants_db) { |db, mod| db[mod] }
|
38
|
+
gen_constant_doc(fdoc, 'EVT_DIALUP_CONNECTED', xref_table['EVT_DIALUP_CONNECTED'], 'connected event')
|
39
|
+
gen_constant_doc(fdoc, 'EVT_DIALUP_DISCONNECTED', xref_table['EVT_DIALUP_DISCONNECTED'], 'disconnected event')
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end # module WXRuby3
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
###
|
6
|
+
# wxRuby3 Defs director
|
7
|
+
###
|
8
|
+
|
9
|
+
module WXRuby3
|
10
|
+
|
11
|
+
class Director
|
12
|
+
|
13
|
+
class DialUpManager < Director
|
14
|
+
|
15
|
+
def setup
|
16
|
+
super
|
17
|
+
spec.gc_as_untracked
|
18
|
+
spec.make_abstract 'wxDialUpManager'
|
19
|
+
spec.disable_proxies
|
20
|
+
spec.ignore 'wxDialUpManager::GetISPNames', ignore_doc: false
|
21
|
+
spec.add_extend_code 'wxDialUpManager', <<~__HEREDOC
|
22
|
+
VALUE get_isp_names() const
|
23
|
+
{
|
24
|
+
VALUE rb_isps = rb_ary_new();
|
25
|
+
wxArrayString isps;
|
26
|
+
size_t n_isps = $self->GetISPNames(isps);
|
27
|
+
for (size_t i=0; i<n_isps ;++i)
|
28
|
+
{
|
29
|
+
rb_ary_push(rb_isps, WXSTR_TO_RSTR(isps.Item(i)));
|
30
|
+
}
|
31
|
+
return rb_isps;
|
32
|
+
}
|
33
|
+
__HEREDOC
|
34
|
+
spec.map 'wxArrayString& names', swig: false do
|
35
|
+
map_in ignore: true, code: ''
|
36
|
+
map_out ignore: 'size_t'
|
37
|
+
map_argout as: 'Array<String>'
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -201,8 +201,6 @@ module WXRuby3
|
|
201
201
|
spec.add_swig_code %Q{%constant wxEventType wxEVT_MENU_HIGHLIGHT_ALL = wxEVT_MENU_HIGHLIGHT;}
|
202
202
|
# add event type constant missing from interface defs
|
203
203
|
spec.add_swig_code %Q{%constant wxEventType wxEVT_NC_PAINT = wxEVT_NC_PAINT;}
|
204
|
-
# add undocumented global function
|
205
|
-
spec.add_swig_code 'wxWindow* wxFindFocusDescendant(wxWindow* ancestor);'
|
206
204
|
end
|
207
205
|
super
|
208
206
|
end
|
@@ -237,8 +235,28 @@ module WXRuby3
|
|
237
235
|
end
|
238
236
|
defmod
|
239
237
|
end
|
238
|
+
|
239
|
+
def doc_generator
|
240
|
+
if spec.module_name == 'wxEvent'
|
241
|
+
EventDocGenerator.new(self)
|
242
|
+
else
|
243
|
+
super
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
240
247
|
end # class Event
|
241
248
|
|
242
249
|
end # class Director
|
243
250
|
|
251
|
+
class EventDocGenerator < DocGenerator
|
252
|
+
|
253
|
+
protected def gen_constants_doc(fdoc)
|
254
|
+
super
|
255
|
+
xref_table = package.all_modules.reduce(DocGenerator.constants_db) { |db, mod| db[mod] }
|
256
|
+
gen_constant_doc(fdoc, 'EVT_MENU_HIGHLIGHT_ALL', xref_table['EVT_MENU_HIGHLIGHT'], '')
|
257
|
+
gen_constant_doc(fdoc, 'EVT_NC_PAINT', xref_table['EVT_NC_PAINT'], '')
|
258
|
+
end
|
259
|
+
|
260
|
+
end
|
261
|
+
|
244
262
|
end # module WXRuby3
|
@@ -0,0 +1,35 @@
|
|
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 FileCtrl < Window
|
16
|
+
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
# for GetFileNames and GetPaths
|
20
|
+
spec.map 'wxArrayString &filenames', 'wxArrayString &paths', as: 'Array<String>' do
|
21
|
+
map_in ignore: true, temp: 'wxArrayString tmp', code: '$1 = &tmp;'
|
22
|
+
map_argout code: <<~__HEREDOC
|
23
|
+
$result = rb_ary_new();
|
24
|
+
for (size_t i=0; i<tmp$argnum.Count() ;++i)
|
25
|
+
{
|
26
|
+
rb_ary_push($result, WXSTR_TO_RSTR(tmp$argnum.Item(i)));
|
27
|
+
}
|
28
|
+
__HEREDOC
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end # class FileCtrl
|
32
|
+
|
33
|
+
end # class Director
|
34
|
+
|
35
|
+
end # module WXRuby3
|
@@ -0,0 +1,26 @@
|
|
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 './event'
|
10
|
+
|
11
|
+
module WXRuby3
|
12
|
+
|
13
|
+
class Director
|
14
|
+
|
15
|
+
class FileCtrlEvent < Event
|
16
|
+
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
spec.disable_proxies
|
20
|
+
spec.do_not_generate(:variables, :defines, :enums, :functions) # with FileCtrl
|
21
|
+
end
|
22
|
+
end # class FileCtrlEvent
|
23
|
+
|
24
|
+
end # class Director
|
25
|
+
|
26
|
+
end # module WXRuby3
|
@@ -22,6 +22,24 @@ module WXRuby3
|
|
22
22
|
spec.ignore %w{
|
23
23
|
wxTheColourDatabase
|
24
24
|
}
|
25
|
+
if Config.instance.wx_version >= '3.3.0'
|
26
|
+
spec.ignore 'wxColourDatabase::GetAllNames', ignore_doc: false
|
27
|
+
spec.add_extend_code 'wxColourDatabase', <<~__HEREDOC
|
28
|
+
VALUE get_all_names() const
|
29
|
+
{
|
30
|
+
wxVector<wxString> nms = $self->GetAllNames();
|
31
|
+
VALUE rb_nms = rb_ary_new();
|
32
|
+
for (const wxString& nm : nms)
|
33
|
+
{
|
34
|
+
rb_ary_push(rb_nms, WXSTR_TO_RSTR(nm));
|
35
|
+
}
|
36
|
+
return rb_nms;
|
37
|
+
}
|
38
|
+
__HEREDOC
|
39
|
+
spec.map 'wxVector<wxString>' => 'Array<String>', swig: false do
|
40
|
+
map_out code: ''
|
41
|
+
end
|
42
|
+
end
|
25
43
|
spec.ignore [
|
26
44
|
'wxClientDisplayRect(int *,int *,int *,int *)',
|
27
45
|
'wxDisplaySize(int *,int *)',
|
@@ -38,7 +56,7 @@ module WXRuby3
|
|
38
56
|
if ( TYPE($input) == T_DATA )
|
39
57
|
{
|
40
58
|
void* argp$argnum;
|
41
|
-
SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor,
|
59
|
+
SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 0);
|
42
60
|
$1 = reinterpret_cast< $1_basetype * >(argp$argnum);
|
43
61
|
}
|
44
62
|
else
|
@@ -182,12 +182,12 @@ module WXRuby3
|
|
182
182
|
static WxRuby_ID ga_mouse_id("mouse");
|
183
183
|
|
184
184
|
inline wxGridActivationResult
|
185
|
-
array_to_wxGridActivationResult(VALUE rbarr)
|
185
|
+
array_to_wxGridActivationResult(VALUE self, const char* method, VALUE rbarr)
|
186
186
|
{
|
187
187
|
if (rbarr == Qnil ||
|
188
188
|
!(TYPE(rbarr) == T_ARRAY || TYPE(rbarr) == T_SYMBOL))
|
189
189
|
{
|
190
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
190
|
+
Swig::DirectorTypeMismatchException::raise(self, method, SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
191
191
|
"in output value of type 'wxGridActivationResult'");
|
192
192
|
}
|
193
193
|
if (TYPE(rbarr) == T_SYMBOL)
|
@@ -197,7 +197,7 @@ module WXRuby3
|
|
197
197
|
else if (SYM2ID(rbarr) == ga_show_editor_id())
|
198
198
|
return wxGridActivationResult::DoEdit();
|
199
199
|
else
|
200
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
200
|
+
Swig::DirectorTypeMismatchException::raise(self, method, SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
201
201
|
"in output value of type 'wxGridActivationResult'");
|
202
202
|
}
|
203
203
|
else
|
@@ -206,7 +206,7 @@ module WXRuby3
|
|
206
206
|
VALUE rbStr = rb_ary_shift(rbarr); // could be nil
|
207
207
|
if (rbAction == Qnil || TYPE(rbAction) != T_SYMBOL)
|
208
208
|
{
|
209
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
209
|
+
Swig::DirectorTypeMismatchException::raise(self, method, SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
210
210
|
"in output value of type 'wxGridActivationResult'");
|
211
211
|
}
|
212
212
|
else if (SYM2ID(rbAction) == ga_change_id() && rbStr != Qnil)
|
@@ -220,7 +220,7 @@ module WXRuby3
|
|
220
220
|
else if (SYM2ID(rbAction) == ga_show_editor_id())
|
221
221
|
return wxGridActivationResult::DoEdit();
|
222
222
|
else
|
223
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
223
|
+
Swig::DirectorTypeMismatchException::raise(self, method, SWIG_ErrorType(SWIG_ArgError(SWIG_ERROR)),
|
224
224
|
"in output value of type 'wxGridActivationResult'");
|
225
225
|
}
|
226
226
|
}
|
@@ -366,7 +366,7 @@ module WXRuby3
|
|
366
366
|
obj2 = SWIG_NewPointerObj(SWIG_as_voidptr(grid), SWIGTYPE_p_wxGrid, 0 );
|
367
367
|
obj3 = wxGridActivationSource_to_array(actSource);
|
368
368
|
result = rb_funcall(swig_get_self(), try_activate_id(), 4,obj0,obj1,obj2,obj3);
|
369
|
-
return array_to_wxGridActivationResult(result);
|
369
|
+
return array_to_wxGridActivationResult(swig_get_self(), "try_activate", result);
|
370
370
|
__METHOD__
|
371
371
|
elsif !helpers_added && line["SwigDirector_#{module_name}::SwigDirector_#{module_name}(VALUE self"]
|
372
372
|
# insert helper methods
|
@@ -16,7 +16,7 @@ module WXRuby3
|
|
16
16
|
|
17
17
|
def setup
|
18
18
|
super
|
19
|
-
spec.items << 'wxHelpControllerBase'
|
19
|
+
spec.items << 'wxHelpControllerBase' << 'helpfrm.h'
|
20
20
|
spec.fold_bases(spec.module_name => 'wxHelpControllerBase')
|
21
21
|
spec.rename_for_ruby('Init' => "#{spec.module_name}::Initialize")
|
22
22
|
# ignore these (pure virtual) decls
|
@@ -53,12 +53,6 @@ module WXRuby3
|
|
53
53
|
spec.suppress_warning(473, 'wxPGArrayEditorDialog::GetTextCtrlValidator')
|
54
54
|
# make sure SWIG knows this type is an enum
|
55
55
|
spec.add_swig_code 'enum wxPGPropertyFlags;'
|
56
|
-
if Config.instance.wx_version >= '3.3.0'
|
57
|
-
# internal use only
|
58
|
-
spec.ignore 'wxPG_PROP_PASSWORD',
|
59
|
-
'wxPG_PROP_USE_CHECKBOX',
|
60
|
-
'wxPG_PROP_USE_DCC'
|
61
|
-
end
|
62
56
|
end
|
63
57
|
end # class PGArrayEditorDialog
|
64
58
|
|
@@ -51,7 +51,7 @@ module WXRuby3
|
|
51
51
|
int res = SWIG_ConvertPtr(rb_ary_entry($input, 0), &ptr, SWIGTYPE_p_wxWindow, 0 | 0);
|
52
52
|
if (!SWIG_IsOK(res))
|
53
53
|
{
|
54
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(res)), "in primary output value of type 'wxWindow *'");
|
54
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", SWIG_ErrorType(SWIG_ArgError(res)), "in primary output value of type 'wxWindow *'");
|
55
55
|
}
|
56
56
|
$result = wxPGWindowList(static_cast<wxWindow*>(ptr));
|
57
57
|
if (RARRAY_LEN($input) > 1)
|
@@ -59,7 +59,7 @@ module WXRuby3
|
|
59
59
|
res = SWIG_ConvertPtr(rb_ary_entry($input, 1), &ptr, SWIGTYPE_p_wxWindow, 0 | 0);
|
60
60
|
if (!SWIG_IsOK(res))
|
61
61
|
{
|
62
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(res)), "in secundary output value of type 'wxWindow *'");
|
62
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", SWIG_ErrorType(SWIG_ArgError(res)), "in secundary output value of type 'wxWindow *'");
|
63
63
|
}
|
64
64
|
$result.SetSecondary(static_cast<wxWindow*>(ptr));
|
65
65
|
}
|
@@ -174,7 +174,7 @@ module WXRuby3
|
|
174
174
|
void* argp$argnum = NULL;
|
175
175
|
if ( TYPE($input) == T_DATA )
|
176
176
|
{
|
177
|
-
if (SWIG_IsOK(SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor,
|
177
|
+
if (SWIG_IsOK(SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 0)) && argp$argnum)
|
178
178
|
{
|
179
179
|
$1 = reinterpret_cast< $1_basetype * >(argp$argnum);
|
180
180
|
}
|
@@ -200,7 +200,7 @@ module WXRuby3
|
|
200
200
|
}
|
201
201
|
else
|
202
202
|
{
|
203
|
-
Swig::DirectorTypeMismatchException::raise(rb_eTypeError,
|
203
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", rb_eTypeError,
|
204
204
|
"on_custom_string_edit should return a string, or nil");
|
205
205
|
}
|
206
206
|
}
|
@@ -224,7 +224,7 @@ module WXRuby3
|
|
224
224
|
int res = SWIG_ConvertPtr(rb_ary_entry(rb_int_arr, i), &ptr,SWIGTYPE_p_wxRichTextAttr, 0);
|
225
225
|
if (!SWIG_IsOK(res))
|
226
226
|
{
|
227
|
-
Swig::DirectorTypeMismatchException::raise(SWIG_ErrorType(SWIG_ArgError(res)), "in output value of type '""Wx::RTC::RichTextAttr""'");
|
227
|
+
Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", SWIG_ErrorType(SWIG_ArgError(res)), "in output value of type '""Wx::RTC::RichTextAttr""'");
|
228
228
|
}
|
229
229
|
wxRichTextAttr* wx_att = static_cast< wxRichTextAttr* >(ptr);
|
230
230
|
$1.Add(*wx_att);
|
@@ -0,0 +1,42 @@
|
|
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 './event'
|
10
|
+
|
11
|
+
module WXRuby3
|
12
|
+
|
13
|
+
class Director
|
14
|
+
|
15
|
+
class SashEvent < Event
|
16
|
+
|
17
|
+
def setup
|
18
|
+
super
|
19
|
+
spec.disable_proxies
|
20
|
+
# missing from interface docs
|
21
|
+
spec.add_swig_code '%constant int EVT_SASH_DRAGGED_RANGE = wxEVT_SASH_DRAGGED;'
|
22
|
+
end
|
23
|
+
|
24
|
+
def doc_generator
|
25
|
+
SashEventDocGenerator.new(self)
|
26
|
+
end
|
27
|
+
|
28
|
+
end # class SashEvent
|
29
|
+
|
30
|
+
end # class Director
|
31
|
+
|
32
|
+
class SashEventDocGenerator < DocGenerator
|
33
|
+
|
34
|
+
protected def gen_constants_doc(fdoc)
|
35
|
+
super
|
36
|
+
xref_table = package.all_modules.reduce(DocGenerator.constants_db) { |db, mod| db[mod] }
|
37
|
+
gen_constant_doc(fdoc, 'EVT_SASH_DRAGGED_RANGE', xref_table['EVT_SASH_DRAGGED'], '')
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end # module WXRuby3
|
@@ -14,7 +14,6 @@ module WXRuby3
|
|
14
14
|
|
15
15
|
def setup
|
16
16
|
# Any nested sizers passed to Add() in are owned by C++, not GC'd by Ruby
|
17
|
-
spec.disown 'wxSizer* sizer'
|
18
17
|
case spec.module_name
|
19
18
|
when 'wxSizer'
|
20
19
|
spec.items << 'wxSizerFlags'
|
@@ -26,6 +25,64 @@ module WXRuby3
|
|
26
25
|
'wxSizer::Insert(size_t, wxSizerItem *)',
|
27
26
|
'wxSizer::Prepend(wxSizerItem *)'
|
28
27
|
spec.ignore 'wxSizer::Remove(wxWindow *)' # long time deprecated
|
28
|
+
# need to adjust sizer arg name to apply disown specs
|
29
|
+
spec.ignore 'wxSizer::Add(wxSizer *, const wxSizerFlags &)',
|
30
|
+
'wxSizer::Add(wxSizer *, int, int, int, wxObject *)',
|
31
|
+
'wxSizer::Insert(size_t, wxSizer *, const wxSizerFlags &)',
|
32
|
+
'wxSizer::Insert(size_t, wxSizer *, int, int, int, wxObject *)',
|
33
|
+
'wxSizer::Prepend(wxSizer *, const wxSizerFlags &)',
|
34
|
+
'wxSizer::Prepend(wxSizer *, int, int, int, wxObject *)',
|
35
|
+
ignore_doc: false
|
36
|
+
spec.extend_interface 'wxSizer',
|
37
|
+
'wxSizerItem* Add(wxSizer *sizer_disown, const wxSizerFlags &flags)',
|
38
|
+
'wxSizerItem* Add(wxSizer *sizer_disown, int proportion=0, int flag=0, int border=0, wxObject *userData=NULL)',
|
39
|
+
'wxSizerItem* Insert(size_t index, wxSizer *sizer_disown, const wxSizerFlags &flags)',
|
40
|
+
'wxSizerItem* Insert(size_t index, wxSizer *sizer_disown, int proportion=0, int flag=0, int border=0, wxObject *userData=NULL)',
|
41
|
+
'wxSizerItem* Prepend(wxSizer *sizer_disown, const wxSizerFlags &flags)',
|
42
|
+
'wxSizerItem* Prepend(wxSizer *sizer_disown, int proportion=0, int flag=0, int border=0, wxObject *userData=NULL)'
|
43
|
+
spec.disown 'wxSizer* sizer_disown'
|
44
|
+
# needs custom impl to transfer ownership of detached items
|
45
|
+
spec.ignore 'wxSizer::Detach(wxSizer*)',
|
46
|
+
'wxSizer::Detach(int)', ignore_doc: false
|
47
|
+
spec.add_extend_code 'wxSizer', <<~__HEREDOC
|
48
|
+
bool detach(wxSizer* szr)
|
49
|
+
{
|
50
|
+
if ($self->Detach(szr))
|
51
|
+
{
|
52
|
+
VALUE rb_szr = SWIG_RubyInstanceFor(szr);
|
53
|
+
if (rb_szr && !NIL_P(rb_szr))
|
54
|
+
{
|
55
|
+
// transfer ownership to Ruby
|
56
|
+
RDATA(rb_szr)->dfree = GcSizerFreeFunc;
|
57
|
+
}
|
58
|
+
return true;
|
59
|
+
}
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
|
63
|
+
bool detach(int itm_nr)
|
64
|
+
{
|
65
|
+
wxSizerItem* itm = $self->GetItem(itm_nr);
|
66
|
+
if (itm)
|
67
|
+
{
|
68
|
+
VALUE rb_szr = Qnil;
|
69
|
+
if (itm->IsSizer())
|
70
|
+
{
|
71
|
+
rb_szr = SWIG_RubyInstanceFor(itm->GetSizer());
|
72
|
+
}
|
73
|
+
if ($self->Detach(itm_nr))
|
74
|
+
{
|
75
|
+
if (rb_szr && !NIL_P(rb_szr))
|
76
|
+
{
|
77
|
+
// transfer ownership to Ruby
|
78
|
+
RDATA(rb_szr)->dfree = GcSizerFreeFunc;
|
79
|
+
}
|
80
|
+
return true;
|
81
|
+
}
|
82
|
+
}
|
83
|
+
return false;
|
84
|
+
}
|
85
|
+
__HEREDOC
|
29
86
|
# Typemap for GetChildren - convert to array of Sizer items
|
30
87
|
spec.map 'wxSizerItemList&' => 'Array<Wx::SizerItem>' do
|
31
88
|
map_out code: <<~__CODE
|
@@ -50,6 +107,12 @@ module WXRuby3
|
|
50
107
|
spec.gc_as_untracked 'wxGBSpan', 'wxGBPosition'
|
51
108
|
# cannot use this with wxRuby
|
52
109
|
spec.ignore 'wxGridBagSizer::Add(wxGBSizerItem *)'
|
110
|
+
# need to adjust sizer arg name to apply disown specs
|
111
|
+
spec.ignore 'wxGridBagSizer::Add(wxSizer *, const wxGBPosition &, const wxGBSpan &, int, int, wxObject *)',
|
112
|
+
ignore_doc: false
|
113
|
+
spec.extend_interface 'wxGridBagSizer',
|
114
|
+
'wxSizerItem *Add(wxSizer *sizer_disown, const wxGBPosition &pos, const wxGBSpan &span=wxDefaultSpan, int flag=0, int border=0, wxObject *userData=NULL)'
|
115
|
+
spec.disown 'wxSizer* sizer_disown'
|
53
116
|
end
|
54
117
|
# no real use for allowing these to be overloaded but a whole lot of grieve
|
55
118
|
# if we do allow it
|
@@ -22,6 +22,28 @@ module WXRuby3
|
|
22
22
|
# ignore constructors
|
23
23
|
spec.ignore 'wxSizerItem::wxSizerItem'
|
24
24
|
spec.ignore(%w[wxSizerItem::SetSizer wxSizerItem::SetSpacer wxSizerItem::SetWindow])
|
25
|
+
# need to adjust sizer arg name to apply disown specs
|
26
|
+
spec.ignore 'wxSizerItem::AssignSizer(wxSizer *)', ignore_doc: false
|
27
|
+
spec.extend_interface 'wxSizerItem',
|
28
|
+
'void AssignSizer(wxSizer *sizer_disown)'
|
29
|
+
spec.disown 'wxSizer *sizer_disown'
|
30
|
+
# needs custom impl to properly transfer ownership to Ruby
|
31
|
+
spec.ignore 'wxSizerItem::DetachSizer', ignore_doc: false
|
32
|
+
spec.add_extend_code 'wxSizerItem', <<~__HEREDOC
|
33
|
+
void detach_sizer()
|
34
|
+
{
|
35
|
+
if ($self->IsSizer())
|
36
|
+
{
|
37
|
+
VALUE rb_szr = SWIG_RubyInstanceFor($self->GetSizer());
|
38
|
+
if (rb_szr && !NIL_P(rb_szr))
|
39
|
+
{
|
40
|
+
// transfer ownership to Ruby
|
41
|
+
RDATA(rb_szr)->dfree = GcSizerFreeFunc;
|
42
|
+
}
|
43
|
+
$self->DetachSizer();
|
44
|
+
}
|
45
|
+
}
|
46
|
+
__HEREDOC
|
25
47
|
when 'wxGBSizerItem'
|
26
48
|
spec.make_abstract 'wxGBSizerItem'
|
27
49
|
# ignore constructors
|