wxruby3 1.3.0 → 1.4.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 (139) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +16 -12
  3. data/README.md +4 -3
  4. data/ext/wxruby3/include/wxRubyApp.h +9 -9
  5. data/ext/wxruby3/swig/custom/director.swg +11 -3
  6. data/ext/wxruby3/swig/custom/rubyapi.swg +15 -1
  7. data/ext/wxruby3/swig/mark_free_impl.i +47 -11
  8. data/ext/wxruby3/swig/wx.i +30 -12
  9. data/lib/wx/aui/auifloatframe.rb +1 -1
  10. data/lib/wx/aui/auimanager.rb +50 -14
  11. data/lib/wx/aui/auinotebook.rb +1 -1
  12. data/lib/wx/aui/require.rb +0 -2
  13. data/lib/wx/core/acceleratortable.rb +1 -1
  14. data/lib/wx/core/animation.rb +2 -2
  15. data/lib/wx/core/app.rb +1 -1
  16. data/lib/wx/core/array_ext.rb +1 -0
  17. data/lib/wx/core/artprovider.rb +4 -4
  18. data/lib/wx/core/bitmap.rb +1 -1
  19. data/lib/wx/core/bitmap_combobox.rb +2 -2
  20. data/lib/wx/core/brush.rb +8 -0
  21. data/lib/wx/core/clientdc.rb +1 -1
  22. data/lib/wx/core/clipboard.rb +4 -4
  23. data/lib/wx/core/colour.rb +1 -1
  24. data/lib/wx/core/combobox.rb +1 -1
  25. data/lib/wx/core/config.rb +7 -7
  26. data/lib/wx/core/controlwithitems.rb +3 -3
  27. data/lib/wx/core/data_object.rb +4 -4
  28. data/lib/wx/core/dataformat.rb +9 -3
  29. data/lib/wx/core/defs.rb +49 -0
  30. data/lib/wx/core/dialog.rb +3 -2
  31. data/lib/wx/core/enum.rb +16 -3
  32. data/lib/wx/core/event.rb +3 -3
  33. data/lib/wx/core/evthandler.rb +317 -289
  34. data/lib/wx/core/file_dialog.rb +1 -1
  35. data/lib/wx/core/find_replace_dialog.rb +2 -2
  36. data/lib/wx/core/font.rb +14 -0
  37. data/lib/wx/core/functions.rb +1 -1
  38. data/lib/wx/core/genericdirctrl.rb +1 -1
  39. data/lib/wx/core/geometry.rb +2 -2
  40. data/lib/wx/core/graphics_pen_info.rb +1 -1
  41. data/lib/wx/core/hboxsizer.rb +24 -4
  42. data/lib/wx/core/helpprovider.rb +1 -1
  43. data/lib/wx/core/icon.rb +1 -1
  44. data/lib/wx/core/image.rb +2 -2
  45. data/lib/wx/core/imagelist.rb +1 -1
  46. data/lib/wx/core/locale.rb +5 -5
  47. data/lib/wx/core/log.rb +8 -8
  48. data/lib/wx/core/menu.rb +3 -3
  49. data/lib/wx/core/module_ext.rb +16 -0
  50. data/lib/wx/core/owner_drawn_combobox.rb +3 -3
  51. data/lib/wx/core/pen.rb +20 -0
  52. data/lib/wx/core/pen_info.rb +1 -1
  53. data/lib/wx/core/persistence_manager.rb +2 -2
  54. data/lib/wx/core/real_point.rb +1 -0
  55. data/lib/wx/core/rect.rb +1 -1
  56. data/lib/wx/core/secret_store.rb +1 -1
  57. data/lib/wx/core/simplehelpprovider.rb +1 -1
  58. data/lib/wx/core/sizer.rb +166 -39
  59. data/lib/wx/core/splash_screen.rb +1 -1
  60. data/lib/wx/core/standard_paths.rb +1 -1
  61. data/lib/wx/core/task_bar_button.rb +1 -1
  62. data/lib/wx/core/text_entry.rb +1 -1
  63. data/lib/wx/core/textctrl.rb +2 -2
  64. data/lib/wx/core/timer.rb +2 -2
  65. data/lib/wx/core/tree_ctrl.rb +1 -1
  66. data/lib/wx/core/v_list_box.rb +1 -1
  67. data/lib/wx/core/validator.rb +2 -2
  68. data/lib/wx/core/variant.rb +2 -2
  69. data/lib/wx/core/vboxsizer.rb +24 -4
  70. data/lib/wx/core/window.rb +48 -2
  71. data/lib/wx/core/xmlresource.rb +4 -4
  72. data/lib/wx/core.rb +2 -0
  73. data/lib/wx/doc/array_ext.rb +1 -0
  74. data/lib/wx/doc/aui/auimanager.rb +2 -0
  75. data/lib/wx/doc/enum.rb +26 -0
  76. data/lib/wx/doc/evthandler.rb +1 -0
  77. data/lib/wx/doc/gdi_common.rb +1 -0
  78. data/lib/wx/doc/tip_window.rb +22 -0
  79. data/lib/wx/grid/grid.rb +3 -3
  80. data/lib/wx/grid/require.rb +0 -2
  81. data/lib/wx/html/htmlhelpcontroller.rb +1 -1
  82. data/lib/wx/html/htmlwindow.rb +1 -1
  83. data/lib/wx/html/require.rb +0 -2
  84. data/lib/wx/html/simple_html_listbox.rb +3 -3
  85. data/lib/wx/keyword_ctors.rb +14 -7
  86. data/lib/wx/keyword_defs.rb +7 -7
  87. data/lib/wx/pg/pg_properties.rb +1 -1
  88. data/lib/wx/pg/pg_property.rb +3 -3
  89. data/lib/wx/pg/property_grid.rb +2 -2
  90. data/lib/wx/pg/property_grid_interface.rb +2 -2
  91. data/lib/wx/pg/require.rb +0 -2
  92. data/lib/wx/prt/previewframe.rb +1 -1
  93. data/lib/wx/prt/require.rb +0 -2
  94. data/lib/wx/rbn/ribbon_control.rb +1 -1
  95. data/lib/wx/rbn/ribbon_page.rb +1 -1
  96. data/lib/wx/rbn/ribbon_panel.rb +1 -1
  97. data/lib/wx/rtc/require.rb +0 -2
  98. data/lib/wx/rtc/rich_text_composite_object.rb +1 -1
  99. data/lib/wx/rtc/rich_text_ctrl.rb +1 -1
  100. data/lib/wx/rtc/rich_text_paragraph.rb +1 -1
  101. data/lib/wx/rtc/richtext_buffer.rb +3 -3
  102. data/lib/wx/rtc/richtext_formatting_dialog.rb +2 -2
  103. data/lib/wx/rtc/richtext_style_organiser_dialog.rb +1 -1
  104. data/lib/wx/rtc/symbol_picker_dialog.rb +1 -1
  105. data/lib/wx/stc/require.rb +0 -2
  106. data/lib/wx/stc/styled_text_ctrl.rb +1 -1
  107. data/lib/wx/version.rb +1 -1
  108. data/lib/wx/wxruby/base.rb +8 -2
  109. data/lib/wx/wxruby/cmd/setup.rb +61 -37
  110. data/rakelib/gem.rb +8 -4
  111. data/rakelib/lib/config/mingw.rb +1 -1
  112. data/rakelib/lib/core/include/swigrubyrun.inc +2 -2
  113. data/rakelib/lib/director/about_dialog_info.rb +1 -0
  114. data/rakelib/lib/director/aui_manager.rb +124 -3
  115. data/rakelib/lib/director/aui_notebook.rb +7 -0
  116. data/rakelib/lib/director/colour.rb +1 -1
  117. data/rakelib/lib/director/data_format.rb +1 -1
  118. data/rakelib/lib/director/dialog.rb +4 -2
  119. data/rakelib/lib/director/event.rb +1 -0
  120. data/rakelib/lib/director/event_handler.rb +82 -46
  121. data/rakelib/lib/director/functions.rb +0 -3
  122. data/rakelib/lib/director/list_ctrl.rb +14 -10
  123. data/rakelib/lib/director/locale.rb +2 -0
  124. data/rakelib/lib/director/num_validator.rb +7 -0
  125. data/rakelib/lib/director/pgproperties.rb +2 -2
  126. data/rakelib/lib/director/property_grid_interface.rb +4 -3
  127. data/rakelib/lib/director/textctrl.rb +7 -0
  128. data/rakelib/lib/director/tip_window.rb +34 -0
  129. data/rakelib/lib/director/variant.rb +2 -2
  130. data/rakelib/lib/director/window.rb +9 -1
  131. data/rakelib/lib/director.rb +0 -1
  132. data/rakelib/lib/extractor/function.rb +5 -0
  133. data/rakelib/lib/generate/doc/evt_handler.yaml +31 -12
  134. data/rakelib/lib/specs/interfaces.rb +1 -0
  135. data/rakelib/lib/typemap/common.rb +2 -2
  136. data/samples/dialogs/dialogs.rb +1 -1
  137. data/tests/test_combo_ctrl.rb +1 -0
  138. data/tests/test_event_handling.rb +158 -31
  139. metadata +7 -5
