wxruby3 0.9.0 → 0.9.2

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.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/ext/wxruby3/include/wxRubyApp.h +338 -0
  4. data/ext/wxruby3/include/wxruby-Config.h +6 -6
  5. data/ext/wxruby3/include/wxruby-runtime.h +3 -0
  6. data/ext/wxruby3/swig/common.i +22 -0
  7. data/ext/wxruby3/swig/custom/director.swg +296 -0
  8. data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
  9. data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
  10. data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
  11. data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
  12. data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
  13. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
  14. data/ext/wxruby3/swig/wx.i +50 -30
  15. data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
  16. data/lib/wx/aui/auinotebook.rb +6 -2
  17. data/lib/wx/aui/require.rb +1 -0
  18. data/lib/wx/core/app.rb +2 -2
  19. data/lib/wx/core/collapsible_pane.rb +1 -1
  20. data/lib/wx/core/const.rb +83 -0
  21. data/lib/wx/core/controlwithitems.rb +8 -6
  22. data/lib/wx/core/menu.rb +10 -0
  23. data/lib/wx/core/notebook.rb +6 -2
  24. data/lib/wx/core/sizer.rb +11 -0
  25. data/lib/wx/core/task_bar_button.rb +19 -0
  26. data/lib/wx/core/textctrl.rb +11 -1
  27. data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
  28. data/lib/wx/core/window.rb +10 -0
  29. data/lib/wx/doc/app.rb +48 -38
  30. data/lib/wx/doc/art_locator.rb +47 -43
  31. data/lib/wx/doc/aui/auimanager.rb +16 -8
  32. data/lib/wx/doc/aui/auinotebook.rb +20 -5
  33. data/lib/wx/doc/clipboard.rb +11 -7
  34. data/lib/wx/doc/colour_dialog.rb +14 -10
  35. data/lib/wx/doc/const.rb +66 -66
  36. data/lib/wx/doc/controlwithitems.rb +17 -7
  37. data/lib/wx/doc/data_object.rb +2 -2
  38. data/lib/wx/doc/event.rb +0 -6
  39. data/lib/wx/doc/evthandler.rb +113 -108
  40. data/lib/wx/doc/font.rb +1 -0
  41. data/lib/wx/doc/functions.rb +9 -9
  42. data/lib/wx/doc/gc_dc.rb +6 -1
  43. data/lib/wx/doc/graphics_context.rb +1 -0
  44. data/lib/wx/doc/grid/grid.rb +22 -1
  45. data/lib/wx/doc/help_controller.rb +11 -7
  46. data/lib/wx/doc/html/html_help_controller.rb +12 -4
  47. data/lib/wx/doc/list_ctrl.rb +33 -29
  48. data/lib/wx/doc/menu.rb +20 -0
  49. data/lib/wx/doc/notebook.rb +21 -0
  50. data/lib/wx/doc/pg/events.rb +13 -9
  51. data/lib/wx/doc/pg/pg_property.rb +18 -0
  52. data/lib/wx/doc/progress_dialog.rb +36 -32
  53. data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
  54. data/lib/wx/doc/prt/print_data.rb +13 -5
  55. data/lib/wx/doc/prt/print_dialog.rb +31 -23
  56. data/lib/wx/doc/prt/printer.rb +20 -12
  57. data/lib/wx/doc/radio_box.rb +19 -15
  58. data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
  59. data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
  60. data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
  61. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
  62. data/lib/wx/doc/region_iterator.rb +32 -28
  63. data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
  64. data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
  65. data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
  66. data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
  67. data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
  68. data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
  69. data/lib/wx/doc/sizer.rb +20 -0
  70. data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
  71. data/lib/wx/doc/stream.rb +39 -35
  72. data/lib/wx/doc/system_settings.rb +30 -26
  73. data/lib/wx/doc/text_validator.rb +12 -8
  74. data/lib/wx/doc/textctrl.rb +16 -0
  75. data/lib/wx/doc/tree_ctrl.rb +95 -0
  76. data/lib/wx/doc/treebook.rb +9 -5
  77. data/lib/wx/doc/v_list_box.rb +9 -5
  78. data/lib/wx/doc/variant.rb +164 -160
  79. data/lib/wx/doc/window.rb +57 -42
  80. data/lib/wx/doc/window_disabler.rb +10 -6
  81. data/lib/wx/grid/grid.rb +27 -4
  82. data/lib/wx/keyword_defs.rb +43 -6
  83. data/lib/wx/pg/pg_property.rb +22 -0
  84. data/lib/wx/rtc/require.rb +3 -0
  85. data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
  86. data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
  87. data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
  88. data/lib/wx/stc/require.rb +1 -0
  89. data/lib/wx/stc/styled_text_ctrl.rb +25 -0
  90. data/lib/wx/version.rb +1 -1
  91. data/rakelib/lib/config/linux.rb +0 -3
  92. data/rakelib/lib/config/macosx.rb +1 -1
  93. data/rakelib/lib/config/mingw.rb +1 -1
  94. data/rakelib/lib/config/unixish.rb +1 -1
  95. data/rakelib/lib/config.rb +14 -4
  96. data/rakelib/lib/core/include/funcall.inc +33 -14
  97. data/rakelib/lib/core/include/swigdirector.inc +384 -0
  98. data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
  99. data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
  100. data/rakelib/lib/core/include/swigrun.inc +700 -0
  101. data/rakelib/lib/core/package.rb +19 -9
  102. data/rakelib/lib/core/parameter.rb +3 -0
  103. data/rakelib/lib/core/spec.rb +6 -1
  104. data/rakelib/lib/director/accelerator.rb +3 -4
  105. data/rakelib/lib/director/accessible.rb +47 -0
  106. data/rakelib/lib/director/animation.rb +1 -1
  107. data/rakelib/lib/director/animation_ctrl.rb +20 -0
  108. data/rakelib/lib/director/app.rb +15 -304
  109. data/rakelib/lib/director/app_traits.rb +10 -12
  110. data/rakelib/lib/director/art_provider.rb +1 -1
  111. data/rakelib/lib/director/ctrl_with_items.rb +17 -5
  112. data/rakelib/lib/director/data_format.rb +1 -1
  113. data/rakelib/lib/director/data_object_simple_base.rb +1 -2
  114. data/rakelib/lib/director/derived_dc.rb +1 -1
  115. data/rakelib/lib/director/dialog.rb +6 -0
  116. data/rakelib/lib/director/dialup_event.rb +44 -0
  117. data/rakelib/lib/director/dialup_manager.rb +45 -0
  118. data/rakelib/lib/director/drag_image.rb +2 -3
  119. data/rakelib/lib/director/event.rb +22 -4
  120. data/rakelib/lib/director/file_ctrl.rb +35 -0
  121. data/rakelib/lib/director/file_ctrl_event.rb +26 -0
  122. data/rakelib/lib/director/frame.rb +1 -3
  123. data/rakelib/lib/director/gdicommon.rb +27 -11
  124. data/rakelib/lib/director/graphics_context.rb +2 -4
  125. data/rakelib/lib/director/grid_cell_editor.rb +6 -6
  126. data/rakelib/lib/director/grid_ctrl.rb +34 -3
  127. data/rakelib/lib/director/help_controller.rb +1 -1
  128. data/rakelib/lib/director/icon.rb +5 -2
  129. data/rakelib/lib/director/list_ctrl.rb +5 -6
  130. data/rakelib/lib/director/locale.rb +1 -3
  131. data/rakelib/lib/director/log.rb +1 -4
  132. data/rakelib/lib/director/media_ctrl.rb +54 -0
  133. data/rakelib/lib/director/menu.rb +16 -1
  134. data/rakelib/lib/director/menu_item.rb +2 -2
  135. data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
  136. data/rakelib/lib/director/pgeditor.rb +2 -2
  137. data/rakelib/lib/director/pgproperties.rb +3 -3
  138. data/rakelib/lib/director/pgproperty.rb +24 -1
  139. data/rakelib/lib/director/property_grid_interface.rb +5 -10
  140. data/rakelib/lib/director/richtext_buffer.rb +1 -1
  141. data/rakelib/lib/director/richtext_composite_object.rb +25 -0
  142. data/rakelib/lib/director/richtext_ctrl.rb +15 -5
  143. data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
  144. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
  145. data/rakelib/lib/director/sash_event.rb +42 -0
  146. data/rakelib/lib/director/sizer.rb +79 -1
  147. data/rakelib/lib/director/sizer_item.rb +22 -0
  148. data/rakelib/lib/director/static_box.rb +4 -5
  149. data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
  150. data/rakelib/lib/director/task_bar_button.rb +30 -0
  151. data/rakelib/lib/director/task_bar_icon.rb +6 -14
  152. data/rakelib/lib/director/textctrl.rb +12 -1
  153. data/rakelib/lib/director/tool_tip.rb +1 -1
  154. data/rakelib/lib/director/top_level_window.rb +4 -5
  155. data/rakelib/lib/director/tree_ctrl.rb +24 -50
  156. data/rakelib/lib/director/variant.rb +1 -1
  157. data/rakelib/lib/director/window.rb +24 -5
  158. data/rakelib/lib/director.rb +4 -4
  159. data/rakelib/lib/extractor/function.rb +6 -6
  160. data/rakelib/lib/extractor.rb +34 -5
  161. data/rakelib/lib/generate/analyzer.rb +8 -3
  162. data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
  163. data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
  164. data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
  165. data/rakelib/lib/generate/doc/cursor.yaml +0 -2
  166. data/rakelib/lib/generate/doc/events.yaml +10 -4
  167. data/rakelib/lib/generate/doc/panel.yaml +7 -0
  168. data/rakelib/lib/generate/doc/static_box.yaml +8 -0
  169. data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
  170. data/rakelib/lib/generate/doc.rb +89 -16
  171. data/rakelib/lib/generate/interface.rb +4 -3
  172. data/rakelib/lib/specs/interfaces.rb +161 -156
  173. data/rakelib/lib/swig_runner.rb +4 -50
  174. data/rakelib/lib/typemap/common.rb +54 -10
  175. data/rakelib/lib/typemap/data_format.rb +1 -1
  176. data/rakelib/lib/typemap/data_object_data.rb +2 -2
  177. data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
  178. data/rakelib/lib/typemap/points_list.rb +5 -7
  179. data/rakelib/lib/util/string.rb +10 -8
  180. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
  181. data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
  182. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
  183. data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
  184. data/rakelib/yard/templates/default/tags/setup.rb +16 -0
  185. data/rakelib/yard/yard-custom-templates.rb +3 -0
  186. data/samples/text/richtext.rb +0 -30
  187. data/samples/treectrl/treectrl.rb +1 -1
  188. data/tests/media/beep_lo.wav +0 -0
  189. data/tests/test_app_exit_exception.rb +36 -0
  190. data/tests/test_app_init_exception.rb +20 -0
  191. data/tests/test_book_controls.rb +29 -0
  192. data/tests/test_exceptions.rb +41 -0
  193. data/tests/test_list_ctrl.rb +1 -1
  194. data/tests/test_media_ctrl.rb +38 -0
  195. data/tests/test_menu.rb +69 -0
  196. data/tests/test_pg.rb +27 -0
  197. data/tests/test_richtext.rb +45 -0
  198. data/tests/test_sizer.rb +59 -0
  199. data/tests/test_std_controls.rb +78 -1
  200. data/tests/test_styled_text_ctrl.rb +46 -0
  201. data/tests/test_tree_ctrl.rb +138 -0
  202. data/tests/test_window.rb +12 -0
  203. data/tests/testapp_noframe.rb +1 -1
  204. metadata +54 -5
  205. data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -215,7 +215,7 @@ module WXRuby3
