glimmer-dsl-swt 4.17.10.4 → 4.18.0.0
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/CHANGELOG.md +35 -0
- data/README.md +83 -56
- data/VERSION +1 -1
- data/glimmer-dsl-swt.gemspec +51 -30
- data/lib/glimmer-dsl-swt.rb +1 -0
- data/lib/glimmer/swt/image_proxy.rb +11 -10
- data/lib/glimmer/swt/layout_proxy.rb +7 -3
- data/lib/glimmer/swt/menu_proxy.rb +9 -5
- data/lib/glimmer/swt/sash_form_proxy.rb +1 -1
- data/lib/glimmer/swt/style_constantizable.rb +8 -4
- data/lib/glimmer/swt/widget_proxy.rb +69 -23
- data/samples/elaborate/login.rb +10 -13
- data/samples/elaborate/meta_sample.rb +77 -19
- data/samples/hello/hello_browser.rb +2 -0
- data/samples/hello/hello_button.rb +46 -0
- data/samples/hello/hello_computed.rb +9 -3
- data/samples/hello/hello_link.rb +80 -0
- data/samples/hello/hello_list_multi_selection.rb +22 -17
- data/samples/hello/hello_list_single_selection.rb +5 -5
- data/samples/hello/hello_menu_bar.rb +184 -28
- data/samples/hello/hello_message_box.rb +9 -8
- data/samples/hello/hello_pop_up_context_menu.rb +33 -6
- 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 +54 -34
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.18.0.0
|
data/glimmer-dsl-swt.gemspec
CHANGED
@@ -2,17 +2,17 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Juwelier::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: glimmer-dsl-swt 4.
|
5
|
+
# stub: glimmer-dsl-swt 4.18.0.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "glimmer-dsl-swt".freeze
|
9
|
-
s.version = "4.
|
9
|
+
s.version = "4.18.0.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib".freeze]
|
13
13
|
s.authors = ["AndyMaleh".freeze]
|
14
|
-
s.date = "2020-12-
|
15
|
-
s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI
|
14
|
+
s.date = "2020-12-19"
|
15
|
+
s.description = "Glimmer DSL for SWT (JRuby Desktop Development GUI Framework)".freeze
|
16
16
|
s.email = "andy.am@gmail.com".freeze
|
17
17
|
s.executables = ["glimmer".freeze, "girb".freeze]
|
18
18
|
s.extra_rdoc_files = [
|
@@ -131,6 +131,7 @@ Gem::Specification.new do |s|
|
|
131
131
|
"samples/elaborate/tic_tac_toe/cell.rb",
|
132
132
|
"samples/elaborate/user_profile.rb",
|
133
133
|
"samples/hello/hello_browser.rb",
|
134
|
+
"samples/hello/hello_button.rb",
|
134
135
|
"samples/hello/hello_checkbox.rb",
|
135
136
|
"samples/hello/hello_checkbox_group.rb",
|
136
137
|
"samples/hello/hello_combo.rb",
|
@@ -144,6 +145,7 @@ Gem::Specification.new do |s|
|
|
144
145
|
"samples/hello/hello_expand_bar.rb",
|
145
146
|
"samples/hello/hello_file_dialog.rb",
|
146
147
|
"samples/hello/hello_group.rb",
|
148
|
+
"samples/hello/hello_link.rb",
|
147
149
|
"samples/hello/hello_list_multi_selection.rb",
|
148
150
|
"samples/hello/hello_list_single_selection.rb",
|
149
151
|
"samples/hello/hello_menu_bar.rb",
|
@@ -164,44 +166,63 @@ Gem::Specification.new do |s|
|
|
164
166
|
s.homepage = "http://github.com/AndyObtiva/glimmer-dsl-swt".freeze
|
165
167
|
s.licenses = ["MIT".freeze]
|
166
168
|
s.required_ruby_version = Gem::Requirement.new(">= 2.5.3".freeze)
|
167
|
-
s.rubygems_version = "3.
|
169
|
+
s.rubygems_version = "3.0.6".freeze
|
168
170
|
s.summary = "Glimmer DSL for SWT".freeze
|
169
171
|
|
170
172
|
if s.respond_to? :specification_version then
|
171
173
|
s.specification_version = 4
|
172
|
-
end
|
173
174
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
175
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
176
|
+
s.add_runtime_dependency(%q<glimmer>.freeze, ["~> 1.0.6"])
|
177
|
+
s.add_runtime_dependency(%q<super_module>.freeze, [">= 1.4.1", "< 2.0.0"])
|
178
|
+
s.add_runtime_dependency(%q<nested_inherited_jruby_include_package>.freeze, [">= 0.3.0", "< 2.0.0"])
|
179
|
+
s.add_runtime_dependency(%q<puts_debuggerer>.freeze, [">= 0.11.0", "< 2.0.0"])
|
180
|
+
s.add_runtime_dependency(%q<rake-tui>.freeze, [">= 0.2.3", "< 2.0.0"])
|
181
|
+
s.add_runtime_dependency(%q<git-glimmer>.freeze, ["= 1.7.0"])
|
182
|
+
s.add_runtime_dependency(%q<logging>.freeze, [">= 2.3.0", "< 3.0.0"])
|
183
|
+
s.add_runtime_dependency(%q<os>.freeze, [">= 1.0.0", "< 2.0.0"])
|
184
|
+
s.add_runtime_dependency(%q<rake>.freeze, [">= 10.1.0", "< 14.0.0"])
|
185
|
+
s.add_runtime_dependency(%q<text-table>.freeze, [">= 1.2.4", "< 2.0.0"])
|
186
|
+
s.add_runtime_dependency(%q<rouge>.freeze, [">= 3.26.0", "< 4.0.0"])
|
187
|
+
s.add_development_dependency(%q<juwelier>.freeze, [">= 2.4.9", "< 3.0.0"])
|
188
|
+
s.add_development_dependency(%q<warbler>.freeze, [">= 2.0.5", "< 3.0.0"])
|
189
|
+
s.add_development_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
190
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
|
191
|
+
s.add_development_dependency(%q<coveralls>.freeze, ["= 0.8.23"])
|
192
|
+
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.16.1"])
|
193
|
+
s.add_development_dependency(%q<simplecov-lcov>.freeze, ["~> 0.7.0"])
|
194
|
+
else
|
195
|
+
s.add_dependency(%q<glimmer>.freeze, ["~> 1.0.6"])
|
196
|
+
s.add_dependency(%q<super_module>.freeze, [">= 1.4.1", "< 2.0.0"])
|
197
|
+
s.add_dependency(%q<nested_inherited_jruby_include_package>.freeze, [">= 0.3.0", "< 2.0.0"])
|
198
|
+
s.add_dependency(%q<puts_debuggerer>.freeze, [">= 0.11.0", "< 2.0.0"])
|
199
|
+
s.add_dependency(%q<rake-tui>.freeze, [">= 0.2.3", "< 2.0.0"])
|
200
|
+
s.add_dependency(%q<git-glimmer>.freeze, ["= 1.7.0"])
|
201
|
+
s.add_dependency(%q<logging>.freeze, [">= 2.3.0", "< 3.0.0"])
|
202
|
+
s.add_dependency(%q<os>.freeze, [">= 1.0.0", "< 2.0.0"])
|
203
|
+
s.add_dependency(%q<rake>.freeze, [">= 10.1.0", "< 14.0.0"])
|
204
|
+
s.add_dependency(%q<text-table>.freeze, [">= 1.2.4", "< 2.0.0"])
|
205
|
+
s.add_dependency(%q<rouge>.freeze, [">= 3.26.0", "< 4.0.0"])
|
206
|
+
s.add_dependency(%q<juwelier>.freeze, [">= 2.4.9", "< 3.0.0"])
|
207
|
+
s.add_dependency(%q<warbler>.freeze, [">= 2.0.5", "< 3.0.0"])
|
208
|
+
s.add_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
209
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.5.0"])
|
210
|
+
s.add_dependency(%q<coveralls>.freeze, ["= 0.8.23"])
|
211
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0.16.1"])
|
212
|
+
s.add_dependency(%q<simplecov-lcov>.freeze, ["~> 0.7.0"])
|
213
|
+
end
|
193
214
|
else
|
194
|
-
s.add_dependency(%q<glimmer>.freeze, ["~> 1.0.
|
195
|
-
s.add_dependency(%q<super_module>.freeze, ["
|
196
|
-
s.add_dependency(%q<nested_inherited_jruby_include_package>.freeze, ["
|
197
|
-
s.add_dependency(%q<puts_debuggerer>.freeze, ["
|
215
|
+
s.add_dependency(%q<glimmer>.freeze, ["~> 1.0.6"])
|
216
|
+
s.add_dependency(%q<super_module>.freeze, [">= 1.4.1", "< 2.0.0"])
|
217
|
+
s.add_dependency(%q<nested_inherited_jruby_include_package>.freeze, [">= 0.3.0", "< 2.0.0"])
|
218
|
+
s.add_dependency(%q<puts_debuggerer>.freeze, [">= 0.11.0", "< 2.0.0"])
|
198
219
|
s.add_dependency(%q<rake-tui>.freeze, [">= 0.2.3", "< 2.0.0"])
|
199
220
|
s.add_dependency(%q<git-glimmer>.freeze, ["= 1.7.0"])
|
200
221
|
s.add_dependency(%q<logging>.freeze, [">= 2.3.0", "< 3.0.0"])
|
201
222
|
s.add_dependency(%q<os>.freeze, [">= 1.0.0", "< 2.0.0"])
|
202
223
|
s.add_dependency(%q<rake>.freeze, [">= 10.1.0", "< 14.0.0"])
|
203
224
|
s.add_dependency(%q<text-table>.freeze, [">= 1.2.4", "< 2.0.0"])
|
204
|
-
s.add_dependency(%q<rouge>.freeze, [">= 3.
|
225
|
+
s.add_dependency(%q<rouge>.freeze, [">= 3.26.0", "< 4.0.0"])
|
205
226
|
s.add_dependency(%q<juwelier>.freeze, [">= 2.4.9", "< 3.0.0"])
|
206
227
|
s.add_dependency(%q<warbler>.freeze, [">= 2.0.5", "< 3.0.0"])
|
207
228
|
s.add_dependency(%q<rspec-mocks>.freeze, ["~> 3.5.0"])
|
data/lib/glimmer-dsl-swt.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
# a copy of this software and associated documentation files (the
|
5
5
|
# "Software"), to deal in the Software without restriction, including
|
@@ -7,10 +7,10 @@
|
|
7
7
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
8
|
# permit persons to whom the Software is furnished to do so, subject to
|
9
9
|
# the following conditions:
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# The above copyright notice and this permission notice shall be
|
12
12
|
# included in all copies or substantial portions of the Software.
|
13
|
-
#
|
13
|
+
#
|
14
14
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
15
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
16
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
@@ -54,9 +54,9 @@ module Glimmer
|
|
54
54
|
@args = @args.first if @args.size == 1 && @args.first.is_a?(Array)
|
55
55
|
if options&.keys&.include?(:swt_image)
|
56
56
|
@swt_image = options[:swt_image]
|
57
|
-
@image_data = @swt_image.image_data
|
57
|
+
@original_image_data = @image_data = @swt_image.image_data
|
58
58
|
elsif @file_path
|
59
|
-
@image_data = ImageData.new(input_stream || @file_path)
|
59
|
+
@original_image_data = @image_data = ImageData.new(input_stream || @file_path)
|
60
60
|
@swt_image = Image.new(DisplayProxy.instance.swt_display, @image_data)
|
61
61
|
width = options[:width]
|
62
62
|
height = options[:height]
|
@@ -65,8 +65,8 @@ module Glimmer
|
|
65
65
|
scale_to(width, height) unless width.nil? || height.nil?
|
66
66
|
else
|
67
67
|
@swt_image = Image.new(*@args)
|
68
|
-
@image_data = @swt_image.image_data
|
69
|
-
end
|
68
|
+
@original_image_data = @image_data = @swt_image.image_data
|
69
|
+
end
|
70
70
|
end
|
71
71
|
|
72
72
|
def input_stream
|
@@ -77,12 +77,13 @@ module Glimmer
|
|
77
77
|
file_input_stream = object.java_class.resource_as_stream(file_path)
|
78
78
|
else
|
79
79
|
file_input_stream = java.io.FileInputStream.new(@file_path)
|
80
|
-
end
|
80
|
+
end
|
81
81
|
java.io.BufferedInputStream.new(file_input_stream) if file_input_stream
|
82
82
|
end
|
83
83
|
|
84
84
|
def scale_to(width, height)
|
85
|
-
|
85
|
+
return if @image_data.width == width && @image_data.height == height
|
86
|
+
scaled_image_data = @original_image_data.scaledTo(width, height)
|
86
87
|
device = swt_image.device
|
87
88
|
swt_image.dispose
|
88
89
|
@swt_image = Image.new(device, scaled_image_data)
|
@@ -99,7 +100,7 @@ module Glimmer
|
|
99
100
|
|
100
101
|
def respond_to?(method, *args, &block)
|
101
102
|
super || swt_image.respond_to?(method, *args, &block)
|
102
|
-
end
|
103
|
+
end
|
103
104
|
end
|
104
105
|
end
|
105
106
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Copyright (c) 2007-2020 Andy Maleh
|
2
|
-
#
|
2
|
+
#
|
3
3
|
# Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
# a copy of this software and associated documentation files (the
|
5
5
|
# "Software"), to deal in the Software without restriction, including
|
@@ -7,10 +7,10 @@
|
|
7
7
|
# distribute, sublicense, and/or sell copies of the Software, and to
|
8
8
|
# permit persons to whom the Software is furnished to do so, subject to
|
9
9
|
# the following conditions:
|
10
|
-
#
|
10
|
+
#
|
11
11
|
# The above copyright notice and this permission notice shall be
|
12
12
|
# included in all copies or substantial portions of the Software.
|
13
|
-
#
|
13
|
+
#
|
14
14
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
15
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
16
|
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
@@ -68,6 +68,10 @@ module Glimmer
|
|
68
68
|
@swt_layout = self.class.swt_layout_class_for(underscored_layout_name).new(*args)
|
69
69
|
@swt_layout.marginWidth = 15 if @swt_layout.respond_to?(:marginWidth)
|
70
70
|
@swt_layout.marginHeight = 15 if @swt_layout.respond_to?(:marginHeight)
|
71
|
+
@swt_layout.marginTop = 0 if @swt_layout.respond_to?(:marginTop)
|
72
|
+
@swt_layout.marginRight = 0 if @swt_layout.respond_to?(:marginRight)
|
73
|
+
@swt_layout.marginBottom = 0 if @swt_layout.respond_to?(:marginBottom)
|
74
|
+
@swt_layout.marginLeft = 0 if @swt_layout.respond_to?(:marginLeft)
|
71
75
|
@widget_proxy.swt_widget.setLayout(@swt_layout)
|
72
76
|
end
|
73
77
|
|
@@ -66,7 +66,6 @@ module Glimmer
|
|
66
66
|
else
|
67
67
|
@swt_widget = swt_widget_class.new(parent.swt_widget)
|
68
68
|
end
|
69
|
-
DEFAULT_INITIALIZERS['menu']&.call(swt_widget)
|
70
69
|
|
71
70
|
if styles.include?(:bar)
|
72
71
|
parent.swt_widget.setMenuBar(swt_widget)
|
@@ -76,7 +75,7 @@ module Glimmer
|
|
76
75
|
end
|
77
76
|
|
78
77
|
def has_attribute?(attribute_name, *args)
|
79
|
-
if attribute_name.to_s
|
78
|
+
if ['text', 'enabled'].include?(attribute_name.to_s)
|
80
79
|
true
|
81
80
|
else
|
82
81
|
super(attribute_name, *args)
|
@@ -84,24 +83,29 @@ module Glimmer
|
|
84
83
|
end
|
85
84
|
|
86
85
|
def set_attribute(attribute_name, *args)
|
87
|
-
attribute_name
|
88
|
-
if attribute_name.to_s == "text"
|
86
|
+
if normalized_attribute(attribute_name) == 'text'
|
89
87
|
text_value = args[0]
|
90
88
|
@swt_menu_item.setText text_value
|
89
|
+
elsif normalized_attribute(attribute_name) == 'enabled'
|
90
|
+
value = args[0]
|
91
|
+
@swt_menu_item.setEnabled value
|
91
92
|
else
|
92
93
|
super(attribute_name, *args)
|
93
94
|
end
|
94
95
|
end
|
95
96
|
|
96
97
|
def get_attribute(attribute_name)
|
97
|
-
if attribute_name
|
98
|
+
if normalized_attribute(attribute_name) == 'text'
|
98
99
|
@swt_menu_item.getText
|
100
|
+
elsif normalized_attribute(attribute_name) == 'enabled'
|
101
|
+
@swt_menu_item.getEnabled
|
99
102
|
else
|
100
103
|
super(attribute_name)
|
101
104
|
end
|
102
105
|
end
|
103
106
|
|
104
107
|
def can_handle_observation_request?(observation_request, super_only: false)
|
108
|
+
observation_request = observation_request.to_s
|
105
109
|
super_result = super(observation_request)
|
106
110
|
if observation_request.start_with?('on_') && !super_result && !super_only
|
107
111
|
return menu_item_proxy.can_handle_observation_request?(observation_request)
|
@@ -28,7 +28,7 @@ module Glimmer
|
|
28
28
|
# Follows the Proxy Design Pattern
|
29
29
|
class SashFormProxy < WidgetProxy
|
30
30
|
def post_add_content
|
31
|
-
|
31
|
+
self.weights = @weights unless @weights.nil?
|
32
32
|
end
|
33
33
|
|
34
34
|
def set_attribute(attribute_name, *args)
|
@@ -89,11 +89,15 @@ module Glimmer
|
|
89
89
|
negative ? ~bit_value : bit_value
|
90
90
|
rescue => e
|
91
91
|
# Glimmer::Config.logger.debug {e.full_message}
|
92
|
-
|
93
|
-
|
94
|
-
negative ? ~bit_value : bit_value
|
92
|
+
if symbol.to_s.size == 1 # accelerator key
|
93
|
+
symbol.to_s.bytes.first
|
95
94
|
else
|
96
|
-
|
95
|
+
bit_value = extra_styles[swt_constant_symbol]
|
96
|
+
if bit_value
|
97
|
+
negative ? ~bit_value : bit_value
|
98
|
+
else
|
99
|
+
symbol
|
100
|
+
end
|
97
101
|
end
|
98
102
|
end
|
99
103
|
end
|
@@ -69,7 +69,7 @@ module Glimmer
|
|
69
69
|
}
|
70
70
|
|
71
71
|
DEFAULT_INITIALIZERS = {
|
72
|
-
|
72
|
+
composite: lambda do |composite|
|
73
73
|
if composite.get_layout.nil?
|
74
74
|
layout = GridLayout.new
|
75
75
|
layout.marginWidth = 15
|
@@ -77,18 +77,18 @@ module Glimmer
|
|
77
77
|
composite.layout = layout
|
78
78
|
end
|
79
79
|
end,
|
80
|
-
|
80
|
+
scrolled_composite: lambda do |scrolled_composite|
|
81
81
|
scrolled_composite.expand_horizontal = true
|
82
82
|
scrolled_composite.expand_vertical = true
|
83
83
|
end,
|
84
|
-
|
84
|
+
table: lambda do |table|
|
85
85
|
table.setHeaderVisible(true)
|
86
86
|
table.setLinesVisible(true)
|
87
87
|
end,
|
88
|
-
|
88
|
+
table_column: lambda do |table_column|
|
89
89
|
table_column.setWidth(80)
|
90
90
|
end,
|
91
|
-
|
91
|
+
group: lambda do |group|
|
92
92
|
group.layout = GridLayout.new if group.get_layout.nil?
|
93
93
|
end,
|
94
94
|
}
|
@@ -160,7 +160,7 @@ module Glimmer
|
|
160
160
|
end
|
161
161
|
if @swt_widget&.get_data('proxy').nil?
|
162
162
|
@swt_widget.set_data('proxy', self)
|
163
|
-
DEFAULT_INITIALIZERS[underscored_widget_name]&.call(@swt_widget)
|
163
|
+
DEFAULT_INITIALIZERS[underscored_widget_name.to_s.to_sym]&.call(@swt_widget)
|
164
164
|
@parent_proxy.post_initialize_child(self)
|
165
165
|
end
|
166
166
|
end
|
@@ -202,7 +202,22 @@ module Glimmer
|
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
205
|
+
def has_attribute_getter?(attribute_getter_name, *args)
|
206
|
+
attribute_getter_name = attribute_getter_name.to_s.underscore
|
207
|
+
return false unless !attribute_getter_name.end_with?('=') && !attribute_getter_name.start_with?('set_')
|
208
|
+
args.empty? && swt_widget.respond_to?(attribute_getter_name)
|
209
|
+
end
|
210
|
+
|
211
|
+
def has_attribute_setter?(attribute_setter_name, *args)
|
212
|
+
attribute_setter_name = attribute_setter_name.to_s
|
213
|
+
underscored_attribute_setter_name = attribute_setter_name.underscore
|
214
|
+
return false unless attribute_setter_name.end_with?('=') || (attribute_setter_name.start_with?('set_') && !args.empty?)
|
215
|
+
attribute_name = underscored_attribute_setter_name.sub(/^set_/, '').sub(/=$/, '')
|
216
|
+
has_attribute?(attribute_name, *args)
|
217
|
+
end
|
218
|
+
|
205
219
|
def has_attribute?(attribute_name, *args)
|
220
|
+
# TODO test that attribute getter responds too
|
206
221
|
widget_custom_attribute = widget_custom_attribute_mapping[attribute_name.to_s]
|
207
222
|
if widget_custom_attribute
|
208
223
|
@swt_widget.respond_to?(widget_custom_attribute[:setter][:name])
|
@@ -212,12 +227,15 @@ module Glimmer
|
|
212
227
|
end
|
213
228
|
|
214
229
|
def set_attribute(attribute_name, *args)
|
230
|
+
# TODO Think about widget subclasses overriding set_attribute to add more attributes vs adding as Ruby attributes directly
|
215
231
|
widget_custom_attribute = widget_custom_attribute_mapping[attribute_name.to_s]
|
232
|
+
apply_property_type_converters(normalized_attribute(attribute_name), args)
|
216
233
|
if widget_custom_attribute
|
217
234
|
widget_custom_attribute[:setter][:invoker].call(@swt_widget, args)
|
218
235
|
elsif @swt_widget.respond_to?(attribute_setter(attribute_name))
|
219
|
-
apply_property_type_converters(attribute_name, args)
|
220
236
|
@swt_widget.send(attribute_setter(attribute_name), *args) unless @swt_widget.send(attribute_getter(attribute_name)) == args.first
|
237
|
+
elsif @swt_widget.respond_to?(ruby_attribute_setter(attribute_name))
|
238
|
+
@swt_widget.send(ruby_attribute_setter(attribute_name), args)
|
221
239
|
else
|
222
240
|
send(ruby_attribute_setter(attribute_name), args)
|
223
241
|
end
|
@@ -233,6 +251,12 @@ module Glimmer
|
|
233
251
|
end
|
234
252
|
elsif @swt_widget.respond_to?(attribute_getter(attribute_name))
|
235
253
|
@swt_widget.send(attribute_getter(attribute_name))
|
254
|
+
elsif @swt_widget.respond_to?(ruby_attribute_getter(attribute_name))
|
255
|
+
@swt_widget.send(ruby_attribute_getter(attribute_name))
|
256
|
+
elsif @swt_widget.respond_to?(attribute_name)
|
257
|
+
@swt_widget.send(attribute_name)
|
258
|
+
elsif respond_to?(ruby_attribute_getter(attribute_name))
|
259
|
+
send(ruby_attribute_getter(attribute_name))
|
236
260
|
else
|
237
261
|
send(attribute_name)
|
238
262
|
end
|
@@ -607,11 +631,16 @@ module Glimmer
|
|
607
631
|
def method_missing(method, *args, &block)
|
608
632
|
if can_handle_observation_request?(method)
|
609
633
|
handle_observation_request(method, &block)
|
634
|
+
elsif has_attribute_setter?(method, *args)
|
635
|
+
set_attribute(method, *args)
|
636
|
+
elsif has_attribute_getter?(method, *args)
|
637
|
+
get_attribute(method, *args)
|
610
638
|
else
|
611
639
|
swt_widget.send(method, *args, &block)
|
612
640
|
end
|
613
641
|
rescue => e
|
614
|
-
Glimmer::Config.logger.debug {"Neither WidgetProxy nor #{swt_widget.class.name} can handle the method ##{method}"}
|
642
|
+
Glimmer::Config.logger.debug { "Neither WidgetProxy nor #{swt_widget.class.name} can handle the method ##{method}" }
|
643
|
+
Glimmer::Config.logger.debug { e.full_message }
|
615
644
|
super
|
616
645
|
# TODO consider get_attribute too
|
617
646
|
end
|
@@ -639,16 +668,26 @@ module Glimmer
|
|
639
668
|
end
|
640
669
|
|
641
670
|
def ruby_attribute_setter(attribute_name)
|
642
|
-
"#{attribute_name}="
|
671
|
+
"#{normalized_attribute(attribute_name)}="
|
643
672
|
end
|
644
673
|
|
645
674
|
def attribute_setter(attribute_name)
|
646
|
-
"set#{attribute_name.
|
675
|
+
"set#{normalized_attribute(attribute_name).camelcase(:upper)}"
|
647
676
|
end
|
648
677
|
|
649
678
|
def attribute_getter(attribute_name)
|
650
|
-
"get#{attribute_name.
|
679
|
+
"get#{normalized_attribute(attribute_name).camelcase(:upper)}"
|
651
680
|
end
|
681
|
+
|
682
|
+
def normalized_attribute(attribute_name)
|
683
|
+
attribute_name = attribute_name.to_s if attribute_name.is_a?(Symbol)
|
684
|
+
attribute_name = attribute_name.underscore unless attribute_name.downcase?
|
685
|
+
attribute_name = attribute_name.sub(/^get_/, '') if attribute_name.start_with?('get_')
|
686
|
+
attribute_name = attribute_name.sub(/^set_/, '') if attribute_name.start_with?('set_')
|
687
|
+
attribute_name = attribute_name.sub(/=$/, '') if attribute_name.end_with?('=')
|
688
|
+
attribute_name
|
689
|
+
end
|
690
|
+
alias ruby_attribute_getter normalized_attribute
|
652
691
|
|
653
692
|
# TODO refactor following methods to eliminate duplication
|
654
693
|
# perhaps consider relying on raising an exception to avoid checking first
|
@@ -799,11 +838,14 @@ module Glimmer
|
|
799
838
|
end
|
800
839
|
# TODO consider detecting type on widget method and automatically invoking right converter (e.g. :to_s for String, :to_i for Integer)
|
801
840
|
@property_type_converters ||= {
|
802
|
-
|
841
|
+
accelerator: lambda { |*value|
|
842
|
+
SWTProxy[*value]
|
843
|
+
},
|
844
|
+
alignment: lambda { |*value|
|
803
845
|
SWTProxy[*value]
|
804
846
|
},
|
805
|
-
:
|
806
|
-
:
|
847
|
+
background: color_converter,
|
848
|
+
background_image: lambda do |*value|
|
807
849
|
image_proxy = ImageProxy.create(*value)
|
808
850
|
|
809
851
|
if image_proxy&.file_path&.end_with?('.gif')
|
@@ -844,7 +886,7 @@ module Glimmer
|
|
844
886
|
|
845
887
|
image_proxy&.swt_image
|
846
888
|
end,
|
847
|
-
:
|
889
|
+
cursor: lambda do |value|
|
848
890
|
cursor_proxy = nil
|
849
891
|
if value.is_a?(CursorProxy)
|
850
892
|
cursor_proxy = value
|
@@ -856,8 +898,9 @@ module Glimmer
|
|
856
898
|
:enabled => lambda do |value|
|
857
899
|
!!value
|
858
900
|
end,
|
859
|
-
:
|
860
|
-
:
|
901
|
+
foreground: color_converter,
|
902
|
+
link_foreground: color_converter,
|
903
|
+
font: lambda do |value|
|
861
904
|
if value.is_a?(Hash)
|
862
905
|
font_properties = value
|
863
906
|
FontProxy.new(self, font_properties).swt_font
|
@@ -865,21 +908,21 @@ module Glimmer
|
|
865
908
|
value
|
866
909
|
end
|
867
910
|
end,
|
868
|
-
:
|
911
|
+
image: lambda do |*value|
|
869
912
|
ImageProxy.create(*value).swt_image
|
870
913
|
end,
|
871
|
-
:
|
914
|
+
images: lambda do |array|
|
872
915
|
array.to_a.map do |value|
|
873
916
|
ImageProxy.create(value).swt_image
|
874
917
|
end.to_java(Image)
|
875
918
|
end,
|
876
|
-
:
|
919
|
+
items: lambda do |value|
|
877
920
|
value.to_java :string
|
878
921
|
end,
|
879
|
-
:
|
922
|
+
text: lambda do |value|
|
880
923
|
value.to_s
|
881
924
|
end,
|
882
|
-
:
|
925
|
+
transfer: lambda do |value|
|
883
926
|
value = value.first if value.is_a?(Array) && value.size == 1 && value.first.is_a?(Array)
|
884
927
|
transfer_object_extrapolator = lambda do |transfer_name|
|
885
928
|
transfer_type = "#{transfer_name.to_s.camelcase(:upper)}Transfer".to_sym
|
@@ -898,9 +941,12 @@ module Glimmer
|
|
898
941
|
result = result.to_java(Transfer) unless result.is_a?(ArrayJavaProxy)
|
899
942
|
result
|
900
943
|
end,
|
901
|
-
:
|
944
|
+
visible: lambda do |value|
|
902
945
|
!!value
|
903
946
|
end,
|
947
|
+
weights: lambda do |value|
|
948
|
+
value.to_java(:int)
|
949
|
+
end,
|
904
950
|
}
|
905
951
|
end
|
906
952
|
end
|