wxruby3 0.9.0.pre.beta.13 → 0.9.0.pre.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/README.md +47 -4
  4. data/assets/hello_button.png +0 -0
  5. data/assets/hello_button_clicked.png +0 -0
  6. data/assets/hello_world.png +0 -0
  7. data/assets/repo-social-preview.png +0 -0
  8. data/ext/wxruby3/include/wxruby-runtime.h +1 -0
  9. data/ext/wxruby3/swig/memory_management.i +6 -10
  10. data/ext/wxruby3/swig/wx.i +17 -6
  11. data/lib/wx/accessors.rb +8 -2
  12. data/lib/wx/core/art_locator.rb +2 -2
  13. data/lib/wx/core/artprovider.rb +2 -2
  14. data/lib/wx/core/bitmap.rb +6 -5
  15. data/lib/wx/core/bitmap_combobox.rb +34 -0
  16. data/lib/wx/core/controlwithitems.rb +52 -14
  17. data/lib/wx/core/cursor.rb +1 -1
  18. data/lib/wx/core/dc.rb +0 -20
  19. data/lib/wx/core/event_blocker.rb +14 -0
  20. data/lib/wx/core/evthandler.rb +36 -0
  21. data/lib/wx/core/find_replace_dialog.rb +24 -0
  22. data/lib/wx/core/icon.rb +1 -1
  23. data/lib/wx/core/image.rb +1 -1
  24. data/lib/wx/core/paintdc.rb +8 -0
  25. data/lib/wx/core/text_entry.rb +15 -0
  26. data/lib/wx/core/v_list_box.rb +13 -0
  27. data/lib/wx/core/window.rb +1 -1
  28. data/lib/wx/doc/busy_info.rb +21 -0
  29. data/lib/wx/doc/client_dc.rb +28 -0
  30. data/lib/wx/doc/controlwithitems.rb +11 -0
  31. data/lib/wx/doc/dc.rb +0 -14
  32. data/lib/wx/doc/event_blocker.rb +27 -0
  33. data/lib/wx/doc/evthandler.rb +4 -0
  34. data/lib/wx/doc/extra/02_lifecycles.md +49 -0
  35. data/lib/wx/doc/extra/10_art.md +1 -1
  36. data/lib/wx/doc/extra/11_drawing_and_dc.md +62 -0
  37. data/lib/wx/doc/memory_dc.rb +75 -0
  38. data/lib/wx/doc/mirror_dc.rb +16 -0
  39. data/lib/wx/doc/prt/printer_dc.rb +26 -0
  40. data/lib/wx/doc/screen_dc.rb +10 -6
  41. data/lib/wx/doc/svg_file_dc.rb +20 -0
  42. data/lib/wx/doc/v_list_box.rb +9 -0
  43. data/lib/wx/doc/window_disabler.rb +10 -0
  44. data/lib/wx/global_const.rb +24 -18
  45. data/lib/wx/html/keyword_defs.rb +6 -7
  46. data/lib/wx/html/require.rb +1 -0
  47. data/lib/wx/html/simple_html_listbox.rb +105 -0
  48. data/lib/wx/keyword_defs.rb +7 -0
  49. data/lib/wx/version.rb +1 -1
  50. data/lib/wx/wxruby/cmd/test.rb +1 -1
  51. data/rakelib/install.rb +3 -1
  52. data/rakelib/lib/core/mapping.rb +5 -5
  53. data/rakelib/lib/core/spec.rb +7 -3
  54. data/rakelib/lib/core/spec_helper.rb +9 -1
  55. data/rakelib/lib/director/accelerator.rb +1 -1
  56. data/rakelib/lib/director/app.rb +25 -3
  57. data/rakelib/lib/director/art_provider.rb +5 -1
  58. data/rakelib/lib/director/aui_pane_info.rb +1 -1
  59. data/rakelib/lib/director/aui_tab_ctrl.rb +1 -1
  60. data/rakelib/lib/director/bitmap.rb +2 -1
  61. data/rakelib/lib/director/bitmap_combobox.rb +32 -0
  62. data/rakelib/lib/director/brush.rb +1 -0
  63. data/rakelib/lib/director/busy_info.rb +1 -1
  64. data/rakelib/lib/director/choice.rb +1 -0
  65. data/rakelib/lib/director/clipboard.rb +1 -1
  66. data/rakelib/lib/director/colour.rb +1 -0
  67. data/rakelib/lib/director/colour_picker_ctrl.rb +1 -1
  68. data/rakelib/lib/director/combobox.rb +1 -2
  69. data/rakelib/lib/director/ctrl_with_items.rb +3 -0
  70. data/rakelib/lib/director/cursor.rb +1 -0
  71. data/rakelib/lib/director/data_object.rb +5 -7
  72. data/rakelib/lib/director/dc.rb +5 -1
  73. data/rakelib/lib/director/defs.rb +3 -0
  74. data/rakelib/lib/director/derived_dc.rb +278 -27
  75. data/rakelib/lib/director/dialog.rb +4 -1
  76. data/rakelib/lib/director/dir_picker_ctrl.rb +1 -1
  77. data/rakelib/lib/director/event.rb +3 -3
  78. data/rakelib/lib/director/event_blocker.rb +41 -0
  79. data/rakelib/lib/director/event_filter.rb +20 -0
  80. data/rakelib/lib/director/event_handler.rb +29 -2
  81. data/rakelib/lib/director/file_picker_ctrl.rb +1 -1
  82. data/rakelib/lib/director/find_replace_data.rb +1 -0
  83. data/rakelib/lib/director/font.rb +2 -1
  84. data/rakelib/lib/director/font_data.rb +1 -0
  85. data/rakelib/lib/director/font_picker_ctrl.rb +1 -1
  86. data/rakelib/lib/director/gdi_object.rb +1 -0
  87. data/rakelib/lib/director/graphics_context.rb +6 -6
  88. data/rakelib/lib/director/grid_table_message.rb +1 -1
  89. data/rakelib/lib/director/html_cell.rb +1 -1
  90. data/rakelib/lib/director/html_data_object.rb +5 -7
  91. data/rakelib/lib/director/html_listbox.rb +65 -1
  92. data/rakelib/lib/director/icon.rb +2 -0
  93. data/rakelib/lib/director/listbox.rb +1 -0
  94. data/rakelib/lib/director/locale.rb +2 -1
  95. data/rakelib/lib/director/palette.rb +1 -0
  96. data/rakelib/lib/director/pen.rb +2 -1
  97. data/rakelib/lib/director/pgproperties.rb +1 -1
  98. data/rakelib/lib/director/pgproperty.rb +1 -1
  99. data/rakelib/lib/director/pgvalidation_info.rb +1 -1
  100. data/rakelib/lib/director/platform_info.rb +1 -1
  101. data/rakelib/lib/director/print_data.rb +1 -1
  102. data/rakelib/lib/director/property_grid_interface.rb +1 -1
  103. data/rakelib/lib/director/property_grid_page_state.rb +1 -1
  104. data/rakelib/lib/director/region.rb +1 -0
  105. data/rakelib/lib/director/ribbon_art_provider.rb +1 -1
  106. data/rakelib/lib/director/richtext_buffer_data_object.rb +5 -7
  107. data/rakelib/lib/director/richtext_header_footer_data.rb +1 -1
  108. data/rakelib/lib/director/searchctrl.rb +24 -0
  109. data/rakelib/lib/director/sizer.rb +2 -2
  110. data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
  111. data/rakelib/lib/director/text_entry.rb +2 -2
  112. data/rakelib/lib/director/tree_ctrl.rb +6 -3
  113. data/rakelib/lib/director/uiaction_simulator.rb +20 -0
  114. data/rakelib/lib/director/variant.rb +1 -1
  115. data/rakelib/lib/director/vlistbox.rb +25 -0
  116. data/rakelib/lib/director/window.rb +0 -6
  117. data/rakelib/lib/director/with_images.rb +1 -1
  118. data/rakelib/lib/director/xml_node.rb +1 -1
  119. data/rakelib/lib/extractor/function.rb +5 -3
  120. data/rakelib/lib/generate/doc/about_dialog_info.yaml +46 -0
  121. data/rakelib/lib/generate/doc/accelerator.yaml +21 -0
  122. data/rakelib/lib/generate/doc/art_provider.yaml +35 -0
  123. data/rakelib/lib/generate/doc/bitmap.yaml +37 -0
  124. data/rakelib/lib/generate/doc/box_sizer.yaml +15 -0
  125. data/rakelib/lib/generate/doc/busy_info.yaml +74 -0
  126. data/rakelib/lib/generate/doc/client_dc.yaml +19 -0
  127. data/rakelib/lib/generate/doc/clipboard.yaml +43 -0
  128. data/rakelib/lib/generate/doc/collapsible_pane.yaml +21 -0
  129. data/rakelib/lib/generate/doc/colour_dialog.yaml +32 -0
  130. data/rakelib/lib/generate/doc/control.yaml +46 -0
  131. data/rakelib/lib/generate/doc/cursor.yaml +40 -0
  132. data/rakelib/lib/generate/doc/data_object.yaml +55 -0
  133. data/rakelib/lib/generate/doc/dc.yaml +14 -0
  134. data/rakelib/lib/generate/doc/dialog.yaml +36 -0
  135. data/rakelib/lib/generate/doc/dir_dialog.yaml +25 -0
  136. data/rakelib/lib/generate/doc/events.yaml +152 -0
  137. data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
  138. data/rakelib/lib/generate/doc.rb +77 -14
  139. data/rakelib/lib/generate/interface.rb +11 -0
  140. data/rakelib/lib/specs/interfaces.rb +5 -4
  141. data/rakelib/lib/swig_runner.rb +3 -3
  142. data/rakelib/lib/typemap/common.rb +15 -3
  143. data/rakelib/lib/util/string.rb +1 -0
  144. data/rakelib/yard/yard/relative_markdown_links.rb +5 -1
  145. data/samples/bigdemo/wxArtProvider.rbw +5 -4
  146. data/samples/controls/controls.rb +2 -2
  147. data/samples/controls/htlbox.rb +411 -0
  148. data/samples/controls/tn_htlbox.png +0 -0
  149. data/samples/drawing/graphics_drawing.rb +1 -2
  150. data/samples/drawing/{svgtest.rb → image_prt.rb} +49 -18
  151. data/samples/drawing/tn_image_prt.png +0 -0
  152. data/samples/propgrid/propgrid.rb +23 -21
  153. data/samples/ribbon/ribbon.rb +47 -46
  154. data/tests/lib/wxapp_runner.rb +3 -3
  155. data/tests/lib/wxframe_runner.rb +59 -0
  156. data/tests/test_app_event_filter.rb +74 -0
  157. data/tests/test_art_provider.rb +52 -0
  158. data/tests/test_clipboard.rb +2 -1
  159. data/tests/test_event_handling.rb +199 -16
  160. data/tests/test_events.rb +4 -11
  161. data/tests/test_gdi_object.rb +161 -0
  162. data/tests/test_intl.rb +11 -14
  163. data/tests/test_item_data.rb +33 -1
  164. data/tests/test_std_controls.rb +147 -0
  165. metadata +56 -4
  166. data/samples/drawing/tn_svgtest.png +0 -0