215
215
  if ( TYPE($input) == T_DATA )
216
216
  {
217
217
  void* argp$argnum;
218
- SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 1 );
218
+ SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 0);
219
219
  $1 = reinterpret_cast< $1_basetype * >(argp$argnum);
220
220
  }
221
221
  else if ( TYPE($input) == T_ARRAY )
@@ -240,6 +240,28 @@ module WXRuby3
240
240
  __CODE
241
241
  end
242
242
 
243
+ map 'wxSize' => 'Array(Integer, Integer), Wx::Size',
244
+ 'wxPoint' => 'Array(Integer, Integer), Wx::Point' do
245
+
246
+ map_directorout code: <<~__CODE
247
+ if (TYPE($input) == T_ARRAY && RARRAY_LEN($input) == 2)
248
+ {
249
+ $result = $1_basetype(NUM2INT( rb_ary_entry($input, 0)),
250
+ NUM2INT( rb_ary_entry($input, 1)));
251
+ }
252
+ else
253
+ {
254
+ void *ptr;
255
+ int res = SWIG_ConvertPtr($input, &ptr, $&1_descriptor, SWIG_POINTER_NO_NULL);
256
+ if (!SWIG_IsOK(res)) {
257
+ Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", SWIG_ErrorType(SWIG_ArgError(res)), "in output value of type '""$1_type""'");
258
+ }
259
+ $result = *(reinterpret_cast< $1_type * >(ptr));
260
+ }
261
+ __CODE
262
+
263
+ end
264
+
243
265
  # Integer <> wxItemKind type mappings
