wxruby3 1.7.0 → 1.8.0
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 +27 -2
- data/README.md +15 -15
- data/ext/wxruby3/include/wxRubyApp.h +145 -46
- data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
- data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
- data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
- data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
- data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
- data/ext/wxruby3/include/wxruby-runtime.h +29 -0
- data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
- data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
- data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
- data/ext/wxruby3/swig/mark_free_impl.i +7 -132
- data/ext/wxruby3/swig/memory_management.i +8 -44
- data/ext/wxruby3/swig/wx.i +46 -73
- data/lib/wx/core/const.rb +0 -1
- data/lib/wx/core/context_help.rb +17 -0
- data/lib/wx/core/cursor.rb +1 -0
- data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
- data/lib/wx/core/mbconv.rb +11 -0
- data/lib/wx/core/media_ctrl.rb +31 -0
- data/lib/wx/core/top_level_window.rb +7 -0
- data/lib/wx/core.rb +6 -0
- data/lib/wx/doc/art_provider.rb +17 -0
- data/lib/wx/doc/context_help.rb +42 -0
- data/lib/wx/doc/core.rb +0 -5
- data/lib/wx/doc/functions.rb +10 -0
- data/lib/wx/doc/gen/affine_matrix2d.rb +2 -0
- data/lib/wx/doc/gen/art_provider.rb +12 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
- data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
- data/lib/wx/doc/gen/calendar_event.rb +5 -5
- data/lib/wx/doc/gen/choicebook.rb +2 -2
- data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
- data/lib/wx/doc/gen/colour_dialog.rb +1 -1
- data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
- data/lib/wx/doc/gen/context_help_button.rb +0 -53
- data/lib/wx/doc/gen/core.rb +4 -4
- data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
- data/lib/wx/doc/gen/date_event.rb +2 -2
- data/lib/wx/doc/gen/dial_up_event.rb +2 -2
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
- data/lib/wx/doc/gen/event.rb +58 -58
- data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
- data/lib/wx/doc/gen/file_ctrl.rb +4 -4
- data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
- data/lib/wx/doc/gen/file_system.rb +1 -1
- data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
- data/lib/wx/doc/gen/font_picker_event.rb +1 -1
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
- data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
- data/lib/wx/doc/gen/help_controller.rb +45 -2
- data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
- data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
- data/lib/wx/doc/gen/html/html_window.rb +4 -4
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
- data/lib/wx/doc/gen/list_ctrl.rb +22 -22
- data/lib/wx/doc/gen/listbook.rb +2 -2
- data/lib/wx/doc/gen/mb_conv.rb +10 -0
- data/lib/wx/doc/gen/media_event.rb +6 -6
- data/lib/wx/doc/gen/notebook.rb +2 -2
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
- data/lib/wx/doc/gen/rt/event_list.rb +17 -0
- data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
- data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
- data/lib/wx/doc/gen/sash_event.rb +2 -2
- data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
- data/lib/wx/doc/gen/search_ctrl.rb +2 -2
- data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
- data/lib/wx/doc/gen/splitter_window.rb +6 -6
- data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
- data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
- data/lib/wx/doc/gen/text_ctrl.rb +4 -4
- data/lib/wx/doc/gen/toggle_button.rb +1 -1
- data/lib/wx/doc/gen/toolbook.rb +2 -2
- data/lib/wx/doc/gen/top_level_window.rb +19 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
- data/lib/wx/doc/gen/treebook.rb +4 -4
- data/lib/wx/doc/gen/utils.rb +2 -2
- data/lib/wx/doc/gen/web/event_list.rb +95 -0
- data/lib/wx/doc/gen/web/web_view.rb +1136 -0
- data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
- data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
- data/lib/wx/doc/gen/window.rb +1 -1
- data/lib/wx/doc/gen/wizard_event.rb +7 -7
- data/lib/wx/doc/html/html_help_controller.rb +23 -1
- data/lib/wx/doc/mbconv.rb +108 -0
- data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
- data/lib/wx/doc/rt/thread_event.rb +28 -0
- data/lib/wx/doc/webview.rb +40 -0
- data/lib/wx/helpers.rb +1 -1
- data/lib/wx/html/htmlhelpcontroller.rb +10 -0
- data/lib/wx/keyword_defs.rb +11 -0
- data/lib/wx/rt/events/evt_list.rb +8 -0
- data/lib/wx/rt/require.rb +8 -0
- data/lib/wx/rt/thread_event.rb +14 -0
- data/lib/wx/rt.rb +16 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/web/events/evt_list.rb +74 -0
- data/lib/wx/web/require.rb +8 -0
- data/lib/wx/web/webview.rb +106 -0
- data/lib/wx/web.rb +17 -0
- data/lib/wx/wxruby/cmd/setup.rb +15 -0
- data/lib/wx.rb +2 -0
- data/rakelib/configure.rb +24 -0
- data/rakelib/gem.rb +3 -2
- data/rakelib/install.rb +54 -27
- data/rakelib/lib/config/macosx.rb +7 -5
- data/rakelib/lib/config/mingw.rb +66 -5
- data/rakelib/lib/config/pkgman/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +4 -2
- data/rakelib/lib/config.rb +37 -3
- data/rakelib/lib/core/include/client_data.inc +38 -17
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/include/swigdirector.inc +3 -3
- data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
- data/rakelib/lib/core/package.rb +0 -2
- data/rakelib/lib/director/app.rb +1 -8
- data/rakelib/lib/director/art_provider.rb +7 -3
- data/rakelib/lib/director/comboctrl.rb +0 -7
- data/rakelib/lib/director/context_help_button.rb +35 -2
- data/rakelib/lib/director/event_handler.rb +32 -28
- data/rakelib/lib/director/fs_file.rb +15 -10
- data/rakelib/lib/director/functions.rb +8 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +14 -12
- data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
- data/rakelib/lib/director/grid_ctrl.rb +140 -121
- data/rakelib/lib/director/help_controller.rb +70 -2
- data/rakelib/lib/director/mb_conv.rb +30 -0
- data/rakelib/lib/director/menu.rb +92 -42
- data/rakelib/lib/director/menu_bar.rb +84 -45
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/persistence_manager.rb +3 -2
- data/rakelib/lib/director/preview_frame.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +5 -2
- data/rakelib/lib/director/shared_evt_handler.rb +30 -0
- data/rakelib/lib/director/sizer.rb +8 -17
- data/rakelib/lib/director/sizer_item.rb +3 -4
- data/rakelib/lib/director/task_bar_icon.rb +7 -7
- data/rakelib/lib/director/thread_event.rb +33 -0
- data/rakelib/lib/director/validator.rb +3 -1
- data/rakelib/lib/director/variant.rb +16 -12
- data/rakelib/lib/director/webview.rb +166 -0
- data/rakelib/lib/director/webview_event.rb +37 -0
- data/rakelib/lib/director/webview_handler.rb +63 -0
- data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
- data/rakelib/lib/generate/doc/web_view.yaml +135 -0
- data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
- data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
- data/rakelib/lib/specs/interfaces.rb +12 -0
- data/rakelib/lib/typemap/common.rb +34 -1
- data/rakelib/lib/typemap/mb_conv.rb +58 -0
- data/rakelib/prepost.rake +23 -31
- data/rakelib/prepost.rb +20 -0
- data/samples/event/threaded.rb +295 -42
- data/samples/event/tn_threaded.png +0 -0
- data/samples/help/doc/back.gif +0 -0
- data/samples/help/doc/contents.gif +0 -0
- data/samples/help/doc/cshelp.txt +9 -0
- data/samples/help/doc/doc.chm +0 -0
- data/samples/help/doc/doc.cnt +8 -0
- data/samples/help/doc/doc.h +7 -0
- data/samples/help/doc/doc.hhc +40 -0
- data/samples/help/doc/doc.hhk +31 -0
- data/samples/help/doc/doc.hhp +33 -0
- data/samples/help/doc/doc.hpj +21 -0
- data/samples/help/doc/doc.htm +27 -0
- data/samples/help/doc/doc1.htm +24 -0
- data/samples/help/doc/doc2.htm +12 -0
- data/samples/help/doc/doc3.htm +12 -0
- data/samples/help/doc/doc4.htm +12 -0
- data/samples/help/doc/doc5.htm +14 -0
- data/samples/help/doc/forward.gif +0 -0
- data/samples/help/doc/up.gif +0 -0
- data/samples/help/doc.chm +0 -0
- data/samples/help/doc.chw +0 -0
- data/samples/help/doc.zip +0 -0
- data/samples/help/help.rb +352 -0
- data/samples/help/tn_help.png +0 -0
- data/samples/webview/handler_advanced.html +55 -0
- data/samples/webview/tn_webview.png +0 -0
- data/samples/webview/webview.rb +1264 -0
- data/tests/assets/handler_advanced.html +55 -0
- data/tests/assets/test.css +1 -0
- data/tests/assets/test.html +9 -0
- data/tests/assets/test.zip +0 -0
- data/tests/lib/text_entry_tests.rb +2 -2
- data/tests/lib/wxapp_runner.rb +40 -0
- data/tests/lib/wxframe_runner.rb +17 -2
- data/tests/test_art.rb +8 -8
- data/tests/test_clipboard.rb +4 -4
- data/tests/test_config.rb +6 -6
- data/tests/test_exceptions.rb +8 -6
- data/tests/test_ext_controls.rb +3 -3
- data/tests/test_file_dialog.rb +5 -5
- data/tests/test_font.rb +7 -7
- data/tests/test_grid_ctrl.rb +133 -0
- data/tests/test_help.rb +88 -0
- data/tests/test_intl.rb +1 -1
- data/tests/test_media_ctrl.rb +14 -6
- data/tests/test_menu.rb +94 -86
- data/tests/test_persistence.rb +1 -1
- data/tests/test_proof_check.rb +5 -5
- data/tests/test_propgrid.rb +1 -1
- data/tests/test_shared_event_handler.rb +141 -0
- data/tests/test_std_controls.rb +5 -5
- data/tests/test_webview.rb +492 -0
- data/tests/test_window.rb +3 -3
- metadata +78 -2
|
@@ -93,6 +93,21 @@ module WXRuby3
|
|
|
93
93
|
}
|
|
94
94
|
__CODE
|
|
95
95
|
end
|
|
96
|
+
spec.add_header_code <<~__HEREDOC
|
|
97
|
+
// custom subclass for Ruby (derived) instances to cleanup event handler procs on destruction
|
|
98
|
+
class wxRubyEvtHandler : public wxEvtHandler
|
|
99
|
+
{
|
|
100
|
+
public:
|
|
101
|
+
wxRubyEvtHandler() : wxEvtHandler() {}
|
|
102
|
+
virtual ~wxRubyEvtHandler()
|
|
103
|
+
{
|
|
104
|
+
wxRuby_ReleaseEvtHandlerProcs(this);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
__HEREDOC
|
|
109
|
+
# make Ruby director and wrappers use custom implementation
|
|
110
|
+
spec.use_class_implementation('wxEvtHandler', 'wxRubyEvtHandler')
|
|
96
111
|
spec.add_runtime_code <<~__HEREDOC
|
|
97
112
|
WXRUBY_TRACE_GUARD(WxRubyTraceEventHandlers, "EVENTS_HANDLER");
|
|
98
113
|
|
|
@@ -153,33 +168,27 @@ module WXRuby3
|
|
|
153
168
|
// GC until the EvtHandler object itself is destroyed. So we keep a hash
|
|
154
169
|
// which maps C++ pointer addresses of EvtHandlers to lists of
|
|
155
170
|
// the callback objects created to handle their events.
|
|
156
|
-
|
|
157
|
-
typedef
|
|
158
|
-
|
|
159
|
-
|
|
171
|
+
#include <set>
|
|
172
|
+
typedef std::set<wxRbCallback*> TEvtHandlerProcs;
|
|
173
|
+
typedef std::unordered_map<void*, TEvtHandlerProcs> TPtrToEvtHandlerProcs;
|
|
174
|
+
static TPtrToEvtHandlerProcs _s__Evt_Handler_Handlers {};
|
|
160
175
|
|
|
161
176
|
// Add a proc to the list of protected handler for an EvtHandler object
|
|
162
177
|
void wxRuby_ProtectEvtHandlerProc(void* evt_handler, wxRbCallback* proc_cb)
|
|
163
178
|
{
|
|
164
|
-
|
|
165
|
-
Evt_Handler_Handlers[evt_handler] = new EvtHandlerProcList();
|
|
166
|
-
Evt_Handler_Handlers[evt_handler]->push_back(proc_cb);
|
|
179
|
+
_s__Evt_Handler_Handlers[evt_handler].emplace(proc_cb);
|
|
167
180
|
}
|
|
168
181
|
|
|
169
182
|
static void wxRuby_ReleaseEvtHandlerProc(void* evt_handler, wxRbCallback* proc_cb)
|
|
170
183
|
{
|
|
171
|
-
|
|
184
|
+
auto itevh = _s__Evt_Handler_Handlers.find(evt_handler);
|
|
185
|
+
if (itevh != _s__Evt_Handler_Handlers.end())
|
|
172
186
|
{
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
itproc != ehpl->end();
|
|
176
|
-
itproc++)
|
|
187
|
+
auto itproc = itevh->second.find(proc_cb);
|
|
188
|
+
if (itproc != itevh->second.end())
|
|
177
189
|
{
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
ehpl->erase(itproc);
|
|
181
|
-
return;
|
|
182
|
-
}
|
|
190
|
+
itevh->second.erase(itproc);
|
|
191
|
+
return;
|
|
183
192
|
}
|
|
184
193
|
}
|
|
185
194
|
}
|
|
@@ -187,16 +196,11 @@ module WXRuby3
|
|
|
187
196
|
// Called by App's mark function; protect all currently needed procs
|
|
188
197
|
void wxRuby_MarkProtectedEvtHandlerProcs()
|
|
189
198
|
{
|
|
190
|
-
|
|
191
|
-
for( it = Evt_Handler_Handlers.begin();
|
|
192
|
-
it != Evt_Handler_Handlers.end();
|
|
193
|
-
++it )
|
|
199
|
+
for(const auto& ehp :_s__Evt_Handler_Handlers )
|
|
194
200
|
{
|
|
195
|
-
for (
|
|
196
|
-
itproc != it->second->end();
|
|
197
|
-
itproc++)
|
|
201
|
+
for (const wxRbCallback* rb_cp : ehp.second)
|
|
198
202
|
{
|
|
199
|
-
rb_gc_mark(
|
|
203
|
+
rb_gc_mark(rb_cp->m_func);
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
206
|
}
|
|
@@ -206,10 +210,10 @@ module WXRuby3
|
|
|
206
210
|
// swig/mark_free_impl.i
|
|
207
211
|
WXRUBY_EXPORT void wxRuby_ReleaseEvtHandlerProcs(void* evt_handler)
|
|
208
212
|
{
|
|
209
|
-
|
|
213
|
+
auto itevh = _s__Evt_Handler_Handlers.find(evt_handler);
|
|
214
|
+
if (itevh != _s__Evt_Handler_Handlers.end())
|
|
210
215
|
{
|
|
211
|
-
|
|
212
|
-
Evt_Handler_Handlers.erase(evt_handler);
|
|
216
|
+
_s__Evt_Handler_Handlers.erase(itevh);
|
|
213
217
|
}
|
|
214
218
|
}
|
|
215
219
|
|
|
@@ -147,28 +147,34 @@ module WXRuby3
|
|
|
147
147
|
static WxRuby_ID ios_close_id("close");
|
|
148
148
|
|
|
149
149
|
// Mapping of wxStreamBase* to Ruby IO VALUE
|
|
150
|
-
WX_DECLARE_VOIDPTR_HASH_MAP(VALUE,
|
|
151
|
-
WXRBStreamBaseToRbValueHash);
|
|
152
|
-
static WXRBStreamBaseToRbValueHash Stream_Value_Map;
|
|
153
150
|
|
|
154
|
-
|
|
151
|
+
// tracking category
|
|
152
|
+
static const std::string WXRUBY_RUBY_IO_STREAMS = {"WXRUBY_RUBY_IO_STREAMS"};
|
|
153
|
+
|
|
154
|
+
static void wxRuby_markRbStreams(const TGCTrackingValueMap& values)
|
|
155
155
|
{
|
|
156
|
-
|
|
157
|
-
for( it = Stream_Value_Map.begin(); it != Stream_Value_Map.end(); ++it )
|
|
156
|
+
for(const auto& ti : values)
|
|
158
157
|
{
|
|
159
|
-
VALUE obj =
|
|
158
|
+
VALUE obj = ti.second;
|
|
160
159
|
rb_gc_mark(obj);
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
|
|
164
163
|
static void wxRuby_RegisterStream(void* ptr, VALUE rbval)
|
|
165
164
|
{
|
|
166
|
-
|
|
165
|
+
static bool is_marker_registered = false;
|
|
166
|
+
|
|
167
|
+
if (!is_marker_registered)
|
|
168
|
+
{
|
|
169
|
+
wxRuby_RegisterTrackingCategory(WXRUBY_RUBY_IO_STREAMS, wxRuby_markRbStreams);
|
|
170
|
+
is_marker_registered = true;
|
|
171
|
+
}
|
|
172
|
+
wxRuby_RegisterCategoryValue(WXRUBY_RUBY_IO_STREAMS, ptr, rbval);
|
|
167
173
|
}
|
|
168
174
|
|
|
169
175
|
static void wxRuby_UnregisterStream(void* ptr)
|
|
170
176
|
{
|
|
171
|
-
|
|
177
|
+
wxRuby_UnregisterCategoryValue(WXRUBY_RUBY_IO_STREAMS, ptr);
|
|
172
178
|
}
|
|
173
179
|
|
|
174
180
|
// Implementation for wxRubyInputStream
|
|
@@ -373,7 +379,6 @@ module WXRuby3
|
|
|
373
379
|
}
|
|
374
380
|
}
|
|
375
381
|
__CODE
|
|
376
|
-
spec.add_init_code 'wxRuby_AppendMarker(wxRuby_markRbStreams);'
|
|
377
382
|
end
|
|
378
383
|
|
|
379
384
|
def process(gendoc: false)
|
|
@@ -83,6 +83,13 @@ module WXRuby3
|
|
|
83
83
|
return Qnil;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
// Log a Wx error Message to the current Wx log output and abort
|
|
87
|
+
static VALUE log_fatal_error(int argc, VALUE *argv, VALUE self)
|
|
88
|
+
{
|
|
89
|
+
do_log(wxLOG_FatalError, argc, argv);
|
|
90
|
+
return Qnil;
|
|
91
|
+
}
|
|
92
|
+
|
|
86
93
|
// Log a Wx low prio Message to the current Wx log output
|
|
87
94
|
static VALUE log_info(int argc, VALUE *argv, VALUE self)
|
|
88
95
|
{
|
|
@@ -264,6 +271,7 @@ module WXRuby3
|
|
|
264
271
|
spec.add_init_code <<~__HEREDOC
|
|
265
272
|
rb_define_module_function(mWxFunctions, "log_generic", VALUEFUNC(log_generic), -1);
|
|
266
273
|
rb_define_module_function(mWxFunctions, "log_info", VALUEFUNC(log_info), -1);
|
|
274
|
+
rb_define_module_function(mWxFunctions, "log_fatal_error", VALUEFUNC(log_info), -1);
|
|
267
275
|
rb_define_module_function(mWxFunctions, "log_verbose", VALUEFUNC(log_verbose), -1);
|
|
268
276
|
rb_define_module_function(mWxFunctions, "log_message", VALUEFUNC(log_message), -1);
|
|
269
277
|
rb_define_module_function(mWxFunctions, "log_warning", VALUEFUNC(log_warning), -1);
|
|
@@ -39,9 +39,7 @@ module WXRuby3
|
|
|
39
39
|
spec.ignore('wxGridCellAttr::GetEditorPtr',
|
|
40
40
|
'wxGridCellAttr::GetRendererPtr')
|
|
41
41
|
# these require wxRuby to take ownership (ref counted)
|
|
42
|
-
spec.new_object('wxGridCellAttr::Clone'
|
|
43
|
-
'wxGridCellAttr::GetEditor',
|
|
44
|
-
'wxGridCellAttr::GetRenderer')
|
|
42
|
+
spec.new_object('wxGridCellAttr::Clone')
|
|
45
43
|
# type mapping for wxGridCellEditor* return ref
|
|
46
44
|
spec.map 'wxGridCellEditor*' => 'Wx::GRID::GridCellEditor' do
|
|
47
45
|
add_header_code 'extern VALUE wxRuby_WrapWxGridCellEditorInRuby(const wxGridCellEditor *wx_gce);',
|
|
@@ -39,6 +39,9 @@ module WXRuby3
|
|
|
39
39
|
VALUE rb_gce = wxRuby_GridCellEditorInstance(const_cast<wxGridCellEditor*> (wx_gce));
|
|
40
40
|
if (rb_gce && !NIL_P(rb_gce))
|
|
41
41
|
{
|
|
42
|
+
// as this editor got passed from C++ it wll have incremented it's reference counter
|
|
43
|
+
// decrease that here; if we pass it back to C++ we will increase there
|
|
44
|
+
const_cast<wxGridCellEditor*> (wx_gce)->DecRef();
|
|
42
45
|
return rb_gce;
|
|
43
46
|
}
|
|
44
47
|
|
|
@@ -98,19 +101,24 @@ module WXRuby3
|
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
// Otherwise, retrieve the swig type info for this class and wrap it
|
|
101
|
-
// in Ruby.
|
|
104
|
+
// in Ruby.
|
|
105
|
+
// As this editor was created in C++ it seems we have no registration yet
|
|
106
|
+
// but the reference counter will be at least 2 now (1 for C++ owner and 1
|
|
107
|
+
// increment for returning to us).
|
|
108
|
+
// We will now register a new Ruby object, keep it disowned and decrement
|
|
109
|
+
// for now. If passing to C++ again we will increment there.
|
|
102
110
|
// wxRuby_GetSwigTypeForClass is defined in wx.i
|
|
103
111
|
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
|
|
104
112
|
rb_gce = SWIG_NewPointerObj(const_cast<void*> (ptr), swig_type, 0);
|
|
105
113
|
wxRuby_RegisterGridCellEditor(const_cast<wxGridCellEditor*> (wx_gce), rb_gce);
|
|
114
|
+
const_cast<wxGridCellEditor*> (wx_gce)->DecRef();
|
|
106
115
|
return rb_gce;
|
|
107
116
|
}
|
|
108
117
|
|
|
109
118
|
extern void GC_free_GridCellEditor(void *ptr)
|
|
110
119
|
{
|
|
111
|
-
wxGridCellEditor* gc_edt = (wxGridCellEditor*)ptr;
|
|
112
|
-
|
|
113
|
-
gc_edt->DecRef();
|
|
120
|
+
wxGridCellEditor* gc_edt = (wxGridCellEditor*)ptr;
|
|
121
|
+
wxSafeDecRef(gc_edt);
|
|
114
122
|
}
|
|
115
123
|
__CODE
|
|
116
124
|
elsif spec.module_name == 'wxGridCellActivatableEditor'
|
|
@@ -147,7 +155,7 @@ module WXRuby3
|
|
|
147
155
|
spec.override_inheritance_chain(spec.module_name, %w[wxGridCellEditor])
|
|
148
156
|
end
|
|
149
157
|
# due to the flawed wxWidgets XML docs we need to explicitly add these here
|
|
150
|
-
# otherwise the derived editors won't be
|
|
158
|
+
# otherwise the derived editors won't be allocatable due to pure virtuals
|
|
151
159
|
spec.extend_interface spec.module_name,
|
|
152
160
|
'void BeginEdit(int row, int col, wxGrid *grid)',
|
|
153
161
|
'wxGridCellEditor * Clone() const',
|
|
@@ -157,13 +165,7 @@ module WXRuby3
|
|
|
157
165
|
'void Reset()',
|
|
158
166
|
'wxString GetValue() const'
|
|
159
167
|
end
|
|
160
|
-
|
|
161
|
-
# type mapping for Clone return ref
|
|
162
|
-
spec.map 'wxGridCellEditor*' => 'Wx::GRID::GridCellEditor' do
|
|
163
|
-
add_header_code 'extern VALUE wxRuby_WrapWxGridCellEditorInRuby(const wxGridCellEditor *wx_gce);'
|
|
164
|
-
map_out code: '$result = wxRuby_WrapWxGridCellEditorInRuby($1);'
|
|
165
|
-
end
|
|
166
|
-
end
|
|
168
|
+
spec.new_object "#{spec.module_name}::Clone"
|
|
167
169
|
# handled; can be suppressed
|
|
168
170
|
spec.suppress_warning(473, "#{spec.module_name}::Clone")
|
|
169
171
|
end
|
|
@@ -38,6 +38,9 @@ module WXRuby3
|
|
|
38
38
|
VALUE rb_gcr = wxRuby_GridCellRendererInstance(const_cast<wxGridCellRenderer*> (wx_gcr));
|
|
39
39
|
if (rb_gcr && !NIL_P(rb_gcr))
|
|
40
40
|
{
|
|
41
|
+
// as this renderer got passed from C++ it wll have incremented it's reference counter
|
|
42
|
+
// decrease that here; if we pass it back to C++ we will increase there
|
|
43
|
+
const_cast<wxGridCellRenderer*> (wx_gcr)->DecRef();
|
|
41
44
|
return rb_gcr;
|
|
42
45
|
}
|
|
43
46
|
|
|
@@ -94,11 +97,17 @@ module WXRuby3
|
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
// Otherwise, retrieve the swig type info for this class and wrap it
|
|
97
|
-
// in Ruby.
|
|
100
|
+
// in Ruby.
|
|
101
|
+
// As this renderer was created in C++ it seems we have no registration yet
|
|
102
|
+
// but the reference counter will be at least 2 now (1 for C++ owner and 1
|
|
103
|
+
// increment for returning to us).
|
|
104
|
+
// We will now register a new Ruby object, keep it disowned and decrement
|
|
105
|
+
// for now. If passing to C++ again we will increment there.
|
|
98
106
|
// wxRuby_GetSwigTypeForClass is defined in wx.i
|
|
99
107
|
swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(r_class);
|
|
100
108
|
rb_gcr = SWIG_NewPointerObj(const_cast<void*> (ptr), swig_type, 0);
|
|
101
109
|
wxRuby_RegisterGridCellRenderer(const_cast<wxGridCellRenderer*> (wx_gcr), rb_gcr);
|
|
110
|
+
const_cast<wxGridCellRenderer*> (wx_gcr)->DecRef();
|
|
102
111
|
return rb_gcr;
|
|
103
112
|
}
|
|
104
113
|
|
|
@@ -126,13 +135,7 @@ module WXRuby3
|
|
|
126
135
|
'virtual wxSize GetBestSize(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc, int row, int col)'
|
|
127
136
|
spec.force_proxy spec.module_name
|
|
128
137
|
end
|
|
129
|
-
|
|
130
|
-
# type mapping for Clone return ref
|
|
131
|
-
spec.map 'wxGridCellRenderer*' => 'Wx::GRID::GridCellRenderer' do
|
|
132
|
-
add_header_code 'extern VALUE wxRuby_WrapWxGridCellRendererInRuby(const wxGridCellRenderer *wx_gcr);'
|
|
133
|
-
map_out code: '$result = wxRuby_WrapWxGridCellRendererInRuby($1);'
|
|
134
|
-
end
|
|
135
|
-
end
|
|
138
|
+
spec.new_object "#{spec.module_name}::Clone"
|
|
136
139
|
# handled; can be suppressed
|
|
137
140
|
spec.suppress_warning(473, "#{spec.module_name}::Clone")
|
|
138
141
|
end
|