@@ -6,7 +6,7 @@ class Wx::RBN::RibbonControl
6
6
 
7
7
  # manage RibbonArtProvider for GC
8
8
  wx_set_art_provider = instance_method :set_art_provider
9
- define_method :set_art_provider do |prov|
9
+ wx_redefine_method :set_art_provider do |prov|
10
10
  @art_provider = nil # clear any previously set
11
11
  wx_set_art_provider.bind(self).call(prov)
12
12
  if prov != get_ancestor_ribbon_bar.get_art_provider
@@ -6,7 +6,7 @@ class Wx::RBN::RibbonPage
6
6
 
7
7
  # manage RibbonArtProvider for GC
8
8
  wx_set_art_provider = instance_method :set_art_provider
9
- define_method :set_art_provider do |prov|
9
+ wx_redefine_method :set_art_provider do |prov|
10
10
  @art_provider = nil # clear any previously set
11
11
  wx_set_art_provider.bind(self).call(prov)
12
12
  if prov != get_ancestor_ribbon_bar.get_art_provider
@@ -6,7 +6,7 @@ class Wx::RBN::RibbonPanel
6
6
 
7
7
  # manage RibbonArtProvider for GC
8
8
  wx_set_art_provider = instance_method :set_art_provider
9
- define_method :set_art_provider do |prov|
9
+ wx_redefine_method :set_art_provider do |prov|
10
10
  @art_provider = nil # clear any previously set