244
266
 
245
267
  map 'wxItemKind' => 'Integer' do
@@ -414,6 +436,35 @@ module WXRuby3
414
436
  # do not seem to be virtual methods returning that
415
437
  end
416
438
 
439
+ # const wxVector<int>&
440
+
441
+ map 'const wxVector<int>&' => 'Array<Integer>' do
442
+ map_in temp: 'wxVector<int> tmp', code: <<~__CODE
443
+ if (($input == Qnil) || (TYPE($input) != T_ARRAY))
444
+ {
445
+ VALUE dump = rb_inspect($input);
446
+ rb_raise(rb_eArgError, "expected Array of Integer for %d but got %s",
447
+ $argnum-1, StringValuePtr(dump));
448
+ }
449
+ else
450
+ {
451
+ for (int i = 0; i < RARRAY_LEN($input); i++)
452
+ {
453
+ tmp.push_back(NUM2INT(rb_ary_entry($input,i)));
454
+ }
455
+ $1 = &tmp;
456
+ }
457
+ __CODE
458
+ map_directorin code: <<~__CODE
459
+ $input = rb_ary_new();
460
+ for (size_t i = 0; i < $1.size(); i++)
461
+ {
462
+ rb_ary_push($input,INT2NUM( $1[i] ) );
463
+ }
464
+ __CODE
465
+ map_typecheck precedence: 'INT32_ARRAY', code: '$1 = (TYPE($input) == T_ARRAY);'
466
+ end
467
+
417
468
  # various enumerator type mappings
