glimmer-dsl-swt 0.6.2 → 0.6.3
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/VERSION +1 -1
- data/bin/girb +1 -1
- data/bin/glimmer +1 -1
- data/icons/scaffold_app.png +0 -0
- data/lib/glimmer/dsl/swt/message_box_expression.rb +9 -1
- data/lib/glimmer/dsl/swt/widget_expression.rb +1 -7
- data/lib/glimmer/launcher.rb +5 -1
- data/lib/glimmer/package.rb +26 -9
- data/lib/glimmer/rake_task.rb +5 -4
- data/lib/glimmer/scaffold.rb +47 -30
- data/lib/glimmer/swt/display_proxy.rb +13 -2
- data/lib/glimmer/swt/message_box_proxy.rb +23 -5
- data/lib/glimmer/swt/table_proxy.rb +50 -2
- data/lib/glimmer/swt/widget_proxy.rb +33 -6
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4290c2587a5d74bdbd39df1e1459219628abd0f867df9c972ec766d1581e786
|
4
|
+
data.tar.gz: a422f8c8f1cad97b8c59f72eefdbdac2bfab5076e45b4d99bacbea063f683897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cfe72e5b9043ca482199ebcdb21ce5dfb3bcf5106b4adf2d1f5928d195b9ae99fbd1cd10b120ec14901052121a3cb82e5e45a203e235daaf2bd29addc6e29f60
|
7
|
+
data.tar.gz: 9f1d1bd197e61a8a462f5afc8d84466b0a595f0ab225999571d9fb22c8f00e078928a675a4474fde34c1274aaac252c4d23f7c7fcd38fea155a0cac8e6769767
|
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.6.
|
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.3 (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/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.3
|
data/bin/girb
CHANGED
data/bin/glimmer
CHANGED
Binary file
|
@@ -16,7 +16,15 @@ module Glimmer
|
|
16
16
|
|
17
17
|
def interpret(parent, keyword, *args, &block)
|
18
18
|
potential_parent = args.first
|
19
|
-
|
19
|
+
potential_parent = potential_parent.swt_widget if potential_parent.respond_to?(:swt_widget)
|
20
|
+
parent = nil
|
21
|
+
if potential_parent.is_a?(Shell)
|
22
|
+
args.shift
|
23
|
+
parent = potential_parent
|
24
|
+
elsif potential_parent.is_a?(Widget)
|
25
|
+
args.shift
|
26
|
+
parent = potential_parent.shell
|
27
|
+
end
|
20
28
|
Glimmer::SWT::MessageBoxProxy.new(parent, Glimmer::SWT::SWTProxy[args])
|
21
29
|
end
|
22
30
|
end
|
@@ -17,13 +17,7 @@ module Glimmer
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def interpret(parent, keyword, *args, &block)
|
20
|
-
|
21
|
-
class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
|
22
|
-
widget_class = Glimmer::SWT.const_get(class_name)
|
23
|
-
rescue
|
24
|
-
widget_class = Glimmer::SWT::WidgetProxy
|
25
|
-
end
|
26
|
-
widget_class.new(keyword, parent, args)
|
20
|
+
Glimmer::SWT::WidgetProxy.create(keyword, parent, args)
|
27
21
|
end
|
28
22
|
|
29
23
|
def add_content(parent, &block)
|
data/lib/glimmer/launcher.rb
CHANGED
@@ -13,7 +13,7 @@ module Glimmer
|
|
13
13
|
|
14
14
|
When a task is specified, it runs via rake. Some tasks take arguments in square brackets.
|
15
15
|
|
16
|
-
Available tasks are below (you
|
16
|
+
Available tasks are below (if you do not see any, please add `require 'glimmer/rake_task'` to Rakefile and rerun or run rake -T):
|
17
17
|
MULTI_LINE_STRING
|
18
18
|
|
19
19
|
TEXT_USAGE_SUFFIX = <<~MULTI_LINE_STRING
|
@@ -96,6 +96,10 @@ module Glimmer
|
|
96
96
|
devmode_require = '-r puts_debuggerer '
|
97
97
|
end
|
98
98
|
rake_tasks = Rake.application.tasks.map(&:to_s).map {|t| t.sub('glimmer:', '')}
|
99
|
+
|
100
|
+
# handle a bash quirk with calling package[msi] while there is a "packages" directory locally (it passes package[msi] as packages)
|
101
|
+
application = 'package[msi]' if application == 'packages'
|
102
|
+
|
99
103
|
potential_rake_task_parts = application.match(REGEX_RAKE_TASK_WITH_ARGS)
|
100
104
|
application = potential_rake_task_parts[1]
|
101
105
|
rake_task_args = potential_rake_task_parts[2].split(',')
|
data/lib/glimmer/package.rb
CHANGED
@@ -6,6 +6,7 @@ module Glimmer
|
|
6
6
|
module Package
|
7
7
|
class << self
|
8
8
|
attr_accessor :javapackager_extra_args
|
9
|
+
alias jpackage_extra_args :javapackager_extra_args
|
9
10
|
|
10
11
|
def clean
|
11
12
|
require 'fileutils'
|
@@ -42,14 +43,15 @@ module Glimmer
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def lock_jars
|
45
|
-
puts 'Locking
|
46
|
-
|
46
|
+
puts 'Locking gem jar-dependencies by downloading & storing in vendor/jars...'
|
47
|
+
FileUtils.mkdir_p('vendor/jars')
|
48
|
+
command = "lock_jars --vendor-dir vendor/jars"
|
47
49
|
puts command
|
48
50
|
system command
|
49
51
|
end
|
50
52
|
|
51
|
-
def native(native_type=nil)
|
52
|
-
puts "Generating native executable with javapackager..."
|
53
|
+
def native(native_type=nil, native_extra_args)
|
54
|
+
puts "Generating native executable with javapackager/jpackage..."
|
53
55
|
require 'facets/string/titlecase'
|
54
56
|
require 'facets/string/underscore'
|
55
57
|
project_name = File.basename(File.expand_path('.'))
|
@@ -59,13 +61,28 @@ module Glimmer
|
|
59
61
|
license = (File.read(license_file).strip if File.exists?(license_file) && File.file?(license_file)) rescue nil
|
60
62
|
copyright = license.split("\n").first
|
61
63
|
human_name = project_name.underscore.titlecase
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
icon = "package/#{OS.mac? ? 'macosx' : 'windows'}/#{human_name}.#{OS.mac? ? 'icns' : 'ico'}"
|
65
|
+
if (`javapackager`.to_s.include?('Usage: javapackager') rescue nil)
|
66
|
+
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}\" "
|
67
|
+
command += " -BsystemWide=false " if OS.windows?
|
68
|
+
command += " -BjvmOptions=-XstartOnFirstThread " if OS.mac?
|
69
|
+
command += " -BappVersion=#{version} -Bmac.CFBundleVersion=#{version} " if version
|
70
|
+
command += " -srcfiles LICENSE.txt -BlicenseFile=LICENSE.txt " if license
|
71
|
+
command += " -Bcopyright=\"#{copyright}\" " if copyright
|
72
|
+
elsif (`jpackage`.to_s.include?('Usage: jpackage') rescue nil)
|
73
|
+
command = "jpackage --type #{native_type} --dest 'packages/bundles' --input 'dist' --main-class JarMain --main-jar '#{project_name}.jar' --name '#{human_name}' --vendor '#{human_name}' --icon '#{icon}' "
|
74
|
+
command += " --win-per-user-install --win-dir-chooser --win-menu --win-menu-group '#{human_name}' " if OS.windows?
|
75
|
+
command += " --java-options '-XstartOnFirstThread' --mac-package-name '#{human_name}' --mac-package-identifier 'org.#{project_name}.application.#{project_name}' " if OS.mac?
|
76
|
+
command += " --app-version \"#{version}\" " if version
|
77
|
+
command += " --license-file LICENSE.txt " if license
|
78
|
+
command += " --copyright \"#{copyright}\" " if copyright
|
79
|
+
else
|
80
|
+
puts "Neither javapackager nor jpackage exist in your Java installation. Please ensure javapackager or jpackage is available in PATH environment variable."
|
81
|
+
return
|
82
|
+
end
|
67
83
|
command += " #{javapackager_extra_args} " if javapackager_extra_args
|
68
84
|
command += " #{ENV['JAVAPACKAGER_EXTRA_ARGS']} " if ENV['JAVAPACKAGER_EXTRA_ARGS']
|
85
|
+
command += " #{native_extra_args} " if native_extra_args
|
69
86
|
puts command
|
70
87
|
system command
|
71
88
|
end
|
data/lib/glimmer/rake_task.rb
CHANGED
@@ -24,18 +24,19 @@ namespace :glimmer do
|
|
24
24
|
Glimmer::Package.lock_jars
|
25
25
|
end
|
26
26
|
|
27
|
-
desc 'Generate Native files
|
27
|
+
desc 'Generate Native files. type can be dmg/pkg on the Mac, msi/exe on Windows, and rpm/deb on Linux (type is optional)'
|
28
28
|
task :native, [:type] do |t, args|
|
29
|
-
|
29
|
+
extra_args = ARGV.partition {|arg| arg.include?('package:native')}.last.to_a.join(' ')
|
30
|
+
Glimmer::Package.native(args[:type], extra_args)
|
30
31
|
end
|
31
32
|
end
|
32
33
|
|
33
34
|
desc 'Package app for distribution (generating config, jar, and native files) (type is optional)'
|
34
35
|
task :package, [:type] do |t, args|
|
36
|
+
Rake::Task['gemspec:generate'].execute
|
37
|
+
Rake::Task['glimmer:package:lock_jars'].execute
|
35
38
|
Rake::Task['glimmer:package:config'].execute
|
36
39
|
Rake::Task['glimmer:package:jar'].execute
|
37
|
-
Rake::Task['glimmer:package:lock_jars'].execute
|
38
|
-
Rake::Task['gemspec:generate'].execute
|
39
40
|
Rake::Task['glimmer:package:native'].execute(args)
|
40
41
|
end
|
41
42
|
|
data/lib/glimmer/scaffold.rb
CHANGED
@@ -73,7 +73,8 @@ class Scaffold
|
|
73
73
|
|
74
74
|
# Glimmer
|
75
75
|
dist
|
76
|
-
packages
|
76
|
+
packages
|
77
|
+
vendor/jars
|
77
78
|
MULTI_LINE_STRING
|
78
79
|
|
79
80
|
GEMFILE = <<~MULTI_LINE_STRING
|
@@ -109,7 +110,6 @@ class Scaffold
|
|
109
110
|
MULTI_LINE_STRING
|
110
111
|
|
111
112
|
def app(app_name)
|
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
113
|
gem_name = file_name(app_name)
|
114
114
|
gem_summary = human_name(app_name)
|
115
115
|
system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
@@ -127,17 +127,22 @@ class Scaffold
|
|
127
127
|
mkdir 'app/models'
|
128
128
|
mkdir 'app/views'
|
129
129
|
custom_shell('AppView', current_dir_name, :app)
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
130
|
+
|
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
|
+
|
136
|
+
mkdir_p 'package/macosx'
|
137
|
+
icon_file = "package/macosx/#{human_name(app_name)}.icns"
|
138
|
+
cp File.expand_path('../../../icons/scaffold_app.icns', __FILE__), icon_file
|
139
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
140
|
+
|
141
|
+
mkdir_p 'package/linux'
|
142
|
+
icon_file = "package/linux/#{human_name(app_name)}.png"
|
143
|
+
cp File.expand_path('../../../icons/scaffold_app.png', __FILE__), icon_file
|
144
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
145
|
+
|
141
146
|
mkdir 'bin'
|
142
147
|
write "bin/#{file_name(app_name)}", app_bin_file(app_name)
|
143
148
|
write 'spec/spec_helper.rb', spec_helper_file
|
@@ -147,9 +152,12 @@ class Scaffold
|
|
147
152
|
system "\"packages/bundles/#{human_name(app_name)}/#{human_name(app_name)}.exe\""
|
148
153
|
else
|
149
154
|
system "bash -c '#{RVM_FUNCTION}\n cd .\n bundle\n glimmer package\n'"
|
150
|
-
|
155
|
+
if OS.mac?
|
156
|
+
system "open packages/bundles/#{human_name(app_name).gsub(' ', '\ ')}.app"
|
157
|
+
else
|
158
|
+
system "glimmer bin/#{file_name(app_name)}"
|
159
|
+
end
|
151
160
|
end
|
152
|
-
# TODO generate rspec test suite
|
153
161
|
end
|
154
162
|
|
155
163
|
def custom_shell(custom_shell_name, namespace, shell_type = nil)
|
@@ -169,13 +177,13 @@ class Scaffold
|
|
169
177
|
end
|
170
178
|
|
171
179
|
def custom_shell_gem(custom_shell_name, namespace)
|
172
|
-
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'
|
173
180
|
gem_name = "glimmer-cs-#{compact_name(custom_shell_name)}"
|
174
181
|
gem_summary = "#{human_name(custom_shell_name)} - Glimmer Custom Shell"
|
175
182
|
if namespace
|
176
183
|
gem_name += "-#{compact_name(namespace)}"
|
177
184
|
gem_summary += " (#{human_name(namespace)})"
|
178
185
|
else
|
186
|
+
return puts('Namespace is required! Usage: glimmer scaffold:gem:customshell[name,namespace]') unless `git config --get github.user`.to_s.strip == 'AndyObtiva'
|
179
187
|
namespace = 'glimmer'
|
180
188
|
end
|
181
189
|
system "jruby -r git-glimmer -S jeweler --rspec --summary '#{gem_summary}' --description '#{gem_summary}' #{gem_name}"
|
@@ -194,24 +202,33 @@ class Scaffold
|
|
194
202
|
write "bin/#{file_name(custom_shell_name)}", gem_bin_command_file(gem_name)
|
195
203
|
FileUtils.chmod 0755, "bin/#{file_name(custom_shell_name)}"
|
196
204
|
write 'spec/spec_helper.rb', spec_helper_file
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
205
|
+
|
206
|
+
mkdir_p 'package/windows'
|
207
|
+
icon_file = "package/windows/#{human_name(custom_shell_name)}.ico"
|
208
|
+
cp File.expand_path('../../../icons/scaffold_app.ico', __FILE__), icon_file
|
209
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
210
|
+
|
211
|
+
mkdir_p 'package/macosx'
|
212
|
+
icon_file = "package/macosx/#{human_name(custom_shell_name)}.icns"
|
213
|
+
cp File.expand_path('../../../icons/scaffold_app.icns', __FILE__), icon_file
|
214
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
215
|
+
|
216
|
+
mkdir_p 'package/linux'
|
217
|
+
icon_file = "package/linux/#{human_name(custom_shell_name)}.png"
|
218
|
+
cp File.expand_path('../../../icons/scaffold_app.png', __FILE__), icon_file
|
219
|
+
puts "Created #{current_dir_name}/#{icon_file}"
|
220
|
+
|
208
221
|
if OS.windows?
|
209
222
|
system "bundle"
|
210
223
|
system "glimmer package[image]"
|
211
224
|
system "\"packages/bundles/#{human_name(custom_shell_name)}/#{human_name(custom_shell_name)}.exe\""
|
212
225
|
else
|
213
226
|
system "bash -c '#{RVM_FUNCTION}\n cd .\n bundle\n glimmer package\n'"
|
214
|
-
|
227
|
+
if OS.mac?
|
228
|
+
system "open packages/bundles/#{human_name(custom_shell_name).gsub(' ', '\ ')}.app" if OS.mac?
|
229
|
+
else
|
230
|
+
system "bin/#{file_name(custom_shell_name)}"
|
231
|
+
end
|
215
232
|
end
|
216
233
|
puts "Finished creating #{gem_name} Ruby gem."
|
217
234
|
puts 'Edit Rakefile to configure gem details.'
|
@@ -344,7 +361,7 @@ class Scaffold
|
|
344
361
|
|
345
362
|
def gem_bin_command_file(gem_name)
|
346
363
|
<<~MULTI_LINE_STRING
|
347
|
-
#!/usr/bin/env
|
364
|
+
#!/usr/bin/env jruby
|
348
365
|
|
349
366
|
require 'glimmer/launcher'
|
350
367
|
|
@@ -489,7 +506,7 @@ class Scaffold
|
|
489
506
|
menu {
|
490
507
|
text '&File'
|
491
508
|
menu_item {
|
492
|
-
text 'Preferences...'
|
509
|
+
text '&Preferences...'
|
493
510
|
on_widget_selected {
|
494
511
|
display_preferences_dialog
|
495
512
|
}
|
@@ -35,16 +35,26 @@ module Glimmer
|
|
35
35
|
@swt_display = Display.new(*args)
|
36
36
|
@swt_display.set_data('proxy', self)
|
37
37
|
end
|
38
|
+
|
39
|
+
def content(&block)
|
40
|
+
Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::SWT::DisplayExpression.new, &block)
|
41
|
+
end
|
38
42
|
|
39
43
|
def method_missing(method, *args, &block)
|
40
|
-
|
44
|
+
if can_handle_observation_request?(method)
|
45
|
+
handle_observation_request(method, &block)
|
46
|
+
else
|
47
|
+
swt_display.send(method, *args, &block)
|
48
|
+
end
|
41
49
|
rescue => e
|
42
50
|
Glimmer::Config.logger.debug {"Neither DisplayProxy nor #{swt_display.class.name} can handle the method ##{method}"}
|
43
51
|
super
|
44
52
|
end
|
45
53
|
|
46
54
|
def respond_to?(method, *args, &block)
|
47
|
-
super ||
|
55
|
+
super ||
|
56
|
+
can_handle_observation_request?(method) ||
|
57
|
+
swt_display.respond_to?(method, *args, &block)
|
48
58
|
end
|
49
59
|
|
50
60
|
def can_handle_observation_request?(observation_request)
|
@@ -61,6 +71,7 @@ module Glimmer
|
|
61
71
|
end
|
62
72
|
|
63
73
|
def handle_observation_request(observation_request, &block)
|
74
|
+
observation_request = observation_request.to_s
|
64
75
|
if observation_request.start_with?('on_swt_')
|
65
76
|
constant_name = observation_request.sub(/^on_swt_/, '')
|
66
77
|
add_swt_event_listener(constant_name, &block)
|
@@ -14,16 +14,22 @@ module Glimmer
|
|
14
14
|
attr_reader :swt_widget
|
15
15
|
|
16
16
|
def initialize(parent, style)
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
if parent.nil?
|
18
|
+
@temporary_parent = parent = Glimmer::SWT::ShellProxy.new.swt_widget
|
19
|
+
end
|
20
|
+
@swt_widget = MessageBox.new(parent, style)
|
20
21
|
end
|
21
22
|
|
22
23
|
def open
|
23
|
-
@swt_widget.open
|
24
|
-
|
24
|
+
@swt_widget.open.tap do |result|
|
25
|
+
@temporary_parent&.dispose
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
29
|
+
def content(&block)
|
30
|
+
Glimmer::DSL::Engine.add_content(self, Glimmer::DSL::SWT::MessageBoxExpression.new, &block)
|
31
|
+
end
|
32
|
+
|
27
33
|
# TODO refactor the following methods to put in a JavaBean mixin or somethin (perhaps contribute to OSS project too)
|
28
34
|
|
29
35
|
def attribute_setter(attribute_name)
|
@@ -44,6 +50,18 @@ module Glimmer
|
|
44
50
|
|
45
51
|
def get_attribute(attribute_name)
|
46
52
|
@swt_widget.send(attribute_getter(attribute_name))
|
53
|
+
end
|
54
|
+
|
55
|
+
def method_missing(method, *args, &block)
|
56
|
+
swt_widget.send(method, *args, &block)
|
57
|
+
rescue => e
|
58
|
+
Glimmer::Config.logger.debug {"Neither MessageBoxProxy nor #{swt_widget.class.name} can handle the method ##{method}"}
|
59
|
+
super
|
60
|
+
end
|
61
|
+
|
62
|
+
def respond_to?(method, *args, &block)
|
63
|
+
super ||
|
64
|
+
swt_widget.respond_to?(method, *args, &block)
|
47
65
|
end
|
48
66
|
end
|
49
67
|
end
|
@@ -85,7 +85,55 @@ module Glimmer
|
|
85
85
|
}
|
86
86
|
table_editor_widget_proxy
|
87
87
|
end,
|
88
|
-
}
|
88
|
+
},
|
89
|
+
checkbox: {
|
90
|
+
widget_value_property: :selection,
|
91
|
+
editor_gui: lambda do |args, model, property, table_proxy|
|
92
|
+
first_time = true
|
93
|
+
table_proxy.table_editor.minimumHeight = 25
|
94
|
+
checkbox(*args) {
|
95
|
+
selection model.send(property)
|
96
|
+
focus true
|
97
|
+
on_widget_selected {
|
98
|
+
table_proxy.finish_edit!
|
99
|
+
}
|
100
|
+
on_focus_lost {
|
101
|
+
table_proxy.finish_edit!
|
102
|
+
}
|
103
|
+
on_key_pressed { |key_event|
|
104
|
+
if key_event.keyCode == swt(:cr)
|
105
|
+
table_proxy.finish_edit!
|
106
|
+
elsif key_event.keyCode == swt(:esc)
|
107
|
+
table_proxy.cancel_edit!
|
108
|
+
end
|
109
|
+
}
|
110
|
+
}
|
111
|
+
end,
|
112
|
+
},
|
113
|
+
radio: {
|
114
|
+
widget_value_property: :selection,
|
115
|
+
editor_gui: lambda do |args, model, property, table_proxy|
|
116
|
+
first_time = true
|
117
|
+
table_proxy.table_editor.minimumHeight = 25
|
118
|
+
radio(*args) {
|
119
|
+
selection model.send(property)
|
120
|
+
focus true
|
121
|
+
on_widget_selected {
|
122
|
+
table_proxy.finish_edit!
|
123
|
+
}
|
124
|
+
on_focus_lost {
|
125
|
+
table_proxy.finish_edit!
|
126
|
+
}
|
127
|
+
on_key_pressed { |key_event|
|
128
|
+
if key_event.keyCode == swt(:cr)
|
129
|
+
table_proxy.finish_edit!
|
130
|
+
elsif key_event.keyCode == swt(:esc)
|
131
|
+
table_proxy.cancel_edit!
|
132
|
+
end
|
133
|
+
}
|
134
|
+
}
|
135
|
+
end,
|
136
|
+
}
|
89
137
|
}
|
90
138
|
end
|
91
139
|
end
|
@@ -276,7 +324,7 @@ module Glimmer
|
|
276
324
|
new_value = @table_editor_widget_proxy&.swt_widget&.send(widget_value_property)
|
277
325
|
if table_item.isDisposed
|
278
326
|
@cancel_edit.call
|
279
|
-
elsif new_value && !action_taken && !@edit_in_progress && !@cancel_in_progress
|
327
|
+
elsif !new_value.nil? && !action_taken && !@edit_in_progress && !@cancel_in_progress
|
280
328
|
action_taken = true
|
281
329
|
@edit_in_progress = true
|
282
330
|
if new_value == model.send(model_editing_property)
|
@@ -67,18 +67,45 @@ module Glimmer
|
|
67
67
|
group.setLayout(GridLayout.new)
|
68
68
|
end,
|
69
69
|
}
|
70
|
+
|
71
|
+
class << self
|
72
|
+
def create(keyword, parent, args)
|
73
|
+
widget_proxy_class(keyword).new(keyword, parent, args)
|
74
|
+
end
|
75
|
+
|
76
|
+
def widget_proxy_class(keyword)
|
77
|
+
begin
|
78
|
+
class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
|
79
|
+
Glimmer::SWT.const_get(class_name)
|
80
|
+
rescue
|
81
|
+
Glimmer::SWT::WidgetProxy
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def underscored_widget_name(swt_widget)
|
86
|
+
swt_widget.class.name.split(/::|\./).last.underscore
|
87
|
+
end
|
88
|
+
end
|
70
89
|
|
71
90
|
attr_reader :parent_proxy, :swt_widget, :drag_source_proxy, :drop_target_proxy, :drag_source_style, :drag_source_transfer, :drop_target_transfer
|
72
91
|
|
73
92
|
# Initializes a new SWT Widget
|
74
93
|
#
|
75
94
|
# Styles is a comma separate list of symbols representing SWT styles in lower case
|
76
|
-
def initialize(
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
95
|
+
def initialize(*init_args, swt_widget: nil)
|
96
|
+
if swt_widget.nil?
|
97
|
+
underscored_widget_name, parent, args = init_args
|
98
|
+
@parent_proxy = parent
|
99
|
+
styles, extra_options = extract_args(underscored_widget_name, args)
|
100
|
+
swt_widget_class = self.class.swt_widget_class_for(underscored_widget_name)
|
101
|
+
@swt_widget = swt_widget_class.new(@parent_proxy.swt_widget, style(underscored_widget_name, styles), *extra_options)
|
102
|
+
else
|
103
|
+
@swt_widget = swt_widget
|
104
|
+
underscored_widget_name = self.class.underscored_widget_name(@swt_widget)
|
105
|
+
parent_proxy_class = self.class.widget_proxy_class(self.class.underscored_widget_name(@swt_widget.parent))
|
106
|
+
@parent_proxy = parent_proxy_class.new(swt_widget: swt_widget.parent)
|
107
|
+
end
|
108
|
+
@swt_widget.set_data('proxy', self)
|
82
109
|
DEFAULT_INITIALIZERS[underscored_widget_name]&.call(@swt_widget)
|
83
110
|
@parent_proxy.post_initialize_child(self)
|
84
111
|
end
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: glimmer-dsl-swt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
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-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.10.
|
18
|
+
version: 0.10.2
|
19
19
|
name: glimmer
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
@@ -23,7 +23,7 @@ dependencies:
|
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.10.
|
26
|
+
version: 0.10.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
29
29
|
requirements:
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
requirements:
|
58
58
|
- - "~>"
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 0.
|
60
|
+
version: 0.10.0
|
61
61
|
name: puts_debuggerer
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 0.
|
68
|
+
version: 0.10.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
requirement: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
@@ -309,6 +309,7 @@ files:
|
|
309
309
|
- bin/glimmer
|
310
310
|
- icons/scaffold_app.icns
|
311
311
|
- icons/scaffold_app.ico
|
312
|
+
- icons/scaffold_app.png
|
312
313
|
- lib/ext/glimmer.rb
|
313
314
|
- lib/ext/glimmer/config.rb
|
314
315
|
- lib/glimmer-dsl-swt.rb
|