wxruby3 0.9.7 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +183 -42
  3. data/README.md +40 -48
  4. data/ext/mkrf_conf_ext.rb +72 -0
  5. data/lib/wx/core/app.rb +16 -0
  6. data/lib/wx/core/colour.rb +36 -28
  7. data/lib/wx/core/const.rb +19 -0
  8. data/lib/wx/core/enum.rb +17 -1
  9. data/lib/wx/core/geometry.rb +121 -0
  10. data/lib/wx/core/graphics_pen_info.rb +18 -0
  11. data/lib/wx/core/image.rb +49 -0
  12. data/lib/wx/core/menu_bar.rb +11 -0
  13. data/lib/wx/core/paintdc.rb +9 -3
  14. data/lib/wx/core/secret_store.rb +38 -0
  15. data/lib/wx/doc/app.rb +97 -41
  16. data/lib/wx/doc/bitmap.rb +4 -0
  17. data/lib/wx/doc/client_dc.rb +2 -2
  18. data/lib/wx/doc/clipboard.rb +1 -1
  19. data/lib/wx/doc/colour.rb +12 -0
  20. data/lib/wx/doc/const.rb +16 -0
  21. data/lib/wx/doc/cursor.rb +4 -0
  22. data/lib/wx/doc/dc_overlay.rb +34 -0
  23. data/lib/wx/doc/enum.rb +7 -1
  24. data/lib/wx/doc/event_blocker.rb +1 -1
  25. data/lib/wx/doc/evthandler.rb +25 -3
  26. data/lib/wx/doc/functions.rb +3 -6
  27. data/lib/wx/doc/gc_dc.rb +13 -4
  28. data/lib/wx/doc/geometry.rb +136 -0
  29. data/lib/wx/doc/graphics_context.rb +25 -7
  30. data/lib/wx/doc/icon.rb +4 -0
  31. data/lib/wx/doc/image.rb +56 -0
  32. data/lib/wx/doc/list_ctrl.rb +6 -6
  33. data/lib/wx/doc/memory_dc.rb +2 -11
  34. data/lib/wx/doc/mirror_dc.rb +1 -1
  35. data/lib/wx/doc/pen.rb +26 -0
  36. data/lib/wx/doc/persistence_manager.rb +1 -1
  37. data/lib/wx/doc/persistent_object.rb +1 -1
  38. data/lib/wx/doc/pg/property_grid_interface.rb +3 -3
  39. data/lib/wx/doc/prt/printer_dc.rb +2 -2
  40. data/lib/wx/doc/region_iterator.rb +1 -1
  41. data/lib/wx/doc/scaled_dc.rb +1 -1
  42. data/lib/wx/doc/screen_dc.rb +1 -1
  43. data/lib/wx/doc/secret_store.rb +55 -0
  44. data/lib/wx/doc/svg_file_dc.rb +1 -1
  45. data/lib/wx/doc/textctrl.rb +1 -1
  46. data/lib/wx/doc/tree_ctrl.rb +2 -2
  47. data/lib/wx/doc/validator.rb +6 -6
  48. data/lib/wx/doc/variant.rb +2 -2
  49. data/lib/wx/doc/window.rb +5 -4
  50. data/lib/wx/grid/keyword_defs.rb +1 -1
  51. data/lib/wx/html/keyword_defs.rb +3 -3
  52. data/lib/wx/keyword_defs.rb +76 -71
  53. data/lib/wx/pg/keyword_defs.rb +2 -2
  54. data/lib/wx/pg/pg_property.rb +12 -0
  55. data/lib/wx/rbn/keyword_defs.rb +1 -1
  56. data/lib/wx/rtc/keyword_defs.rb +1 -1
  57. data/lib/wx/stc/keyword_defs.rb +1 -1
  58. data/lib/wx/version.rb +1 -1
  59. data/lib/wx/wxruby/base.rb +3 -5
  60. data/lib/wx/wxruby/cmd/check.rb +182 -0
  61. data/lib/wx/wxruby/cmd/sampler.rb +1 -1
  62. data/lib/wx/wxruby/cmd/setup.rb +9 -3
  63. data/lib/wx/wxruby/cmd/test.rb +1 -1
  64. data/rakelib/configure.rb +67 -52
  65. data/rakelib/gem.rake +97 -66
  66. data/rakelib/gem.rb +294 -41
  67. data/rakelib/install.rb +3 -3
  68. data/rakelib/lib/config/{cygwin.rb → freebsd.rb} +1 -1
  69. data/rakelib/lib/config/linux.rb +4 -2
  70. data/rakelib/lib/config/macosx.rb +42 -11
  71. data/rakelib/lib/config/mingw.rb +2 -2
  72. data/rakelib/lib/config/pkgman/{base.rb → linux.rb} +36 -61
  73. data/rakelib/lib/config/pkgman/macosx.rb +17 -78
  74. data/rakelib/lib/config/unixish.rb +17 -8
  75. data/rakelib/lib/config/{netbsd.rb → unknown.rb} +3 -2
  76. data/rakelib/lib/config.rb +74 -33
  77. data/rakelib/lib/core/include/enum.inc +31 -1
  78. data/rakelib/lib/director/affine_matrix.rb +51 -0
  79. data/rakelib/lib/director/app.rb +29 -13
  80. data/rakelib/lib/director/art_provider.rb +4 -0
  81. data/rakelib/lib/director/aui_manager.rb +1 -1
  82. data/rakelib/lib/director/cursor.rb +6 -2
  83. data/rakelib/lib/director/dc.rb +1 -6
  84. data/rakelib/lib/director/derived_dc.rb +88 -31
  85. data/rakelib/lib/director/geometry.rb +142 -0
  86. data/rakelib/lib/director/graphics_context.rb +3 -2
  87. data/rakelib/lib/director/graphics_object.rb +18 -25
  88. data/rakelib/lib/director/grid_ctrl.rb +2 -2
  89. data/rakelib/lib/director/image.rb +59 -0
  90. data/rakelib/lib/director/menu.rb +2 -3
  91. data/rakelib/lib/director/menu_bar.rb +0 -3
  92. data/rakelib/lib/director/pen.rb +1 -1
  93. data/rakelib/lib/director/richtext_composite_object.rb +2 -4
  94. data/rakelib/lib/director/richtext_ctrl.rb +1 -1
  95. data/rakelib/lib/director/secret_store.rb +117 -0
  96. data/rakelib/lib/director/system_settings.rb +1 -1
  97. data/rakelib/lib/director/tree_event.rb +2 -2
  98. data/rakelib/lib/director/window.rb +4 -3
  99. data/rakelib/lib/extractor/function.rb +1 -1
  100. data/rakelib/lib/generate/doc/animation_ctrl.yaml +10 -0
  101. data/rakelib/lib/generate/doc/banner_window.yaml +35 -0
  102. data/rakelib/lib/generate/doc/graphics_context.yaml +12 -0
  103. data/rakelib/lib/generate/doc/graphics_object.yaml +12 -0
  104. data/rakelib/lib/generate/doc/grid_ctrl.yaml +25 -0
  105. data/rakelib/lib/generate/doc/header_ctrl.yaml +91 -0
  106. data/rakelib/lib/generate/doc/icon.yaml +10 -0
  107. data/rakelib/lib/generate/doc/info_bar.yaml +27 -0
  108. data/rakelib/lib/generate/doc/log.yaml +1 -1
  109. data/rakelib/lib/generate/doc/media_ctrl.yaml +27 -0
  110. data/rakelib/lib/generate/doc/persistent_window.yaml +22 -0
  111. data/rakelib/lib/generate/doc/pg_editor.yaml +1 -1
  112. data/rakelib/lib/generate/doc/pg_property.yaml +4 -4
  113. data/rakelib/lib/generate/doc/rearrange_list.yaml +14 -0
  114. data/rakelib/lib/generate/doc/ribbon_panel.yaml +15 -0
  115. data/rakelib/lib/generate/doc/rich_text_formatting_dialog.yaml +26 -0
  116. data/rakelib/lib/generate/doc/secret_store.yaml +55 -0
  117. data/rakelib/lib/generate/doc/text_ctrl.yaml +1 -1
  118. data/rakelib/lib/generate/doc/wizard.yaml +27 -0
  119. data/rakelib/lib/generate/doc.rb +5 -5
  120. data/rakelib/lib/generate/interface.rb +1 -1
  121. data/rakelib/lib/specs/interfaces.rb +4 -0
  122. data/rakelib/lib/swig_runner.rb +24 -3
  123. data/rakelib/lib/typemap/common.rb +10 -0
  124. data/rakelib/lib/typemap/points_list.rb +8 -2
  125. data/rakelib/lib/typemap/richtext.rb +17 -0
  126. data/rakelib/prepost.rake +8 -1
  127. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +4 -0
  128. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +3 -3
  129. data/samples/dialogs/wizard.rb +20 -19
  130. data/samples/drawing/art/drawing/image.bmp +0 -0
  131. data/samples/drawing/art/drawing/mask.bmp +0 -0
  132. data/samples/drawing/art/drawing/pat35.bmp +0 -0
  133. data/samples/drawing/art/drawing/pat36.bmp +0 -0
  134. data/samples/drawing/art/drawing/pat4.bmp +0 -0
  135. data/samples/drawing/art/drawing/smile.xpm +42 -0
  136. data/samples/drawing/drawing.rb +2276 -0
  137. data/samples/drawing/tn_drawing.png +0 -0
  138. data/samples/html/html.rb +1 -1
  139. data/samples/propgrid/propgrid.rb +1 -1
  140. data/samples/propgrid/propgrid_minimal.rb +1 -1
  141. data/samples/propgrid/sample_props.rb +1 -1
  142. data/samples/sampler/editor.rb +13 -11
  143. data/samples/sampler/sample.rb +2 -0
  144. data/samples/sampler.rb +14 -10
  145. data/samples/text/richtext.rb +53 -0
  146. data/samples/text/scintilla.rb +1 -1
  147. data/samples/text/unicode.rb +4 -4
  148. data/tests/lib/wxapp_runner.rb +1 -1
  149. data/tests/test_config.rb +7 -4
  150. data/tests/test_ext_controls.rb +12 -5
  151. data/tests/test_secret_store.rb +83 -0
  152. data/tests/test_std_controls.rb +12 -12
  153. metadata +66 -47
  154. data/lib/wx/doc/extra/00_starting.md +0 -154
  155. data/lib/wx/doc/extra/01_packages.md +0 -180
  156. data/lib/wx/doc/extra/02_lifecycles.md +0 -166
  157. data/lib/wx/doc/extra/03_dialogs.md +0 -57
  158. data/lib/wx/doc/extra/04_enums.md +0 -143
  159. data/lib/wx/doc/extra/05_event-handling.md +0 -191
  160. data/lib/wx/doc/extra/06_geometry.md +0 -62
  161. data/lib/wx/doc/extra/07_colour_and_font.md +0 -52
  162. data/lib/wx/doc/extra/08_extensions.md +0 -144
  163. data/lib/wx/doc/extra/09_exceptions.md +0 -54
  164. data/lib/wx/doc/extra/10_art.md +0 -111
  165. data/lib/wx/doc/extra/11_drawing_and_dc.md +0 -62
  166. data/lib/wx/doc/extra/12_client_data.md +0 -89
  167. data/lib/wx/doc/extra/13_validators.md +0 -139
  168. data/lib/wx/doc/extra/14_config.md +0 -101
  169. data/lib/wx/doc/extra/15_persistence.md +0 -148
  170. data/rakefile +0 -14
  171. data/rakelib/lib/config/pkgman/arch.rb +0 -53
  172. data/rakelib/lib/config/pkgman/debian.rb +0 -66
  173. data/rakelib/lib/config/pkgman/rhel.rb +0 -54
  174. data/rakelib/lib/config/pkgman/suse.rb +0 -54
  175. data/samples/sampler/back.xpm +0 -21
  176. data/samples/sampler/copy.xpm +0 -44
  177. data/samples/sampler/cut.xpm +0 -46
  178. data/samples/sampler/filesave.xpm +0 -42
  179. data/samples/sampler/find.xpm +0 -62
  180. data/samples/sampler/findrepl.xpm +0 -63
  181. data/samples/sampler/forward.xpm +0 -21
  182. data/samples/sampler/paste.xpm +0 -46
  183. data/samples/sampler/redo.xpm +0 -58
  184. data/samples/sampler/undo.xpm +0 -58
