glimmer-dsl-swt 4.22.2.4 → 4.23.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 +15 -0
- data/README.md +69 -15
- data/VERSION +1 -1
- data/docs/reference/GLIMMER_COMMAND.md +3 -1
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +33 -31
- data/docs/reference/GLIMMER_SAMPLES.md +11 -19
- data/glimmer-dsl-swt.gemspec +0 -0
- data/lib/glimmer/launcher.rb +7 -4
- data/lib/glimmer/rake_task/package.rb +1 -1
- data/lib/glimmer/rake_task/scaffold.rb +25 -13
- data/lib/glimmer/swt/custom/shape.rb +6 -2
- data/samples/elaborate/calculator.rb +12 -12
- data/samples/elaborate/contact_manager.rb +26 -14
- data/samples/elaborate/game_of_life.rb +8 -8
- data/samples/elaborate/klondike_solitaire/view/action_panel.rb +2 -2
- data/samples/elaborate/klondike_solitaire/view/klondike_solitaire_menu_bar.rb +15 -10
- data/samples/elaborate/login.rb +16 -10
- data/samples/elaborate/mandelbrot_fractal.rb +26 -20
- data/samples/elaborate/meta_sample.rb +6 -6
- data/samples/elaborate/metronome.rb +4 -4
- data/samples/elaborate/stock_ticker.rb +12 -12
- data/samples/elaborate/tetris.rb +4 -4
- data/samples/elaborate/timer.rb +36 -26
- data/samples/elaborate/user_profile.rb +53 -14
- data/samples/elaborate/weather.rb +2 -2
- data/samples/hello/hello_button.rb +3 -3
- data/samples/hello/hello_canvas_animation.rb +2 -2
- data/samples/hello/hello_color_dialog.rb +4 -4
- data/samples/hello/hello_custom_shell.rb +2 -2
- data/samples/hello/hello_dialog.rb +4 -4
- data/samples/hello/hello_directory_dialog.rb +2 -2
- data/samples/hello/hello_expand_bar.rb +4 -5
- data/samples/hello/hello_file_dialog.rb +2 -2
- data/samples/hello/hello_font_dialog.rb +2 -2
- data/samples/hello/hello_link.rb +5 -4
- data/samples/hello/hello_list_multi_selection.rb +3 -1
- data/samples/hello/hello_list_single_selection.rb +3 -1
- data/samples/hello/hello_menu_bar.rb +28 -28
- data/samples/hello/hello_message_box.rb +2 -2
- data/samples/hello/hello_pop_up_context_menu.rb +18 -8
- data/samples/hello/hello_shell.rb +16 -16
- data/samples/hello/hello_styled_text.rb +2 -2
- data/samples/hello/hello_table.rb +4 -4
- data/samples/hello/hello_tray_item.rb +2 -2
- data/vendor/swt/linux/swt.jar +0 -0
- data/vendor/swt/linux_aarch64/swt.jar +0 -0
- data/vendor/swt/mac/swt.jar +0 -0
- data/vendor/swt/mac_aarch64/swt.jar +0 -0
- data/vendor/swt/windows/swt.jar +0 -0
- metadata +2 -2
data/samples/elaborate/timer.rb
CHANGED
@@ -24,12 +24,13 @@ class Timer
|
|
24
24
|
Display.setAppName('Glimmer Timer')
|
25
25
|
|
26
26
|
@display = display {
|
27
|
-
on_about
|
27
|
+
on_about do
|
28
28
|
display_about_dialog
|
29
|
-
|
30
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
on_preferences do
|
31
32
|
display_about_dialog
|
32
|
-
|
33
|
+
end
|
33
34
|
}
|
34
35
|
|
35
36
|
@min = 0
|
@@ -43,7 +44,7 @@ class Timer
|
|
43
44
|
loop do
|
44
45
|
sleep(1)
|
45
46
|
if @countdown
|
46
|
-
sync_exec
|
47
|
+
sync_exec do
|
47
48
|
@countdown_time = Time.new(1, 1, 1, 0, min, sec)
|
48
49
|
@countdown_time -= 1
|
49
50
|
self.min = @countdown_time.min
|
@@ -52,7 +53,7 @@ class Timer
|
|
52
53
|
stop_countdown
|
53
54
|
play_countdown_done_sound
|
54
55
|
end
|
55
|
-
|
56
|
+
end
|
56
57
|
end
|
57
58
|
end
|
58
59
|
end
|
@@ -85,31 +86,34 @@ class Timer
|
|
85
86
|
accelerator COMMAND_KEY, 's'
|
86
87
|
enabled <= [self, :countdown, on_read: :!]
|
87
88
|
|
88
|
-
on_widget_selected
|
89
|
+
on_widget_selected do
|
89
90
|
start_countdown
|
90
|
-
|
91
|
+
end
|
91
92
|
}
|
93
|
+
|
92
94
|
menu_item {
|
93
95
|
text 'St&op'
|
94
96
|
enabled <= [self, :countdown]
|
95
97
|
accelerator COMMAND_KEY, 'o'
|
96
98
|
|
97
|
-
on_widget_selected
|
99
|
+
on_widget_selected do
|
98
100
|
stop_countdown
|
99
|
-
|
101
|
+
end
|
100
102
|
}
|
103
|
+
|
101
104
|
unless OS.mac?
|
102
105
|
menu_item(:separator)
|
103
106
|
menu_item {
|
104
107
|
text 'E&xit'
|
105
108
|
accelerator :alt, :f4
|
106
109
|
|
107
|
-
on_widget_selected
|
110
|
+
on_widget_selected do
|
108
111
|
exit(0)
|
109
|
-
|
112
|
+
end
|
110
113
|
}
|
111
114
|
end
|
112
115
|
}
|
116
|
+
|
113
117
|
menu {
|
114
118
|
text '&Help'
|
115
119
|
|
@@ -117,9 +121,9 @@ class Timer
|
|
117
121
|
text '&About'
|
118
122
|
accelerator COMMAND_KEY, :shift, 'a'
|
119
123
|
|
120
|
-
on_widget_selected
|
124
|
+
on_widget_selected do
|
121
125
|
display_about_dialog
|
122
|
-
|
126
|
+
end
|
123
127
|
}
|
124
128
|
}
|
125
129
|
}
|
@@ -149,9 +153,10 @@ class Timer
|
|
149
153
|
maximum 59
|
150
154
|
selection <=> [self, :min]
|
151
155
|
enabled <= [self, :countdown, on_read: :!]
|
152
|
-
|
156
|
+
|
157
|
+
on_widget_default_selected do
|
153
158
|
start_countdown
|
154
|
-
|
159
|
+
end
|
155
160
|
}
|
156
161
|
label {
|
157
162
|
text ':'
|
@@ -163,9 +168,10 @@ class Timer
|
|
163
168
|
maximum 59
|
164
169
|
selection <=> [self, :sec]
|
165
170
|
enabled <= [self, :countdown, on_read: :!]
|
166
|
-
|
171
|
+
|
172
|
+
on_widget_default_selected do
|
167
173
|
start_countdown
|
168
|
-
|
174
|
+
end
|
169
175
|
}
|
170
176
|
}
|
171
177
|
end
|
@@ -179,22 +185,26 @@ class Timer
|
|
179
185
|
@start_button = button {
|
180
186
|
text '&Start'
|
181
187
|
enabled <= [self, :countdown, on_read: :!]
|
182
|
-
|
188
|
+
|
189
|
+
on_widget_selected do
|
183
190
|
start_countdown
|
184
|
-
|
185
|
-
|
191
|
+
end
|
192
|
+
|
193
|
+
on_key_pressed do |event|
|
186
194
|
start_countdown if event.keyCode == swt(:cr)
|
187
|
-
|
195
|
+
end
|
188
196
|
}
|
189
197
|
@stop_button = button {
|
190
198
|
text 'St&op'
|
191
199
|
enabled <= [self, :countdown]
|
192
|
-
|
200
|
+
|
201
|
+
on_widget_selected do
|
193
202
|
stop_countdown
|
194
|
-
|
195
|
-
|
203
|
+
end
|
204
|
+
|
205
|
+
on_key_pressed do |event|
|
196
206
|
stop_countdown if event.keyCode == swt(:cr)
|
197
|
-
|
207
|
+
end
|
198
208
|
}
|
199
209
|
}
|
200
210
|
end
|
@@ -32,49 +32,88 @@ shell { |shell_proxy|
|
|
32
32
|
grid_layout 2, false
|
33
33
|
|
34
34
|
group {
|
35
|
-
text "Name"
|
36
35
|
grid_layout 2, false
|
36
|
+
|
37
37
|
layout_data :fill, :fill, true, true
|
38
|
-
|
39
|
-
|
38
|
+
text "Name"
|
39
|
+
|
40
|
+
label {
|
41
|
+
text "First"
|
42
|
+
}
|
43
|
+
text {
|
44
|
+
text "Bullet"
|
45
|
+
}
|
46
|
+
|
47
|
+
label {
|
48
|
+
text "Last"
|
49
|
+
}
|
50
|
+
text {
|
51
|
+
text "Tooth"
|
52
|
+
}
|
40
53
|
}
|
41
54
|
|
42
55
|
group {
|
43
56
|
layout_data :fill, :fill, true, true
|
44
57
|
text "Gender"
|
45
|
-
|
46
|
-
radio {
|
58
|
+
|
59
|
+
radio {
|
60
|
+
text "Male"
|
61
|
+
selection true
|
62
|
+
}
|
63
|
+
|
64
|
+
radio {
|
65
|
+
text "Female"
|
66
|
+
}
|
47
67
|
}
|
48
68
|
|
49
69
|
group {
|
50
70
|
layout_data :fill, :fill, true, true
|
51
71
|
text "Role"
|
52
|
-
|
53
|
-
check {
|
72
|
+
|
73
|
+
check {
|
74
|
+
text "Student"
|
75
|
+
selection true
|
76
|
+
}
|
77
|
+
|
78
|
+
check {
|
79
|
+
text "Employee"
|
80
|
+
selection true
|
81
|
+
}
|
54
82
|
}
|
55
83
|
|
56
84
|
group {
|
57
|
-
text "Experience"
|
58
85
|
row_layout
|
86
|
+
|
59
87
|
layout_data :fill, :fill, true, true
|
60
|
-
|
88
|
+
text "Experience"
|
89
|
+
|
90
|
+
spinner {
|
91
|
+
selection 5
|
92
|
+
}
|
93
|
+
label {
|
94
|
+
text "years"
|
95
|
+
}
|
61
96
|
}
|
62
97
|
|
63
98
|
button {
|
64
|
-
text "save"
|
65
99
|
layout_data :right, :center, true, true
|
66
|
-
|
100
|
+
text "save"
|
101
|
+
|
102
|
+
on_widget_selected do
|
67
103
|
message_box {
|
68
104
|
text 'Profile Saved!'
|
69
105
|
message 'User profile has been saved!'
|
70
106
|
}.open
|
71
|
-
|
107
|
+
end
|
72
108
|
}
|
73
109
|
|
74
110
|
button {
|
75
|
-
text "close"
|
76
111
|
layout_data :left, :center, true, true
|
77
|
-
|
112
|
+
text "close"
|
113
|
+
|
114
|
+
on_widget_selected do
|
115
|
+
shell_proxy.close
|
116
|
+
end
|
78
117
|
}
|
79
118
|
}
|
80
119
|
}.open
|
@@ -27,7 +27,7 @@ class HelloButton
|
|
27
27
|
attr_accessor :count
|
28
28
|
|
29
29
|
before_body do
|
30
|
-
|
30
|
+
self.count = 0
|
31
31
|
end
|
32
32
|
|
33
33
|
body {
|
@@ -37,9 +37,9 @@ class HelloButton
|
|
37
37
|
button {
|
38
38
|
text <= [self, :count, on_read: ->(value) { "Click To Increment: #{value} " }]
|
39
39
|
|
40
|
-
on_widget_selected
|
40
|
+
on_widget_selected do
|
41
41
|
self.count += 1
|
42
|
-
|
42
|
+
end
|
43
43
|
}
|
44
44
|
}
|
45
45
|
}
|
@@ -123,12 +123,12 @@ class HelloCanvasAnimation
|
|
123
123
|
started <=> [self, :animation_started]
|
124
124
|
finished <=> [self, :animation_finished]
|
125
125
|
|
126
|
-
frame
|
126
|
+
frame do |index|
|
127
127
|
background rgb(index%100, index%100 + 100, index%55 + 200)
|
128
128
|
oval(index*3%300, index*3%300, 20, 20) {
|
129
129
|
background :yellow
|
130
130
|
}
|
131
|
-
|
131
|
+
end
|
132
132
|
}
|
133
133
|
}
|
134
134
|
}
|
@@ -47,18 +47,18 @@ class HelloColorDialog
|
|
47
47
|
layout_data :center, :center, true, false
|
48
48
|
background <=> [self, :selected_color]
|
49
49
|
|
50
|
-
on_mouse_up
|
50
|
+
on_mouse_up do
|
51
51
|
self.selected_color = color_dialog.open
|
52
|
-
|
52
|
+
end
|
53
53
|
}
|
54
54
|
|
55
55
|
button {
|
56
56
|
layout_data :center, :center, true, false
|
57
57
|
text "Choose Color..."
|
58
58
|
|
59
|
-
on_widget_selected
|
59
|
+
on_widget_selected do
|
60
60
|
self.selected_color = color_dialog.open
|
61
|
-
|
61
|
+
end
|
62
62
|
}
|
63
63
|
|
64
64
|
}
|
@@ -140,7 +140,7 @@ class HelloCustomShell
|
|
140
140
|
|
141
141
|
items <=> [@email_system, :emails, column_properties: [:date, :subject, :from]]
|
142
142
|
|
143
|
-
on_mouse_up
|
143
|
+
on_mouse_up do |event|
|
144
144
|
email = event.table_item.get_data
|
145
145
|
|
146
146
|
# open a custom email shell
|
@@ -151,7 +151,7 @@ class HelloCustomShell
|
|
151
151
|
from: email.from,
|
152
152
|
message: email.message
|
153
153
|
).open
|
154
|
-
|
154
|
+
end
|
155
155
|
}
|
156
156
|
}.open
|
157
157
|
end
|
@@ -38,7 +38,7 @@ shell { |shell_proxy|
|
|
38
38
|
}
|
39
39
|
text "Dialog #{dialog_number}"
|
40
40
|
|
41
|
-
on_widget_selected
|
41
|
+
on_widget_selected do
|
42
42
|
# pass the shell proxy as a parent to make the dialog support hitting the escape button for closing alone without closing app
|
43
43
|
dialog(shell_proxy) { |dialog_proxy|
|
44
44
|
row_layout(:vertical) {
|
@@ -70,12 +70,12 @@ shell { |shell_proxy|
|
|
70
70
|
button {
|
71
71
|
text 'Close'
|
72
72
|
|
73
|
-
on_widget_selected
|
73
|
+
on_widget_selected do
|
74
74
|
dialog_proxy.close
|
75
|
-
|
75
|
+
end
|
76
76
|
}
|
77
77
|
}.open
|
78
|
-
|
78
|
+
end
|
79
79
|
}
|
80
80
|
}
|
81
81
|
}.open
|
@@ -96,14 +96,13 @@ class HelloExpandBar
|
|
96
96
|
composite # just filler
|
97
97
|
}
|
98
98
|
|
99
|
-
on_item_expanded
|
99
|
+
on_item_expanded do |expand_event|
|
100
100
|
@status_label.text = "#{expand_event.item.text} Expanded!"
|
101
|
-
|
101
|
+
end
|
102
102
|
|
103
|
-
on_item_collapsed
|
103
|
+
on_item_collapsed do |expand_event|
|
104
104
|
@status_label.text = "#{expand_event.item.text} Collapsed!"
|
105
|
-
|
106
|
-
|
105
|
+
end
|
107
106
|
}
|
108
107
|
}
|
109
108
|
}
|
data/samples/hello/hello_link.rb
CHANGED
@@ -47,11 +47,12 @@ class HelloLink
|
|
47
47
|
Just keep clicking <a href="all links">links</a> to find out!
|
48
48
|
MULTI_LINE_STRING
|
49
49
|
|
50
|
-
on_widget_selected
|
50
|
+
on_widget_selected do |selection_event|
|
51
51
|
# This retrieves the clicked link href (or contained text if no href is set)
|
52
52
|
@selected_link = selection_event.text
|
53
|
-
|
54
|
-
|
53
|
+
end
|
54
|
+
|
55
|
+
on_mouse_up do |mouse_event|
|
55
56
|
unless @selected_link.nil?
|
56
57
|
@help_shell.close unless @help_shell.nil? || @help_shell.disposed?
|
57
58
|
@help_shell = shell(:no_trim) {
|
@@ -79,7 +80,7 @@ class HelloLink
|
|
79
80
|
}
|
80
81
|
@help_shell.open
|
81
82
|
end
|
82
|
-
|
83
|
+
end
|
83
84
|
}
|
84
85
|
}
|
85
86
|
}
|
@@ -45,52 +45,52 @@ shell {
|
|
45
45
|
text '&New'
|
46
46
|
accelerator :command, :N
|
47
47
|
|
48
|
-
on_widget_selected
|
48
|
+
on_widget_selected do
|
49
49
|
message_box {
|
50
50
|
text 'New'
|
51
51
|
message 'New file created.'
|
52
52
|
}.open
|
53
|
-
|
53
|
+
end
|
54
54
|
}
|
55
55
|
menu_item {
|
56
56
|
text '&Open...'
|
57
57
|
accelerator :command, :O
|
58
58
|
|
59
|
-
on_widget_selected
|
59
|
+
on_widget_selected do
|
60
60
|
message_box {
|
61
61
|
text 'Open'
|
62
62
|
message 'Opening File...'
|
63
63
|
}.open
|
64
|
-
|
64
|
+
end
|
65
65
|
}
|
66
66
|
menu {
|
67
67
|
text 'Open &Recent'
|
68
68
|
menu_item {
|
69
69
|
text 'File 1'
|
70
|
-
on_widget_selected
|
70
|
+
on_widget_selected do
|
71
71
|
message_box {
|
72
72
|
text 'File 1'
|
73
73
|
message 'File 1 Contents'
|
74
74
|
}.open
|
75
|
-
|
75
|
+
end
|
76
76
|
}
|
77
77
|
menu_item {
|
78
78
|
text 'File 2'
|
79
|
-
on_widget_selected
|
79
|
+
on_widget_selected do
|
80
80
|
message_box {
|
81
81
|
text 'File 2'
|
82
82
|
message 'File 2 Contents'
|
83
83
|
}.open
|
84
|
-
|
84
|
+
end
|
85
85
|
}
|
86
86
|
}
|
87
87
|
menu_item(:separator)
|
88
88
|
menu_item {
|
89
89
|
text 'E&xit'
|
90
90
|
|
91
|
-
on_widget_selected
|
91
|
+
on_widget_selected do
|
92
92
|
exit(0)
|
93
|
-
|
93
|
+
end
|
94
94
|
}
|
95
95
|
}
|
96
96
|
menu {
|
@@ -114,10 +114,10 @@ shell {
|
|
114
114
|
menu_item(:radio) {
|
115
115
|
text '&Enabled'
|
116
116
|
|
117
|
-
on_widget_selected
|
117
|
+
on_widget_selected do
|
118
118
|
@select_one_menu.enabled = true
|
119
119
|
@select_multiple_menu.enabled = true
|
120
|
-
|
120
|
+
end
|
121
121
|
}
|
122
122
|
@select_one_menu = menu {
|
123
123
|
text '&Select One'
|
@@ -156,9 +156,9 @@ shell {
|
|
156
156
|
menu_item(:radio) {
|
157
157
|
text color_style.to_s.split('_').map(&:capitalize).join(' ')
|
158
158
|
|
159
|
-
on_widget_selected
|
159
|
+
on_widget_selected do
|
160
160
|
@label.background = color_style
|
161
|
-
|
161
|
+
end
|
162
162
|
}
|
163
163
|
}
|
164
164
|
}
|
@@ -168,9 +168,9 @@ shell {
|
|
168
168
|
menu_item(:radio) {
|
169
169
|
text color_style.to_s.split('_').map(&:capitalize).join(' ')
|
170
170
|
|
171
|
-
on_widget_selected
|
171
|
+
on_widget_selected do
|
172
172
|
@label.foreground = color_style
|
173
|
-
|
173
|
+
end
|
174
174
|
}
|
175
175
|
}
|
176
176
|
}
|
@@ -180,27 +180,27 @@ shell {
|
|
180
180
|
menu_item(:radio) {
|
181
181
|
text 'Small'
|
182
182
|
|
183
|
-
on_widget_selected
|
183
|
+
on_widget_selected do
|
184
184
|
@label.font = {height: 25}
|
185
185
|
@label.parent.pack
|
186
|
-
|
186
|
+
end
|
187
187
|
}
|
188
188
|
menu_item(:radio) {
|
189
189
|
text 'Medium'
|
190
190
|
selection true
|
191
191
|
|
192
|
-
on_widget_selected
|
192
|
+
on_widget_selected do
|
193
193
|
@label.font = {height: 50}
|
194
194
|
@label.parent.pack
|
195
|
-
|
195
|
+
end
|
196
196
|
}
|
197
197
|
menu_item(:radio) {
|
198
198
|
text 'Large'
|
199
199
|
|
200
|
-
on_widget_selected
|
200
|
+
on_widget_selected do
|
201
201
|
@label.font = {height: 75}
|
202
202
|
@label.parent.pack
|
203
|
-
|
203
|
+
end
|
204
204
|
}
|
205
205
|
}
|
206
206
|
menu {
|
@@ -209,34 +209,34 @@ shell {
|
|
209
209
|
text '&Manual'
|
210
210
|
accelerator :command, :shift, :M
|
211
211
|
|
212
|
-
on_widget_selected
|
212
|
+
on_widget_selected do
|
213
213
|
message_box {
|
214
214
|
text 'Manual'
|
215
215
|
message 'Manual Contents'
|
216
216
|
}.open
|
217
|
-
|
217
|
+
end
|
218
218
|
}
|
219
219
|
menu_item {
|
220
220
|
text '&Tutorial'
|
221
221
|
accelerator :command, :shift, :T
|
222
222
|
|
223
|
-
on_widget_selected
|
223
|
+
on_widget_selected do
|
224
224
|
message_box {
|
225
225
|
text 'Tutorial'
|
226
226
|
message 'Tutorial Contents'
|
227
227
|
}.open
|
228
|
-
|
228
|
+
end
|
229
229
|
}
|
230
230
|
menu_item(:separator)
|
231
231
|
menu_item {
|
232
232
|
text '&Report an Issue...'
|
233
233
|
|
234
|
-
on_widget_selected
|
234
|
+
on_widget_selected do
|
235
235
|
message_box {
|
236
236
|
text 'Report an Issue'
|
237
237
|
message 'Reporting an issue...'
|
238
238
|
}.open
|
239
|
-
|
239
|
+
end
|
240
240
|
}
|
241
241
|
}
|
242
242
|
}
|