wxruby3 0.9.0.pre.beta.14 → 0.9.0.pre.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/INSTALL.md +51 -22
  4. data/README.md +81 -6
  5. data/assets/hello_button-macos.png +0 -0
  6. data/assets/hello_button-msw.png +0 -0
  7. data/assets/hello_button.png +0 -0
  8. data/assets/hello_button_clicked-macos.png +0 -0
  9. data/assets/hello_button_clicked-msw.png +0 -0
  10. data/assets/hello_button_clicked.png +0 -0
  11. data/assets/hello_button_clicked_combi.png +0 -0
  12. data/assets/hello_world-macos.png +0 -0
  13. data/assets/hello_world-msw.png +0 -0
  14. data/assets/hello_world.png +0 -0
  15. data/assets/hello_world_combi.png +0 -0
  16. data/assets/repo-social-preview.png +0 -0
  17. data/ext/wxruby3/include/wxruby-runtime.h +1 -0
  18. data/ext/wxruby3/swig/memory_management.i +6 -10
  19. data/ext/wxruby3/swig/wx.i +17 -6
  20. data/lib/wx/core/art_locator.rb +2 -2
  21. data/lib/wx/core/artprovider.rb +2 -2
  22. data/lib/wx/core/bitmap.rb +6 -5
  23. data/lib/wx/core/bitmap_combobox.rb +34 -0
  24. data/lib/wx/core/brush.rb +6 -0
  25. data/lib/wx/core/controlwithitems.rb +52 -14
  26. data/lib/wx/core/cursor.rb +1 -1
  27. data/lib/wx/core/dc.rb +0 -20
  28. data/lib/wx/core/event_blocker.rb +14 -0
  29. data/lib/wx/core/evthandler.rb +48 -2
  30. data/lib/wx/core/find_replace_dialog.rb +24 -0
  31. data/lib/wx/core/font.rb +22 -14
  32. data/lib/wx/core/helpprovider.rb +2 -2
  33. data/lib/wx/core/icon.rb +1 -1
  34. data/lib/wx/core/image.rb +1 -1
  35. data/lib/wx/core/menu.rb +5 -0
  36. data/lib/wx/core/paintdc.rb +8 -0
  37. data/lib/wx/core/pen.rb +6 -0
  38. data/lib/wx/core/text_entry.rb +15 -0
  39. data/lib/wx/core/v_list_box.rb +13 -0
  40. data/lib/wx/core/window.rb +29 -2
  41. data/lib/wx/doc/app.rb +40 -0
  42. data/lib/wx/doc/brush.rb +17 -0
  43. data/lib/wx/doc/busy_info.rb +21 -0
  44. data/lib/wx/doc/client_dc.rb +28 -0
  45. data/lib/wx/doc/controlwithitems.rb +11 -0
  46. data/lib/wx/doc/dc.rb +0 -14
  47. data/lib/wx/doc/event_blocker.rb +27 -0
  48. data/lib/wx/doc/evthandler.rb +4 -0
  49. data/lib/wx/doc/extra/02_lifecycles.md +49 -0
  50. data/lib/wx/doc/extra/10_art.md +1 -1
  51. data/lib/wx/doc/extra/11_drawing_and_dc.md +62 -0
  52. data/lib/wx/doc/font.rb +27 -0
  53. data/lib/wx/doc/memory_dc.rb +75 -0
  54. data/lib/wx/doc/mirror_dc.rb +16 -0
  55. data/lib/wx/doc/pen.rb +17 -0
  56. data/lib/wx/doc/prt/printer_dc.rb +26 -0
  57. data/lib/wx/doc/radio_box.rb +20 -0
  58. data/lib/wx/doc/screen_dc.rb +10 -6
  59. data/lib/wx/doc/svg_file_dc.rb +20 -0
  60. data/lib/wx/doc/v_list_box.rb +9 -0
  61. data/lib/wx/doc/window.rb +27 -0
  62. data/lib/wx/doc/window_disabler.rb +10 -0
  63. data/lib/wx/html/keyword_defs.rb +6 -7
  64. data/lib/wx/html/require.rb +1 -0
  65. data/lib/wx/html/simple_html_listbox.rb +105 -0
  66. data/lib/wx/keyword_defs.rb +83 -75
  67. data/lib/wx/prt/keyword_defs.rb +5 -1
  68. data/lib/wx/version.rb +1 -1
  69. data/lib/wx/wxruby/cmd/test.rb +1 -1
  70. data/rakelib/install.rb +20 -7
  71. data/rakelib/lib/config/linux.rb +4 -2
  72. data/rakelib/lib/config/macosx.rb +120 -1
  73. data/rakelib/lib/config/mingw.rb +6 -1
  74. data/rakelib/lib/config/unixish.rb +26 -11
  75. data/rakelib/lib/config.rb +15 -6
  76. data/rakelib/lib/core/mapping.rb +5 -5
  77. data/rakelib/lib/core/package.rb +1 -1
  78. data/rakelib/lib/core/spec.rb +9 -5
  79. data/rakelib/lib/core/spec_helper.rb +9 -1
  80. data/rakelib/lib/director/accelerator.rb +1 -1
  81. data/rakelib/lib/director/app.rb +55 -4
  82. data/rakelib/lib/director/art_provider.rb +5 -1
  83. data/rakelib/lib/director/aui_pane_info.rb +1 -1
  84. data/rakelib/lib/director/aui_tab_ctrl.rb +1 -1
  85. data/rakelib/lib/director/aui_toolbar.rb +41 -0
  86. data/rakelib/lib/director/bitmap.rb +2 -1
  87. data/rakelib/lib/director/bitmap_combobox.rb +32 -0
  88. data/rakelib/lib/director/brush.rb +11 -1
  89. data/rakelib/lib/director/busy_info.rb +1 -1
  90. data/rakelib/lib/director/choice.rb +1 -0
  91. data/rakelib/lib/director/clipboard.rb +1 -1
  92. data/rakelib/lib/director/colour.rb +1 -0
  93. data/rakelib/lib/director/colour_picker_ctrl.rb +1 -1
  94. data/rakelib/lib/director/combobox.rb +2 -3
  95. data/rakelib/lib/director/context_help_button.rb +23 -0
  96. data/rakelib/lib/director/ctrl_with_items.rb +3 -0
  97. data/rakelib/lib/director/cursor.rb +1 -0
  98. data/rakelib/lib/director/data_object.rb +5 -7
  99. data/rakelib/lib/director/dc.rb +5 -1
  100. data/rakelib/lib/director/defs.rb +3 -0
  101. data/rakelib/lib/director/derived_dc.rb +278 -27
  102. data/rakelib/lib/director/dialog.rb +12 -3
  103. data/rakelib/lib/director/dir_picker_ctrl.rb +1 -1
  104. data/rakelib/lib/director/event.rb +3 -3
  105. data/rakelib/lib/director/event_blocker.rb +41 -0
  106. data/rakelib/lib/director/event_filter.rb +20 -0
  107. data/rakelib/lib/director/event_handler.rb +29 -2
  108. data/rakelib/lib/director/file_picker_ctrl.rb +1 -1
  109. data/rakelib/lib/director/find_replace_data.rb +1 -0
  110. data/rakelib/lib/director/font.rb +14 -4
  111. data/rakelib/lib/director/font_data.rb +1 -0
  112. data/rakelib/lib/director/font_picker_ctrl.rb +1 -1
  113. data/rakelib/lib/director/gdi_object.rb +1 -0
  114. data/rakelib/lib/director/graphics_context.rb +6 -6
  115. data/rakelib/lib/director/grid_table_message.rb +1 -1
  116. data/rakelib/lib/director/help_provider.rb +8 -10
  117. data/rakelib/lib/director/html_cell.rb +1 -1
  118. data/rakelib/lib/director/html_data_object.rb +5 -7
  119. data/rakelib/lib/director/html_listbox.rb +65 -1
  120. data/rakelib/lib/director/hyperlink_event.rb +22 -0
  121. data/rakelib/lib/director/icon.rb +2 -0
  122. data/rakelib/lib/director/listbox.rb +1 -0
  123. data/rakelib/lib/director/locale.rb +2 -1
  124. data/rakelib/lib/director/menu.rb +0 -3
  125. data/rakelib/lib/director/menu_bar.rb +3 -0
  126. data/rakelib/lib/director/palette.rb +1 -0
  127. data/rakelib/lib/director/pen.rb +12 -2
  128. data/rakelib/lib/director/pgproperties.rb +1 -1
  129. data/rakelib/lib/director/pgproperty.rb +1 -1
  130. data/rakelib/lib/director/pgvalidation_info.rb +1 -1
  131. data/rakelib/lib/director/platform_info.rb +1 -1
  132. data/rakelib/lib/director/popup_window.rb +18 -0
  133. data/rakelib/lib/director/print_data.rb +1 -1
  134. data/rakelib/lib/director/property_grid_interface.rb +1 -1
  135. data/rakelib/lib/director/property_grid_page_state.rb +1 -1
  136. data/rakelib/lib/director/radio_box.rb +15 -4
  137. data/rakelib/lib/director/region.rb +1 -0
  138. data/rakelib/lib/director/ribbon_art_provider.rb +1 -1
  139. data/rakelib/lib/director/richtext_buffer_data_object.rb +5 -7
  140. data/rakelib/lib/director/richtext_header_footer_data.rb +1 -1
  141. data/rakelib/lib/director/searchctrl.rb +25 -0
  142. data/rakelib/lib/director/sizer.rb +2 -2
  143. data/rakelib/lib/director/static_box.rb +1 -1
  144. data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
  145. data/rakelib/lib/director/text_entry.rb +7 -2
  146. data/rakelib/lib/director/textctrl.rb +1 -1
  147. data/rakelib/lib/director/tree_ctrl.rb +6 -3
  148. data/rakelib/lib/director/uiaction_simulator.rb +20 -0
  149. data/rakelib/lib/director/variant.rb +1 -1
  150. data/rakelib/lib/director/vlistbox.rb +25 -0
  151. data/rakelib/lib/director/window.rb +37 -7
  152. data/rakelib/lib/director/with_images.rb +1 -1
  153. data/rakelib/lib/director/xml_node.rb +1 -1
  154. data/rakelib/lib/extractor/function.rb +5 -3
  155. data/rakelib/lib/generate/doc/about_dialog_info.yaml +46 -0
  156. data/rakelib/lib/generate/doc/accelerator.yaml +21 -0
  157. data/rakelib/lib/generate/doc/art_provider.yaml +35 -0
  158. data/rakelib/lib/generate/doc/bitmap.yaml +37 -0
  159. data/rakelib/lib/generate/doc/box_sizer.yaml +15 -0
  160. data/rakelib/lib/generate/doc/busy_info.yaml +74 -0
  161. data/rakelib/lib/generate/doc/client_dc.yaml +19 -0
  162. data/rakelib/lib/generate/doc/clipboard.yaml +43 -0
  163. data/rakelib/lib/generate/doc/collapsible_pane.yaml +21 -0
  164. data/rakelib/lib/generate/doc/colour_dialog.yaml +32 -0
  165. data/rakelib/lib/generate/doc/context_help_button.yaml +16 -0
  166. data/rakelib/lib/generate/doc/control.yaml +46 -0
  167. data/rakelib/lib/generate/doc/cursor.yaml +40 -0
  168. data/rakelib/lib/generate/doc/data_object.yaml +55 -0
  169. data/rakelib/lib/generate/doc/dc.yaml +14 -0
  170. data/rakelib/lib/generate/doc/dialog.yaml +36 -0
  171. data/rakelib/lib/generate/doc/dir_dialog.yaml +25 -0
  172. data/rakelib/lib/generate/doc/event_blocker.yaml +27 -0
  173. data/rakelib/lib/generate/doc/event_filter.yaml +47 -0
  174. data/rakelib/lib/generate/doc/events.yaml +152 -0
  175. data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
  176. data/rakelib/lib/generate/doc/file_dialog.yaml +68 -0
  177. data/rakelib/lib/generate/doc.rb +77 -14
  178. data/rakelib/lib/generate/interface.rb +22 -10
  179. data/rakelib/lib/specs/interfaces.rb +9 -5
  180. data/rakelib/lib/swig_runner.rb +3 -3
  181. data/rakelib/lib/typemap/common.rb +15 -3
  182. data/rakelib/lib/util/string.rb +1 -0
  183. data/rakelib/yard/yard/relative_markdown_links.rb +5 -1
  184. data/samples/aui/aui.rb +432 -363
  185. data/samples/bigdemo/wxArtProvider.rbw +5 -4
  186. data/samples/controls/controls.rb +2 -2
  187. data/samples/controls/htlbox.rb +411 -0
  188. data/samples/controls/tn_htlbox.png +0 -0
  189. data/samples/drawing/graphics_drawing.rb +1 -2
  190. data/samples/drawing/{svgtest.rb → image_prt.rb} +49 -18
  191. data/samples/drawing/tn_image_prt.png +0 -0
  192. data/samples/propgrid/propgrid.rb +26 -21
  193. data/samples/ribbon/ribbon.rb +47 -46
  194. data/samples/sampler/editor.rb +33 -25
  195. data/samples/sampler/sample.rb +2 -2
  196. data/samples/sampler/stc_editor.rb +4 -2
  197. data/tests/lib/item_container_tests.rb +82 -0
  198. data/tests/lib/text_entry_tests.rb +80 -0
  199. data/tests/lib/wxapp_runner.rb +15 -3
  200. data/tests/lib/wxframe_runner.rb +144 -0
  201. data/tests/test_app_event_filter.rb +74 -0
  202. data/tests/test_art_provider.rb +52 -0
  203. data/tests/test_clipboard.rb +2 -1
  204. data/tests/test_event_handling.rb +199 -16
  205. data/tests/test_events.rb +4 -11
  206. data/tests/test_ext_controls.rb +28 -0
  207. data/tests/test_font.rb +239 -0
  208. data/tests/test_gdi_object.rb +161 -0
  209. data/tests/test_intl.rb +16 -15
  210. data/tests/test_item_data.rb +33 -1
  211. data/tests/test_std_controls.rb +373 -0
  212. data/tests/test_window.rb +340 -0
  213. metadata +82 -4
  214. data/samples/drawing/tn_svgtest.png +0 -0