418
469
 
419
470
  map *%w[wxEdge wxRelationship wxKeyCode], as: 'Integer' do
@@ -456,12 +507,10 @@ module WXRuby3
456
507
  end
457
508
 
458
509
 
459
- # Validators must be cast to correct subclass, but internal validator
460
- # is a clone, and should not be freed, so disown after wrapping.
510
+ # Validators must be cast to correct subclass, but not owned
461
511
  map 'wxValidator*' => 'Wx::Validator' do
462
512
  map_out code: <<~__CODE
463
513
  $result = wxRuby_WrapWxObjectInRuby($1);
464
- if (!NIL_P($result)) RDATA($result)->dfree = SWIG_RubyRemoveTracking;
465
514
  __CODE
466
515
  end
467
516
 
@@ -633,14 +682,9 @@ module WXRuby3
633
682
  end
634
683
  end
635
684
 
636
- # special case bc SWIG causes trouble in Window.cpp
637
- map 'const wxRegion&', 'const wxRegion*', as: 'Wx::Region' do
638
- map_out code: '$result = wxRuby_WrapWxObjectInRuby(new wxRegion(*static_cast<const wxRegion*> ($1)));'
639
- end
640
-
641
685
  # add type mapping for wxVariant input args
642
686
  intypes = 'nil,String,Integer,Float,Time,Wx::Font,Wx::Colour,Wx::Variant,Array<WxVariant>,Array<String>,Object'
643
- if Config.instance.features_set?('wxUSE_PROPGRID')
687
+ if Config.instance.features_set?('USE_PROPGRID')
644
688
  intypes << 'Wx::PG::ColourPropertyValue'
645
689
  end
646
690
  map 'const wxVariant&' => intypes do
@@ -63,7 +63,7 @@ module WXRuby3
63
63
  void* tmp;
64
64
  SWIG_ConvertPtr(rb_ary_entry(result, i),
65
65
  &tmp,
66
- SWIGTYPE_p_wxDataFormat, 0);
66
+ SWIGTYPE_p_wxDataFormat, 0);
67
67
  wxDataFormat* fmt = reinterpret_cast< wxDataFormat* >(tmp);
68
68
  $1[i] = *fmt;
69
69
  }
@@ -30,7 +30,7 @@ module WXRuby3
30
30
  void* argp$argnum = NULL;
31
31
  if ( TYPE($input) == T_DATA )
32
32
  {
33
- if (SWIG_IsOK(SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, $argnum-1)) && argp$argnum)
33
+ if (SWIG_IsOK(SWIG_ConvertPtr($input, &argp$argnum, $1_descriptor, 0)) && argp$argnum)
34
34
  {
35
35
  $1 = reinterpret_cast< $1_basetype * >(argp$argnum);
36
36
  }
@@ -69,7 +69,7 @@ module WXRuby3
69
69
  }
70
70
  else
71
71
  {
72
- Swig::DirectorTypeMismatchException::raise(rb_eTypeError,
72
+ Swig::DirectorTypeMismatchException::raise(swig_get_self(), "$symname", rb_eTypeError,
73
73
  "get_data_here should return a string, or nil on failure");
74
74
  }
75
75
  }
@@ -20,6 +20,11 @@ module WXRuby3
20
20
  define do
21
21
 
22
22
  map 'const wxPGPropArgCls&' => 'String,Wx::PG::PGProperty' do
23
+
24
+ add_header_code <<~__CODE
25
+ static WxRuby_ID s_pg_property_id("PGProperty");
26
+ __CODE
27
+
23
28
  map_in temp: 'wxPGPropArgCls temp = (wxPGProperty *)0', code: <<~__CODE
24
29
  if (!NIL_P($input))
25
30
  {
@@ -29,12 +34,12 @@ module WXRuby3
29
34
  }