11
11
  wx_set_art_provider.bind(self).call(prov)
12
12
  if prov != get_ancestor_ribbon_bar.get_art_provider
@@ -14,5 +14,3 @@ require_relative './rich_text_paragraph'
14
14
  require_relative './richtext_formatting_dialog'
15
15
  require_relative './symbol_picker_dialog'
16
16
  require_relative './richtext_style_organiser_dialog'
17
-
18
- Wx::Dialog.setup_dialog_functors(Wx::RTC)
@@ -10,7 +10,7 @@ module Wx
10
10
 
11
11
  # Overload to provide Enumerator without block
12
12
  wx_each_child = instance_method :each_child
13
- define_method :each_child do |&block|
13
+ wx_redefine_method :each_child do |&block|
14
14
  if block
15
15
  wx_each_child.bind(self).call(&block)
16
16
  else
@@ -10,7 +10,7 @@ module Wx
10
10
 
11
11
  # Overload to provide Enumerator without block
12
12
  wx_each_line = instance_method :each_line
13
- define_method :each_line do |&block|
13
+ wx_redefine_method :each_line do |&block|
14
14
  if block
15
15
  wx_each_line.bind(self).call(&block)
16
16
  else
@@ -10,7 +10,7 @@ module Wx
10
10
 
11
11
  # Overload to provide Enumerator without block
12
12
  wx_each_line = instance_method :each_line
13
- define_method :each_line do |&block|
13
+ wx_redefine_method :each_line do |&block|
14
14
  if block
15
15
  wx_each_line.bind(self).call(&block)
16
16
  else
@@ -6,7 +6,7 @@ class Wx::RTC::RichTextBuffer
6
6
 
7
7
  class << self
8
8
  wx_each_handler = instance_method :each_handler
9
- define_method :each_handler do |&block|
9
+ wx_redefine_method :each_handler do |&block|
10
10
  if block_given?
11
11
  wx_each_handler.bind(self).call(&block)
12
12
  else
@@ -15,7 +15,7 @@ class Wx::RTC::RichTextBuffer
15
15
  end
16
16
 
17
17
  wx_each_field_type = instance_method :each_field_type
18
- define_method :each_field_type do |&block|
18
+ wx_redefine_method :each_field_type do |&block|
19
19
  if block_given?
20
20
  wx_each_field_type.bind(self).call(&block)
21
21
  else
@@ -24,7 +24,7 @@ class Wx::RTC::RichTextBuffer
24
24
  end
25
25
 
26
26
  wx_each_drawing_handler = instance_method :each_drawing_handler
27
- define_method :each_drawing_handler do |&block|
27
+ wx_redefine_method :each_drawing_handler do |&block|
28
28
  if block_given?
29
29
  wx_each_drawing_handler.bind(self).call(&block)
30
30
  else
@@ -8,7 +8,7 @@ module Wx::RTC
8
8
  class << self
9
9
 
10
10
  wx_set_formatting_dialog_factory = instance_method :set_formatting_dialog_factory
11
- define_method :set_formatting_dialog_factory do |factory|
11
+ wx_redefine_method :set_formatting_dialog_factory do |factory|
12
12
  wx_set_formatting_dialog_factory.bind(self).call(factory)
13
13
  @factory = factory # cache here to prevent GC collection
14
14
  end
@@ -23,7 +23,7 @@ module Wx::RTC
23
23
  end
24
24
 
25
25
  # now redefine the overridden ctor to account for deviating arglist
26
- def initialize(flags = nil, parent = nil, *mixed_args, &block)
26
+ wx_redefine_method :initialize do |flags = nil, parent = nil, *mixed_args, &block|
27
27
  # allow zero-args ctor for use with XRC