@@ -223,13 +223,13 @@ module WXRuby3
223
223
  def map_to(typedef)
224
224
  if ::Hash === typedef
225
225
  typedef.each_pair do |argmasks, type|
226
- pattern = @patterns.detect { |ps| ps == argmasks }
226
+ pattern = @map.patterns.detect { |ps| ps == argmasks }
227
227
  raise "Unknown parameter set [#{argmasks}] for [#{@map}]" unless pattern
228
- @to[pattern] = type
228
+ @to[pattern] = _get_mapped_type(type)
229
229
  end
230
230
  else
231
- @patterns.inject(@to) do |map, pattern|
232
- map[pattern] = typedef
231
+ @map.patterns.inject(@to) do |map, pattern|
232
+ map[pattern] = _get_mapped_type(typedef)
233
233
  map
234
234
  end
235
235
  end
@@ -422,7 +422,7 @@ module WXRuby3
422
422
  end
423
423
 
424
424
  def map_out(ignore: nil, to: nil, temp: nil, code: nil, &block)
425
- @out = Out.new(self, ignore: ignore, to: nil, temp: temp, code: code, &block)
425
+ @out = Out.new(self, ignore: ignore, to: to, temp: temp, code: code, &block)
426
426
  end
427
427
 
428
428
  def map_freearg(temp: nil, code: nil, &block)