@@ -18,7 +18,7 @@ module WXRuby3
18
18
 
19
19
  def install(pkgs)
20
20
  # do we need to install anything?
21
- if !pkgs.empty?
21
+ unless pkgs.empty?
22
22
  # can we install XCode commandline tools?
23
23
  unless no_autoinstall? || !pkgs.include?('xcode') || has_sudo? || is_root?
24
24
  STDERR.puts 'ERROR: Cannot check for or install required packages. Please install sudo or run as root and try again.'
@@ -50,18 +50,20 @@ module WXRuby3
50
50
 
51
51
  private
52
52
 
53
+ def pkgman
54
+ @pkgman ||= WXRuby3.config.sysinfo.os.pkgman
55
+ end
56
+
53
57
  def do_install(pkgs)
54
58
  rc = true
55
59
  # first see if we need to install XCode commandline tools
56
60
  if pkgs.include?('xcode')
57
61
  pkgs.delete('xcode')
58
- rc = run('xcode-select --install')
62
+ rc = auth_run('xcode-select --install')
59
63
  end
60
- # now check if we need any other packages (which need Homebrew or MacPorts)
64
+ # now check if we need any other packages
61
65
  if rc && !pkgs.empty?
62
- # Has Ruby been installed through MacPorts?
63
- if has_macports? &&
64
- (ruby_info = expand('port -q installed installed').strip.split("\n").find { |ln| ln.strip =~ /\Aruby\d+\s/ })
66
+ if pkgman.macports?
65
67
 