28
28
  if flags.nil?
29
29
  pre_wx_kwctor_init
@@ -12,7 +12,7 @@ class Wx::RTC::RichTextStyleOrganiserDialog
12
12
  end
13
13
 
14
14
  # now redefine the overridden ctor to account for deviating arglist
15
- def initialize(flags, sheet, ctrl, parent = nil, *mixed_args, &block)
15
+ wx_redefine_method :initialize do |flags, sheet, ctrl, parent = nil, *mixed_args, &block|
16
16
  real_args = begin
17
17
  [ flags, sheet, ctrl, parent ] + self.class.args_as_list(*mixed_args)
18
18
  rescue => err
@@ -13,7 +13,7 @@ class Wx::RTC::SymbolPickerDialog
13
13
  end
14
14
 
15
15
  # now redefine the overridden ctor to account for deviating arglist
16
- def initialize(symbol, initialFont, normalTextFont, parent = nil, *mixed_args, &block)
16
+ wx_redefine_method :initialize do |symbol, initialFont, normalTextFont, parent = nil, *mixed_args, &block|
17
17
  real_args = begin
18
18
  [ symbol, initialFont, normalTextFont, parent ] + self.class.args_as_list(*mixed_args)
19
19
  rescue => err
@@ -7,5 +7,3 @@
7
7
  require_relative './events/evt_list'
8
8
  require_relative './keyword_defs'
9
9
  require_relative './styled_text_ctrl'
10
-
11
- Wx::Dialog.setup_dialog_functors(Wx::STC)
@@ -10,7 +10,7 @@ module Wx
10
10
 
11
11
  # Overload to provide Enumerator without block
12
12
  wx_each_line = instance_method :each_line
13
- define_method :each_line do |&block|
13
+ wx_redefine_method :each_line do |&block|
14
14
  if block
15
15
  wx_each_line.bind(self).call(&block)
16
16
  else
data/lib/wx/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
  # This software is released under the MIT license.
4
4
 
5
5
  module Wx
6
- WXRUBY_VERSION = '1.3.0'
6
+ WXRUBY_VERSION = '1.4.2'
7
7
  end
@@ -55,6 +55,10 @@ module WxRuby
55
55
  puts
56
56
  end
57
57
 
58
+ def show_version
59
+ system(%Q[#{RUBY} -r wx -e 'puts "wxRuby3 v\#{Wx::WXRUBY_VERSION} (wxWidgets v\#{Wx::WXWIDGETS_VERSION})"' 2> /dev/null])
60
+ end
61
+
58
62
  def run(cmdid, args)
59
63
  commands[cmdid.to_s].call(args)
60
64
  end
@@ -65,9 +69,11 @@ module WxRuby
65
69
  " COMMAND\t\t\t\tSpecifies wxruby command to execute."
66
70
  opts.separator ''
67
71
  opts.on('-v', '--verbose',
68
- 'Show verbose output') { |v| ::WxRuby::Commands.options[:verbose] = true }
72
+ 'Show verbose output') { |_| ::WxRuby::Commands.options[:verbose] = true }
73
+ opts.on('-V', '--version',
74
+ 'Show versions.') { |_| show_version } if setup_done?
69
75
  opts.on('-h', '--help',
70
- 'Show this message.') do |v|
76
+ 'Show this message.') do |_|
71
77
  puts opts
72
78
  puts
73
79
  describe_all
@@ -6,6 +6,7 @@
6
6
  #--------------------------------------------------------------------
7
7
 
8
8
  require 'fileutils'
9
+ require 'json'
9
10
 
10
11
  module WxRuby
11
12
  module Commands
@@ -55,6 +56,16 @@ module WxRuby
55
56
  opts.parse!(args) rescue ($stderr.puts $!.message; exit(127))
56
57
  end
57
58
 
59
+ class << self
60
+
61
+ private
62
+
63
+ def check_wx_config
64
+ !(`which #{@wx_config} 2>/dev/null`).chomp.empty?
65
+ end
66
+
67
+ end
68
+
58
69
  def self.run(argv)
59
70
  return description if argv == :describe
60
71
 
@@ -74,48 +85,61 @@ module WxRuby
74
85
  cfg_cmd = 'rake configure'
75
86
  cfg_cmd << "[#{cfg_args.join(',')}]" unless cfg_args.empty?
76
87
 
77
- result = false
78
- FileUtils.chdir(WxRuby::ROOT) do
79
- steps = 0
80
- actions_txt = if Setup.options['autoinstall'] != false
81
- steps = 1
82
- '(possibly) install required software'
83
- else
84
- ''
85
- end
86
- if Setup.options['with-wxwin'] || Setup.options['wxwin'].nil?
87
- actions_txt << ', ' if steps>0
88
- actions_txt << 'build the wxWidgets libraries (if needed), '
89
- actions_txt << "\n" if steps>0
90
- steps += 1
88
+ log_file = File.join(WxRuby::ROOT, 'setup.log')
89
+ if Setup.options['log']
90
+ if File.directory?(Setup.options['log']) && File.writable?(Setup.options['log'])
91
+ log_file = File.join(Setup.options['log'], 'setup.log')
91
92
  else
