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

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 (164) 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/core/art_locator.rb +2 -2
  12. data/lib/wx/core/artprovider.rb +2 -2
  13. data/lib/wx/core/bitmap.rb +6 -5
  14. data/lib/wx/core/bitmap_combobox.rb +34 -0
  15. data/lib/wx/core/controlwithitems.rb +52 -14
  16. data/lib/wx/core/cursor.rb +1 -1
  17. data/lib/wx/core/dc.rb +0 -20
  18. data/lib/wx/core/event_blocker.rb +14 -0
  19. data/lib/wx/core/evthandler.rb +36 -0
  20. data/lib/wx/core/find_replace_dialog.rb +24 -0
  21. data/lib/wx/core/icon.rb +1 -1
  22. data/lib/wx/core/image.rb +1 -1
  23. data/lib/wx/core/paintdc.rb +8 -0
  24. data/lib/wx/core/text_entry.rb +15 -0
  25. data/lib/wx/core/v_list_box.rb +13 -0
  26. data/lib/wx/core/window.rb +1 -1
  27. data/lib/wx/doc/busy_info.rb +21 -0
  28. data/lib/wx/doc/client_dc.rb +28 -0
  29. data/lib/wx/doc/controlwithitems.rb +11 -0
  30. data/lib/wx/doc/dc.rb +0 -14
  31. data/lib/wx/doc/event_blocker.rb +27 -0
  32. data/lib/wx/doc/evthandler.rb +4 -0
  33. data/lib/wx/doc/extra/02_lifecycles.md +49 -0
  34. data/lib/wx/doc/extra/10_art.md +1 -1
  35. data/lib/wx/doc/extra/11_drawing_and_dc.md +62 -0
  36. data/lib/wx/doc/memory_dc.rb +75 -0
  37. data/lib/wx/doc/mirror_dc.rb +16 -0
  38. data/lib/wx/doc/prt/printer_dc.rb +26 -0
  39. data/lib/wx/doc/screen_dc.rb +10 -6
  40. data/lib/wx/doc/svg_file_dc.rb +20 -0
  41. data/lib/wx/doc/v_list_box.rb +9 -0
  42. data/lib/wx/doc/window_disabler.rb +10 -0
  43. data/lib/wx/html/keyword_defs.rb +6 -7
  44. data/lib/wx/html/require.rb +1 -0
  45. data/lib/wx/html/simple_html_listbox.rb +105 -0
  46. data/lib/wx/keyword_defs.rb +7 -0
  47. data/lib/wx/version.rb +1 -1
  48. data/lib/wx/wxruby/cmd/test.rb +1 -1
  49. data/rakelib/install.rb +3 -1
  50. data/rakelib/lib/core/mapping.rb +5 -5
  51. data/rakelib/lib/core/spec.rb +7 -3
  52. data/rakelib/lib/core/spec_helper.rb +9 -1
  53. data/rakelib/lib/director/accelerator.rb +1 -1
  54. data/rakelib/lib/director/app.rb +25 -3
  55. data/rakelib/lib/director/art_provider.rb +5 -1
  56. data/rakelib/lib/director/aui_pane_info.rb +1 -1
  57. data/rakelib/lib/director/aui_tab_ctrl.rb +1 -1
  58. data/rakelib/lib/director/bitmap.rb +2 -1
  59. data/rakelib/lib/director/bitmap_combobox.rb +32 -0
  60. data/rakelib/lib/director/brush.rb +1 -0
  61. data/rakelib/lib/director/busy_info.rb +1 -1
  62. data/rakelib/lib/director/choice.rb +1 -0
  63. data/rakelib/lib/director/clipboard.rb +1 -1
  64. data/rakelib/lib/director/colour.rb +1 -0
  65. data/rakelib/lib/director/colour_picker_ctrl.rb +1 -1
  66. data/rakelib/lib/director/combobox.rb +1 -2
  67. data/rakelib/lib/director/ctrl_with_items.rb +3 -0
  68. data/rakelib/lib/director/cursor.rb +1 -0
  69. data/rakelib/lib/director/data_object.rb +5 -7
  70. data/rakelib/lib/director/dc.rb +5 -1
  71. data/rakelib/lib/director/defs.rb +3 -0
  72. data/rakelib/lib/director/derived_dc.rb +278 -27
  73. data/rakelib/lib/director/dialog.rb +4 -1
  74. data/rakelib/lib/director/dir_picker_ctrl.rb +1 -1
  75. data/rakelib/lib/director/event.rb +3 -3
  76. data/rakelib/lib/director/event_blocker.rb +41 -0
  77. data/rakelib/lib/director/event_filter.rb +20 -0
  78. data/rakelib/lib/director/event_handler.rb +29 -2
  79. data/rakelib/lib/director/file_picker_ctrl.rb +1 -1
  80. data/rakelib/lib/director/find_replace_data.rb +1 -0
  81. data/rakelib/lib/director/font.rb +2 -1
  82. data/rakelib/lib/director/font_data.rb +1 -0
  83. data/rakelib/lib/director/font_picker_ctrl.rb +1 -1
  84. data/rakelib/lib/director/gdi_object.rb +1 -0
  85. data/rakelib/lib/director/graphics_context.rb +6 -6
  86. data/rakelib/lib/director/grid_table_message.rb +1 -1
  87. data/rakelib/lib/director/html_cell.rb +1 -1
  88. data/rakelib/lib/director/html_data_object.rb +5 -7
  89. data/rakelib/lib/director/html_listbox.rb +65 -1
  90. data/rakelib/lib/director/icon.rb +2 -0
  91. data/rakelib/lib/director/listbox.rb +1 -0
  92. data/rakelib/lib/director/locale.rb +2 -1
  93. data/rakelib/lib/director/palette.rb +1 -0
  94. data/rakelib/lib/director/pen.rb +2 -1
  95. data/rakelib/lib/director/pgproperties.rb +1 -1
  96. data/rakelib/lib/director/pgproperty.rb +1 -1
  97. data/rakelib/lib/director/pgvalidation_info.rb +1 -1
  98. data/rakelib/lib/director/platform_info.rb +1 -1
  99. data/rakelib/lib/director/print_data.rb +1 -1
  100. data/rakelib/lib/director/property_grid_interface.rb +1 -1
  101. data/rakelib/lib/director/property_grid_page_state.rb +1 -1
  102. data/rakelib/lib/director/region.rb +1 -0
  103. data/rakelib/lib/director/ribbon_art_provider.rb +1 -1
  104. data/rakelib/lib/director/richtext_buffer_data_object.rb +5 -7
  105. data/rakelib/lib/director/richtext_header_footer_data.rb +1 -1
  106. data/rakelib/lib/director/searchctrl.rb +24 -0
  107. data/rakelib/lib/director/sizer.rb +2 -2
  108. data/rakelib/lib/director/styled_text_ctrl.rb +2 -0
  109. data/rakelib/lib/director/text_entry.rb +2 -2
  110. data/rakelib/lib/director/tree_ctrl.rb +6 -3
  111. data/rakelib/lib/director/uiaction_simulator.rb +20 -0
  112. data/rakelib/lib/director/variant.rb +1 -1
  113. data/rakelib/lib/director/vlistbox.rb +25 -0
  114. data/rakelib/lib/director/window.rb +0 -6
  115. data/rakelib/lib/director/with_images.rb +1 -1
  116. data/rakelib/lib/director/xml_node.rb +1 -1
  117. data/rakelib/lib/extractor/function.rb +5 -3
  118. data/rakelib/lib/generate/doc/about_dialog_info.yaml +46 -0
  119. data/rakelib/lib/generate/doc/accelerator.yaml +21 -0
  120. data/rakelib/lib/generate/doc/art_provider.yaml +35 -0
  121. data/rakelib/lib/generate/doc/bitmap.yaml +37 -0
  122. data/rakelib/lib/generate/doc/box_sizer.yaml +15 -0
  123. data/rakelib/lib/generate/doc/busy_info.yaml +74 -0
  124. data/rakelib/lib/generate/doc/client_dc.yaml +19 -0
  125. data/rakelib/lib/generate/doc/clipboard.yaml +43 -0
  126. data/rakelib/lib/generate/doc/collapsible_pane.yaml +21 -0
  127. data/rakelib/lib/generate/doc/colour_dialog.yaml +32 -0
  128. data/rakelib/lib/generate/doc/control.yaml +46 -0
  129. data/rakelib/lib/generate/doc/cursor.yaml +40 -0
  130. data/rakelib/lib/generate/doc/data_object.yaml +55 -0
  131. data/rakelib/lib/generate/doc/dc.yaml +14 -0
  132. data/rakelib/lib/generate/doc/dialog.yaml +36 -0
  133. data/rakelib/lib/generate/doc/dir_dialog.yaml +25 -0
  134. data/rakelib/lib/generate/doc/events.yaml +152 -0
  135. data/rakelib/lib/generate/doc/evt_handler.yaml +63 -0
  136. data/rakelib/lib/generate/doc.rb +76 -13
  137. data/rakelib/lib/generate/interface.rb +11 -0
  138. data/rakelib/lib/specs/interfaces.rb +5 -4
  139. data/rakelib/lib/swig_runner.rb +3 -3
  140. data/rakelib/lib/typemap/common.rb +15 -3
  141. data/rakelib/lib/util/string.rb +1 -0
  142. data/rakelib/yard/yard/relative_markdown_links.rb +5 -1
  143. data/samples/bigdemo/wxArtProvider.rbw +5 -4
  144. data/samples/controls/controls.rb +2 -2
  145. data/samples/controls/htlbox.rb +411 -0
  146. data/samples/controls/tn_htlbox.png +0 -0
  147. data/samples/drawing/graphics_drawing.rb +1 -2
  148. data/samples/drawing/{svgtest.rb → image_prt.rb} +49 -18
  149. data/samples/drawing/tn_image_prt.png +0 -0
  150. data/samples/propgrid/propgrid.rb +23 -21
  151. data/samples/ribbon/ribbon.rb +47 -46
  152. data/tests/lib/wxapp_runner.rb +3 -3
  153. data/tests/lib/wxframe_runner.rb +59 -0
  154. data/tests/test_app_event_filter.rb +74 -0
  155. data/tests/test_art_provider.rb +52 -0
  156. data/tests/test_clipboard.rb +2 -1
  157. data/tests/test_event_handling.rb +199 -16
  158. data/tests/test_events.rb +4 -11
  159. data/tests/test_gdi_object.rb +161 -0
  160. data/tests/test_intl.rb +11 -14
  161. data/tests/test_item_data.rb +33 -1
  162. data/tests/test_std_controls.rb +147 -0
  163. metadata +56 -4
  164. data/samples/drawing/tn_svgtest.png +0 -0
