glimmer-dsl-swt 0.5.3 → 0.6.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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/RUBY_VERSION +1 -1
- data/VERSION +1 -1
- data/icons/scaffold_app.ico +0 -0
- data/lib/ext/glimmer/config.rb +0 -1
- data/lib/glimmer/dsl/swt/cursor_expression.rb +26 -0
- data/lib/glimmer/dsl/swt/dsl.rb +2 -0
- data/lib/glimmer/dsl/swt/font_expression.rb +24 -0
- data/lib/glimmer/launcher.rb +1 -1
- data/lib/glimmer/package.rb +11 -4
- data/lib/glimmer/rake_task.rb +13 -6
- data/lib/glimmer/scaffold.rb +68 -49
- data/lib/glimmer/swt/color_proxy.rb +1 -1
- data/lib/glimmer/swt/cursor_proxy.rb +45 -0
- data/lib/glimmer/swt/font_proxy.rb +7 -7
- data/lib/glimmer/swt/image_proxy.rb +63 -0
- data/lib/glimmer/swt/shell_proxy.rb +1 -1
- data/lib/glimmer/swt/style_constantizable.rb +11 -1
- data/lib/glimmer/swt/widget_proxy.rb +25 -28
- data/vendor/swt/linux/swt.jar +0 -0
- data/vendor/swt/mac/swt.jar +0 -0
- data/vendor/swt/windows/swt.jar +0 -0
- metadata +21 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 470667c11a2cadd8113d2067cffbf7db92647712dab8367a5b71ce0cbb990c02
|
4
|
+
data.tar.gz: 634143f2c4adbe46aeb5b09cbf373b20d1e513584fbfc405ceb5d74212d7ffd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cbe32cbaf2d2f2bc7670a982abbaac8c490f41b307a2500b08158aa30bc775425d29be576411ef9618e0a3c9cc1118913f2017b4374c90e70fb196dd76beff95
|
7
|
+
data.tar.gz: 6656c29c0221adc159007c3e8f728e355d8d5cb8dbe193d049e5e24d4da0b53c30525e2ee79fc5b303be3d0e2787bc890321d0b83ca0d1783052f680e3f3fefd
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 0.
|
1
|
+
# [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=85 />](https://github.com/AndyObtiva/glimmer) Glimmer DSL for SWT 0.6.1 (Desktop GUI)
|
2
2
|
[](http://badge.fury.io/rb/glimmer-dsl-swt)
|
3
3
|
[](https://travis-ci.com/github/AndyObtiva/glimmer-dsl-swt)
|
4
4
|
[](https://coveralls.io/github/AndyObtiva/glimmer-dsl-swt?branch=master)
|
data/RUBY_VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
jruby-9.2.
|
1
|
+
jruby-9.2.13.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.6.1
|
Binary file
|
data/lib/ext/glimmer/config.rb
CHANGED
@@ -105,7 +105,6 @@ end
|
|
105
105
|
Glimmer::Config.excluded_keyword_checkers << lambda do |method_symbol, *args|
|
106
106
|
method = method_symbol.to_s
|
107
107
|
result = false
|
108
|
-
result ||= method.start_with?('on_swt_') && is_a?(Glimmer::UI::CustomWidget) && respond_to?(method)
|
109
108
|
result ||= method == 'dispose' && is_a?(Glimmer::UI::CustomWidget) && respond_to?(method)
|
110
109
|
result ||= ['drag_source_proxy', 'drop_target_proxy'].include?(method) && is_a?(Glimmer::UI::CustomWidget)
|
111
110
|
result ||= method == 'post_initialize_child'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'glimmer/dsl/expression'
|
2
|
+
require 'glimmer/dsl/top_level_expression'
|
3
|
+
require 'glimmer/swt/cursor_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module SWT
|
8
|
+
# cursor expression
|
9
|
+
# Note: Cannot be a static expression because it clashes with cursor property expression
|
10
|
+
class CursorExpression < Expression
|
11
|
+
include TopLevelExpression
|
12
|
+
|
13
|
+
def can_interpret?(parent, keyword, *args, &block)
|
14
|
+
keyword.to_s == 'cursor' and
|
15
|
+
(parent.nil? or !parent.respond_to?('cursor')) and
|
16
|
+
args.size == 1 and
|
17
|
+
(args.first.is_a?(Integer) or textual?(args.first))
|
18
|
+
end
|
19
|
+
|
20
|
+
def interpret(parent, keyword, *args, &block)
|
21
|
+
Glimmer::SWT::CursorProxy.new(*args)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/glimmer/dsl/swt/dsl.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'glimmer/dsl/expression'
|
2
|
+
require 'glimmer/dsl/top_level_expression'
|
3
|
+
require 'glimmer/swt/font_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module DSL
|
7
|
+
module SWT
|
8
|
+
# font expression
|
9
|
+
# Note: Cannot be a static expression because it clashes with font property expression
|
10
|
+
class FontExpression < Expression
|
11
|
+
include TopLevelExpression
|
12
|
+
|
13
|
+
def can_interpret?(parent, keyword, *args, &block)
|
14
|
+
keyword.to_s == 'font' and
|
15
|
+
(parent.nil? || !parent.respond_to?('font')) && args.size == 1 && args.first.is_a?(Hash)
|
16
|
+
end
|
17
|
+
|
18
|
+
def interpret(parent, keyword, *args, &block)
|
19
|
+
Glimmer::SWT::FontProxy.new(*args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/glimmer/launcher.rb
CHANGED
@@ -110,7 +110,7 @@ module Glimmer
|
|
110
110
|
end
|
111
111
|
command = "#{env_vars_string} jruby #{jruby_options_string}#{jruby_os_specific_options} #{devmode_require}-r #{the_glimmer_lib} -S #{application}"
|
112
112
|
puts command if jruby_options_string.to_s.include?('--debug')
|
113
|
-
|
113
|
+
exec command
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
data/lib/glimmer/package.rb
CHANGED
@@ -21,7 +21,7 @@ module Glimmer
|
|
21
21
|
system('warble config')
|
22
22
|
new_config = File.read('config/warble.rb').split("\n").inject('') do |output, line|
|
23
23
|
if line.include?('config.dirs =')
|
24
|
-
line = line.sub('# ', '').sub(/=[^=\n]+$/, '= %w(app config db
|
24
|
+
line = line.sub('# ', '').sub(/=[^=\n]+$/, '= %w(app bin config db docs fonts icons images lib package script sounds vendor videos)')
|
25
25
|
end
|
26
26
|
if line.include?('config.includes =')
|
27
27
|
line = line.sub('# ', '').sub(/=[^=\n]+$/, "= FileList['LICENSE.txt', 'VERSION']")
|
@@ -41,7 +41,15 @@ module Glimmer
|
|
41
41
|
system('warble')
|
42
42
|
end
|
43
43
|
|
44
|
-
def
|
44
|
+
def lock_jars
|
45
|
+
puts 'Locking JARs with jar-dependencies...'
|
46
|
+
command = "lock_jars --vendor-dir vendor"
|
47
|
+
puts command
|
48
|
+
system command
|
49
|
+
end
|
50
|
+
|
51
|
+
def native(native_type=nil)
|
52
|
+
puts "Generating native executable with javapackager..."
|
45
53
|
require 'facets/string/titlecase'
|
46
54
|
require 'facets/string/underscore'
|
47
55
|
project_name = File.basename(File.expand_path('.'))
|
@@ -51,14 +59,13 @@ module Glimmer
|
|
51
59
|
license = (File.read(license_file).strip if File.exists?(license_file) && File.file?(license_file)) rescue nil
|
52
60
|
copyright = license.split("\n").first
|
53
61
|
human_name = project_name.underscore.titlecase
|
54
|
-
command = "javapackager -deploy -native -outdir packages -outfile \"#{project_name}\" -srcfiles \"dist/#{project_name}.jar\" -appclass JarMain -name \"#{human_name}\" -title \"#{human_name}\" -Bmac.CFBundleName=\"#{human_name}\" -Bmac.CFBundleIdentifier=\"org.#{project_name}.application.#{project_name}\" -Bmac.category=\"public.app-category.business\" -BinstalldirChooser=true -Bvendor=\"#{human_name}\" -Bwin.menuGroup=\"#{human_name}\" -BsystemWide=#{OS.mac?} "
|
62
|
+
command = "javapackager -deploy -native #{native_type} -outdir packages -outfile \"#{project_name}\" -srcfiles \"dist/#{project_name}.jar\" -appclass JarMain -name \"#{human_name}\" -title \"#{human_name}\" -Bmac.CFBundleName=\"#{human_name}\" -Bmac.CFBundleIdentifier=\"org.#{project_name}.application.#{project_name}\" -Bmac.category=\"public.app-category.business\" -BinstalldirChooser=true -Bvendor=\"#{human_name}\" -Bwin.menuGroup=\"#{human_name}\" -BsystemWide=#{OS.mac?} "
|
55
63
|
command += " -BjvmOptions=-XstartOnFirstThread " if OS.mac?
|
56
64
|
command += " -BappVersion=#{version} -Bmac.CFBundleVersion=#{version} " if version
|
57
65
|
command += " -srcfiles LICENSE.txt -BlicenseFile=LICENSE.txt " if license
|
58
66
|
command += " -Bcopyright=\"#{copyright}\" " if copyright
|
59
67
|
command += " #{javapackager_extra_args} " if javapackager_extra_args
|
60
68
|
command += " #{ENV['JAVAPACKAGER_EXTRA_ARGS']} " if ENV['JAVAPACKAGER_EXTRA_ARGS']
|
61
|
-
puts "Generating DMG/PKG/APP/JNLP with javapackager..."
|
62
69
|
puts command
|
63
70
|
system command
|
64
71
|
end
|
data/lib/glimmer/rake_task.rb
CHANGED
@@ -19,17 +19,24 @@ namespace :glimmer do
|
|
19
19
|
Glimmer::Package.jar
|
20
20
|
end
|
21
21
|
|
22
|
-
desc '
|
23
|
-
task :
|
24
|
-
Glimmer::Package.
|
22
|
+
desc 'Lock JARs'
|
23
|
+
task :lock_jars do
|
24
|
+
Glimmer::Package.lock_jars
|
25
|
+
end
|
26
|
+
|
27
|
+
desc 'Generate Native files (DMG/PKG/APP on the Mac, MSI/EXE/IMAGE on Windows, RPM/DEB on Linux) (type is optional)'
|
28
|
+
task :native, [:type] do |t, args|
|
29
|
+
Glimmer::Package.native(args[:type])
|
25
30
|
end
|
26
31
|
end
|
27
32
|
|
28
|
-
desc 'Package app for distribution (generating config, jar, and native files)'
|
29
|
-
task :package do
|
33
|
+
desc 'Package app for distribution (generating config, jar, and native files) (type is optional)'
|
34
|
+
task :package, [:type] do |t, args|
|
30
35
|
Rake::Task['glimmer:package:config'].execute
|
31
36
|
Rake::Task['glimmer:package:jar'].execute
|
32
|
-
Rake::Task['glimmer:package:
|
37
|
+
Rake::Task['glimmer:package:lock_jars'].execute
|
38
|
+
Rake::Task['gemspec:generate'].execute
|
39
|
+
Rake::Task['glimmer:package:native'].execute(args)
|
33
40
|
end
|
34
41
|
|
35
42
|
|
data/lib/glimmer/scaffold.rb
CHANGED
@@ -76,21 +76,7 @@ class Scaffold
|
|
76
76
|
packages
|
77
77
|
MULTI_LINE_STRING
|
78
78
|
|
79
|
-
|
80
|
-
# frozen_string_literal: true
|
81
|
-
|
82
|
-
source 'https://rubygems.org'
|
83
|
-
|
84
|
-
git_source(:github) {|repo_name| "https://github.com/\#{repo_name}" }
|
85
|
-
|
86
|
-
gem 'glimmer-dsl-swt', '~> #{VERSION}'
|
87
|
-
|
88
|
-
group :test do
|
89
|
-
gem 'rspec'
|
90
|
-
end
|
91
|
-
MULTI_LINE_STRING
|
92
|
-
|
93
|
-
GEMFILE_GEM = <<~MULTI_LINE_STRING
|
79
|
+
GEMFILE = <<~MULTI_LINE_STRING
|
94
80
|
# frozen_string_literal: true
|
95
81
|
|
96
82
|
source 'https://rubygems.org'
|
@@ -101,24 +87,12 @@ class Scaffold
|
|
101
87
|
|
102
88
|
group :development do
|
103
89
|
gem 'rspec', '~> 3.5.0'
|
90
|
+
gem 'git-glimmer', '1.7.0'
|
104
91
|
gem 'jeweler', '2.3.9'
|
105
92
|
gem 'simplecov', '>= 0'
|
106
93
|
end
|
107
94
|
MULTI_LINE_STRING
|
108
95
|
|
109
|
-
RAKEFILE = <<~MULTI_LINE_STRING
|
110
|
-
require 'glimmer/rake_task'
|
111
|
-
|
112
|
-
## Use the following configuration if you would like to customize javapackager
|
113
|
-
## arguments for `glimmer package` command.
|
114
|
-
#
|
115
|
-
# Glimmer::Package.javapackager_extra_args =
|
116
|
-
# " -BlicenseType=" +
|
117
|
-
# " -Bmac.CFBundleIdentifier=" +
|
118
|
-
# " -Bmac.category=" +
|
119
|
-
# " -Bmac.signing-key-developer-id-app="
|
120
|
-
MULTI_LINE_STRING
|
121
|
-
|
122
96
|
RVM_FUNCTION = <<~MULTI_LINE_STRING
|
123
97
|
# Load RVM into a shell session *as a function*
|
124
98
|
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then
|
@@ -135,21 +109,30 @@ class Scaffold
|
|
135
109
|
MULTI_LINE_STRING
|
136
110
|
|
137
111
|
def app(app_name)
|
138
|
-
|
139
|
-
|
112
|
+
return puts('Namespace is required! Usage: glimmer scaffold:custom_shell_gem[custom_shell_name,namespace]') unless `git config --get github.user`.to_s.strip == 'AndyObtiva'
|
113
|
+
gem_name = file_name(app_name)
|
114
|
+
gem_summary = human_name(app_name)
|
115
|
+
system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
116
|
+
cd gem_name
|
117
|
+
rm_rf 'lib'
|
140
118
|
write '.gitignore', GITIGNORE
|
141
119
|
write '.ruby-version', RUBY_VERSION
|
142
120
|
write '.ruby-gemset', app_name
|
143
121
|
write 'VERSION', '1.0.0'
|
144
122
|
write 'LICENSE.txt', "Copyright (c) #{Time.now.year} #{app_name}"
|
145
|
-
write 'Gemfile',
|
146
|
-
write 'Rakefile',
|
123
|
+
write 'Gemfile', GEMFILE
|
124
|
+
write 'Rakefile', gem_rakefile(app_name, nil, gem_name)
|
147
125
|
mkdir 'app'
|
148
126
|
write "app/#{file_name(app_name)}.rb", app_main_file(app_name)
|
149
127
|
mkdir 'app/models'
|
150
128
|
mkdir 'app/views'
|
151
129
|
custom_shell('AppView', current_dir_name, :app)
|
152
|
-
if OS.
|
130
|
+
if OS::Underlying.windows?
|
131
|
+
mkdir_p 'package/windows'
|
132
|
+
icon_file = "package/windows/#{human_name(app_name)}.ico"
|
133
|
+
cp File.expand_path('../../../icons/scaffold_app.ico', __FILE__), icon_file
|
134
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
135
|
+
elsif OS.mac?
|
153
136
|
mkdir_p 'package/macosx'
|
154
137
|
icon_file = "package/macosx/#{human_name(app_name)}.icns"
|
155
138
|
cp File.expand_path('../../../icons/scaffold_app.icns', __FILE__), icon_file
|
@@ -157,8 +140,15 @@ class Scaffold
|
|
157
140
|
end
|
158
141
|
mkdir 'bin'
|
159
142
|
write "bin/#{file_name(app_name)}", app_bin_file(app_name)
|
160
|
-
|
161
|
-
|
143
|
+
write 'spec/spec_helper.rb', spec_helper_file
|
144
|
+
if OS.windows?
|
145
|
+
system "bundle"
|
146
|
+
system "glimmer package[image]"
|
147
|
+
system "\"packages/bundles/#{human_name(app_name)}/#{human_name(app_name)}.exe\""
|
148
|
+
else
|
149
|
+
system "bash -c '#{RVM_FUNCTION}\n cd .\n bundle\n glimmer package\n'"
|
150
|
+
system "open packages/bundles/#{human_name(app_name).gsub(' ', '\ ')}.app" if OS.mac?
|
151
|
+
end
|
162
152
|
# TODO generate rspec test suite
|
163
153
|
end
|
164
154
|
|
@@ -188,13 +178,13 @@ class Scaffold
|
|
188
178
|
else
|
189
179
|
namespace = 'glimmer'
|
190
180
|
end
|
191
|
-
system "jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
181
|
+
system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
192
182
|
cd gem_name
|
193
183
|
write '.gitignore', GITIGNORE
|
194
184
|
write '.ruby-version', RUBY_VERSION
|
195
185
|
write '.ruby-gemset', gem_name
|
196
186
|
write 'VERSION', '1.0.0'
|
197
|
-
write 'Gemfile',
|
187
|
+
write 'Gemfile', GEMFILE
|
198
188
|
write 'Rakefile', gem_rakefile(custom_shell_name, namespace, gem_name)
|
199
189
|
append "lib/#{gem_name}.rb", gem_main_file(custom_shell_name, namespace)
|
200
190
|
mkdir 'lib/views'
|
@@ -203,14 +193,26 @@ class Scaffold
|
|
203
193
|
write "bin/#{gem_name}", gem_bin_file(gem_name, custom_shell_name, namespace)
|
204
194
|
write "bin/#{file_name(custom_shell_name)}", gem_bin_command_file(gem_name)
|
205
195
|
FileUtils.chmod 0755, "bin/#{file_name(custom_shell_name)}"
|
206
|
-
|
196
|
+
write 'spec/spec_helper.rb', spec_helper_file
|
197
|
+
if OS::Underlying.windows?
|
198
|
+
mkdir_p 'package/windows'
|
199
|
+
icon_file = "package/windows/#{human_name(custom_shell_name)}.ico"
|
200
|
+
cp File.expand_path('../../../icons/scaffold_app.ico', __FILE__), icon_file
|
201
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
202
|
+
elsif OS.mac?
|
207
203
|
mkdir_p 'package/macosx'
|
208
204
|
icon_file = "package/macosx/#{human_name(custom_shell_name)}.icns"
|
209
205
|
cp File.expand_path('../../../icons/scaffold_app.icns', __FILE__), icon_file
|
210
206
|
puts "Created #{current_dir_name}/#{icon_file}"
|
211
207
|
end
|
212
|
-
|
213
|
-
|
208
|
+
if OS.windows?
|
209
|
+
system "bundle"
|
210
|
+
system "glimmer package[image]"
|
211
|
+
system "\"packages/bundles/#{human_name(custom_shell_name)}/#{human_name(custom_shell_name)}.exe\""
|
212
|
+
else
|
213
|
+
system "bash -c '#{RVM_FUNCTION}\n cd .\n bundle\n glimmer package\n'"
|
214
|
+
system "open packages/bundles/#{human_name(custom_shell_name).gsub(' ', '\ ')}.app" if OS.mac?
|
215
|
+
end
|
214
216
|
puts "Finished creating #{gem_name} Ruby gem."
|
215
217
|
puts 'Edit Rakefile to configure gem details.'
|
216
218
|
puts 'Run `rake` to execute specs.'
|
@@ -228,19 +230,23 @@ class Scaffold
|
|
228
230
|
else
|
229
231
|
namespace = 'glimmer'
|
230
232
|
end
|
231
|
-
system "jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
233
|
+
system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
232
234
|
cd gem_name
|
233
235
|
write '.gitignore', GITIGNORE
|
234
236
|
write '.ruby-version', RUBY_VERSION
|
235
237
|
write '.ruby-gemset', gem_name
|
236
238
|
write 'VERSION', '1.0.0'
|
237
|
-
write 'Gemfile',
|
239
|
+
write 'Gemfile', GEMFILE
|
238
240
|
write 'Rakefile', gem_rakefile
|
239
241
|
write 'spec/spec_helper.rb', spec_helper_file
|
240
242
|
append "lib/#{gem_name}.rb", gem_main_file(custom_widget_name, namespace)
|
241
243
|
mkdir 'lib/views'
|
242
244
|
custom_widget(custom_widget_name, namespace)
|
243
|
-
|
245
|
+
if OS.windows?
|
246
|
+
system "bundle"
|
247
|
+
else
|
248
|
+
system "bash -c '#{RVM_FUNCTION}\n cd .\n bundle\n'"
|
249
|
+
end
|
244
250
|
puts "Finished creating #{gem_name} Ruby gem."
|
245
251
|
puts 'Edit Rakefile to configure gem details.'
|
246
252
|
puts 'Run `rake` to execute specs.'
|
@@ -355,10 +361,11 @@ class Scaffold
|
|
355
361
|
lines.insert(require_rake_line_index, "require 'glimmer/launcher'")
|
356
362
|
gem_files_line_index = lines.index(lines.detect {|l| l.include?('# dependencies defined in Gemfile') })
|
357
363
|
if custom_shell_name
|
358
|
-
lines.insert(gem_files_line_index, " gem.files = Dir['VERSION', 'LICENSE.txt', 'lib
|
364
|
+
lines.insert(gem_files_line_index, " gem.files = Dir['VERSION', 'LICENSE.txt', 'lib/**/*', 'app/**/*', 'bin/**/*', 'vendor/**/*', 'package/**/*']")
|
359
365
|
lines.insert(gem_files_line_index+1, " gem.executables = ['#{gem_name}', '#{file_name(custom_shell_name)}']")
|
366
|
+
lines.insert(gem_files_line_index+2, " gem.require_paths = ['vendor', 'lib', 'app']")
|
360
367
|
else
|
361
|
-
lines.insert(gem_files_line_index, " gem.files = Dir['lib
|
368
|
+
lines.insert(gem_files_line_index, " gem.files = Dir['VERSION', 'LICENSE.txt', 'lib/**/*']")
|
362
369
|
end
|
363
370
|
spec_pattern_line_index = lines.index(lines.detect {|l| l.include?('spec.pattern =') })
|
364
371
|
lines.insert(spec_pattern_line_index+1, " spec.ruby_opts = [Glimmer::Launcher.jruby_swt_options]")
|
@@ -383,7 +390,7 @@ class Scaffold
|
|
383
390
|
content = File.read('spec/spec_helper.rb')
|
384
391
|
lines = content.split("\n")
|
385
392
|
require_line_index = lines.index(lines.detect {|l| l.include?(current_dir_name) })
|
386
|
-
lines[require_line_index
|
393
|
+
lines[require_line_index..require_line_index] = [
|
387
394
|
"require 'bundler/setup'",
|
388
395
|
'Bundler.require(:default, :development)',
|
389
396
|
]
|
@@ -412,9 +419,9 @@ class Scaffold
|
|
412
419
|
|
413
420
|
if shell_type == :gem
|
414
421
|
custom_shell_file_content += <<-MULTI_LINE_STRING
|
415
|
-
|
416
|
-
VERSION = File.read(File.join(
|
417
|
-
LICENSE = File.read(File.join(
|
422
|
+
APP_ROOT = File.expand_path('../../../..', __FILE__)
|
423
|
+
VERSION = File.read(File.join(APP_ROOT, 'VERSION'))
|
424
|
+
LICENSE = File.read(File.join(APP_ROOT, 'LICENSE.txt'))
|
418
425
|
|
419
426
|
MULTI_LINE_STRING
|
420
427
|
end
|
@@ -470,6 +477,7 @@ class Scaffold
|
|
470
477
|
shell {
|
471
478
|
# Replace example content below with custom shell content
|
472
479
|
minimum_size 320, 240
|
480
|
+
image File.join(APP_ROOT, 'package', 'windows', "#{human_name(shell_type == :gem ? custom_shell_name : current_dir_name)}.ico") if OS.windows?
|
473
481
|
text "#{human_name(namespace)} - #{human_name(custom_shell_name)}"
|
474
482
|
grid_layout
|
475
483
|
label(:center) {
|
@@ -477,6 +485,17 @@ class Scaffold
|
|
477
485
|
font height: 40
|
478
486
|
layout_data :fill, :center, true, true
|
479
487
|
}
|
488
|
+
menu_bar {
|
489
|
+
menu {
|
490
|
+
text '&File'
|
491
|
+
menu_item {
|
492
|
+
text 'Preferences...'
|
493
|
+
on_widget_selected {
|
494
|
+
display_preferences_dialog
|
495
|
+
}
|
496
|
+
}
|
497
|
+
}
|
498
|
+
}
|
480
499
|
}
|
481
500
|
}
|
482
501
|
MULTI_LINE_STRING
|
@@ -5,7 +5,7 @@ module Glimmer
|
|
5
5
|
module SWT
|
6
6
|
# Proxy for org.eclipse.swt.graphics.Color
|
7
7
|
#
|
8
|
-
# Invoking `#swt_color` returns the SWT
|
8
|
+
# Invoking `#swt_color` returns the SWT Color object wrapped by this proxy
|
9
9
|
#
|
10
10
|
# Follows the Proxy Design Pattern
|
11
11
|
class ColorProxy
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'glimmer/error'
|
2
|
+
require 'glimmer/swt/swt_proxy'
|
3
|
+
require 'glimmer/swt/display_proxy'
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
module SWT
|
7
|
+
# Proxy for org.eclipse.swt.graphics.Cursor
|
8
|
+
#
|
9
|
+
# Invoking `#swt_cursor` returns the SWT Cursor object wrapped by this proxy
|
10
|
+
#
|
11
|
+
# Follows the Proxy Design Pattern
|
12
|
+
class CursorProxy
|
13
|
+
CURSOR_STYLES = org.eclipse.swt.SWT.constants.select {|c| c.to_s.downcase.start_with?('cursor_')}.map {|c| c.to_s.downcase.sub('cursor_', '').to_sym}
|
14
|
+
ERROR_INVALID_CURSOR_STYLE = " is an invalid cursor style! Valid values are #{CURSOR_STYLES.map(&:to_s).join(", ")}"
|
15
|
+
|
16
|
+
include_package 'org.eclipse.swt.graphics'
|
17
|
+
|
18
|
+
attr_reader :swt_cursor, :cursor_style
|
19
|
+
|
20
|
+
# Builds a new CursorProxy from passed in cursor SWT style (e.g. :appstarting, :hand, or :help)
|
21
|
+
#
|
22
|
+
# Cursor SWT styles are those that begin with "CURSOR_" prefix
|
23
|
+
#
|
24
|
+
# They are expected to be passed in in short form without the prefix (but would work with the prefix too)
|
25
|
+
def initialize(cursor_style)
|
26
|
+
@cursor_style = cursor_style
|
27
|
+
@cursor_style = SWTProxy.reverse_lookup(@cursor_style).detect { |symbol| symbol.to_s.downcase.start_with?('cursor_') } if cursor_style.is_a?(Integer)
|
28
|
+
@cursor_style = @cursor_style.to_s.downcase
|
29
|
+
@cursor_style = @cursor_style.sub(/^cursor\_/, '') if @cursor_style.start_with?('cursor_')
|
30
|
+
detect_invalid_cursor_style
|
31
|
+
@swt_cursor = DisplayProxy.instance.swt_display.get_system_cursor(SWTProxy[swt_style])
|
32
|
+
end
|
33
|
+
|
34
|
+
def swt_style
|
35
|
+
@swt_style ||= @cursor_style.upcase.start_with?('CURSOR_') ? @cursor_style : "CURSOR_#{@cursor_style}"
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def detect_invalid_cursor_style
|
41
|
+
raise Error, cursor_style.to_s + ERROR_INVALID_CURSOR_STYLE unless CURSOR_STYLES.include?(cursor_style.to_s.downcase.to_sym)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -6,11 +6,10 @@ module Glimmer
|
|
6
6
|
module SWT
|
7
7
|
# Proxy for org.eclipse.swt.graphics.Font
|
8
8
|
#
|
9
|
-
# This class
|
10
|
-
# an SWT widget font
|
9
|
+
# This class can be optionally used with WidgetProxy to manipulate
|
10
|
+
# an SWT widget font (reusing its FontData but building a new Font)
|
11
11
|
#
|
12
|
-
#
|
13
|
-
# a widget proxy.
|
12
|
+
# Otherwise, if no WidgetProxy is passed to constructor, it builds new FontData
|
14
13
|
#
|
15
14
|
# Invoking `#swt_font` returns the SWT Font object wrapped by this proxy
|
16
15
|
#
|
@@ -21,7 +20,7 @@ module Glimmer
|
|
21
20
|
|
22
21
|
include_package 'org.eclipse.swt.graphics'
|
23
22
|
|
24
|
-
attr_reader :widget_proxy, :swt_font
|
23
|
+
attr_reader :widget_proxy, :swt_font, :font_properties
|
25
24
|
|
26
25
|
# Builds a new font proxy from passed in widget_proxy and font_properties hash,
|
27
26
|
#
|
@@ -31,8 +30,9 @@ module Glimmer
|
|
31
30
|
#
|
32
31
|
# Style (:style value) can only be one of FontProxy::FONT_STYLES values:
|
33
32
|
# that is :normal, :bold, or :italic
|
34
|
-
def initialize(widget_proxy, font_properties)
|
33
|
+
def initialize(widget_proxy = nil, font_properties)
|
35
34
|
@widget_proxy = widget_proxy
|
35
|
+
@font_properties = font_properties
|
36
36
|
detect_invalid_font_property(font_properties)
|
37
37
|
font_properties[:style] = SWTProxy[*font_properties[:style]]
|
38
38
|
font_data_args = [:name, :height, :style].map do |font_property_name|
|
@@ -57,7 +57,7 @@ module Glimmer
|
|
57
57
|
private
|
58
58
|
|
59
59
|
def font_datum
|
60
|
-
@font_datum ||= @widget_proxy.swt_widget.getFont.getFontData[0]
|
60
|
+
@font_datum ||= @widget_proxy ? @widget_proxy.swt_widget.getFont.getFontData[0] : FontData.new
|
61
61
|
end
|
62
62
|
|
63
63
|
def detect_invalid_font_property(font_properties)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Glimmer
|
2
|
+
module SWT
|
3
|
+
# Proxy for org.eclipse.swt.graphics.Image
|
4
|
+
#
|
5
|
+
# Invoking `#swt_image` returns the SWT Image object wrapped by this proxy
|
6
|
+
#
|
7
|
+
# Follows the Proxy Design Pattern
|
8
|
+
class ImageProxy
|
9
|
+
include_package 'org.eclipse.swt.graphics'
|
10
|
+
|
11
|
+
attr_reader :jar_file_path, :image_data
|
12
|
+
|
13
|
+
# Initializes a proxy for an SWT Image object
|
14
|
+
#
|
15
|
+
# Takes the same args as the SWT Image class
|
16
|
+
# Alternatively, takes a file path string or a uri:classloader file path string (generated by JRuby when invoking `File.expand_path` inside a JAR file)
|
17
|
+
# and returns an image object.
|
18
|
+
def initialize(*args)
|
19
|
+
@args = args
|
20
|
+
@jar_file_path = @args.first if @args.first.is_a?(String) && @args.size == 1
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def swt_image
|
25
|
+
unless @swt_image
|
26
|
+
if @jar_file_path
|
27
|
+
file_path = @jar_file_path
|
28
|
+
if file_path.start_with?('uri:classloader')
|
29
|
+
file_path = file_path.sub(/^uri\:classloader\:/, '').sub('//', '/') # the latter sub is needed for Mac
|
30
|
+
object = java.lang.Object.new
|
31
|
+
file_input_stream = object.java_class.resource_as_stream(file_path)
|
32
|
+
buffered_file_input_stream = java.io.BufferedInputStream.new(file_input_stream)
|
33
|
+
end
|
34
|
+
@image_data = ImageData.new(buffered_file_input_stream || file_path)
|
35
|
+
@swt_image = Image.new(DisplayProxy.instance.swt_display, @image_data)
|
36
|
+
else
|
37
|
+
@swt_image = Image.new(*@args)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
@swt_image
|
41
|
+
end
|
42
|
+
|
43
|
+
def scale_to(width, height)
|
44
|
+
return @swt_image if image_data.nil?
|
45
|
+
scaled_image_data = image_data.scaledTo(width, height)
|
46
|
+
device = swt_image.device
|
47
|
+
swt_image.dispose
|
48
|
+
@swt_image = Image.new(device, scaled_image_data)
|
49
|
+
end
|
50
|
+
|
51
|
+
def method_missing(method, *args, &block)
|
52
|
+
swt_image.send(method, *args, &block)
|
53
|
+
rescue => e
|
54
|
+
Glimmer::Config.logger.debug {"Neither ImageProxy nor #{swt_image.class.name} can handle the method ##{method}"}
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
58
|
+
def respond_to?(method, *args, &block)
|
59
|
+
super || swt_image.respond_to?(method, *args, &block)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -106,7 +106,17 @@ module Glimmer
|
|
106
106
|
def deconstruct(integer)
|
107
107
|
constant_source_class.constants.reduce([]) do |found, c|
|
108
108
|
constant_value = constant_source_class.const_get(c) rescue -1
|
109
|
-
is_found = constant_value.is_a?(Integer) && (
|
109
|
+
is_found = constant_value.is_a?(Integer) && (integer & constant_value) == integer
|
110
|
+
is_found ? found += [c] : found
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# Reverse engineer a style integer into a symbol
|
115
|
+
# Useful for debugging
|
116
|
+
def reverse_lookup(integer)
|
117
|
+
constant_source_class.constants.reduce([]) do |found, c|
|
118
|
+
constant_value = constant_source_class.const_get(c) rescue -1
|
119
|
+
is_found = constant_value.is_a?(Integer) && integer == constant_value
|
110
120
|
is_found ? found += [c] : found
|
111
121
|
end
|
112
122
|
end
|
@@ -3,6 +3,7 @@ require 'glimmer/swt/color_proxy'
|
|
3
3
|
require 'glimmer/swt/font_proxy'
|
4
4
|
require 'glimmer/swt/swt_proxy'
|
5
5
|
require 'glimmer/swt/dnd_proxy'
|
6
|
+
require 'glimmer/swt/image_proxy'
|
6
7
|
|
7
8
|
# TODO refactor to make file smaller and extract sub-widget-proxies out of this
|
8
9
|
|
@@ -590,25 +591,31 @@ module Glimmer
|
|
590
591
|
@property_type_converters ||= {
|
591
592
|
:background => color_converter,
|
592
593
|
:background_image => lambda do |value|
|
594
|
+
image_proxy = nil
|
593
595
|
if value.is_a?(String)
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
end
|
600
|
-
image_data = ImageData.new(value)
|
601
|
-
# TODO in the future, look into unregistering this listener when no longer needed
|
596
|
+
image_proxy = ImageProxy.new(value)
|
597
|
+
elsif value.is_a?(Array)
|
598
|
+
image_proxy = ImageProxy.new(*value)
|
599
|
+
end
|
600
|
+
if image_proxy
|
602
601
|
on_swt_Resize do |resize_event|
|
603
|
-
|
604
|
-
@swt_widget.
|
605
|
-
@swt_widget.setBackgroundImage(Image.new(@swt_widget.getDisplay, new_image_data))
|
602
|
+
image_proxy.scale_to(@swt_widget.getSize.x, @swt_widget.getSize.y)
|
603
|
+
@swt_widget.setBackgroundImage(image_proxy.swt_image)
|
606
604
|
end
|
607
|
-
|
605
|
+
image_proxy.swt_image
|
608
606
|
else
|
609
607
|
value
|
610
608
|
end
|
611
609
|
end,
|
610
|
+
:cursor => lambda do |value|
|
611
|
+
cursor_proxy = nil
|
612
|
+
if value.is_a?(CursorProxy)
|
613
|
+
cursor_proxy = value
|
614
|
+
elsif value.is_a?(Symbol) || value.is_a?(String) || value.is_a?(Integer)
|
615
|
+
cursor_proxy = CursorProxy.new(value)
|
616
|
+
end
|
617
|
+
cursor_proxy ? cursor_proxy.swt_cursor : value
|
618
|
+
end,
|
612
619
|
:foreground => color_converter,
|
613
620
|
:font => lambda do |value|
|
614
621
|
if value.is_a?(Hash)
|
@@ -620,14 +627,9 @@ module Glimmer
|
|
620
627
|
end,
|
621
628
|
:image => lambda do |value|
|
622
629
|
if value.is_a?(String)
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
value = object.java_class.resource_as_stream(value)
|
627
|
-
value = java.io.BufferedInputStream.new(value)
|
628
|
-
end
|
629
|
-
image_data = ImageData.new(value)
|
630
|
-
Image.new(@swt_widget.getDisplay, image_data)
|
630
|
+
ImageProxy.new(value).swt_image
|
631
|
+
elsif value.is_a?(Array)
|
632
|
+
ImageProxy.new(*value).swt_image
|
631
633
|
else
|
632
634
|
value
|
633
635
|
end
|
@@ -635,14 +637,9 @@ module Glimmer
|
|
635
637
|
:images => lambda do |array|
|
636
638
|
array.to_a.map do |value|
|
637
639
|
if value.is_a?(String)
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
value = object.java_class.resource_as_stream(value)
|
642
|
-
value = java.io.BufferedInputStream.new(value)
|
643
|
-
end
|
644
|
-
image_data = ImageData.new(value)
|
645
|
-
Image.new(@swt_widget.getDisplay, image_data)
|
640
|
+
ImageProxy.new(value).swt_image
|
641
|
+
elsif value.is_a?(Array)
|
642
|
+
ImageProxy.new(*value).swt_image
|
646
643
|
else
|
647
644
|
value
|
648
645
|
end
|
data/vendor/swt/linux/swt.jar
CHANGED
Binary file
|
data/vendor/swt/mac/swt.jar
CHANGED
Binary file
|
data/vendor/swt/windows/swt.jar
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-swt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- AndyMaleh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.9.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.7.0
|
75
|
+
name: git-glimmer
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.7.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
requirement: !ruby/object:Gem::Requirement
|
71
85
|
requirements:
|
@@ -294,6 +308,7 @@ files:
|
|
294
308
|
- bin/girb_runner.rb
|
295
309
|
- bin/glimmer
|
296
310
|
- icons/scaffold_app.icns
|
311
|
+
- icons/scaffold_app.ico
|
297
312
|
- lib/ext/glimmer.rb
|
298
313
|
- lib/ext/glimmer/config.rb
|
299
314
|
- lib/glimmer-dsl-swt.rb
|
@@ -309,6 +324,7 @@ files:
|
|
309
324
|
- lib/glimmer/dsl/swt/color_expression.rb
|
310
325
|
- lib/glimmer/dsl/swt/column_properties_expression.rb
|
311
326
|
- lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb
|
327
|
+
- lib/glimmer/dsl/swt/cursor_expression.rb
|
312
328
|
- lib/glimmer/dsl/swt/custom_widget_expression.rb
|
313
329
|
- lib/glimmer/dsl/swt/data_binding_expression.rb
|
314
330
|
- lib/glimmer/dsl/swt/dialog_expression.rb
|
@@ -316,6 +332,7 @@ files:
|
|
316
332
|
- lib/glimmer/dsl/swt/dnd_expression.rb
|
317
333
|
- lib/glimmer/dsl/swt/dsl.rb
|
318
334
|
- lib/glimmer/dsl/swt/exec_expression.rb
|
335
|
+
- lib/glimmer/dsl/swt/font_expression.rb
|
319
336
|
- lib/glimmer/dsl/swt/layout_data_expression.rb
|
320
337
|
- lib/glimmer/dsl/swt/layout_expression.rb
|
321
338
|
- lib/glimmer/dsl/swt/list_selection_data_binding_expression.rb
|
@@ -341,9 +358,11 @@ files:
|
|
341
358
|
- lib/glimmer/rake_task/list.rb
|
342
359
|
- lib/glimmer/scaffold.rb
|
343
360
|
- lib/glimmer/swt/color_proxy.rb
|
361
|
+
- lib/glimmer/swt/cursor_proxy.rb
|
344
362
|
- lib/glimmer/swt/display_proxy.rb
|
345
363
|
- lib/glimmer/swt/dnd_proxy.rb
|
346
364
|
- lib/glimmer/swt/font_proxy.rb
|
365
|
+
- lib/glimmer/swt/image_proxy.rb
|
347
366
|
- lib/glimmer/swt/layout_data_proxy.rb
|
348
367
|
- lib/glimmer/swt/layout_proxy.rb
|
349
368
|
- lib/glimmer/swt/menu_proxy.rb
|