66
68
  # this is really crap; with MacPorts we need to install swig-ruby instead of simply swig
67
69
  # which for whatever nonsensical reason will pull in another (older) Ruby version (probably 2.3 or such)
@@ -70,59 +72,15 @@ module WXRuby3
70
72
  pkgs.delete('swig')
71
73
  pkgs << 'swig-ruby'
72
74
  end
73
- # in case MacPorts was installed with root privileges this install would also have to be run
74
- # with root privileges (otherwise it would fail early on with access problems) so we can
75
- # just run without sudo as we either have root privileges for root-installed MacPorts or
76
- # we're running without root privileges for user-installed MacPorts
77
- pkgs.each { |pkg| rc &&= sh("port install #{pkg}") }
78
-
79
- # or are we running without root privileges and have Homebrew installed?
80
- # (Ruby may be installed using Homebrew itself or using a Ruby version manager like RVM)
81
- elsif !is_root? && has_homebrew?
82
75
 
83
- pkgs.each { |pkg| rc &&= sh("brew install #{pkg}") }
84
-
85
- # or do we have MacPorts (running either privileged or not) and
86
- # a Ruby installed using a Ruby version manager.
87
- elsif has_macports?
88
-
89
- # same crap as above
90
- if pkgs.include?('swig')
91
- pkgs.delete('swig')
92
- pkgs << 'swig-ruby'
93
- end
94
- # in case MacPorts was installed with root privileges this install would also have to be run
95
- # with root privileges (otherwise it would fail early on with access problems) so we can
96
- # just run without sudo as we either have root privileges for root-installed MacPorts or
97
- # we're running without root privileges for user-installed MacPorts
98
- pkgs.each { |pkg| rc &&= sh("port install #{pkg}") }
99
-
100
- else
101
- if has_homebrew? || is_root?
102
- $stderr.puts <<~__ERROR_TXT
103
- ERROR: Unsupported Ruby installation. wxRuby3 can only be installed for Ruby with root privileges
104
- in case Ruby was installed with MacPorts. Homebrew should not be run with root privileges.
105
-
106
- Re-install a supported Ruby setup and try again.
107
- __ERROR_TXT
108
- else
109
- $stderr.puts <<~__ERROR_TXT
110
- ERROR: Unsupported Ruby installation. wxRuby3 requires either a MacPorts installed Ruby version
111
- or a non-privileged Ruby installation and have Homebrew installed.
112
-
113
- Install either Homebrew or MacPorts and try again.
114
- __ERROR_TXT
115
- end
116
- exit(1)
117
76
  end
77
+
78
+ # actually install packages
79
+ pkgs.each { |pkg| rc &&= run(pkgman.make_install_command(pkg)); break unless rc }
118
80
  end