92
- actions_txt << ',' if steps>0
93
+ $stderr.puts "ERROR: cannot write log to #{Setup.options['log']}. Log path must exist and be writable."
94
+ exit(1)
93
95
  end
94
- actions_txt << 'build the native wxRuby3 extensions '
95
- actions_txt << "\n" if steps==1
96
- actions_txt << 'and generate the wxRuby3 reference documentation.'
97
- $stdout.puts <<~__INFO_TXT
98
-
99
- ---
100
- Now running wxRuby3 post-install setup.
101
- This will #{actions_txt}
102
- Please be patient as this may take quite a while depending on your system.
103
- ---
104
-
105
- __INFO_TXT
106
- log_file = File.join(WxRuby::ROOT, 'setup.log')
107
- if Setup.options['log']
108
- if File.directory?(Setup.options['log']) && File.writable?(Setup.options['log'])
109
- log_file = File.join(Setup.options['log'], 'setup.log')
96
+ end
97
+ run_env = {'WXRUBY_RUN_SILENT' => "#{log_file}"}
98
+ run_env['WXRUBY_VERBOSE'] = '1' if Setup.options[:verbose]
99
+
100
+ result = false
101
+
102
+ FileUtils.chdir(WxRuby::ROOT) do
103
+ # first run the configure command
104
+ result = system(run_env, "#{cfg_cmd}")
105
+
106
+ # if succeeded
107
+ if result
108
+ # load the wxRuby3 build config
109
+ build_cfg = ::JSON.load(File.read('.wxconfig'))
110
+
111
+ # now determine the steps to execute
112
+ steps = 0
113
+ actions_txt = if Setup.options['autoinstall'] != false
114
+ steps = 1
115
+ '(possibly) install required software'
116
+ else
117
+ ''
118
+ end
119
+ if build_cfg['with-wxwin'] || (!build_cfg['wxwin'].to_s.empty? && build_cfg['wxwin'].to_s != '@system')
120
+ actions_txt << ', ' if steps>0
121
+ actions_txt << 'build the wxWidgets libraries, '
122
+ actions_txt << "\n" if steps>0
123
+ steps += 1
110
124
  else
111
- $stderr.puts "ERROR: cannot write log to #{Setup.options['log']}. Log path must exist and be writable."
112
- exit(1)
125
+ actions_txt << ',' if steps>0
113
126
  end