@@ -0,0 +1,63 @@
1
+ ---
2
+ :wxEvtHandler.QueueEvent:
3
+ :detail:
4
+ :pre:
5
+ :programlisting:
6
+ - :pattern: !ruby/regexp /.*/
7
+ :replace: ''
8
+ :post:
9
+ - :pattern: !ruby/regexp /This\s+implies\s+that\s+the\s+event\s+should\s+be\s+allocated\s+on\s+the\s+heap\s+and/
10
+ :subst: 'This implies'
11
+ - :pattern: !ruby/regexp /\{Wx::EvtHandler#queue_event\}.*For\s+example:/
12
+ :subst: ''
13
+ - :pattern: !ruby/regexp /Note.*problem:/
14
+ :subst: ''
15
+ :wxEvtHandler.SetNextHandler:
16
+ :detail:
17
+ :pre:
18
+ :programlisting:
19
+ - :pattern: !ruby/regexp /.*/
20
+ :replace: |
21
+
22
+ ```ruby
23
+ handlerA.set_next_handler(handlerB)
24
+ handlerB.set_previous_handler(handlerA)
25
+ ```
26
+ :wxEvtHandler.TryBefore:
27
+ :detail:
28
+ :pre:
29
+ :programlisting:
30
+ - :pattern: !ruby/regexp /.*/
31
+ :replace: |
32
+
33
+ ```ruby
34
+ class MyClass < BaseClass # inheriting from Wx::EvtHandler
35
+ ...
36
+ protected
37
+ def try_before(event)
38
+ if my_pre_process(event)
39
+ return true
40
+
41
+ super
42
+ end
43
+ end
44
+ ```
45
+ :wxEvtHandler.TryAfter:
46
+ :detail:
47
+ :pre:
48
+ :programlisting:
49
+ - :pattern: !ruby/regexp /.*/
50
+ :replace: |
51
+
52
+ ```ruby
53
+ class MyClass < BaseClass # inheriting from Wx::EvtHandler
54
+ ...
55
+ protected
56
+ def try_after(event)
57
+ if super
58
+ return true
59
+
60
+ my_post_process(event)
61
+ end
62
+ end
63
+ ```
@@ -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
@@ -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
  }