@@ -250,12 +250,12 @@ module WXRuby3
250
250
  self
251
251
  end
252
252
 
253
- def gc_as_temporary(*names)
253
+ def gc_as_untracked(*names)
254
254
  if names.empty?
255
- @gc_type = :GC_MANAGE_AS_TEMP
255
+ @gc_type = :GC_MANAGE_AS_UNTRACKED
256
256
  else
257
257
  @gc_type = ::Hash.new unless @gc_type.is_a?(::Hash)
258
- names.each {|n| @gc_type[n] = :GC_MANAGE_AS_TEMP }
258
+ names.each {|n| @gc_type[n] = :GC_MANAGE_AS_UNTRACKED }
259
259
  end
260
260
  self
261
261
  end
@@ -291,6 +291,10 @@ module WXRuby3
291
291
  @abstracts.has_key?(cls) && !@abstracts[cls]
292
292
  end
293
293
 
294
+ def concretes
295
+ @abstracts.keys.select { |cls| concrete?(cls) }
296
+ end
297
+
294
298
  def mixin?(cls)
295
299
  @mixins.include?(cls)
296
300
  end
@@ -153,6 +153,10 @@ module WXRuby3
153
153
  ifspec.abstract?(class_def.name) || (class_def.abstract && !ifspec.concrete?(class_def.name))