127
+ actions_txt << 'build the native wxRuby3 extensions '
128
+ actions_txt << "\n" if steps==1
129
+ actions_txt << 'and generate the wxRuby3 reference documentation.'
130
+ $stdout.puts <<~__INFO_TXT
131
+
132
+ ---
133
+ Now running wxRuby3 post-install setup.
134
+ This will #{actions_txt}
135
+ Please be patient as this may take quite a while depending on your system.
136
+ (#{steps >= 2 ? '10-15' : '5-10'} min on a modern PC with multicore CPU but longer with older/slower CPUs)
137
+ ---
138
+
139
+ __INFO_TXT
140
+ # can't rely on FileUtils#chdir returning the block result (bug in older Rubies) so assign result here
141
+ result = system(run_env, "rake -m wxruby:gem:setup#{Setup.options['log'] ? '[:keep_log]' : ''} && gem rdoc wxruby3 --overwrite")
114
142
  end
115
- run_env = {'WXRUBY_RUN_SILENT' => "#{log_file}"}
116
- run_env['WXRUBY_VERBOSE'] = '1' if Setup.options[:verbose]
117
- # can't rely on FileUtils#chdir returning the block result (bug in older Rubies) so assign result here
118
- result = system(run_env, "#{cfg_cmd} && rake -m wxruby:gem:setup#{Setup.options['log'] ? '[:keep_log]' : ''} && gem rdoc wxruby3 --overwrite")
119
143
  end
120
144
  exit(result ? 0 : 1)
121
145
  end
data/rakelib/gem.rb CHANGED
@@ -214,16 +214,18 @@ module WXRuby3
214
214
  end
215
215
  elsif uri.scheme == 'http' || uri.scheme == 'https'
216
216
  # download the binary release package
217
- $stdout.puts "Downloading #{uri.path}..."
217
+ $stdout.puts "Downloading #{uri}..."
218
218
  filename = File.basename(uri.path)
219
- if WXRuby3.config.download_file(uri.path, filename)
219
+ if WXRuby3.config.download_file(uri.to_s, filename)
220
220
  sha_file = File.basename(filename, '.*')+DIGEST_EXT
221
- uri.path = File.join(File.dirname(uri.path), sha_file)
222
- unless WXRuby3.config.download_file(uri.path, sha_file)
221
+ sha_uri = File.join(File.dirname(uri.to_s), sha_file)
222
+ unless WXRuby3.config.download_file(sha_uri, sha_file)
223
223
  $stderr.puts "ERROR: Unable to download digest signature for binary release package : #{package}"
224
224
  exit(1)
225
225
  end
226
226
  exit(1) unless install_bin_pkg(filename)
227
+ # cleanup, remove downloaded files
228
+ FileUtils.rm_f([filename, sha_file])
227
229
  true
228
230
  else
229
231
  $stderr.puts "ERROR: Unable to download binary release package (#{package})!"
@@ -241,6 +243,8 @@ module WXRuby3
241
243
  exit(1)
242
244
  end
243
245
  exit(1) unless install_bin_pkg(bin_pkg_name+BINPKG_EXT)
246
+ # cleanup, remove downloaded files
247
+ FileUtils.rm_f([bin_pkg_name+BINPKG_EXT, bin_pkg_name+DIGEST_EXT])
244
248
  true
245
249
  else
246
250
  if prebuilt_only
@@ -98,7 +98,7 @@ module WXRuby3
98
98
  private
99
99
 
100
100
  def wx_configure
101
- bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --without-regex --with-expat=builtin --with-zlib=builtin --disable-debug_info')
101
+ bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --without-regex --without-libcurl --with-expat=builtin --with-zlib=builtin --disable-debug_info')
102
102
  end
103
103
 
104
104
  def wx_make
@@ -59,9 +59,9 @@ extern "C" {
59
59
  #endif
60
60
 
61
61
  WXRB_EXPORT_FLAG VALUE
62
- SWIG_Ruby_AppendOutput(VALUE target, VALUE o)
62
+ SWIG_wxRuby_AppendOutput(VALUE target, VALUE o, int is_void)
63
63
  {
64
- if (NIL_P(target))
64
+ if (NIL_P(target) && is_void != 0)
65
65
  {
66
66
  target = o;
67
67
  }
@@ -19,6 +19,7 @@ module WXRuby3
19
19
  map_check code: ''
20
20
  end
21
21
  super
22
+ spec.ignore 'wxGenericAboutBox' # wrapped with wxGenericAboutDialog
22
23
  end
23
24
  end # class AboutDialogInfo
24
25
 
@@ -16,7 +16,103 @@ module WXRuby3
16
16
 
17
17
  def setup
18
18
  super
19
- spec.gc_as_object
19
+ spec.gc_as_object 'wxAuiManager'
20
+ if Config.instance.wx_version >= '3.3.0'
21
+ spec.items << 'wxAuiSerializer' << 'wxAuiDockLayoutInfo' << 'wxAuiPaneLayoutInfo' << 'wxAuiTabLayoutInfo' << 'wxAuiDeserializer'
22
+ spec.gc_as_untracked 'wxAuiSerializer', 'wxAuiDeserializer', 'wxAuiDockLayoutInfo', 'wxAuiPaneLayoutInfo', 'wxAuiTabLayoutInfo'
23
+ spec.regard 'wxAuiDockLayoutInfo::dock_direction',
24
+ 'wxAuiDockLayoutInfo::dock_layer',
25
+ 'wxAuiDockLayoutInfo::dock_row',
26
+ 'wxAuiDockLayoutInfo::dock_pos',
27
+ 'wxAuiDockLayoutInfo::dock_proportion',
28
+ 'wxAuiDockLayoutInfo::dock_size',
29
+ 'wxAuiPaneLayoutInfo::name',
30
+ 'wxAuiPaneLayoutInfo::floating_pos',
31
+ 'wxAuiPaneLayoutInfo::floating_size',
32
+ 'wxAuiPaneLayoutInfo::is_maximized'
33
+ spec.add_extend_code 'wxAuiTabLayoutInfo', <<~__HEREDOC
34
+ VALUE get_pages()
35
+ {
36
+ VALUE rc = rb_ary_new();
37
+ for (int page : self->pages)
38
+ {
39
+ rb_ary_push(rc, INT2NUM(page));
40
+ }
41
+ return rc;
42
+ }
43
+
44
+ void set_pages(VALUE rb_pages)
45
+ {
46
+ if (TYPE(rb_pages) == T_ARRAY)
47
+ {
48
+ std::vector<int> pgs;
49
+ for (int i = 0; i < RARRAY_LEN(rb_pages); i++)
50
+ {
51
+ pgs.push_back(NUM2INT(rb_ary_entry(rb_pages, i)));
52
+ }
53
+ self->pages = pgs;
54
+ }
55
+ else
56
+ {
57
+ rb_raise(rb_eTypeError, "Expected Array of Integer for 1");
58
+ }
59
+ }
60
+ __HEREDOC
61
+ spec.map 'std::vector<wxAuiPaneLayoutInfo>' => 'Array<Wx::AuiPaneLayoutInfo>' do
62
+ map_out code: <<~__CODE
63
+ $result = rb_ary_new();
64
+ std::vector<wxAuiPaneLayoutInfo>& panes = (std::vector<wxAuiPaneLayoutInfo>&)$1;
65
+ for (const wxAuiPaneLayoutInfo& pane : panes)
66
+ {
67
+ VALUE r_pane = SWIG_NewPointerObj(new wxAuiPaneLayoutInfo(pane), SWIGTYPE_p_wxAuiPaneLayoutInfo, SWIG_POINTER_OWN);
68
+ rb_ary_push($result, r_pane);
69
+ }
70
+ __CODE
71
+ map_directorout code: <<~__CODE
72
+ if (TYPE($input) == T_ARRAY)
73
+ {
74
+ for (int i = 0; i < RARRAY_LEN($input); i++)
75
+ {
76
+ void *ptr;
77
+ VALUE r_pane = rb_ary_entry($input, i);
78
+ int res = SWIG_ConvertPtr(r_pane, &ptr, SWIGTYPE_p_wxAuiPaneLayoutInfo, 0);
79
+ if (!SWIG_IsOK(res) || !ptr) {
80
+ Swig::DirectorTypeMismatchException::raise(swig_get_self(), "load_panes", rb_eTypeError, "in return value. Expected Array of Wx::AuiPaneLayoutInfo");
81
+ }
82
+ wxAuiPaneLayoutInfo *pane = reinterpret_cast< wxAuiPaneLayoutInfo * >(ptr);
83
+ $result.push_back(*pane);
84
+ }
85
+ }
86
+ __CODE
87
+ end
88
+ spec.map 'std::vector<wxAuiTabLayoutInfo>' => 'Array<Wx::AuiTabLayoutInfo>' do
89
+ map_out code: <<~__CODE
90
+ $result = rb_ary_new();
91
+ std::vector<wxAuiTabLayoutInfo>& tabs = (std::vector<wxAuiTabLayoutInfo>&)$1;
92
+ for (const wxAuiTabLayoutInfo& tab : tabs)
93
+ {
94
+ VALUE r_tab = SWIG_NewPointerObj(new wxAuiTabLayoutInfo(tab), SWIGTYPE_p_wxAuiTabLayoutInfo, SWIG_POINTER_OWN);
95
+ rb_ary_push($result, r_tab);
96
+ }
97
+ __CODE
98
+ map_directorout code: <<~__CODE
99
+ if (TYPE($input) == T_ARRAY)
100
+ {
101
+ for (int i = 0; i < RARRAY_LEN($input); i++)
102
+ {
103
+ void *ptr;
104
+ VALUE r_tab = rb_ary_entry($input, i);
105
+ int res = SWIG_ConvertPtr(r_tab, &ptr, SWIGTYPE_p_wxAuiTabLayoutInfo, 0);
106
+ if (!SWIG_IsOK(res) || !ptr) {
107
+ Swig::DirectorTypeMismatchException::raise(swig_get_self(), "load_docks", rb_eTypeError, "in return value. Expected Array of Wx::AuiTabLayoutInfo");
108
+ }
109
+ wxAuiTabLayoutInfo *tab = reinterpret_cast< wxAuiTabLayoutInfo * >(ptr);
110
+ $result.push_back(*tab);
111
+ }
112
+ }
113
+ __CODE
114
+ end
115
+ end
20
116
  # need a custom implementation to handle (event handler proc) cleanup
21
117
  spec.add_header_code <<~__HEREDOC
22
118
  #include "wx/aui/aui.h"
@@ -80,7 +176,7 @@ module WXRuby3
80
176
  rb_gc_mark( rb_art_prov );
81
177
  }
82
178
  }
83
- __HEREDOC
179
+ __HEREDOC
84
180
  spec.add_swig_code '%markfunc wxAuiManager "GC_mark_wxAuiManager";'
85
181
  # provide pure Ruby implementation based on use custom alternative provided below
86
182
  spec.ignore('wxAuiManager::GetAllPanes')
@@ -110,12 +206,37 @@ module WXRuby3
110
206
  WXRubyAuiManager* aui_mng = dynamic_cast<WXRubyAuiManager*> (self);
111
207
  managedWnd->Bind(wxEVT_CLOSE_WINDOW, &WXRubyAuiManager::OnManagedWindowClose, aui_mng);
112
208
  }