@@ -4,6 +4,7 @@
4
4
  ###
5
5
 
6
6
  require 'set'
7
+ require 'yaml'
7
8
 
8
9
  require_relative './base'
9
10
  require_relative './analyzer'
@@ -152,6 +153,7 @@ module WXRuby3
152
153
  text.gsub!('@remarks', '')
153
154
  text.gsub!(/@see.*\n/, '')
154
155
  text.gsub!('@ref', '')
156
+ text.gsub!(/(\W|\A)nullptr(\W|\Z)/, '\1nil\2')
155
157
  unless no_ref?
156
158
  # auto create references for any ids explicitly declared such
157
159
  text.gsub!(/\W?(wx\w+(::\w+)?(\(.*\))?)/) do |s|
@@ -167,6 +169,7 @@ module WXRuby3
167
169
  end
168
170
  end
169
171
  end
172
+ text.gsub!(/WX(K_[A-Z]+)/) { "{Wx::#{$1}}"}
170
173
  end
171
174
  if event_section?
172
175
  case text
@@ -214,7 +217,7 @@ module WXRuby3
214
217
 
215
218
  def programlisting_to_doc(node)
216
219
  no_idents do
217
- "\n\n #{node_to_doc(node).split("\n").join("\n ")}\n"
220
+ "\n```\n #{node_to_doc(node).split("\n").join("\n ")}\n```\n"
218
221
  end
