wxruby3 0.9.0 → 0.9.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.yardopts +1 -0
- data/ext/wxruby3/include/wxRubyApp.h +338 -0
- data/ext/wxruby3/include/wxruby-Config.h +6 -6
- 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/aui/aui_tab_ctrl.rb +18 -0
- data/lib/wx/aui/auinotebook.rb +6 -2
- data/lib/wx/aui/require.rb +1 -0
- data/lib/wx/core/app.rb +2 -2
- data/lib/wx/core/collapsible_pane.rb +1 -1
- data/lib/wx/core/const.rb +83 -0
- data/lib/wx/core/controlwithitems.rb +8 -6
- data/lib/wx/core/menu.rb +10 -0
- data/lib/wx/core/notebook.rb +6 -2
- data/lib/wx/core/sizer.rb +11 -0
- data/lib/wx/core/task_bar_button.rb +19 -0
- data/lib/wx/core/textctrl.rb +11 -1
- data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
- data/lib/wx/core/window.rb +10 -0
- data/lib/wx/doc/app.rb +48 -38
- data/lib/wx/doc/art_locator.rb +47 -43
- data/lib/wx/doc/aui/auimanager.rb +16 -8
- data/lib/wx/doc/aui/auinotebook.rb +20 -5
- data/lib/wx/doc/clipboard.rb +11 -7
- data/lib/wx/doc/colour_dialog.rb +14 -10
- data/lib/wx/doc/const.rb +66 -66
- data/lib/wx/doc/controlwithitems.rb +17 -7
- data/lib/wx/doc/data_object.rb +2 -2
- data/lib/wx/doc/event.rb +0 -6
- data/lib/wx/doc/evthandler.rb +113 -108
- data/lib/wx/doc/font.rb +1 -0
- data/lib/wx/doc/functions.rb +9 -9
- data/lib/wx/doc/gc_dc.rb +6 -1
- data/lib/wx/doc/graphics_context.rb +1 -0
- data/lib/wx/doc/grid/grid.rb +22 -1
- data/lib/wx/doc/help_controller.rb +11 -7
- data/lib/wx/doc/html/html_help_controller.rb +12 -4
- data/lib/wx/doc/list_ctrl.rb +33 -29
- data/lib/wx/doc/menu.rb +20 -0
- data/lib/wx/doc/notebook.rb +21 -0
- data/lib/wx/doc/pg/events.rb +13 -9
- data/lib/wx/doc/pg/pg_property.rb +18 -0
- data/lib/wx/doc/progress_dialog.rb +36 -32
- data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
- data/lib/wx/doc/prt/print_data.rb +13 -5
- data/lib/wx/doc/prt/print_dialog.rb +31 -23
- data/lib/wx/doc/prt/printer.rb +20 -12
- data/lib/wx/doc/radio_box.rb +19 -15
- data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
- data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
- data/lib/wx/doc/region_iterator.rb +32 -28
- data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
- data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
- data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
- data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
- data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
- data/lib/wx/doc/sizer.rb +20 -0
- data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
- data/lib/wx/doc/stream.rb +39 -35
- data/lib/wx/doc/system_settings.rb +30 -26
- data/lib/wx/doc/text_validator.rb +12 -8
- data/lib/wx/doc/textctrl.rb +16 -0
- data/lib/wx/doc/tree_ctrl.rb +95 -0
- data/lib/wx/doc/treebook.rb +9 -5
- data/lib/wx/doc/v_list_box.rb +9 -5
- data/lib/wx/doc/variant.rb +164 -160
- data/lib/wx/doc/window.rb +57 -42
- data/lib/wx/doc/window_disabler.rb +10 -6
- data/lib/wx/grid/grid.rb +27 -4
- data/lib/wx/keyword_defs.rb +43 -6
- data/lib/wx/pg/pg_property.rb +22 -0
- data/lib/wx/rtc/require.rb +3 -0
- data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
- data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
- data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
- data/lib/wx/stc/require.rb +1 -0
- data/lib/wx/stc/styled_text_ctrl.rb +25 -0
- data/lib/wx/version.rb +1 -1
- data/rakelib/lib/config/linux.rb +0 -3
- data/rakelib/lib/config/macosx.rb +1 -1
- data/rakelib/lib/config/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +1 -1
- data/rakelib/lib/config.rb +14 -4
- 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 +19 -9
- data/rakelib/lib/core/parameter.rb +3 -0
- data/rakelib/lib/core/spec.rb +6 -1
- data/rakelib/lib/director/accelerator.rb +3 -4
- data/rakelib/lib/director/accessible.rb +47 -0
- data/rakelib/lib/director/animation.rb +1 -1
- data/rakelib/lib/director/animation_ctrl.rb +20 -0
- data/rakelib/lib/director/app.rb +15 -304
- data/rakelib/lib/director/app_traits.rb +10 -12
- data/rakelib/lib/director/art_provider.rb +1 -1
- data/rakelib/lib/director/ctrl_with_items.rb +17 -5
- data/rakelib/lib/director/data_format.rb +1 -1
- data/rakelib/lib/director/data_object_simple_base.rb +1 -2
- data/rakelib/lib/director/derived_dc.rb +1 -1
- data/rakelib/lib/director/dialog.rb +6 -0
- data/rakelib/lib/director/dialup_event.rb +44 -0
- data/rakelib/lib/director/dialup_manager.rb +45 -0
- data/rakelib/lib/director/drag_image.rb +2 -3
- data/rakelib/lib/director/event.rb +22 -4
- data/rakelib/lib/director/file_ctrl.rb +35 -0
- data/rakelib/lib/director/file_ctrl_event.rb +26 -0
- data/rakelib/lib/director/frame.rb +1 -3
- data/rakelib/lib/director/gdicommon.rb +27 -11
- data/rakelib/lib/director/graphics_context.rb +2 -4
- data/rakelib/lib/director/grid_cell_editor.rb +6 -6
- data/rakelib/lib/director/grid_ctrl.rb +34 -3
- data/rakelib/lib/director/help_controller.rb +1 -1
- data/rakelib/lib/director/icon.rb +5 -2
- data/rakelib/lib/director/list_ctrl.rb +5 -6
- data/rakelib/lib/director/locale.rb +1 -3
- data/rakelib/lib/director/log.rb +1 -4
- data/rakelib/lib/director/media_ctrl.rb +54 -0
- data/rakelib/lib/director/menu.rb +16 -1
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
- data/rakelib/lib/director/pgeditor.rb +2 -2
- data/rakelib/lib/director/pgproperties.rb +3 -3
- data/rakelib/lib/director/pgproperty.rb +24 -1
- data/rakelib/lib/director/property_grid_interface.rb +5 -10
- data/rakelib/lib/director/richtext_buffer.rb +1 -1
- data/rakelib/lib/director/richtext_composite_object.rb +25 -0
- data/rakelib/lib/director/richtext_ctrl.rb +15 -5
- data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
- data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
- data/rakelib/lib/director/sash_event.rb +42 -0
- data/rakelib/lib/director/sizer.rb +79 -1
- data/rakelib/lib/director/sizer_item.rb +22 -0
- data/rakelib/lib/director/static_box.rb +4 -5
- data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
- data/rakelib/lib/director/task_bar_button.rb +30 -0
- data/rakelib/lib/director/task_bar_icon.rb +6 -14
- data/rakelib/lib/director/textctrl.rb +12 -1
- data/rakelib/lib/director/tool_tip.rb +1 -1
- data/rakelib/lib/director/top_level_window.rb +4 -5
- data/rakelib/lib/director/tree_ctrl.rb +24 -50
- data/rakelib/lib/director/variant.rb +1 -1
- data/rakelib/lib/director/window.rb +24 -5
- data/rakelib/lib/director.rb +4 -4
- data/rakelib/lib/extractor/function.rb +6 -6
- data/rakelib/lib/extractor.rb +34 -5
- data/rakelib/lib/generate/analyzer.rb +8 -3
- data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
- data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
- data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
- data/rakelib/lib/generate/doc/cursor.yaml +0 -2
- data/rakelib/lib/generate/doc/events.yaml +10 -4
- data/rakelib/lib/generate/doc/panel.yaml +7 -0
- 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 +89 -16
- data/rakelib/lib/generate/interface.rb +4 -3
- data/rakelib/lib/specs/interfaces.rb +161 -156
- data/rakelib/lib/swig_runner.rb +4 -50
- data/rakelib/lib/typemap/common.rb +54 -10
- 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/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
- data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
- data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
- data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
- data/rakelib/yard/templates/default/tags/setup.rb +16 -0
- data/rakelib/yard/yard-custom-templates.rb +3 -0
- data/samples/text/richtext.rb +0 -30
- data/samples/treectrl/treectrl.rb +1 -1
- data/tests/media/beep_lo.wav +0 -0
- 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_list_ctrl.rb +1 -1
- data/tests/test_media_ctrl.rb +38 -0
- data/tests/test_menu.rb +69 -0
- data/tests/test_pg.rb +27 -0
- data/tests/test_richtext.rb +45 -0
- data/tests/test_sizer.rb +59 -0
- data/tests/test_std_controls.rb +78 -1
- data/tests/test_styled_text_ctrl.rb +46 -0
- data/tests/test_tree_ctrl.rb +138 -0
- data/tests/test_window.rb +12 -0
- data/tests/testapp_noframe.rb +1 -1
- metadata +54 -5
- data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -0,0 +1,173 @@
|
|
1
|
+
/* -----------------------------------------------------------------------------
|
2
|
+
* swigtypemaps.swg
|
3
|
+
*
|
4
|
+
* Unified Typemap Library frontend
|
5
|
+
*
|
6
|
+
* Customized for wxRuby3.
|
7
|
+
* Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
8
|
+
*
|
9
|
+
* This software is released under the MIT license.
|
10
|
+
* ----------------------------------------------------------------------------- */
|
11
|
+
|
12
|
+
/*
|
13
|
+
This file provides the frontend to the Unified Typemap Library.
|
14
|
+
|
15
|
+
When using this library in a SWIG target language, you need to
|
16
|
+
define a minimum set of fragments, specialize a couple of macros,
|
17
|
+
and then include this file.
|
18
|
+
|
19
|
+
Typically you will create a 'mytypemaps.swg' file in each target
|
20
|
+
language, where you will have the following sections:
|
21
|
+
|
22
|
+
=== mytypemaps.swg ===
|
23
|
+
|
24
|
+
// Fragment section
|
25
|
+
%include <typemaps/fragments.swg>
|
26
|
+
<include target language fragments>
|
27
|
+
|
28
|
+
// Unified typemap section
|
29
|
+
<specialized the typemap library macros>
|
30
|
+
%include <typemaps/swigtypemaps.swg>
|
31
|
+
|
32
|
+
// Local typemap section
|
33
|
+
<add/replace extra target language typemaps>
|
34
|
+
|
35
|
+
=== mytypemaps.swg ===
|
36
|
+
|
37
|
+
While we add more docs, please take a look at the following cases
|
38
|
+
to see how you specialized the unified typemap library for a new
|
39
|
+
target language:
|
40
|
+
|
41
|
+
Lib/python/pytypemaps.swg
|
42
|
+
Lib/tcl/tcltypemaps.swg
|
43
|
+
Lib/ruby/rubytypemaps.swg
|
44
|
+
Lib/perl5/perltypemaps.swg
|
45
|
+
|
46
|
+
*/
|
47
|
+
|
48
|
+
#define SWIGUTL SWIGUTL
|
49
|
+
|
50
|
+
/* -----------------------------------------------------------------------------
|
51
|
+
* Language specialization section.
|
52
|
+
*
|
53
|
+
* Tune these macros for each language as needed.
|
54
|
+
* ----------------------------------------------------------------------------- */
|
55
|
+
|
56
|
+
/*
|
57
|
+
The SWIG target language object must be provided.
|
58
|
+
For example in python you define:
|
59
|
+
|
60
|
+
#define SWIG_Object PyObject *
|
61
|
+
*/
|
62
|
+
|
63
|
+
#if !defined(SWIG_Object)
|
64
|
+
#error "SWIG_Object must be defined as the SWIG target language object"
|
65
|
+
#endif
|
66
|
+
|
67
|
+
/*==== flags for new/convert methods ====*/
|
68
|
+
|
69
|
+
|
70
|
+
#ifndef %convertptr_flags
|
71
|
+
%define %convertptr_flags 0 %enddef
|
72
|
+
#endif
|
73
|
+
|
74
|
+
#ifndef %newpointer_flags
|
75
|
+
%define %newpointer_flags 0 %enddef
|
76
|
+
#endif
|
77
|
+
|
78
|
+
#ifndef %newinstance_flags
|
79
|
+
%define %newinstance_flags 0 %enddef
|
80
|
+
#endif
|
81
|
+
|
82
|
+
/*==== set output ====*/
|
83
|
+
|
84
|
+
#ifndef %set_output
|
85
|
+
/* simple set output operation */
|
86
|
+
#define %set_output(obj) $result = obj
|
87
|
+
#endif
|
88
|
+
|
89
|
+
/*==== set variable output ====*/
|
90
|
+
|
91
|
+
#ifndef %set_varoutput
|
92
|
+
/* simple set varoutput operation */
|
93
|
+
#define %set_varoutput(obj) $result = obj
|
94
|
+
#endif
|
95
|
+
|
96
|
+
/*==== append output ====*/
|
97
|
+
|
98
|
+
#ifndef %append_output
|
99
|
+
#if defined(SWIG_AppendOutput)
|
100
|
+
/* simple append operation */
|
101
|
+
#define %append_output(obj) $result = SWIG_AppendOutput($result,obj)
|
102
|
+
#else
|
103
|
+
#error "Language must define SWIG_AppendOutput or %append_output"
|
104
|
+
#endif
|
105
|
+
#endif
|
106
|
+
|
107
|
+
/*==== set constant ====*/
|
108
|
+
|
109
|
+
#ifndef %set_constant
|
110
|
+
#if defined(SWIG_SetConstant)
|
111
|
+
/* simple set constant operation */
|
112
|
+
#define %set_constant(name,value) SWIG_SetConstant(name,value)
|
113
|
+
#else
|
114
|
+
#error "Language must define SWIG_SetConstant or %set_constant"
|
115
|
+
#endif
|
116
|
+
#endif
|
117
|
+
|
118
|
+
/*==== raise an exception ====*/
|
119
|
+
|
120
|
+
#ifndef %raise
|
121
|
+
#if defined(SWIG_Raise)
|
122
|
+
/* simple raise operation */
|
123
|
+
#define %raise(obj, type, desc) SWIG_Raise(obj, type, desc); SWIG_fail
|
124
|
+
#else
|
125
|
+
#error "Language must define SWIG_Raise or %raise"
|
126
|
+
#endif
|
127
|
+
#endif
|
128
|
+
|
129
|
+
/*==== director output exception ====*/
|
130
|
+
|
131
|
+
/* wxRuby : make sure to pass the object and method that caused the failure */
|
132
|
+
#if defined(SWIG_DIRECTOR_TYPEMAPS)
|
133
|
+
#ifndef SWIG_DirOutFail
|
134
|
+
#define SWIG_DirOutFail(self, method, code, msg) Swig::DirectorTypeMismatchException::raise(self, method, SWIG_ErrorType(code), msg)
|
135
|
+
#endif
|
136
|
+
#endif
|
137
|
+
|
138
|
+
|
139
|
+
/* -----------------------------------------------------------------------------
|
140
|
+
* Language independent definitions
|
141
|
+
* ----------------------------------------------------------------------------- */
|
142
|
+
|
143
|
+
#define %error_block(Block...) %block(Block)
|
144
|
+
#define %default_code(code) SWIG_ArgError(code)
|
145
|
+
#define %argument_fail(code, type, name, argn) SWIG_exception_fail(%default_code(code), %argfail_fmt(type, name, argn))
|
146
|
+
#define %argument_nullref(type, name, argn) SWIG_exception_fail(SWIG_ValueError, %argnullref_fmt(type, name, argn))
|
147
|
+
#define %variable_fail(code, type, name) SWIG_exception_fail(%default_code(code), %varfail_fmt(type, name))
|
148
|
+
#define %variable_nullref(type, name) SWIG_exception_fail(SWIG_ValueError, %varnullref_fmt(type, name))
|
149
|
+
#define %releasenotowned_fail(code, type, name, argn) SWIG_exception_fail(%default_code(code), %releasenotownedfail_fmt(type, name, argn))
|
150
|
+
|
151
|
+
/* wxRuby : make sure to pass the object and method that caused the failure */
|
152
|
+
#if defined(SWIG_DIRECTOR_TYPEMAPS)
|
153
|
+
#define %dirout_fail(code, type) SWIG_DirOutFail(swig_get_self(), "$symname", %default_code(code), %outfail_fmt(type))
|
154
|
+
#define %dirout_nullref(type) SWIG_DirOutFail(swig_get_self(), "$symname", SWIG_ValueError, %outnullref_fmt(type))
|
155
|
+
#endif
|
156
|
+
|
157
|
+
/* -----------------------------------------------------------------------------
|
158
|
+
* All the typemaps
|
159
|
+
* ----------------------------------------------------------------------------- */
|
160
|
+
|
161
|
+
|
162
|
+
%include <typemaps/fragments.swg>
|
163
|
+
%include <typemaps/exception.swg>
|
164
|
+
%include <typemaps/swigtype.swg>
|
165
|
+
%include <typemaps/void.swg>
|
166
|
+
%include <typemaps/swigobject.swg>
|
167
|
+
%include <typemaps/valtypes.swg>
|
168
|
+
%include <typemaps/ptrtypes.swg>
|
169
|
+
%include <typemaps/inoutlist.swg>
|
170
|
+
%include <typemaps/primtypes.swg>
|
171
|
+
%include <typemaps/string.swg>
|
172
|
+
%include <typemaps/misctypes.swg>
|
173
|
+
%include <typemaps/enumint.swg>
|
data/ext/wxruby3/swig/wx.i
CHANGED
@@ -35,11 +35,31 @@ WX_DECLARE_HASH_MAP(VALUE,
|
|
35
35
|
RbClassToSwigTypeHash);
|
36
36
|
RbClassToSwigTypeHash Global_Type_Map;
|
37
37
|
|
38
|
+
// Mapping of wxWidgets class names to Ruby classes
|
39
|
+
WX_DECLARE_STRING_HASH_MAP(VALUE,
|
40
|
+
WxClassnameToRbClassHash);
|
41
|
+
WxClassnameToRbClassHash Global_Class_Map;
|
42
|
+
|
43
|
+
// Record wxRuby class for a wxw class name
|
44
|
+
WXRUBY_EXPORT void wxRuby_SetRbClassForWxName(const wxString& wx_name, VALUE cls)
|
45
|
+
{
|
46
|
+
Global_Class_Map[wx_name] = cls;
|
47
|
+
}
|
48
|
+
|
49
|
+
// Retrieve wxRuby class for a wxw class name
|
50
|
+
WXRUBY_EXPORT VALUE wxRuby_GetRbClassForWxName(const wxString& wx_name)
|
51
|
+
{
|
52
|
+
return Global_Class_Map[wx_name];
|
53
|
+
}
|
54
|
+
|
38
55
|
// Record swig_type_info for a wxRuby class; called in class
|
39
56
|
// initialisation
|
40
57
|
WXRUBY_EXPORT void wxRuby_SetSwigTypeForClass(VALUE cls, swig_type_info* ty)
|
41
58
|
{
|
42
59
|
Global_Type_Map[cls] = ty;
|
60
|
+
const char* swig_type_name = ty->name;
|
61
|
+
// skip '_p_' prefix and register class
|
62
|
+
wxRuby_SetRbClassForWxName(wxString(swig_type_name+3), cls);
|
43
63
|
}
|
44
64
|
|
45
65
|
// Retrieve swig_type_info for a ruby class - needed by functions which
|
@@ -141,41 +161,41 @@ WXRUBY_EXPORT VALUE wxRuby_WrapWxObjectInRuby(wxObject *wx_obj)
|
|
141
161
|
|
142
162
|
// Get the wx class and the ruby class we are converting into
|
143
163
|
wxString class_name( wx_obj->GetClassInfo()->GetClassName() );
|
144
|
-
|
145
|
-
VALUE r_class_name = rb_intern(wx_classname.data () + 2);
|
146
|
-
VALUE r_class = Qnil;
|
147
|
-
|
148
|
-
if ( class_name.Len() > 2 )
|
149
|
-
{
|
150
|
-
// lookup the class in the main module and any package submodules loaded
|
151
|
-
if (rb_const_defined(mWxCore, r_class_name))
|
152
|
-
r_class = rb_const_get(mWxCore, r_class_name);
|
153
|
-
else
|
154
|
-
{
|
155
|
-
VALUE submod_ary = rb_ivar_get(mWxCore, rb_intern("@__pkgmods__"));
|
156
|
-
for (long n=0; n<RARRAY_LEN(submod_ary); ++n)
|
157
|
-
{
|
158
|
-
VALUE submod = rb_ary_entry(submod_ary, n);
|
159
|
-
if (rb_const_defined(submod, r_class_name))
|
160
|
-
{
|
161
|
-
r_class = rb_const_get(submod, r_class_name);
|
162
|
-
break;
|
163
|
-
}
|
164
|
-
}
|
165
|
-
}
|
166
|
-
}
|
164
|
+
VALUE r_class = wxRuby_GetRbClassForWxName(class_name);
|
167
165
|
|
168
166
|
// Handle classes (currently) unknown in wxRuby.
|
169
167
|
// (could cause problems because class-specific methods won't be accessible).
|
170
|
-
if (
|
168
|
+
if (r_class == 0 || NIL_P(r_class))
|
171
169
|
{
|
172
|
-
// map unknown wxWindow derivatives as
|
170
|
+
// map unknown wxWindow derivatives as a mapped base class
|
171
|
+
// this solves issues with explicitly defined wxRuby custom
|
172
|
+
// DECLARE_DYNAMIC_CLASS classes like WxRubyTreeCtrl
|
173
173
|
if (wxIsKindOf(wx_obj, wxWindow))
|
174
174
|
{
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
175
|
+
wxClassInfo* cls_info = wx_obj->GetClassInfo();
|
176
|
+
do
|
177
|
+
{
|
178
|
+
wxString base_name(wx_obj->GetClassInfo()->GetBaseClassName1());
|
179
|
+
r_class = wxRuby_GetRbClassForWxName(base_name);
|
180
|
+
if (r_class == 0 || NIL_P(r_class))
|
181
|
+
{
|
182
|
+
cls_info = wxClassInfo::FindClass(base_name);
|
183
|
+
if (!cls_info)
|
184
|
+
{
|
185
|
+
// map to basic Wx::Window
|
186
|
+
r_class = rb_const_get(mWxCore, window_id());
|
187
|
+
// issue warning if $VERBOSE is true
|
188
|
+
rb_warning("Cannot wrap exact window class as '%s' is not (yet) known in wxRuby; wrapping as base Wx::Window object.",
|
189
|
+
(const char *)class_name.mb_str());
|
190
|
+
}
|
191
|
+
}
|
192
|
+
else
|
193
|
+
{
|
194
|
+
// issue warning if $VERBOSE is true
|
195
|
+
rb_warning("Cannot wrap exact window class as '%s' is not (yet) known in wxRuby; wrapping as %s object.",
|
196
|
+
(const char *)class_name.mb_str(), rb_class2name(r_class));
|
197
|
+
}
|
198
|
+
} while (r_class == 0 || NIL_P(r_class));
|
179
199
|
}
|
180
200
|
else
|
181
201
|
{
|
@@ -188,7 +208,7 @@ WXRUBY_EXPORT VALUE wxRuby_WrapWxObjectInRuby(wxObject *wx_obj)
|
|
188
208
|
// Otherwise, retrieve the swig type info for this class and wrap it
|
189
209
|
// in Ruby. wxRuby_GetSwigTypeForClass is defined in wx.i
|
190
210
|
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
|
191
|
-
VALUE r_obj = SWIG_NewPointerObj(wx_obj, swig_type,
|
211
|
+
VALUE r_obj = SWIG_NewPointerObj(wx_obj, swig_type, 0);
|
192
212
|
return r_obj;
|
193
213
|
}
|
194
214
|
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
class Wx::AUI::AuiTabCtrl
|
6
|
+
|
7
|
+
# Convenience method for iterating pages
|
8
|
+
def each_page
|
9
|
+
if block_given?
|
10
|
+
0.upto(get_page_count - 1) do | i |
|
11
|
+
yield get_page(i)
|
12
|
+
end
|
13
|
+
else
|
14
|
+
::Enumerator.new { |y| each_page { |pg| y << pg } }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/lib/wx/aui/auinotebook.rb
CHANGED
@@ -19,8 +19,12 @@ class Wx::AUI::AuiNotebook
|
|
19
19
|
|
20
20
|
# Convenience method for iterating pages
|
21
21
|
def each_page
|
22
|
-
|
23
|
-
|
22
|
+
if block_given?
|
23
|
+
0.upto(get_page_count - 1) do | i |
|
24
|
+
yield get_page(i)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
::Enumerator.new { |y| each_page { |pg| y << pg } }
|
24
28
|
end
|
25
29
|
end
|
26
30
|
end
|
data/lib/wx/aui/require.rb
CHANGED
data/lib/wx/core/app.rb
CHANGED
@@ -79,8 +79,8 @@ class Wx::App
|
|
79
79
|
# WxRuby. Such messages usually indicate that the API is being used
|
80
80
|
# incorrectly; the file/line reference points to the place in the
|
81
81
|
# WxWidgets source code where the assertion was made.
|
82
|
-
|
83
|
-
warn
|
82
|
+
def on_assert_failure(file, line, func, condition, message)
|
83
|
+
warn %Q{Wx WARNING: ASSERT #{condition} fired with "#{message}" at (#{func}@#{file}:#{line})}
|
84
84
|
end
|
85
85
|
|
86
86
|
# For use in development only, of no practical use in production code.
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
|
6
|
+
module Wx
|
7
|
+
|
8
|
+
=begin
|
9
|
+
These constants are not documented in the wxWidgets interface headers
|
10
|
+
although they are referenced in various argument defaults which *are*
|
11
|
+
in the interface header declarations so.
|
12
|
+
=end
|
13
|
+
|
14
|
+
DEFAULT_DATE_TIME_FORMAT = '%c'
|
15
|
+
DEFAULT_TIME_SPAN_FORMAT = '%H:%M:%S'
|
16
|
+
|
17
|
+
CHOICE_NAME_STR = 'choice'
|
18
|
+
COLOUR_PICKER_CTRL_NAME_STR = 'colourpicker'
|
19
|
+
COLOUR_PICKER_WIDGET_NAME_STR = 'colourpickerwidget'
|
20
|
+
HYPERLINK_CTRL_NAME_STR = 'hyperlink'
|
21
|
+
PANEL_NAME_STR = 'panel'
|
22
|
+
LIST_BOX_NAME_STR = 'listBox'
|
23
|
+
FRAME_NAME_STR = 'frame'
|
24
|
+
STATUS_LINE_NAME_STR = 'status_line'
|
25
|
+
STATIC_BITMAP_NAME_STR = 'staticBitmap'
|
26
|
+
WEB_VIEW_NAME_STR = 'wxWebView'
|
27
|
+
ANIMATION_CTRL_NAME_STR = 'animationctrl'
|
28
|
+
TOOL_BAR_NAME_STR = 'toolbar'
|
29
|
+
TEXT_CTRL_NAME_STR = 'text'
|
30
|
+
LIST_CTRL_NAME_STR = 'listCtrl'
|
31
|
+
FILE_PICKER_CTRL_NAME_STR = 'filepicker'
|
32
|
+
FILE_PICKER_WIDGET_NAME_STR = 'filepickerwidget'
|
33
|
+
DIR_PICKER_CTRL_NAME_STR = 'dirpicker'
|
34
|
+
DIR_PICKER_WIDGET_NAME_STR = 'dirpickerwidget'
|
35
|
+
FILE_CTRL_NAME_STR = 'wxfilectrl'
|
36
|
+
FILE_SELECTOR_PROMPT_STR = 'Select a file'
|
37
|
+
STATIC_BOX_NAME_STR = 'groupBox'
|
38
|
+
BUTTON_NAME_STR = 'button'
|
39
|
+
RADIO_BOX_NAME_STR = 'radioBox'
|
40
|
+
STATIC_LINE_NAME_STR = 'staticLine'
|
41
|
+
RADIO_BUTTON_NAME_STR = 'radioButton'
|
42
|
+
BITMAP_RADIO_BUTTON_NAME_STR = 'radioButton'
|
43
|
+
GAUGE_NAME_STR = 'gauge'
|
44
|
+
DATA_VIEW_CTRL_NAME_STR = 'dataviewCtrl'
|
45
|
+
FONT_PICKER_CTRL_NAME_STR = 'fontpicker'
|
46
|
+
FONT_PICKER_WIDGET_NAME_STR = 'fontpickerwidget'
|
47
|
+
REARRANGE_LIST_NAME_STR = 'wxRearrangeList'
|
48
|
+
REARRANGE_DIALOG_NAME_STR = 'wxRearrangeDlg'
|
49
|
+
NOTEBOOK_NAME_STR = 'notebook'
|
50
|
+
CONTROL_NAME_STR = 'control'
|
51
|
+
SCROLL_BAR_NAME_STR = 'scrollBar'
|
52
|
+
STATUS_BAR_NAME_STR = 'statusBar'
|
53
|
+
SLIDER_NAME_STR = 'slider'
|
54
|
+
HEADER_CTRL_NAME_STR = 'wxHeaderCtrl'
|
55
|
+
BITMAP_COMBO_BOX_NAME_STR = 'bitmapComboBox'
|
56
|
+
CHECK_BOX_NAME_STR = 'check'
|
57
|
+
FILE_DIALOG_NAME_STR = 'filedlg'
|
58
|
+
ADD_REMOVE_CTRL_NAME_STR = 'wxAddRemoveCtrl'
|
59
|
+
STATIC_TEXT_NAME_STR = 'staticText'
|
60
|
+
COMBO_BOX_NAME_STR = 'comboBox'
|
61
|
+
SEARCH_CTRL_NAME_STR = 'searchCtrl'
|
62
|
+
TREE_CTRL_NAME_STR = 'treeCtrl'
|
63
|
+
DIALOG_NAME_STR = 'dialog'
|
64
|
+
COLLAPSIBLE_HEADER_CTRL_NAME_STR = 'collapsibleHeader'
|
65
|
+
COLLAPSIBLE_PANE_NAME_STR = 'collapsiblePane'
|
66
|
+
BANNER_WINDOW_NAME_STR = 'bannerwindow'
|
67
|
+
GRID_NAME_STR = 'grid'
|
68
|
+
TREE_LIST_CTRL_NAME_STR = 'wxTreeListCtrl'
|
69
|
+
HTML_LIST_BOX_NAME_STR = 'htmlListBox'
|
70
|
+
SIMPLE_HTML_LIST_BOX_NAME_STR = 'simpleHtmlListBox'
|
71
|
+
EDITABLE_LIST_BOX_NAME_STR = 'editableListBox'
|
72
|
+
V_LIST_BOX_NAME_STR = 'wxVListBox'
|
73
|
+
|
74
|
+
if Wx::PLATFORM == 'WXMSW'
|
75
|
+
# wxMSW only
|
76
|
+
MSW_HEADER_CTRL_NAME_STR = 'wxMSWHeaderCtrl'
|
77
|
+
end
|
78
|
+
|
79
|
+
PROPERTY_GRID_MANAGER_NAME_STR = 'wxPropertyGridManager'
|
80
|
+
PROPERTY_GRID_NAME_STR = 'wxPropertyGrid'
|
81
|
+
STC_NAME_STR = 'stcwindow'
|
82
|
+
|
83
|
+
end
|
@@ -11,12 +11,14 @@
|
|
11
11
|
|
12
12
|
class Wx::ControlWithItems
|
13
13
|
|
14
|
-
#
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
# Overload to provide Enumerator without block
|
15
|
+
wx_each_string = instance_method :each_string
|
16
|
+
define_method :each_string do |&block|
|
17
|
+
if block
|
18
|
+
wx_each_string.bind(self).call(&block)
|
19
|
+
else
|
20
|
+
::Enumerator.new { |y| wx_each_string.bind(self).call { |ln| y << ln } }
|
21
|
+
end
|
20
22
|
end
|
21
23
|
|
22
24
|
# We need to cache client data in Ruby variables as we cannot access items
|
data/lib/wx/core/menu.rb
CHANGED
@@ -26,6 +26,16 @@ class Wx::Menu
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
# Overload to provide Enumerator without block
|
30
|
+
wx_each_item = instance_method :each_item
|
31
|
+
define_method :each_item do |&block|
|
32
|
+
if block
|
33
|
+
wx_each_item.bind(self).call(&block)
|
34
|
+
else
|
35
|
+
::Enumerator.new { |y| wx_each_item.bind(self).call { |mi| y << mi } }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
29
39
|
# In the standard WxWidgets API, the methods append, prepend, insert
|
30
40
|
# (and their variants) require a constant integer id as the identifier
|
31
41
|
# of the menu item. This is then used in event handling.
|
data/lib/wx/core/notebook.rb
CHANGED
@@ -11,8 +11,12 @@
|
|
11
11
|
class Wx::Notebook
|
12
12
|
# Convenience method for iterating pages
|
13
13
|
def each_page
|
14
|
-
|
15
|
-
|
14
|
+
if block_given?
|
15
|
+
0.upto(get_page_count - 1) do | i |
|
16
|
+
yield get_page(i)
|
17
|
+
end
|
18
|
+
else
|
19
|
+
::Enumerator.new { |y| each_page { |pg| y << pg } }
|
16
20
|
end
|
17
21
|
end
|
18
22
|
end
|
data/lib/wx/core/sizer.rb
CHANGED
@@ -49,4 +49,15 @@ class Wx::Sizer
|
|
49
49
|
insert(idx, *full_args)
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
53
|
+
# Overload to provide Enumerator without block
|
54
|
+
wx_each_child = instance_method :each_child
|
55
|
+
define_method :each_child do |&block|
|
56
|
+
if block
|
57
|
+
wx_each_child.bind(self).call(&block)
|
58
|
+
else
|
59
|
+
::Enumerator.new { |y| wx_each_child.bind(self).call { |c| y << c } }
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
52
63
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
2
|
+
#
|
3
|
+
# This software is released under the MIT license.
|
4
|
+
|
5
|
+
|
6
|
+
module Wx
|
7
|
+
|
8
|
+
if Wx::PLATFORM == 'WXMSW'
|
9
|
+
class TaskBarButton
|
10
|
+
|
11
|
+
wx_remove_thumb_bar_button = instance_method :remove_thumb_bar_button
|
12
|
+
define_method :remove_thumb_bar_button do |button|
|
13
|
+
button = button.get_id if button.is_a?(Wx::ThumbBarButton)
|
14
|
+
wx_remove_thumb_bar_button.bind(self).call(button)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/wx/core/textctrl.rb
CHANGED
@@ -59,10 +59,20 @@ module Wx
|
|
59
59
|
class TextCtrl
|
60
60
|
wx_op_append = instance_method :<<
|
61
61
|
define_method :<< do |o|
|
62
|
-
wx_op_append.bind(self).call(o)
|
62
|
+
wx_op_append.bind(self).call(o.to_s)
|
63
63
|
self
|
64
64
|
end
|
65
65
|
|
66
|
+
# Overload to provide Enumerator without block
|
67
|
+
wx_each_line = instance_method :each_line
|
68
|
+
define_method :each_line do |&block|
|
69
|
+
if block
|
70
|
+
wx_each_line.bind(self).call(&block)
|
71
|
+
else
|
72
|
+
::Enumerator.new { |y| wx_each_line.bind(self).call { |ln| y << ln } }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
66
76
|
if Wx.has_feature?(:USE_SPELLCHECK)
|
67
77
|
|
68
78
|
protected :do_enable_proof_check
|
@@ -9,22 +9,41 @@
|
|
9
9
|
# Hierarchical control with items
|
10
10
|
|
11
11
|
class Wx::TreeCtrl
|
12
|
-
|
13
|
-
|
12
|
+
|
13
|
+
# Overload to provide Enumerator without block
|
14
|
+
wx_traverse = instance_method :traverse
|
15
|
+
define_method :traverse do |start_id=nil, &block|
|
16
|
+
if block
|
17
|
+
wx_traverse.bind(self).call(start_id, &block)
|
18
|
+
else
|
19
|
+
::Enumerator.new { |y| wx_traverse.bind(self).call(start_id) { |c| y << c } }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
14
23
|
# Iterate over all items
|
15
24
|
alias :each :traverse
|
16
25
|
|
17
|
-
#
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
+
# Make these ruby enumerables so find, find_all, map etc are available
|
27
|
+
include Enumerable
|
28
|
+
|
29
|
+
# Iterate all children of parent_id
|
30
|
+
def each_item_child(parent_id, &block)
|
31
|
+
if block
|
32
|
+
rc = nil
|
33
|
+
child_id, cookie = get_first_child(parent_id)
|
34
|
+
while child_id && child_id.ok?
|
35
|
+
rc = block.call(child_id)
|
36
|
+
child_id, cookie = get_next_child(parent_id, cookie)
|
37
|
+
end
|
38
|
+
rc
|
39
|
+
else
|
40
|
+
::Enumerator.new { |y| each_item_child(parent_id) { |child_id| y << child_id } }
|
26
41
|
end
|
27
|
-
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return the children of +parent+ as an array of TreeItemIDs.
|
45
|
+
def get_item_children(parent_id)
|
46
|
+
each_item_child(parent_id).to_a
|
28
47
|
end
|
29
48
|
|
30
49
|
# Returns a Wx::Rect corresponding to the edges of an individual tree
|
data/lib/wx/core/window.rb
CHANGED
@@ -79,6 +79,16 @@ class Wx::Window
|
|
79
79
|
end
|
80
80
|
end
|
81
81
|
|
82
|
+
# Overload to provide Enumerator without block
|
83
|
+
wx_each_child = instance_method :each_child
|
84
|
+
define_method :each_child do |&block|
|
85
|
+
if block
|
86
|
+
wx_each_child.bind(self).call(&block)
|
87
|
+
else
|
88
|
+
::Enumerator.new { |y| wx_each_child.bind(self).call { |c| y << c } }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
82
92
|
# implement non-static variants of these
|
83
93
|
|
84
94
|
def from_dip(*args)
|