154
154
  end
155
155
 
156
+ def explicit_concretes
157
+ ifspec.concretes
158
+ end
159
+
156
160
  def mixins
157
161
  ifspec.mixins
158
162
  end
@@ -183,12 +187,16 @@ module WXRuby3
183
187
  return :GC_MANAGE_AS_SIZER if classdef.is_derived_from?('wxSizer') || classdef.name == 'wxSizer'
184
188
  return :GC_MANAGE_AS_REFCOUNTED if classdef.is_derived_from?('wxRefCounter')
185
189
  return :GC_MANAGE_AS_OBJECT if classdef.is_derived_from?('wxObject') || classdef.name == 'wxObject'
186
- return :GC_MANAGE_AS_TEMP
190
+ return :GC_MANAGE_AS_UNTRACKED
187
191
  end
188
192
  end
189
193
  ifspec.gc_type(classdef.name) || :GC_NEVER
190
194
  end
191
195
 
196
+ def is_tracked?(classdef)
197
+ gc_type(classdef) != :GC_MANAGE_AS_UNTRACKED
198
+ end
199
+
192
200
  def includes
193
201
  ifspec.includes
194
202
  end
@@ -37,7 +37,7 @@ module WXRuby3
37
37
  }
38
38
  }
39
39
  __HEREDOC
40
- spec.map 'int keyCode' => 'Integer' do
40
+ spec.map 'int keyCode' => 'Integer,String' do
41
41
  map_in code: '$1 = wxRuby_RubyStringOrIntToKeyCode($input);'
42
42
  map_typecheck precedence: 'INT32', code: <<~__CODE