30
35
  else if (TYPE($input) == T_DATA)
31
36
  {
32
- VALUE rb_klass = rb_const_get(mWxPG, rb_intern("PGProperty"));
37
+ VALUE rb_klass = rb_const_get(mWxPG, s_pg_property_id());
33
38
  if (rb_obj_is_kind_of($input, rb_klass))
34
39
  {
35
40
  swig_type_info* swig_type = wxRuby_GetSwigTypeForClass(rb_klass);
36
41
  wxPGProperty *pgprop = (wxPGProperty *)0;
37
- SWIG_ConvertPtr($input, SWIG_as_voidptrptr(&pgprop), swig_type, SWIG_POINTER_DISOWN);
42
+ SWIG_ConvertPtr($input, SWIG_as_voidptrptr(&pgprop), swig_type, 0);
38
43
  temp = wxPGPropArgCls(pgprop);
39
44
  }
40
45
  else
@@ -29,28 +29,26 @@ module WXRuby3
29
29
  add_header_code <<~__CODE
30
30
  static void wxRuby_PointArrayRubyToC(VALUE rb_arr, wxPoint wx_arr[])
31
31
  {
32
- wxPoint *wx_point;
33
32
  VALUE rb_item;
34
33
  for (int i = 0; i < RARRAY_LEN(rb_arr); i++)
35
34
  {
36
35
  rb_item = rb_ary_entry (rb_arr, i);
37
36
  if (TYPE(rb_item) == T_DATA)
38
37
  {
38
+ wxPoint *wx_point;
39
39
  SWIG_ConvertPtr (rb_item, (void **) &wx_point,
40
- SWIGTYPE_p_wxPoint, 1);
40
+ SWIGTYPE_p_wxPoint, 0);
41
+ wx_arr[i] = *wx_point;
41
42
  }
42
43
  else if (TYPE(rb_item) == T_ARRAY && RARRAY_LEN(rb_item) == 2)
43
44
  {
44
- wx_point = new wxPoint (NUM2INT( rb_ary_entry(rb_item, 0)),
45
- NUM2INT(rb_ary_entry (rb_item, 1)));
46
- // Create a ruby object so the C++ obj is freed when GC runs
47
- SWIG_NewPointerObj (wx_point, SWIGTYPE_p_wxPoint, 1);
45
+ wx_arr[i] = wxPoint (NUM2INT( rb_ary_entry(rb_item, 0)),
46
+ NUM2INT(rb_ary_entry (rb_item, 1)));
48
47
  }
49
48
  else
50
49
  {
51
50
  rb_raise(rb_eTypeError, "Wrong type for wxPoint parameter %i", i);
52
51
  }
53
- wx_arr[i] = *wx_point;
54
52
  }
55
53
  }
56
54
  __CODE
@@ -91,14 +91,18 @@ module WXRuby3
91
91
  end
92
92
 
93
93
  def rb_constant_value(name)
94
- val = name.sub(/\Awx/, 'Wx::')
95
- case val
96
- when /NULL|nullptr/
94
+ name = name.strip
95
+ case name
96
+ when /\A(null|nullptr)\Z/i
97
97
  'nil'
98
+ when /\A(true|false)\Z/i
99
+ name.downcase
98
100
  when /EmptyString/
99
101
  %q['']
102
+ when /\A\"/
103
+ name
100
104
  else
101
- val
105
+ "#{name.start_with?('wx') ? 'Wx::' : ''}#{rb_constant_name(name)}"
102
106
  end
103
107
  end
104
108
 
@@ -110,7 +114,7 @@ module WXRuby3
110
114
  ids = idstr.split('::')
111
115
  if ids.size > 1
112
116
  is_scoped = true
113
- scoped_name = rb_constant_value(ids.shift)
117
+ scoped_name = rb_wx_name(ids.shift)
114
118
  while ids.size > 1
115
119
  scoped_name << '::' << ids.shift
116
120
  end
@@ -127,7 +131,7 @@ module WXRuby3
127
131
  when 'wxString'
128
132
  '('
129
133
  else
130
- "#{rb_constant_value(idstr)}.new("
134
+ "#{idstr.start_with?('wx') ? 'Wx::' : ''}#{rb_wx_name(idstr)}.new("
131
135
  end
132
136
  end
133
137
  else
@@ -143,8 +147,6 @@ module WXRuby3
143
147
  # constant
144
148
  if /[\-\+\.\d]+/ =~ idstr
145
149
  idstr # numeric constant
146
- elsif /\A(true|false|NULL|nullptr)/ =~ idstr
147
- ($1 == 'NULL' || $1 == 'nullptr') ? 'nil' : $1
148
150
  else
149
151
  if const_xref.has_key?(rb_constant_name(idstr))