119
81
  rc
120
82
  end
121
83
 
122
- def builds_wxwidgets?
123
- Config.get_config('with-wxwin') && Config.get_cfg_string('wxwin').empty?
124
- end
125
-
126
84
  def no_autoinstall?
127
85
  Config.get_config('autoinstall') == false
128
86
  end
@@ -132,46 +90,27 @@ module WXRuby3
132
90
  end
133
91
 
134
92
  def has_sudo?
135
- system('command -v sudo > /dev/null')
93
+ WXRuby3.config.sysinfo.os.has_sudo?
136
94
  end
137
95
 
138
96
  def is_root?
139
- if @is_root.nil?
140
- @is_root = (`id -u 2>/dev/null`.chomp == '0')
141
- end
142
- @is_root
143
- end
144
-
145
- def has_macports?
146
- if @has_macports.nil?
147
- @has_macports = system('command -v port>/dev/null')
148
- end
97
+ WXRuby3.config.sysinfo.os.is_root?
149
98
  end
150
99
 
151
- def has_homebrew?
152
- if @has_homebrew.nil?
153
- @has_homebrew = system('command -v brew>/dev/null')
154
- end
155
- end
156
-
157
- def run(cmd)
100
+ def auth_run(cmd)
158
101
  $stdout.print "Running #{cmd}..."
159
102
  rc = WXRuby3.config.sh("#{is_root? ? '' : 'sudo '}#{cmd}")
160
- $stderr.puts (rc ? 'done!' : 'FAILED!')
103
+ $stderr.puts(rc ? 'done!' : 'FAILED!')
161
104
  rc
162
105
  end
163
106
 
164
- def sh(*cmd, title: nil)
107
+ def run(*cmd, title: nil)
165
108
  $stdout.print(title ? title : "Running #{cmd}...")
166
109
  rc = WXRuby3.config.sh(*cmd)
167
- $stderr.puts (rc ? 'done!' : 'FAILED!')
110
+ $stderr.puts(rc ? 'done!' : 'FAILED!')
168
111
  rc
169
112
  end
170
113
 
171
- def expand(cmd)
172
- WXRuby3.config.expand(cmd)
173
- end
174
-
175
114
  end
176
115
 
177
116
  end
@@ -66,6 +66,12 @@ module WXRuby3
66
66
  def get_rpath_origin
67
67
  "$ORIGIN"
68
68
  end
69
+ protected :get_rpath_origin
70
+
71
+ # add deployment lookup paths for wxruby shared libraries
72
+ def update_shlib_loadpaths(shlib)
73
+ WXRuby3.config.patch_rpath(shlib, WXRuby3.config.get_rpath_origin, "#{WXRuby3.config.get_rpath_origin}/../ext")
74
+ end
69
75
 
70
76
  def expand(cmd)
71
77
  STDERR.puts "> sh: #{cmd}" if verbose?
@@ -74,6 +80,10 @@ module WXRuby3
74
80
  s
75
81
  end
76
82
 
83
+ def download_file(url, dest)
84
+ sh("curl -L #{url} --output #{dest}")
85
+ end
86
+
77
87
  private
78
88
 
79
89
  def wx_checkout
@@ -82,11 +92,10 @@ module WXRuby3
82
92
  chdir(ext_path) do
83
93
  if (rc = sh("#{get_cfg_string('git')} clone https://github.com/wxWidgets/wxWidgets.git"))
84
94
  chdir('wxWidgets') do
85
- tag = if @wx_version
86
- "v#{@wx_version}"
87
- else
88
- expand("#{get_cfg_string('git')} tag").split("\n").select { |t| (/\Av3\.(\d+)/ =~ t) && $1.to_i >= 2 }.max
89
- end
95
+ tag = wx_gitref ||
96
+ expand("#{get_cfg_string('git')} tag").split("\n").select do |t|
97
+ (/\Av(\d+)\.(\d+)\.\d+\Z/ =~ t) && (($1.to_i == 3 && $2.to_i >= 2) || $1.to_i > 3)
98
+ end.max
90
99
  # checkout the version we are building against
91
100
  rc = sh("#{get_cfg_string('git')} checkout #{tag}")
92
101
  end
@@ -101,7 +110,7 @@ module WXRuby3
101
110
  end
102
111
 
103
112
  def wx_configure
104
- bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --disable-debug_info')
113
+ bash('./configure --prefix=`pwd`/install --disable-tests --without-subdirs --without-regex --disable-debug_info')
105
114
  end
106
115
 
107
116
  def wx_make
@@ -210,8 +219,8 @@ module WXRuby3
210
219
  # add ruby defined shared ruby lib(s); not any other flags
211
220
  @ruby_libs.concat RB_CONFIG['LIBRUBYARG_SHARED'].split(' ').select { |s| s.start_with?('-l')}
212
221
 
213
- # maintain minimum compatibility with ABI 3.0.0
214
- @wx_abi_version = [ @wx_version, "3.0.0" ].min
222
+ # maintain minimum compatibility with ABI 3.0.1
223
+ @wx_abi_version = [ @wx_version, "3.0.1" ].min
215
224
  @wx_cppflags << "-DwxABI_VERSION=%s" % @wx_abi_version.tr(".", "0")
216
225
  end
217
226
  end
@@ -3,7 +3,8 @@
3
3
  # This software is released under the MIT license.
4
4
 
5
5
  ###
6
- # wxRuby3 buildtools configuration
6
+ # wxRuby3 buildtools configuration fallback
7
7
  ###
8
8
 
