wxruby3 1.3.0 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
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