219
222
  end
220
223
 
@@ -405,7 +408,8 @@ module WXRuby3
405
408
 
406
409
  def node_to_doc(xmlnode)
407
410
  xmlnode.children.inject('') do |docstr, node|
408
- docstr << self.__send__("#{node.name}_to_doc", node)
411
+ node = preprocess_node(node)
412
+ docstr << (node.is_a?(Nokogiri::XML::Node) ? self.__send__("#{node.name}_to_doc", node) : node.to_s)
409
413
  end
410
414
  end
411
415
 
@@ -421,9 +425,9 @@ module WXRuby3
421
425
  para = node_to_doc(node)
422
426
  # loose specific notes paragraphs
423
427
  case para
424
- when /\A(\<b\>)?wxPerl Note:/, # wxPerl note
425
- /\A\s*Library:/, # Library note
426
- /\A\s*Include\s+file:/ # Include file note
428
+ when /\A(\<(b)\>)?(wxPerl|\{Wx::Perl\}) Note:/, # wxPerl note
429
+ /\A\s*Library:/, # Library note
430
+ /\A\s*Include\s+file:/ # Include file note
427
431
  ''
428
432
  else
429
433
  para.sub!(/Include\s+file:\s+\#include\s+\<[^>]+\>\s*\Z/, '')
@@ -475,6 +479,24 @@ module WXRuby3
475
479
  end
476
480
  end
477
481
 
482
+ def preprocess_node(node)
483
+ if @item_doc_ovr[:pre] && @item_doc_ovr[:pre][node.name.to_sym]
484
+ @item_doc_ovr[:pre][node.name.to_sym].each do |ovr|
485
+ if ovr[:replace]
486
+ return ovr[:replace] if ovr[:pattern] =~ node.inner_html
487
+ elsif ovr[:subst]
488
+ if ovr[:global]
489
+ node.inner_html = node.inner_html.gsub(ovr[:pattern], ovr[:subst])
490
+ else
491
+ node.inner_html = node.inner_html.sub(ovr[:pattern], ovr[:subst])
492
+ end
493
+ end
494
+ end
495
+ end
496
+ node
497
+ end
498
+ private :preprocess_node
499
+
478
500
  def method_missing(mtd, *args, &block)
479
501
  if /\A\w+_to_doc\Z/ =~ mtd.to_s && args.size==1
480
502
  node_to_doc(*args)
@@ -487,6 +509,15 @@ module WXRuby3
487
509
 
488
510
  def initialize(director)
489
511
  @director = director
512
+ @doc_overrides = if File.exist?(doc_override_file = File.join(__dir__, 'doc', underscore(name)+ '.yaml'))
513
+ if ::Psych::VERSION >= '3.1.0'
514
+ ::Psych.safe_load(File.read(doc_override_file), permitted_classes: [::Regexp, ::Symbol])
515
+ else
516
+ ::Psych.safe_load(File.read(doc_override_file), [::Regexp, ::Symbol])
517
+ end
518
+ else
519
+ {}
520
+ end
490
521
  @classdef = nil
491
522
  @see_list = []
492
523
  end
@@ -503,15 +534,44 @@ module WXRuby3
503
534
  end
504
535
  end
505
536
 
506
- def to_doc(xmlnode_or_set)
537
+ def to_doc(xmlnode_or_set, item: nil, desc: :brief)
507
538
  return '' unless xmlnode_or_set
508
539
  @see_list.clear
540
+ @item_doc_ovr = if item
541
+ item_key = if item.is_a?(Extractor::BaseDef)
542
+ if item.is_a?(Extractor::ClassDef) || @classdef.nil?
543
+ item.name
544
+ else
545
+ "#{@classdef.name}.#{item.name}"
546
+ end
547
+ else
548
+ @classdef ? "#{@classdef.name}.#{item}" : item.to_s
549
+ end
550
+ item_key = item_key.to_sym
551
+ @doc_overrides[item_key] ? @doc_overrides[item_key][desc] || {} : {}
552
+ else
553
+ {}
554
+ end
509
555
  doc = if Nokogiri::XML::NodeSet === xmlnode_or_set
510
- xmlnode_or_set.inject('') { |s, n| s << node_to_doc(n) }
556
+ xmlnode_or_set.inject('') do |s, n|
557
+ n = preprocess_node(n)
558
+ s << (n.is_a?(Nokogiri::XML::Node) ? node_to_doc(n) : n.to_s)
559
+ end
511
560
  else
512
- node_to_doc(xmlnode_or_set)
561
+ xmlnode_or_set = preprocess_node(xmlnode_or_set)
562
+ xmlnode_or_set.is_a?(Nokogiri::XML::Node) ? node_to_doc(xmlnode_or_set) : xmlnode_or_set.to_s
513
563
  end
514
564
  event_section(false)
565
+ if @item_doc_ovr.has_key?(:post)
566
+ @item_doc_ovr[:post].each do |ovr|
567
+ if ovr[:global]
568
+ doc.gsub!(ovr[:pattern], ovr[:subst])
569
+ else
570
+ doc.sub!(ovr[:pattern], ovr[:subst])
571
+ end
572
+ end
573
+ end
574
+ doc.sub!(/\<b\>\{Wx::Perl.*/, '')
515
575
  doc.strip!
516
576
  # reduce triple(or more) newlines to max 2
517
577
  doc << "\n" # always end with a NL without following whitespace
@@ -562,7 +622,7 @@ module WXRuby3
562
622
  protected
563
623
 
564
624
  def get_constant_doc(const)
565
- @xml_trans.to_doc(const.brief_doc)
625
+ @xml_trans.to_doc(const.brief_doc, item: const)
566
626
  end
567
627
 
568
628
  def gen_constant_value(val)
@@ -589,9 +649,9 @@ module WXRuby3
589
649
  end
590
650
 
591
651
  def get_enum_doc(enumdef)
592
- doc = @xml_trans.to_doc(enumdef.brief_doc)
652
+ doc = @xml_trans.to_doc(enumdef.brief_doc, item: enumdef)
593
653
  doc << "\n" if enumdef.detailed_doc
594
- doc << @xml_trans.to_doc(enumdef.detailed_doc) if enumdef.detailed_doc
654
+ doc << @xml_trans.to_doc(enumdef.detailed_doc, item: enumdef, desc: :detail) if enumdef.detailed_doc
595
655
  doc
596
656
  end
597
657
 
@@ -681,8 +741,8 @@ module WXRuby3
681
741
  end
682
742
 
683
743
  def get_class_doc(cls)
684
- doc = @xml_trans.to_doc(cls.brief_doc)
685
- doc << @xml_trans.to_doc(cls.detailed_doc) if cls.detailed_doc
744
+ doc = @xml_trans.to_doc(cls.brief_doc, item: cls)
745
+ doc << @xml_trans.to_doc(cls.detailed_doc, item: cls, desc: :detail) if cls.detailed_doc
686
746
  doc
687
747
  end
688
748
 
@@ -792,6 +852,7 @@ module WXRuby3
792
852
  fdoc.doc.puts "\n@note In wxRuby this is a mixin module instead of a (base) class."
793
853
  fdoc.puts "module #{clsnm}"
794
854
  else
855
+ fdoc.doc.puts "\n@note This class is <b>untracked</b> and should not be derived from nor instances extended!" unless is_tracked?(item)
795
856
  basecls = ifspec.classdef_name(base_class(item, doc: true))
796
857
  fdoc.puts "class #{clsnm} < #{basecls ? basecls.sub(/\Awx/, '') : '::Object'}"
797
858
  end
@@ -799,7 +860,7 @@ module WXRuby3
799
860
 
800
861
  # mixin includes
801
862
  if included_mixins.has_key?(item.name)
802
- included_mixins[item.name].each { |mod| fdoc.iputs "include #{mod}" }
863
+ included_mixins[item.name].keys.each { |mod| fdoc.iputs "include #{mod}" }
803
864
  fdoc.puts
804
865
  end
805
866
 
@@ -820,6 +881,8 @@ module WXRuby3
820
881
  const_name = rb_constant_name(e.name)
821
882
  if xref_table.has_key?(const_name)
822
883
  gen_constant_doc(fdoc, const_name, xref_table[const_name], get_constant_doc(e))
884
+ elsif xref_table.has_key?(e.name)
885
+ gen_constant_doc(fdoc, e.name, xref_table[e.name], get_constant_doc(e))
823
886
  end
824
887
  end
825
888
  else
@@ -86,6 +86,11 @@ module WXRuby3
86
86
  Data_Get_Struct(obj, void, vptr);
87
87
  wx_#{underscore(rb_name)}_convert_fn fn_cvt = it->second;
88
88
  *ptr = (*fn_cvt)(vptr);
89
+ if (!ptr)
90
+ {
91
+ rb_raise(rb_eArgError,
92
+ "#{rb_name} object already deleted.");
93
+ }
89
94
  return SWIG_OK;
90
95
  }
91
96
  }