9
- raise "NETBSD platform is unsupported as yet."
9
+ $stderr.puts 'ERROR: Unsupported Ruby platform!'
10
+ exit(1)
@@ -11,6 +11,7 @@ require 'fileutils'
11
11
  require 'json'
12
12
  require 'open3'
13
13
  require 'monitor'
14
+ require 'plat4m'
14
15
 
15
16
  module FileUtils
16
17
  # add convenience methods
@@ -67,7 +68,8 @@ module WXRuby3
67
68
  'sodir' => '$siterubyverarch',
68
69
  }
69
70
 
70
- CFG_KEYS.concat(%w{wxwin wxxml wxwininstdir with-wxwin with-debug swig doxygen})
71
+ CFG_KEYS.concat(%w{wxwin wxxml wxwininstdir with-wxwin with-debug swig doxygen git})
72
+ WXW_SYS_KEY = 'with-system-wxwin'
71
73
  CONFIG.merge!({
72
74
  'wxwin' => ENV['WXWIN'] || '',
73
75
  'wxxml' => ENV['WXXML'] || '',
@@ -280,7 +282,7 @@ module WXRuby3
280
282
  end
281
283
  begin
282
284
  # setup ENV for child execution
283
- ENV.merge!(Config.instance.exec_env)
285
+ ENV.update(Config.instance.exec_env)
284
286
  output = `#{cmd.join(' ')}`
285
287
  ensure
286
288
  # restore ENV
@@ -311,7 +313,7 @@ module WXRuby3
311
313
  private :make_ruby_cmd
312
314
 
313
315
  def execute(*cmd)
314
- do_run(*cmd.flatten)
316
+ sh(exec_env.merge({'RUBYLIB'=>rb_lib_path}), cmd.flatten.join(' '), fail_on_error: true)
315
317
  end
316
318
 
317
319
  def run(*cmd, capture: nil, verbose: true)
@@ -350,7 +352,7 @@ module WXRuby3
350
352
 
351
353
  def test(*tests, **options)
352
354
  errors = 0
353
- excludes = (ENV['WXRUBY_TEST_EXCLUDE'] || '').split(';')
355
+ excludes = (ENV['WXRUBY_TEST_EXCLUDE'] || '').split(':')
354
356
  tests = Dir.glob(File.join(Config.instance.test_dir, '*.rb')) if tests.empty?
355
357
  tests.each do |test|
356
358
  unless excludes.include?(File.basename(test, '.*'))
@@ -381,6 +383,10 @@ module WXRuby3
381
383
  []
382
384
  end
383
385
 
386
+ def download_file(_url, _dest)
387
+ raise NoMethodError
388
+ end
389
+
384
390
  def install_prerequisites
385
391
  pkg_deps = check_tool_pkgs
386
392
  if get_config('autoinstall') == false
@@ -443,16 +449,22 @@ module WXRuby3
443
449
  def get_rpath_origin
444
450
  ''
445
451
  end
452
+ protected :get_rpath_origin
446
453
 
447
- def check_rpath_patch
454
+ def patch_rpath(_shlib, *)
448
455
  true
449
456
  end
457
+ protected :patch_rpath
450
458
 
451
- def patch_rpath(_shlib, *)
459
+ def update_shlib_loadpaths(_shlib)
452
460
  true
453
461
  end
454
462
 
455
- def update_shlib_loadpaths(_shlib, _deplibs)
463
+ def update_shlib_ruby_libpath(_shlib)
464
+ true
465
+ end
466
+
467
+ def update_shlib_wxwin_libpaths(_shlib, _deplibs)
456
468
  true
457
469
  end
458
470
 
@@ -494,15 +506,23 @@ module WXRuby3
494
506
  end
495
507
 
496
508
  def save
509
+ cfg = WXRuby3::CONFIG.dup
510
+ wxw_system = !!cfg.delete(WXW_SYS_KEY)
511
+ cfg['wxwin'] = '@system' if wxw_system
497
512
  File.open(build_cfg, 'w') do |f|
498
- f << JSON.pretty_generate(WXRuby3::CONFIG)
513
+ f << JSON.pretty_generate(cfg)
499
514
  end
500
515
  end
501
516
 
502
517
  def load
503
518
  if File.file?(build_cfg)
504
519
  File.open(build_cfg, 'r') do |f|
505
- WXRuby3::CONFIG.merge!(JSON.load(f.read))
520
+ cfg = JSON.load(f.read)
521
+ if cfg['wxwin'] == '@system'
522
+ cfg[WXW_SYS_KEY] = true
523
+ cfg.delete('wxwin')
524
+ end
525
+ WXRuby3::CONFIG.merge!(cfg)
506
526
  end
507
527
  end
508
528
  end
@@ -515,10 +535,8 @@ module WXRuby3
515
535
  case RUBY_PLATFORM
516
536
  when /mingw/
517
537
  :mingw
518
- when /cygwin/
519
- :cygwin
520
- when /netbsd/
521
- :netbsd
538
+ when /freebsd/
539
+ :freebsd
522
540
  when /darwin/
523
541
  :macosx
524
542
  when /linux/
@@ -538,15 +556,26 @@ module WXRuby3
538
556
  def initialize
539
557
  @ruby_exe = RB_CONFIG["ruby_install_name"]
540
558
 
541
- @extmk = /extmk\.rb/ =~ $0
542
- @platform = Config.platform
543
- require File.join(File.dirname(__FILE__), 'config', @platform.to_s)
559
+ @sysinfo = Plat4m.current rescue nil
560
+ @platform = if @sysinfo
561
+ case @sysinfo.os.id
562
+ when :darwin
563
+ :macosx
564
+ when :windows
565
+ RUBY_PLATFORM =~ /mingw/ ? :mingw : :unknown
566
+ else
567
+ @sysinfo.os.id
568
+ end
569
+ else
570
+ :unknown
571
+ end
572
+ require_relative File.join('config', @platform.to_s)
544
573
  self.class.include(WXRuby3::Config::Platform)
545
574
 
546
575
  init # initialize settings
547
576
  end
548
577
 
549
- attr_reader :ruby_exe, :extmk, :platform, :helper_modules, :helper_inits, :include_modules, :verbosity
578
+ attr_reader :ruby_exe, :sysinfo, :platform, :helper_modules, :helper_inits, :include_modules, :verbosity
550
579
  attr_reader :release_build, :debug_build, :verbose_debug, :no_deprecate
551
580
  attr_reader :ruby_cppflags, :ruby_ldflags, :ruby_libs, :extra_cflags, :extra_cppflags, :extra_ldflags,
552
581
  :extra_libs, :cpp_out_flag, :link_output_flag, :obj_ext, :dll_ext,
@@ -593,11 +622,6 @@ module WXRuby3
593
622
 
594
623
  # Extra swig helper files to be built
595
624
  @helper_modules = %w|RubyStockObjects|
596
- # if macosx?
597
- # %w|RubyStockObjects Mac|
598
- # else
599
- # %w|RubyStockObjects|
600
- # end
601
625
  # helper to initialize on startup (stock objects can only be initialized after App creation)
602
626
  @helper_inits = @helper_modules - %w|RubyStockObjects|
603
627
 
@@ -640,7 +664,7 @@ module WXRuby3
640
664
  @obj_ext = RB_CONFIG["OBJEXT"]
641
665
  @dll_ext = RB_CONFIG['DLEXT']
642
666
 
643
- # Exclude certian classes from being built, even if they are present
667
+ # Exclude certain classes from being built, even if they are present
644
668
  # in the configuration of wxWidgets.
645
669
  if ENV['WXRUBY_EXCLUDED']
646
670
  ENV['WXRUBY_EXCLUDED'].split(",").each { |classname| exclude_module(classname) }
@@ -696,6 +720,10 @@ module WXRuby3
696
720
  get_config('with-wxwin')
697
721
  end
698
722
 
723
+ def with_wxhead?
724
+ get_config('with-wxhead')
725
+ end
726
+
699
727
  def wx_version
700
728
  @wx_version || ''
701
729
  end
@@ -704,16 +732,12 @@ module WXRuby3
704
732
  @wx_abi_version || ''
705
733
  end
706
734
 
707
- def cygwin?
708
- @platform == :cygwin
709
- end
710
-
711
735
  def mingw?
712
736
  @platform == :mingw
713
737
  end
714
738
 
715
- def netbsd?
716
- @platform == :netbsd
739
+ def freebsd?
740
+ @platform == :freebsd
717
741
  end
718
742
 
719
743
  def macosx?
@@ -725,7 +749,7 @@ module WXRuby3
725
749
  end
726
750
 
727
751
  def windows?
728
- mingw? || cygwin?
752
+ mingw?
729
753
  end
730
754
 
731
755
  def ldflags(_target)
@@ -740,6 +764,17 @@ module WXRuby3
740
764
  [ rake_deps_path, src_path, src_gen_path, obj_path, classes_path, common_path, interface_path ]
741
765
  end
742
766
 
767
+ def wx_gitref
768
+ if @wx_version
769
+ "v#{@wx_version}"
770
+ elsif get_config('with-wxhead')
771
+ 'master'
772
+ else
773
+ nil
774
+ end
775
+ end
776
+ private :wx_gitref
777
+
743
778
  def do_bootstrap
744
779
  install_prerequisites
745
780
  # do we have a local wxWidgets tree already?
@@ -812,9 +847,15 @@ module WXRuby3
812
847
  features = {}
813
848
 
814
849
  if is_configured? && wxwidgets_setup_h
815
- File.read(wxwidgets_setup_h).scan(/^\s*#define\s+(wx\w+|__\w+__)\s+([01])/) do | define |
816
- feat_val = $2.to_i.zero? ? false : true
817
- feat_id = $1.sub(/\Awx/i, '').gsub(/\A__|__\Z/, '')
850
+ File.read(wxwidgets_setup_h).scan(/^\s*#define\s+(wx\w+|__\w+__)\s+([01]|wx\w+)/) do | define |
851
+ val_str = $2
852
+ feat_str = $1
853
+ if val_str.start_with?('wx')
854
+ feat_val = !!features[val_str.sub(/\Awx/i, '')]
855
+ else
856
+ feat_val = val_str.to_i.zero? ? false : true
857
+ end
858
+ feat_id = feat_str.sub(/\Awx/i, '').gsub(/\A__|__\Z/, '')
818
859
  features[feat_id] = feat_val
819
860
  end
820
861
  # make sure correct platform defines are included as well which will not be the case always
@@ -177,6 +177,7 @@ static VALUE wx_Enum_sc_create_enum_class(int argc, VALUE *argv, VALUE self)
177
177
  ID id_to_i = rb_intern("to_i");
178
178
  ID id_const_set = rb_intern("const_set");
179
179
  VALUE enum_klass = rb_funcall(rb_cClass, id_new, 1, cWxEnum, 0);
180
+ VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
180
181
  VALUE enum_values = rb_funcall(argv[1], rb_intern("keys"), 0, 0);
181
182
  for (int i=0; i<RARRAY_LEN(enum_values) ;++i)
182
183
  {
@@ -184,6 +185,8 @@ static VALUE wx_Enum_sc_create_enum_class(int argc, VALUE *argv, VALUE self)
184
185
  VALUE enum_value_num = rb_funcall(rb_hash_aref(argv[1], enum_value_name), id_to_i, 0, 0);
185
186
  VALUE enum_value = rb_funcall(enum_klass, id_new, 1, enum_value_num, 0);
186
187
  rb_funcall(enum_klass, id_const_set, 2, enum_value_name, enum_value, 0);
188
+ rb_hash_aset(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values), enum_value_num, enum_value);
189
+ rb_hash_aset(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_to_symbol(enum_value_name), enum_value);
187
190
  }
188
191
  rb_hash_aset(rb_iv_get(cEnum_Singleton, __iv_Enum_sc_enums), enum_name, enum_klass);
189
192
  return enum_klass;
@@ -230,10 +233,31 @@ static VALUE wx_Enum_sc_get_enum_value(int argc, VALUE *argv, VALUE self)
230
233
  return rb_hash_aref(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_to_symbol(argv[0]));
231
234
  }
232
235
 
236
+ static VALUE wx_Enum_sc_get_enum_values(VALUE self)
237
+ {
238
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
239
+ return rb_iv_get(enum_singleton_klass, __iv_enum_klass_values);
240
+ }
241
+
242
+ static VALUE wx_Enum_sc_get_enum_values_by_name(VALUE self)
243
+ {
244
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
245
+ return rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name);
246
+ }
247
+
248
+ static VALUE wx_Enum_sc_get_enum_names_by_value(VALUE self)
249
+ {
250
+ VALUE enum_singleton_klass = rb_funcall(self, rb_intern("singleton_class"), 0, 0);
251
+ return rb_funcall(rb_iv_get(enum_singleton_klass, __iv_enum_klass_values_by_name), rb_intern("invert"), 0);
252
+ }
253
+
233
254
  WXRB_EXPORT_FLAG VALUE wxRuby_CreateEnumClass(const char* enum_class_name_cstr)
234
255
  {
235
256
  VALUE enum_klass = rb_funcall(rb_cClass, rb_intern("new"), 1, cWxEnum, 0);
236
257
  rb_define_singleton_method(enum_klass, "[]", VALUEFUNC(wx_Enum_sc_get_enum_value), -1);
258
+ rb_define_singleton_method(enum_klass, "values", VALUEFUNC(wx_Enum_sc_get_enum_values), 0);
259
+ rb_define_singleton_method(enum_klass, "values_by_name", VALUEFUNC(wx_Enum_sc_get_enum_values_by_name), 0);
260
+ rb_define_singleton_method(enum_klass, "names_by_value", VALUEFUNC(wx_Enum_sc_get_enum_names_by_value), 0);
237
261
  VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
238
262
  rb_iv_set(enum_singleton_klass, __iv_enum_klass_values, rb_hash_new());
239
263
  rb_iv_set(enum_singleton_klass, __iv_enum_klass_values_by_name, rb_hash_new());
@@ -266,7 +290,13 @@ WXRB_EXPORT_FLAG VALUE wxRuby_GetEnumValueObject(const char* enum_wx_class_name_
266
290
  VALUE enum_klass = rb_hash_aref(enum_hash, ID2SYM(rb_intern(enum_class_name)));
267
291
  VALUE enum_singleton_klass = rb_funcall(enum_klass, rb_intern("singleton_class"), 0, 0);
268
292
  VALUE enum_values_hash = rb_iv_get(enum_singleton_klass, __iv_enum_klass_values);
269
- return rb_hash_aref(enum_values_hash, INT2NUM(enum_val));
293
+ VALUE rc = rb_hash_aref(enum_values_hash, INT2NUM(enum_val));
294
+ if (NIL_P(rc))
295
+ {
296
+ VALUE args[1] = { INT2NUM(enum_val) };
297
+ rc = rb_class_new_instance(1, args, enum_klass);
298
+ }
299
+ return rc;
270
300
  }
271
301
  return Qnil;
272
302
  }
@@ -0,0 +1,51 @@
1
+ # Copyright (c) 2023 M.J.N. Corino, The Netherlands
2
+ #
3
+ # This software is released under the MIT license.
4
+
5
+ ###
6
+ # wxRuby3 wxWidgets interface director
7
+ ###
8
+
9
+ module WXRuby3
10
+
11
+ class Director
12
+
13
+ class AffineMatrix2D < Director
14
+
15
+ def setup
16
+ spec.items.unshift('wxAffineMatrix2DBase') << 'wxMatrix2D'
17
+
18
+ spec.make_abstract 'wxAffineMatrix2DBase'
19
+ spec.disable_proxies
20
+
21
+ spec.map_apply 'int * OUTPUT' => ['wxDouble *']
22
+ spec.map 'wxPoint2DDouble *' => 'Wx::Point2DDouble' do
23
+ map_in ignore: true, temp: 'wxPoint2DDouble tmp', code: '$1 = &tmp;'
24
+
25
+ map_argout code: <<~__CODE
26
+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(new wxPoint2DDouble(tmp$argnum), SWIGTYPE_p_wxPoint2DDouble, SWIG_POINTER_OWN));
27
+ __CODE
28
+ end
29
+ spec.map 'wxMatrix2D *' => 'Wx::Matrix2D' do
30
+ map_in ignore: true, temp: 'wxMatrix2D tmp', code: '$1 = &tmp;'
31
+
32
+ map_argout code: <<~__CODE
33
+ $result = SWIG_Ruby_AppendOutput($result, SWIG_NewPointerObj(new wxMatrix2D(tmp$argnum), SWIGTYPE_p_wxPoint2DDouble, SWIG_POINTER_OWN));
34
+ __CODE
35
+ end
36
+
37
+ spec.ignore 'wxAffineMatrix2D::Mirror',
38
+ 'wxAffineMatrix2D::TransformPoint',
39
+ 'wxAffineMatrix2D::TransformDistance',
40
+ 'wxAffineMatrix2D::IsEqual'
41
+
42
+ spec.regard 'wxMatrix2D::m_11', 'wxMatrix2D::m_12',
43
+ 'wxMatrix2D::m_21', 'wxMatrix2D::m_22'
44
+
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -87,31 +87,47 @@ module WXRuby3
87
87
  }