113
- __HEREDOC
209
+ __HEREDOC
114
210
  spec.suppress_warning(473, 'wxAuiManager::CreateFloatingFrame')
115
211
  spec.do_not_generate(:variables, :defines, :enums, :functions) # with AuiPaneInfo
116
212
  end
213
+
214
+ def doc_generator
215
+ AuiManagerDocGenerator.new(self)
216
+ end
117
217
  end # class AuiManager
118
218
 
219
+ class AuiManagerDocGenerator < DocGenerator
220
+
221
+ def gen_class_doc_members(fdoc, clsdef, cls_members, alias_methods)
222
+ super
223
+ if Config.instance.wx_version >= '3.3.0' && clsdef.name == 'wxAuiTabLayoutInfo'
224
+ fdoc.doc.puts 'Returns the indices of the pages in this tab control in their order on screen.'
225
+ fdoc.doc.puts 'If this array is empty, it means that the tab control contains all notebook pages in natural order.'
226
+ fdoc.doc.puts '@return [::Array<Integer>] indices of the pages in this tab control'
227
+ fdoc.puts 'def get_pages; end'
228
+ fdoc.puts 'alias :pages :get_pages'
229
+ fdoc.puts
230
+ fdoc.doc.puts 'Set the indices of the pages in this tab control in their order on screen.'
231
+ fdoc.doc.puts 'If this array is empty, it means that the tab control contains all notebook pages in natural order.'
232
+ fdoc.doc.puts '@param [::Array<Integer>] pages indices of the pages in this tab control'
233
+ fdoc.puts 'def set_pages(pages) end'
234
+ fdoc.puts 'alias :pages= :set_pages'
235
+ end
236
+ end
237
+
238
+ end
239
+
119
240
  end # class Director