150
152
  "#{const_xref[rb_constant_name(idstr)]['mod']}::#{rb_constant_name(idstr)}"
@@ -1,7 +1,79 @@
1
1
 
2
- blockquote {
2
+ div.wxrb-note {
3
3
  background: #f7f7f9;
4
- border-left: .25em solid #e1e1e8;
4
+ border-left: .6em solid #f3ba6f;
5
+ border-radius: 3px;
5
6
  margin: 14px;
6
7
  padding-left: 14px;
8
+ padding-top: 10px;
9
+ padding-bottom: 10px;
10
+ }
11
+
12
+ div.wxrb-remark {
13
+ background: #f7f7f9;
14
+ border-left: .6em solid #f6f4ab;
15
+ border-radius: 3px;
16
+ margin: 14px;
17
+ padding-left: 14px;
18
+ padding-top: 10px;
19
+ padding-bottom: 10px;
20
+ }
21
+
22
+ div.wxrb-note p,
23
+ div.wxrb-remark p {
24
+ margin: 0;
25
+ }
26
+
27
+ div.wxrb-logo {
28
+ float: right;
29
+ padding-top: 12px;
30
+ }
31
+
32
+ div.wxrb-logo img {
33
+ vertical-align: middle;
34
+ }
35
+
36
+ div.wxrb-logo span.wxrb-name {
37
+ font-size: large;
38
+ font-weight: bold;
39
+ margin-left: 10px;
40
+ }
41
+
42
+ div.wxrb-logo span.wxrb-name a {
43
+ color: black;
44
+ }
45
+
46
+ div.wxrb-logo span.wxrb-version {
47
+ font-size: medium;
48
+ font-weight: normal;
49
+ margin-right: 15px;
50
+ }
51
+
52
+ div.wxrb-logo span.wxrb-wxver {
53
+ font-size: 0.9em;
54
+ font-weight: normal;
55
+ margin-right: 15px;
56
+ }
57
+
58
+ div.wxrb-logo table {
59
+ display: inline;
60
+ }
61
+
62
+ div.wxrb-logo table td {
63
+ margin: 0;
64
+ }
65
+
66
+ .discussion div.note {
67
+ background: #f7f7f9;
68
+ border-left: .6em solid #f3ba6f;
69
+ margin: 14px;
70
+ }
71
+
72
+ .tags span.wxrb-require {
73
+ border-radius: 5px;
74
+ border: 1px solid #E1E1E8;
75
+ padding: 0px 3px 0px 3px;
76
+ background: #f3ba6f;
77
+ font-weight: bold;
78
+ font-size: 0.9em;
7
79
  }
@@ -0,0 +1,38 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <meta charset="<%= charset %>" />
6
+ <% stylesheets_full_list.each do |stylesheet| %>
7
+ <link rel="stylesheet" href="<%= mtime_url(stylesheet) %>" type="text/css" media="screen" />
8
+ <% end %>
9
+
10
+ <% javascripts_full_list.each do |javascript| %>
11
+ <script type="text/javascript" charset="utf-8" src="<%= mtime_url(javascript) %>"></script>
12
+ <% end %>
13
+
14
+ <title><%= @list_title %></title>
15
+ <base id="base_target" target="_parent" />
16
+ </head>
17
+ <body>
18
+ <div id="content">
19
+ <div class="fixed_header">
20
+ <%= logo_and_version %>
21
+ <h1 id="full_list_header"><%= @list_title %></h1>
22
+ <div id="full_list_nav">
23
+ <% menu_lists.each do |list| %>
24
+ <span><a target="_self" href="<%= url_for_list list[:type] %>">
25
+ <%= list[:title] %>
26
+ </a></span>
27
+ <% end %>
28
+ </div>
29
+
30
+ <div id="search">Search: <input type="text" /></div>
31
+ </div>
32
+
33
+ <ul id="full_list" class="<%= @list_class || @list_type %>">
34
+ <%= erb "full_list_#{@list_type}" %>
35
+ </ul>
36
+ </div>
37
+ </body>
38
+ </html>
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ def init
4
+ # It seems YARD messes things up so that a number of classes are not properly
5
+ # registered in their enclosing namespaces.
6
+ # This hack makes sure that if that is the case we fix that here.
7
+ all_classes = Registry.all(:class)
8
+ all_classes.each do |c|
9
+ if (ns = c.namespace)
10
+ unless ns.children.any? { |nsc| nsc.path == c.path }
11
+ ns.children << c # class missing from child list of enclosing namespace -> add here
12
+ end
13
+ end
14
+ if (ns = Registry[c.namespace.path])
15
+ unless ns.children.any? { |nsc| nsc.path == c.path }
16
+ ns.children << c # class missing from child list of enclosing namespace -> add here
17
+ end
18
+ end
19
+ end
20
+ super
21
+ end
22
+
23
+ def stylesheets_full_list
24
+ super + %w(css/wxruby3.css)
25
+ end
26
+
27
+ def logo_and_version
28
+ wxver = Registry['Wx::WXRUBY_VERSION']
29
+ wxwver = Registry['Wx::WXWIDGETS_VERSION']
30
+ <<~__HTML
31
+ <div class='wxrb-logo'>
32
+ <img src='assets/logo.png' height='38'/>
33
+ <table><tbody>
34
+ <tr><td><span class='wxrb-name'><a href="https://github.com/mcorino/wxRuby3">wxRuby3</a></span></td><td><span class='wxrb-version'>Version: #{::Kernel.eval(wxver.value)}</span></td></tr>
35
+ <tr><td></td><td><span class="wxrb-wxver">(wxWidgets: #{::Kernel.eval(wxwver.value)})</span></td></tr>
36
+ </tbody></table>
37
+ </div>
38
+ __HTML
39
+ end
@@ -0,0 +1,10 @@
1
+ <% if object.has_tag?(:wxrb_require) %>
2
+ <p class="tag_title">Requires:</p>
3
+ <ul class="wxrb-require">
4
+ <% wxruby_requires.each do |req| %>
5
+ <li><div class='inline'>
6
+ <%= req.join(' or ') %>
7
+ </div></li>
8
+ <% end %>
9
+ </ul>
10
+ <% end %>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ def wxrb_require
4
+ erb('wxrb_require')
5
+ end
6
+
7
+ def wxruby_requires
8
+ object.tags(:wxrb_require).inject([]) do |list, tag|
9
+ tag.text.split(',').each do |feature|
10
+ list << feature.split('|').collect do |s|
11
+ s.split('&').collect { |ss| %Q[<span class="wxrb-require">#{ss.strip}</span>] }.join('&amp;')
12
+ end
13
+ end
14
+ list
15
+ end
16
+ end
@@ -1,2 +1,5 @@
1
1
 
2
+ YARD::Tags::Library.define_tag("Requirements", :wxrb_require)
3
+ YARD::Tags::Library.visible_tags.place(:wxrb_require).before(:author)
4
+
2
5
  YARD::Templates::Engine.register_template_path File.join(__dir__, 'templates')
@@ -1432,36 +1432,6 @@ class MyFrame < Wx::Frame
1432
1432
 
1433
1433
  end
1434
1434
 
1435
- # Forward command events to the current rich text control, if any
1436
- def try_before(event)
1437
- if event.is_command_event && !event.is_a?(Wx::ChildFocusEvent)
1438
- # Problem: we can get infinite recursion because the events
1439
- # climb back up to this frame, and repeat.
1440
- # Assume that command events don't cause another command event
1441
- # to be called, so we can rely on inCommand not being overwritten
1442
-
1443
- if MyFrame.win_id != event.id && MyFrame.event_type != event.event_type
1444
- MyFrame.event_type = event.event_type
1445
- MyFrame.win_id = event.id
1446
- focusWin = Wx.find_focus_descendant(self)
1447
- focusWin = @richTextCtrl unless focusWin
1448
-
1449
- if focusWin && focusWin.get_event_handler.process_event(event)
1450
- MyFrame.event_type = 0
1451
- MyFrame.win_id = 0
1452
- return true
1453
- end
1454
-
1455
- MyFrame.event_type = 0
1456
- MyFrame.win_id = 0
1457
- else
1458
- return false
1459
- end
1460
- end
1461
-
1462
- false
1463
- end
1464
-
1465
1435
  # Write text
1466
1436
  def write_initial_text
1467
1437
  r = @richTextCtrl
@@ -369,7 +369,7 @@ class MyTreeCtrl < Wx::TreeCtrl
369
369
  set_item_font(root_id, Wx::ITALIC_FONT)
370
370
  end
371
371
 
372
- ids = get_children(root_id)
372
+ ids = get_item_children(root_id)
373
373
 
374
374
  # make the first item blue
375
375
  set_item_text_colour(ids[0], Wx::BLUE)
Binary file
@@ -0,0 +1,36 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require 'test/unit'
6
+ require 'wx'
7
+
8
+ class TestApp < Test::Unit::TestCase
9
+
10
+ class TestFrame < Wx::Frame
11
+ def initialize
12
+ super(nil, -1, '')
13
+ evt_paint { on_paint }
14
+ end
15
+
16
+ def on_paint
17
+ paint {}
18
+ close
19
+ end
20
+ end
21
+
22
+ class TestApp < Wx::App
23
+ def on_init
24
+ TestFrame.new.show
25
+ end
26
+
27
+ def on_exit
28
+ raise RuntimeError, 'on_exit exception'
29
+ end
30
+ end
31
+
32
+ def test_self_closing_frame
33
+ assert_raise_kind_of(RuntimeError) { TestApp.run }
34
+ end
35
+
36
+ end
@@ -0,0 +1,20 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require 'test/unit'
6
+ require 'wx'
7
+
8
+ class AppInitExitExceptions < Test::Unit::TestCase
9
+
10
+ class TestApp < Wx::App
11
+ def on_init
12
+ raise RuntimeError, 'on_init exception'
13
+ end
14
+ end
15
+
16
+ def test_on_init_exception
17
+ assert_raise_kind_of(RuntimeError) { TestApp.run }
18
+ end
19
+
20
+ end
@@ -0,0 +1,29 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require_relative './lib/wxframe_runner'
6
+
7
+ class BookCtrlTests < WxRuby::Test::GUITests
8
+
9
+ def setup
10
+ super
11
+ @book = Wx::Choicebook.new(frame_win, name: 'ChoiceBook')
12
+ end
13
+
14
+ def cleanup
15
+ @book.destroy
16
+ super
17
+ GC.start
18
+ end
19
+
20
+ attr_reader :book
21
+
22
+ def test_control_sizer
23
+ btn = Wx::Button.new(book, Wx::ID_ANY, 'First')
24
+ # issue #199 : returning the control sizer should not cause it to be owned by Ruby
25
+ # because that would cause double deletes
26
+ book.get_control_sizer.add(btn, Wx::SizerFlags.new.expand.border(Wx::ALL))
27
+ end
28
+
29
+ end
@@ -0,0 +1,41 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require_relative './lib/wxframe_runner'
6
+
7
+ class DirectorExceptionTests < WxRuby::Test::GUITests
8
+
9
+ class InvalidOutputSizer < Wx::BoxSizer
10
+
11
+ def calc_min
12
+ Wx::Point.new(1,1) # expects Wx::Size
13
+ end
14
+
15
+ end
16
+
17
+ def test_invalid_output
18
+ szr = InvalidOutputSizer.new(Wx::Orientation::VERTICAL)
19
+ szr.add(Wx::Button.new(frame_win, name: 'button'), Wx::Direction::TOP)
20
+ frame_win.sizer = szr
21
+ assert_raise_kind_of(TypeError) { frame_win.layout }
22
+ frame_win.sizer = nil
23
+ end
24
+
25
+ class ExceptionSizer < Wx::BoxSizer
26
+
27
+ def calc_min
28
+ raise RuntimeError, 'AnyThing'
29
+ end
30
+
31
+ end
32
+
33
+ def test_exception_in_overload
34
+ szr = ExceptionSizer.new(Wx::Orientation::VERTICAL)
35
+ szr.add(Wx::Button.new(frame_win, name: 'button'), Wx::Direction::TOP)
36
+ frame_win.sizer = szr
37
+ assert_raise_kind_of(RuntimeError) { frame_win.layout }
38
+ frame_win.sizer = nil
39
+ end
40
+
41
+ end
@@ -4,7 +4,7 @@
4
4
 
5
5
  require_relative './lib/wxframe_runner'
6
6
 
7
- class ButtonTests < WxRuby::Test::GUITests
7
+ class ListCtrlTests < WxRuby::Test::GUITests
8
8
 
9
9
  def setup
10
10
  super
@@ -0,0 +1,38 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ require_relative './lib/wxframe_runner'
6
+
7
+ # test seems to deadlock for WXGTK
8
+ if Wx.has_feature?(:USE_MEDIACTRL)
9
+
10
+ require 'uri'
11
+
12
+ class MediaCtrlTests < WxRuby::Test::GUITests
13
+
14
+ def setup
15
+ super
16
+ @media = Wx::MediaCtrl.new(frame_win)
17
+ end
18
+
19
+ def cleanup
20
+ @media.destroy
21
+ super
22
+ end
23
+
24
+ attr_reader :media
25
+
26
+ def test_uri
27
+ # just checking if Ruby URI is properly mapped
28
+ # it doesn't seem the mediactrl returns a very consistent result whether the resource is not a media file
29
+ # or if it is a non-existing file so only check whether it is a boolean return.
30
+ uri = URI("file://#{File.join(__dir__, 'media/beep_lo.wav')}")
31
+ assert_boolean(media.load(uri))
32
+ uri = URI("file://#{File.join(__dir__, 'art/test_art/image/wxruby.png')}")
33
+ assert_boolean(media.load(uri))
34
+ end
35
+
36
+ end
37
+
38
+ end