88
88
  __HEREDOC
89
89
  if Config.platform == :macosx
90
- # add accessor methods for the standard OSX menu items
90
+ # add static accessor methods for the standard OSX menu items
91
91
  spec.add_extend_code 'wxApp', <<~__HEREDOC
92
- void set_mac_about_menu_itemid(long menu_itemid)
92
+ static void set_mac_about_menu_itemid(long menu_itemid)
93
93
  {
94
- $self->s_macAboutMenuItemId = menu_itemid;
94
+ wxApp::s_macAboutMenuItemId = menu_itemid;
95
95
  }
96
- long get_mac_about_menu_itemid(long menu_itemid)
96
+ static long get_mac_about_menu_itemid(long menu_itemid)
97
97
  {
98
- return $self->s_macAboutMenuItemId;
98
+ return wxApp::s_macAboutMenuItemId;
99
99
  }
100
- void set_mac_preferences_menu_itemid(long menu_itemid)
100
+ static void set_mac_preferences_menu_itemid(long menu_itemid)
101
101
  {
102
- $self->s_macPreferencesMenuItemId = menu_itemid;
102
+ wxApp::s_macPreferencesMenuItemId = menu_itemid;
103
103
  }
104
- long get_mac_preferences_menu_itemid(long menu_itemid)
104
+ static long get_mac_preferences_menu_itemid(long menu_itemid)
105
105
  {
106
- return $self->s_macPreferencesMenuItemId;
106
+ return wxApp::s_macPreferencesMenuItemId;
107
107
  }