43
43
  $1 = ( (TYPE($input) == T_FIXNUM) || wxRuby_IsAnEnum($input) ||
@@ -12,8 +12,8 @@ module WXRuby3
12
12
  class App < EvtHandler
13
13
 
14
14
  def setup
15
- spec.items << 'wxAppConsole'
16
- spec.fold_bases('wxApp' => 'wxAppConsole')
15
+ spec.items << 'wxAppConsole' << 'wxEventFilter'
16
+ spec.fold_bases('wxApp' => 'wxAppConsole', 'wxAppConsole' => 'wxEventFilter')
17
17
  spec.override_inheritance_chain('wxApp', %w[wxEvtHandler wxObject])
18
18
  spec.ignore %w{
19
19
  wxApp.ProcessMessage
@@ -78,6 +78,7 @@ module WXRuby3
78
78
  spec.no_proxy %w{
79
79
  wxApp::GetDisplayMode
80
80
  wxApp::GetTopWindow
81
+ wxApp::OnAssertFailure
81
82
  }
82
83
  spec.include %w{
83
84
  wx/init.h
@@ -340,7 +341,28 @@ module WXRuby3
340
341
  // actually implemented in ruby in classes/app.rb
341
342
  virtual void OnAssertFailure(const wxChar *file, int line, const wxChar *func, const wxChar *cond, const wxChar *msg)
342
343
  {
343
- std::wcout << "ASSERT fired" << std::endl;
344
+ VALUE rb_app = SWIG_RubyInstanceFor(this);
345
+ if (rb_during_gc() || NIL_P(rb_app))
346
+ {
347
+ std::wcout << file << "(" << line << "): ASSERT " << cond
348
+ << (NIL_P(rb_app) ? " fired without THE_APP in " : " fired during GC phase in ")
349
+ << func << "() with message [" << msg << "]" << std::endl;
350
+ }
351
+ else
352
+ {
353
+ VALUE obj0 = Qnil ;
354
+ VALUE obj1 = Qnil ;
355
+ VALUE obj2 = Qnil ;
356
+ VALUE obj3 = Qnil ;
357
+ VALUE obj4 = Qnil ;
358
+
359
+ obj0 = rb_str_new2((const char *)wxString(file).utf8_str());
360
+ obj1 = INT2NUM(line);
361
+ obj2 = rb_str_new2((const char *)wxString(func).utf8_str());
362
+ obj3 = rb_str_new2((const char *)wxString(cond).utf8_str());
363
+ obj4 = rb_str_new2((const char *)wxString(msg).utf8_str());
364
+ (void)wxRuby_Funcall(rb_app, rb_intern("on_assert_failure"), 5,obj0,obj1,obj2,obj3,obj4);
365
+ }
344
366
  }
345
367
 
346
368
  void _wxRuby_Cleanup()
@@ -15,7 +15,11 @@ module WXRuby3
15
15
  spec.use_class_implementation('wxArtProvider', 'wxRubyArtProvider')
16
16
  spec.ignore('wxArtProvider::Insert') # deprecated and problematic
17
17
  spec.ignore('wxArtProvider::Remove') # problematic as adding disowns the art provider, use Delete
18
- spec.no_proxy('wxArtProvider')
18
+ # regard protected methods
19
+ spec.regard 'wxArtProvider::DoGetSizeHint',
20
+ 'wxArtProvider::CreateBitmap',
21
+ 'wxArtProvider::CreateBitmapBundle',
22
+ 'wxArtProvider::CreateIconBundle'
19
23
  spec.include('wx/artprov.h')
20
24
  spec.add_swig_code <<~__HEREDOC
21
25
  // ArtId and ArtClient are basically just strings ...
@@ -11,7 +11,7 @@ module WXRuby3
11
11
 
12
12
  def setup
13
13
  spec.disable_proxies
14
- spec.gc_as_temporary
14
+ spec.gc_as_untracked
15
15
  spec.regard %w[
16
16
  wxAuiPaneInfo::name
17
17
  wxAuiPaneInfo::caption
@@ -16,7 +16,7 @@ module WXRuby3
16
16
  super
17
17
  # now replace items because wxAuiTabCtrl is actually not documented (!!!)
18
18
  spec.items.replace %w[wxAuiTabContainerButton]
19
- spec.gc_as_temporary 'wxAuiTabContainerButton'
19
+ spec.gc_as_untracked 'wxAuiTabContainerButton'
20
20
  spec.no_proxy %w[wxAuiTabCtrl wxAuiTabContainerButton]
21
21
  spec.swig_import %w[swig/classes/include/wxObject.h swig/classes/include/wxEvtHandler.h swig/classes/include/wxWindow.h swig/classes/include/wxControl.h]
22
22
  # cannot use #add_extend_code because we do not have an actual parsed XML item
@@ -11,7 +11,8 @@ module WXRuby3
11
11
 
12
12
  def setup
13
13
  spec.items << 'wxBitmapBundle' << 'wxMask'
14
- spec.gc_as_object 'wxBitmapBundle'
14
+ spec.gc_as_untracked 'wxBitmap'
15
+ spec.gc_as_untracked 'wxBitmapBundle'
15
16
  spec.require_app 'wxBitmap',
16
17
  'wxBitmapBundle',
17
18
  'wxMask'
@@ -0,0 +1,32 @@
1
+ ###
2
+ # wxRuby3 wxWidgets interface director
3
+ # Copyright (c) M.J.N. Corino, The Netherlands
4
+ ###
5
+
6
+ require_relative './ctrl_with_items'
7
+
8
+ module WXRuby3
9
+
10
+ class Director
11
+
12
+ class BitmapComboBox < ControlWithItems
13
+
14
+ def setup
15
+ super
16
+ setup_ctrl_with_items('wxBitmapComboBox')
17
+ spec.override_inheritance_chain('wxBitmapComboBox',
18
+ %w[wxComboBox
19
+ wxControlWithItems
20
+ wxControl
21
+ wxWindow
22
+ wxEvtHandler
23
+ wxObject])
24
+ spec.ignore 'wxBitmapComboBox::Insert(const wxString &, const wxBitmap &, unsigned int, wxClientData *)',
25
+ 'wxBitmapComboBox::Append(const wxString &, const wxBitmap &, wxClientData *)'
26
+ end
27
+
28
+ end # class BitmapComboBox
29
+
30
+ end # class Director
31
+
32
+ end # module WXRuby3
@@ -12,6 +12,7 @@ module WXRuby3
12
12
  def setup
13
13
  super
14
14
  spec.disable_proxies
15
+ spec.gc_as_untracked 'wxBrush'
15
16
  # all but the default ctor require a running App
16
17
  spec.require_app 'wxBrush::wxBrush(const wxColour &colour, wxBrushStyle style)',
17
18
  'wxBrush::wxBrush(const wxBitmap &stippleBitmap)',
@@ -13,7 +13,7 @@ module WXRuby3
13
13
  super
14
14
  spec.items << 'wxBusyInfoFlags'
15
15
  spec.disable_proxies
16
- spec.gc_as_temporary 'wxBusyInfo', 'wxBusyInfoFlags'
16
+ spec.gc_as_untracked 'wxBusyInfo', 'wxBusyInfoFlags'
17
17
  # again C++ type guards do not work with Ruby
18
18
  # need to Rubify this
19
19
  spec.make_abstract 'wxBusyInfo'
@@ -23,6 +23,7 @@ module WXRuby3
23
23
  # redundant with good typemaps
24
24
  spec.ignore('wxChoice::wxChoice(wxWindow *,wxWindowID,const wxPoint &,const wxSize &,int,const wxString[],long,const wxValidator &,const wxString &)')
25
25
  spec.ignore('wxChoice::Create(wxWindow *,wxWindowID,const wxPoint &,const wxSize &,int,const wxString[],long,const wxValidator &,const wxString &)')
26
+ spec.ignore('wxChoice::IsSorted') # provided by ControlWithItems
26
27
  end
27
28
 
28
29
  end # class Choice
@@ -13,7 +13,7 @@ module WXRuby3
13
13
 
14
14
  def setup
15
15
  super
16
- spec.gc_as_temporary # don't even track Clipboard objects
16
+ spec.gc_as_untracked # don't even track Clipboard objects
17
17
  # there is no need or support for clipboard derivatives
18
18
  # not least because wxRuby only ever allows a single global clipboard
19
19
  spec.disable_proxies
@@ -10,6 +10,7 @@ module WXRuby3
10
10
  class Colour < Director
11
11
 
12
12
  def setup
13
+ spec.gc_as_untracked('wxColour')
13
14
  spec.require_app 'wxColour::wxColour(const wxColour&)'
14
15
  spec.ignore(%w[
15
16
  wxColour::GetPixel wxTransparentColour wxColour::operator!=
@@ -13,7 +13,7 @@ module WXRuby3
13
13
 
14
14
  def setup
15
15
  super
16
- spec.add_swig_code '%feature("notabstract") wxColourPickerCtrl;'
16
+ spec.make_concrete 'wxColourPickerCtrl'
17
17
  spec.do_not_generate(:variables, :defines, :enums, :functions) # with ColourPickerEvent
18
18
  end
19
19
  end # class ColourPickerCtrl
@@ -22,8 +22,7 @@ module WXRuby3
22
22
  wxWindow
23
23
  wxEvtHandler
24
24
  wxObject])
25
- spec.ignore(%w[
26
- wxComboBox::IsEmpty])
25
+ spec.ignore('wxComboBox::IsEmpty') # ambiguous ControlWithItems<>TextEntry
27
26
  spec.rename_for_ruby(
28
27
  'SetTextSelectionRange' => 'wxComboBox::SetSelection(long, long)',
29
28
  'GetTextSelectionRange' => 'wxComboBox::GetSelection(long *, long *) const')
@@ -47,6 +47,9 @@ module WXRuby3
47
47
  'wxItemContainer::Append(const wxArrayString &, void **)',
48
48
  'wxItemContainer::Insert(const wxArrayString &, unsigned int, void **)',
49
49
  'wxItemContainer::Set(const wxArrayString &, void **)'], ignore_doc: false)
50
+ # add undocumented method
51
+ spec.extend_interface 'wxControlWithItems',
52
+ 'bool IsSorted() const'
50
53
  # for doc only
51
54
  spec.map 'void** clientData' => 'Array', swig: false do
52
55
  map_in code: ''
@@ -10,6 +10,7 @@ module WXRuby3
10
10
  class Cursor < Director
11
11
 
12
12
  def setup
13
+ spec.gc_as_untracked 'wxCursor'
13
14
  # all but the default ctor require a running App
14
15
  spec.require_app 'wxCursor::wxCursor(const wxString &, wxBitmapType, int, int)',
15
16
  'wxCursor::wxCursor(wxStockCursor)',
@@ -44,13 +44,11 @@ module WXRuby3
44
44
  spec.ignore 'wxTextDataObject::GetAllFormats'
45
45
 
46
46
  %w[wxDataObjectComposite wxBitmapDataObject wxFileDataObject wxTextDataObject wxImageDataObject wxURLDataObject].each do |kls|
47
- spec.add_swig_code <<~__HEREDOC
48
- // SWIG gets confused and doesn't realise that various virtual methods
49
- // from wxDataObject are implemented fully in this subclass, and so,
50
- // believing it to be abstract doesn't provide an allocator for this
51
- // class. This undocumented feature overrides this.
52
- %feature("notabstract") #{kls};
53
- __HEREDOC
47
+ # SWIG gets confused and doesn't realise that various virtual methods
48
+ # from wxDataObject are implemented fully in these subclasses, and so,
49
+ # believing it to be abstract doesn't provide an allocator for this
50
+ # class. This overrides this.
51
+ spec.make_concrete kls
54
52
  end
55
53
 
56
54
  # Once a DataObject has been added, it belongs to the wxDataObjectComposite object,
@@ -13,8 +13,12 @@ module WXRuby3
13
13
 
14
14
  def setup
15
15
  super
16
+ # it's not safe to track DC objects as these are often created on the stack in C++
17
+ # before being passed to Ruby methods
18
+ # as we cannot capture their deletion in anyway this would leave the tracked items
19
+ # registered and reused when future stack allocated DC's happen to have the same address
20
+ spec.gc_as_untracked
16
21
  spec.ignore [
17
- 'wxDC::StartPage',
18
22
  'wxDC::GetPartialTextExtents',
19
23
  'wxDC::DrawLines(const wxPointList *,wxCoord,wxCoord)',
20
24
  'wxDC::DrawPolygon(const wxPointList *,wxCoord,wxCoord,wxPolygonFillMode)',
@@ -25,6 +25,9 @@ module WXRuby3
25
25
  wxINT64_MAX
26
26
  wxUINT64_MAX
27
27
  wxVaCopy
28
+ wxDELETE
29
+ wxDELETEA
30
+ wxSwap
28
31
  }
29
32
  if Config.instance.wx_version >= '3.3.0'
30
33
  spec.ignore 'wxOVERRIDE'