120
241
 
121
242
  end # module WXRuby3
@@ -25,6 +25,13 @@ module WXRuby3
25
25
  wxAuiNotebookPage::bitmap
26
26
  wxAuiNotebookPage::rect
27
27
  wxAuiNotebookPage::active]
28
+ if Config.instance.wx_version >= '3.3.0'
29
+ spec.items << 'wxAuiNotebookPosition'
30
+ spec.regard 'wxAuiNotebookPosition::tabctrl',
31
+ 'wxAuiNotebookPosition::page'
32
+ spec.make_readonly 'wxAuiNotebookPosition::tabctrl',
33
+ 'wxAuiNotebookPosition::page'
34
+ end
28
35
  # reset type mapping done in BookCtrls as the non-const arg is used for query-ing here (FindTab)
29
36
  # (wxWidgets should have made this a const arg)
30
37
  spec.map_apply 'SWIGTYPE *' => 'wxWindow* page'
@@ -16,7 +16,7 @@ module WXRuby3
16
16
  spec.gc_as_untracked('wxColour')
17
17
  spec.require_app 'wxColour::wxColour(const wxColour&)'
18
18
  spec.ignore(%w[
19
- wxColour::GetPixel wxTransparentColour wxColour::operator!=
19
+ wxColour::GetPixel wxTransparentColour wxColour::operator!= wxColour::operator==
20
20
  wxBLACK wxBLUE wxCYAN wxGREEN wxYELLOW wxLIGHT_GREY wxRED wxWHITE
21
21
  ])
22
22
  spec.map 'unsigned char *' => 'Integer' do
@@ -15,7 +15,7 @@ module WXRuby3
15
15
  def setup
16
16
  super
17
17
  spec.gc_as_object
18
- spec.ignore 'wxDataFormat::operator ==(wxDataFormatId)'
18
+ spec.ignore 'wxDataFormat::operator=='
19
19
  if Config.platform == :mingw
20
20
  # The formal signature for these is NativeFormat; this is required on
21
21
  # MSVC as otherwise an impermissible implicit cast is tried, and so
@@ -230,8 +230,10 @@ module WXRuby3
230
230
  # regard protected methods
231
231
  spec.regard 'wxGenericAboutDialog::DoAddCustomControls',
232
232
  'wxGenericAboutDialog::AddControl',
233
- 'wxGenericAboutDialog::AddText',
234
- 'wxGenericAboutDialog::GetCustomControlParent'
233
+ 'wxGenericAboutDialog::AddText'
234
+ if Config.instance.wx_version >= '3.3.0'
235
+ spec.regard 'wxGenericAboutDialog::GetCustomControlParent'
236
+ end
235
237
  if Config.instance.features_set?('USE_COLLPANE')
236
238
  spec.regard 'wxGenericAboutDialog::AddCollapsiblePane'
237
239
  end
@@ -47,6 +47,7 @@ module WXRuby3
47
47
  if (class_name == "wxEvent" || class_name == "wxCommandEvent")
48
48
  {
49
49
  // special clones for Ruby derived events are already managed and tracked
50
+ // (this also covers Wx::AsyncProcCallEvent)
50
51
  return SWIG_RubyInstanceFor((void *)wx_evt);
51
52
  }
52
53