@@ -202,6 +207,12 @@ module WXRuby3
202
207
  fout.puts
203
208
  fout.puts swig_code
204
209
  end
210
+ unless explicit_concretes.empty?
211
+ fout.puts
212
+ explicit_concretes.each do |cls|
213
+ fout.puts %Q{%feature("notabstract") #{cls};}
214
+ end
215
+ end
205
216
  unless included_mixins.empty?
206
217
  fout.puts
207
218
  included_mixins.each_pair do |cls, module_names|
@@ -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])
@@ -199,6 +199,7 @@ 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])
202
203
  }
203
204
 
204
205
  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)
@@ -242,10 +242,11 @@ class TestPanel < Wx::Panel
242
242
 
243
243
 
244
244
  def clear_bmp(bmp)
245
- dc = Wx::MemoryDC.new
246
- dc.select_object(bmp)
247
- dc.set_background(Wx::WHITE_BRUSH)
248
- dc.clear
245
+ Wx::MemoryDC.draw_on do |dc|
246
+ dc.select_object(bmp)
247
+ dc.set_background(Wx::WHITE_BRUSH)
248
+ dc.clear
249
+ end
249
250
  end
250
251
  end
251
252
 
@@ -117,8 +117,8 @@ class MyComboBox < ComboBox
117
117
  end
118
118
 
119
119
  def onChar(event)
120
- log_message("MyComboBox::OnChar")
121
- if event.key_code() == ?w
120
+ log_message("MyComboBox::OnChar : [#{event.get_unicode_key ? event.get_unicode_key.ord : 0}]")
121
+ if event.get_unicode_key == ?w
122
122
  log_message("MyComboBox: 'w' will be ignored.")
123
123
  else
124
124
  event.skip()