@@ -94,18 +99,19 @@ module WXRuby3
94
99
  __HEREDOC
95
100
  end
96
101
 
97
- def gen_mixin_convert_code(fout, cls, mod)
102
+ def gen_mixin_convert_code(fout, cls, mod, ctype)
98
103
  rb_mod_name = mod.split('::').last
104
+ ctype ||= "wx#{rb_mod_name}"
99
105
  decl_flag = (mod.start_with?(package.fullname) ? 'WXRB_EXPORT_FLAG' : 'WXRB_IMPORT_FLAG') # same package (dll) or import?
100
106
  fout.puts
101
107
  fout << <<~__HEREDOC
102
- // Mixin converter for wx#{rb_mod_name} included in #{cls}
103
- typedef wx#{rb_mod_name}* (*wx_#{underscore(rb_mod_name)}_convert_fn)(void*);
108
+ // Mixin converter for #{ctype} (#{mod}) included in #{cls}
109
+ typedef #{ctype}* (*wx_#{underscore(rb_mod_name)}_convert_fn)(void*);
104
110
  #{decl_flag} void wxRuby_Register_#{rb_mod_name}_Include(swig_class* cls_info,
105
111
  wx_#{underscore(rb_mod_name)}_convert_fn converter);
106
- static wx#{rb_mod_name}* wxRuby_ConvertTo_#{rb_mod_name}(void* ptr)
112
+ static #{ctype}* wxRuby_ConvertTo_#{rb_mod_name}(void* ptr)
107
113
  {
108
- return ((wx#{rb_mod_name}*) static_cast<#{cls}*> (ptr));
114
+ return ((#{ctype}*) static_cast<#{cls}*> (ptr));
109
115
  }
110
116
  __HEREDOC
111
117
  end
@@ -142,7 +148,7 @@ module WXRuby3
142
148
  mixins.each { |name| gen_mixin_code(fout, name) }
143
149
  end
144
150
  unless included_mixins.empty?
145
- included_mixins.each_pair {|cls, mods| mods.each { |mod| gen_mixin_convert_code(fout, cls, mod) } }
151
+ included_mixins.each_pair {|cls, mods| mods.each_pair { |mod, ctype| gen_mixin_convert_code(fout, cls, mod, ctype) } }
146
152
  end
147
153
  fout.puts "%}"
148
154
  end
@@ -202,10 +208,16 @@ module WXRuby3
202
208
  fout.puts
203
209
  fout.puts swig_code
204
210
  end
211
+ unless explicit_concretes.empty?
212
+ fout.puts
213
+ explicit_concretes.each do |cls|
214
+ fout.puts %Q{%feature("notabstract") #{cls};}
215
+ end
216
+ end
205
217
  unless included_mixins.empty?
206
218
  fout.puts
207
- included_mixins.each_pair do |cls, module_names|
208
- module_names.each { |m| fout.puts %Q{%mixin #{cls} "#{m}";} }
219
+ included_mixins.each_pair do |cls, modules|
220
+ modules.keys.each { |m| fout.puts %Q{%mixin #{cls} "#{m}";} }
209
221
  end
210
222
  end
211
223
  end
@@ -229,8 +241,8 @@ module WXRuby3
229
241
  end
230
242
  unless included_mixins.empty?
231
243
  fout.puts
232
- included_mixins.each_pair do |cls, module_names|
233
- module_names.each do |modname|
244
+ included_mixins.each_pair do |cls, modules|
245
+ modules.keys.each do |modname|
234
246
  m = modname.split('::').last
235
247
  fout.puts %Q{wxRuby_Register_#{m}_Include(&SwigClassWx#{rb_wx_name(cls)}, wxRuby_ConvertTo_#{m});}
236
248
  end
@@ -16,21 +16,20 @@ module WXRuby3
16
16
  Director.Spec(pkg, 'wxEvent')
17
17
  Director.Spec(pkg, 'wxEvtHandler')
18
18
  Director.Spec(pkg, 'wxEvents')
19
+ Director.Spec(pkg, 'wxEventFilter')
19
20
  Director.Spec(pkg, 'wxApp')
20
21
  Director.Spec(pkg, 'wxDC')
21
22
  Director.Spec(pkg, 'wxWindowDC', director: Director::DerivedDC)
22
23
  Director.Spec(pkg, 'wxClientDC', director: Director::DerivedDC)
23
24
  Director.Spec(pkg, 'wxPaintDC', director: Director::DerivedDC)
24
25
  Director.Spec(pkg, 'wxMemoryDC', director: Director::DerivedDC)
25
- Director.Spec(pkg, 'wxBufferedDC', director: Director::DerivedDC)
26
- Director.Spec(pkg, 'wxBufferedPaintDC', director: Director::DerivedDC)
27
- Director.Spec(pkg, 'wxAutoBufferedPaintDC', director: Director::DerivedDC)
28
26
  Director.Spec(pkg, 'wxMirrorDC', director: Director::DerivedDC)
29
27
  Director.Spec(pkg, 'wxScreenDC', director: Director::DerivedDC)
30
28
  Director.Spec(pkg, 'wxSVGFileDC', director: Director::DerivedDC, requirements: %w[wxUSE_SVG])
31
29
  Director.Spec(pkg, 'wxGCDC', director: Director::DerivedDC, requirements: %w[wxUSE_GRAPHICS_CONTEXT])
32
30
  Director.Spec(pkg, 'wxScaledDC', director: Director::DerivedDC)
33
31
  Director.Spec(pkg, 'wxWindow')
32
+ Director.Spec(pkg, 'wxEventBlocker')
34
33
  Director.Spec(pkg, 'wxNonOwnedWindow', director: Director::Window)
35
34
  Director.Spec(pkg, 'wxPopupWindow')
36
35
  Director.Spec(pkg, 'wxTopLevelWindow')
@@ -71,6 +70,7 @@ module WXRuby3
71
70
  Director.Spec(pkg, 'wxToggleButton')
72
71
  Director.Spec(pkg, 'wxControlWithItems')
73
72
  Director.Spec(pkg, 'wxComboBox')
73
+ Director.Spec(pkg, 'wxBitmapComboBox')
74
74
  Director.Spec(pkg, 'wxRadioBox')
75
75
  Director.Spec(pkg, 'wxPanel')
76
76
  Director.Spec(pkg, 'wxWithImages')
@@ -81,6 +81,7 @@ module WXRuby3
81
81
  Director.Spec(pkg, 'wxListBox')
82
82
  Director.Spec(pkg, 'wxChoice')
83
83
  Director.Spec(pkg, 'wxStaticBox')
84
+ Director.Spec(pkg, 'wxSearchCtrl')
84
85
  Director.Spec(pkg, 'wxCollapsiblePane', requirements: %w[wxUSE_COLLPANE])
85
86
  Director.Spec(pkg, 'wxCollapsiblePaneEvent', requirements: %w[wxUSE_COLLPANE])
86
87
  Director.Spec(pkg, 'wxStaticLine', director: Director::Window)
@@ -126,7 +127,6 @@ module WXRuby3
126
127
  Director.Spec(pkg, 'wxListbook', director: Director::BookCtrls, requirements: Director.AnyOf(%w[wxUSE_LISTBOOK]))
127
128
  Director.Spec(pkg, 'wxTreebook', director: Director::BookCtrls, requirements: Director.AnyOf(%w[wxUSE_TREEBOOK]))
128
129
  Director.Spec(pkg, 'wxSimplebook', director: Director::BookCtrls, requirements: Director.AnyOf(%w[wxUSE_AUI wxUSE_NOTEBOOK wxUSE_LISTBOOK wxUSE_CHOICEBOOK wxUSE_TOOLBOOK wxUSE_TREEBOOK]))
129
- Director.Spec(pkg, 'wxColourData', requirements: %w[wxUSE_COLOURDLG])
130
130
  Director.Spec(pkg, 'wxColourDialog', director: Director::Dialog, requirements: %w[wxUSE_COLOURDLG])
131
131
  Director.Spec(pkg, 'wxColourPickerEvent', director: Director::Event, requirements: %w[wxUSE_COLOURPICKERCTRL wxUSE_COLOURDLG])
132
132
  Director.Spec(pkg, 'wxColourPickerCtrl', requirements: %w[wxUSE_COLOURPICKERCTRL wxUSE_COLOURDLG])
@@ -177,7 +177,7 @@ module WXRuby3
177
177
  Director.Spec(pkg, 'wxDataObjectSimpleBase', requirements: %w[wxUSE_CLIPBOARD])
178
178
  Director.Spec(pkg, 'wxClipboard', requirements: %w[wxUSE_CLIPBOARD])
179
179
  Director.Spec(pkg, 'wxDragDrop', requirements: %w[wxUSE_DRAG_AND_DROP])
180
- Director.Spec(pkg, 'wxContextHelpButton', director: Director::Button, requirements: %w[wxUSE_HELP])
180
+ Director.Spec(pkg, 'wxContextHelpButton', requirements: %w[wxUSE_HELP])
181
181
  Director.Spec(pkg, 'wxHelpProvider', requirements: %w[wxUSE_HELP])
182
182
  Director.Spec(pkg, 'wxHelpController', requirements: %w[wxUSE_HELP])
183
183
  Director.Spec(pkg, 'wxExtHelpController', director: Director::HelpController, requirements: %w[wxUSE_HELP])
@@ -199,6 +199,10 @@ module WXRuby3
199
199
  Director.Spec(pkg, 'wxVariant', requirements: %w[wxUSE_VARIANT])
200
200
  Director.Spec(pkg, 'wxPlatformInfo')
201
201
  Director.Spec(pkg, 'wxSplashScreen', requirements: %w[wxUSE_SPLASH])
202
+ Director.Spec(pkg, 'wxUIActionSimulator', requirements: %w[wxUSE_UIACTIONSIMULATOR])
203
+ Director.Spec(pkg, 'wxActivityIndicator', director: Director::Window, requirements: %w[wxUSE_ACTIVITYINDICATOR])
204
+ Director.Spec(pkg, 'wxHyperlinkCtrl', director: Director::Window, requirements: %w[wxUSE_HYPERLINKCTRL])
205
+ Director.Spec(pkg, 'wxHyperlinkEvent', requirements: %w[wxUSE_HYPERLINKCTRL])
202
206
  }
203
207
 
204
208
  Director.Package('Wx::PRT', 'wxUSE_PRINTING_ARCHITECTURE') do |pkg|
@@ -211,7 +211,7 @@ module WXRuby3
211
211
  update_source do |line|
212
212
  case line
213
213
  # defined method names
214
- when /(rb_define_method|rb_define_module_function|rb_define_protected_method).*("[_a-zA-Z0-9]*")/
214
+ when /(rb_define_method|rb_define_module_function|rb_define_protected_method).*("[_a-zA-Z0-9]*[=\?\!]?")/
215
215
  name = $2
216
216
  unless name == '"THE_APP"'
217
217
  line[name] = '"%s"' % rb_method_name(name[1..-2])
@@ -222,7 +222,7 @@ module WXRuby3
222
222
  line['rb_funcall'] = 'wxRuby_Funcall'
223
223
  line[name] = '"%s"' % rb_method_name(name[1..-2])
224
224
  # defined alias methods (original method name)
225
- when /rb_define_alias\s*\(.*"[_a-zA-Z0-9]+[=\?]?".*("[_a-zA-Z0-9]*")/
225
+ when /rb_define_alias\s*\(.*"[_a-zA-Z0-9]+[=\?]?".*("[_a-zA-Z0-9]*[=\?\!]?")/
226
226
  name = $1
227
227
  line[name] = '"%s"' % rb_method_name(name[1..-2])
228
228
  # defined class names
@@ -234,7 +234,7 @@ module WXRuby3
234
234
  name = $1
235
235
  line[name] = '"%s"' % rb_wx_name(name[1..-2])
236
236
  # defined class/global methods
237
- when /rb_define_singleton_method.*("[_a-zA-Z0-9]*")/
237
+ when /rb_define_singleton_method.*("[_a-zA-Z0-9]*[=\?\!]?")/
238
238
  name = $1
239
239
  no_wx_name = name[1..-2].sub(/\Awx_?/i, '')
240
240
  if no_wx_name == no_wx_name.upcase
@@ -528,6 +528,15 @@ module WXRuby3
528
528
  VALUE klass = rb_const_get(wxRuby_Core(), rb_intern(class_name));
529
529
  return rb_obj_is_kind_of(obj, klass);
530
530
  }
531
+ static swig_type_info * wx_BitmapBundleSwigType()
532
+ {
533
+ static swig_type_info* swigtype = 0;
534
+ if (!swigtype)
535
+ {
536
+ swigtype = wxRuby_GetSwigTypeForClassName("BitmapBundle");
537
+ }
538
+ return swigtype;
539
+ }
531
540
  __CODE
532
541
  map_in from: 'Wx::BitmapBundle,Wx::Bitmap,Wx::Icon,Wx::Image',
533
542
  temp: 'wxBitmapBundle tmpBundle', code: <<~__CODE
@@ -565,6 +574,9 @@ module WXRuby3
565
574
  }
566
575
  }
567
576
  __CODE
577
+ map_out to: 'Wx::BitmapBundle', code: <<~__CODE
578
+ $result = SWIG_NewPointerObj((new wxBitmapBundle(*static_cast< const wxBitmapBundle* >($1))), wx_BitmapBundleSwigType(), SWIG_POINTER_OWN);
579
+ __CODE
568
580
  map_typecheck precedence: 2000, code: <<~__CODE
569
581
  $1 = (NIL_P($input) ||
570
582
  (TYPE($input) == T_DATA &&
@@ -579,10 +591,10 @@ module WXRuby3
579
591
  # output typemaps for common reference counted objects like wxPen, wxBrush,
580
592
  # making sure to ALWAYS create managed copies
581
593
  # (wxColour and wxFont are handled in separate typemaps above)
582
- %w[wxPen wxBrush wxBitmap wxIcon wxCursor wxIconBundle wxPalette wxFontData wxFindReplaceData].each do |klass|
583
- map "const #{klass}&", "const #{klass}*" do
594
+ %w[Pen Brush Bitmap Icon Cursor IconBundle Palette FontData].each do |klass|
595
+ map "const wx#{klass}&", "const wx#{klass}*", as: "Wx::#{klass}" do
584
596
  map_out code: <<~__CODE
585
- $result = SWIG_NewPointerObj((new #{klass}(*static_cast< const #{klass}* >($1))), SWIGTYPE_p_#{klass}, SWIG_POINTER_OWN);
597
+ $result = SWIG_NewPointerObj((new wx#{klass}(*static_cast< const wx#{klass}* >($1))), SWIGTYPE_p_wx#{klass}, SWIG_POINTER_OWN);
586
598
  __CODE
587
599
  end
588
600
  end
@@ -74,6 +74,7 @@ module WXRuby3
74
74
 
75
75
  def rb_param_name(name)
76
76
  rbnm = name.dup
77
+ rbnm[0] = rbnm[0].downcase # make sure name conforms to Ruby naming rules
77
78
  rbnm << '_' if RBKW.include?(name)
78
79
  rbnm
79
80
  end
@@ -20,7 +20,11 @@ module YARD # rubocop:disable Style/Documentation
20
20
  def resolve_links(text)
21
21
  html = Nokogiri::HTML.fragment(text)
22
22
  html.css("a[href]").each do |link|
23
- href = URI(link["href"])
23
+ begin
24
+ href = URI(link["href"])
25
+ rescue
26
+ return super(text)
27
+ end
24
28
 
25
29
  if href.relative? && options.files
26
30
  fnames = options.files.map(&:filename)