108
- void set_mac_exit_menu_itemid(long menu_itemid)
108
+ static void set_mac_exit_menu_itemid(long menu_itemid)
109
109
  {
110
- $self->s_macExitMenuItemId = menu_itemid;
110
+ wxApp::s_macExitMenuItemId = menu_itemid;
111
111
  }
112
- long get_mac_exit_menu_itemid(long menu_itemid)
112
+ static long get_mac_exit_menu_itemid(long menu_itemid)
113
113
  {
114
- return $self->s_macExitMenuItemId;
114
+ return wxApp::s_macExitMenuItemId;
115
+ }
116
+ static void set_mac_help_menu_title(const wxString& title)
117
+ {
118
+ wxApp::s_macHelpMenuTitleName = title;
119
+ }
120
+ static const wxString& get_mac_help_menu_title()
121
+ {
122
+ return wxApp::s_macHelpMenuTitleName;
123
+ }
124
+ static void set_mac_window_menu_title(const wxString& title)
125
+ {
126
+ wxApp::s_macWindowMenuTitleName = title;
127
+ }
128
+ static const wxString& get_mac_window_menu_title()
129
+ {
130
+ return wxApp::s_macWindowMenuTitleName;
115
131
  }
116
132
  __HEREDOC
117
133
  end
@@ -28,6 +28,10 @@ module WXRuby3
28
28
  // ArtId and ArtClient are basically just strings ...
29
29
  typedef wxString wxArtID;
30
30
  typedef wxString wxArtClient;
31
+
32
+ // Missing from docs
33
+ %constant const char* wxART_STOP = wxART_STOP;
34
+ %constant const char* wxART_REFRESH = wxART_REFRESH;
31
35
  __HEREDOC
32
36
  spec.map *%w[wxArtID wxArtClient], as: 'String', swig: false do
33
37
  map_in
@@ -53,7 +53,7 @@ module WXRuby3
53
53
  m_actionWindow = NULL;
54
54
  m_hoverButton = NULL;
55
55
  m_art = new wxAuiDefaultDockArt;
56
- m_hintWnd = NULL;
56
+ #{Config.instance.wx_version < '3.3.0' ? 'm_hintWnd = NULL;' : ''}
57
57
  m_flags = wxAUI_MGR_DEFAULT;
58
58
  m_hasMaximized = false;
59
59
  m_dockConstraintX = 0.3;
@@ -20,8 +20,12 @@ module WXRuby3
20
20
  'wxCursor::wxCursor(const wxImage &)',
21
21
  'wxCursor::wxCursor(const char *const *)',
22
22
  'wxCursor::wxCursor(const wxCursor &)'
23
- spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[])',
24
- 'wxCursor::wxCursor(const char *const *)'
23
+ spec.ignore 'wxCursor::wxCursor(const char *const *)'
24
+ if Config.instance.wx_version >= '3.3.0'
25
+ spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[], const wxColour*, const wxColour*)'
26
+ else
27
+ spec.ignore 'wxCursor::wxCursor(const char[],int,int,int,int,const char[])'
28
+ end
25
29
  # ignore stock object (see RubyStockObjects.i)
26
30
  spec.ignore %w[wxSTANDARD_CURSOR wxHOURGLASS_CURSOR wxCROSS_CURSOR]
27
31
  super