glimmer-dsl-swt 4.18.7.6 → 4.20.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 +44 -0
- data/README.md +34 -21
- data/RUBY_VERSION +1 -1
- data/VERSION +1 -1
- data/bin/girb +10 -9
- data/bin/girb_runner.rb +8 -3
- data/bin/glimmer +10 -1
- data/bin/glimmer-setup +58 -0
- data/bin/glimmer_runner.rb +4 -0
- data/docs/reference/GLIMMER_COMMAND.md +19 -30
- data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +39 -10
- data/docs/reference/GLIMMER_PACKAGING_AND_DISTRIBUTION.md +7 -1
- data/docs/reference/GLIMMER_SAMPLES.md +27 -0
- data/glimmer-dsl-swt.gemspec +0 -0
- data/lib/glimmer-dsl-swt.rb +8 -0
- data/lib/glimmer/data_binding/shine.rb +41 -26
- data/lib/glimmer/data_binding/widget_binding.rb +1 -1
- data/lib/glimmer/dsl/swt/c_tab_item_expression.rb +58 -0
- data/lib/glimmer/dsl/swt/combo_selection_data_binding_expression.rb +2 -1
- data/lib/glimmer/dsl/swt/dsl.rb +2 -1
- data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +49 -0
- data/lib/glimmer/dsl/swt/tab_item_expression.rb +7 -3
- data/lib/glimmer/dsl/swt/widget_expression.rb +1 -1
- data/lib/glimmer/launcher.rb +33 -51
- data/lib/glimmer/rake_task.rb +1 -1
- data/lib/glimmer/rake_task/package.rb +7 -2
- data/lib/glimmer/rake_task/scaffold.rb +227 -254
- data/lib/glimmer/swt/c_tab_item_proxy.rb +53 -0
- data/lib/glimmer/swt/custom/code_text.rb +17 -9
- data/lib/glimmer/swt/custom/shape.rb +15 -1
- data/lib/glimmer/swt/sash_form_proxy.rb +6 -0
- data/lib/glimmer/swt/shell_proxy.rb +3 -1
- data/lib/glimmer/swt/tab_folder_proxy.rb +1 -0
- data/lib/glimmer/swt/tab_item_proxy.rb +17 -18
- data/lib/glimmer/swt/widget_proxy.rb +9 -0
- data/samples/elaborate/contact_manager.rb +7 -5
- data/samples/elaborate/login.rb +7 -7
- data/samples/elaborate/mandelbrot_fractal.rb +13 -8
- data/samples/elaborate/meta_sample.rb +4 -2
- data/samples/elaborate/metronome.rb +4 -4
- data/samples/elaborate/stock_ticker.rb +2 -2
- data/samples/elaborate/tic_tac_toe.rb +2 -2
- data/samples/hello/hello_button.rb +1 -1
- data/samples/hello/hello_c_combo.rb +69 -0
- data/samples/hello/hello_c_tab.rb +174 -0
- data/samples/hello/hello_c_tab/denmark.png +0 -0
- data/samples/hello/hello_c_tab/finland.png +0 -0
- data/samples/hello/hello_c_tab/france.png +0 -0
- data/samples/hello/hello_c_tab/germany.png +0 -0
- data/samples/hello/hello_c_tab/italy.png +0 -0
- data/samples/hello/hello_c_tab/mexico.png +0 -0
- data/samples/hello/hello_c_tab/netherlands.png +0 -0
- data/samples/hello/hello_c_tab/norway.png +0 -0
- data/samples/hello/hello_c_tab/usa.png +0 -0
- data/samples/hello/hello_canvas.rb +5 -5
- data/samples/hello/hello_canvas_animation_data_binding.rb +1 -1
- data/samples/hello/hello_canvas_data_binding.rb +16 -16
- data/samples/hello/hello_checkbox.rb +4 -4
- data/samples/hello/hello_code_text.rb +3 -57
- data/samples/hello/hello_color_dialog.rb +1 -1
- data/samples/hello/hello_combo.rb +1 -1
- data/samples/hello/hello_computed.rb +5 -5
- data/samples/hello/hello_custom_widget.rb +1 -1
- data/samples/hello/hello_date_time.rb +4 -4
- data/samples/hello/hello_dialog.rb +3 -2
- data/samples/hello/hello_drag_and_drop.rb +1 -1
- data/samples/hello/hello_file_dialog.rb +1 -1
- data/samples/hello/hello_font_dialog.rb +3 -3
- data/samples/hello/hello_group.rb +6 -6
- data/samples/hello/hello_link.rb +56 -50
- data/samples/hello/hello_list_multi_selection.rb +1 -1
- data/samples/hello/hello_list_single_selection.rb +1 -1
- data/samples/hello/hello_progress_bar.rb +10 -10
- data/samples/hello/hello_radio.rb +6 -6
- data/samples/hello/hello_sash_form.rb +4 -4
- data/samples/hello/hello_shape.rb +1 -0
- data/samples/hello/hello_spinner.rb +6 -2
- data/samples/hello/hello_styled_text.rb +11 -11
- data/samples/hello/hello_tab.rb +2 -0
- 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 +76 -32
@@ -56,22 +56,22 @@ class HelloCheckbox
|
|
56
56
|
composite {
|
57
57
|
checkbox {
|
58
58
|
text 'Skiing'
|
59
|
-
selection
|
59
|
+
selection <=> [@person, :skiing]
|
60
60
|
}
|
61
61
|
|
62
62
|
checkbox {
|
63
63
|
text 'Snowboarding'
|
64
|
-
selection
|
64
|
+
selection <=> [@person, :snowboarding]
|
65
65
|
}
|
66
66
|
|
67
67
|
checkbox {
|
68
68
|
text 'Snowmobiling'
|
69
|
-
selection
|
69
|
+
selection <=> [@person, :snowmobiling]
|
70
70
|
}
|
71
71
|
|
72
72
|
checkbox {
|
73
73
|
text 'Snowshoeing'
|
74
|
-
selection
|
74
|
+
selection <=> [@person, :snowshoeing]
|
75
75
|
}
|
76
76
|
}
|
77
77
|
|
@@ -83,47 +83,14 @@ class HelloCodeText
|
|
83
83
|
tab_folder {
|
84
84
|
tab_item {
|
85
85
|
fill_layout
|
86
|
-
text 'Ruby (glimmer)'
|
86
|
+
text 'Ruby (glimmer theme)'
|
87
87
|
code_text(language: 'ruby', theme: 'glimmer', lines: true) {
|
88
88
|
text bind(self, :ruby_code)
|
89
89
|
}
|
90
90
|
}
|
91
91
|
tab_item {
|
92
92
|
fill_layout
|
93
|
-
text '
|
94
|
-
code_text(language: 'ruby', theme: 'pastie', lines: {width: 2}) {
|
95
|
-
text bind(self, :ruby_code)
|
96
|
-
}
|
97
|
-
}
|
98
|
-
tab_item {
|
99
|
-
fill_layout
|
100
|
-
text 'Ruby (github)'
|
101
|
-
code_text(language: 'ruby', theme: 'github', lines: false) {
|
102
|
-
text bind(self, :ruby_code)
|
103
|
-
}
|
104
|
-
}
|
105
|
-
tab_item {
|
106
|
-
fill_layout
|
107
|
-
text 'JavaScript (glimmer)'
|
108
|
-
# No border (SWT styles are passed explicitly)
|
109
|
-
code_text(:multi, :h_scroll, :v_scroll, language: 'javascript', theme: 'glimmer', lines: true) {
|
110
|
-
# With lines, the custom widget has a root composite, which can be configured separately
|
111
|
-
root {
|
112
|
-
grid_layout(2, false) {
|
113
|
-
margin_width 2
|
114
|
-
}
|
115
|
-
background :white
|
116
|
-
}
|
117
|
-
# With lines, the line numbers widget can be configured separately
|
118
|
-
line_numbers {
|
119
|
-
background :white
|
120
|
-
}
|
121
|
-
text bind(self, :js_code)
|
122
|
-
}
|
123
|
-
}
|
124
|
-
tab_item {
|
125
|
-
fill_layout
|
126
|
-
text 'JavaScript (pastie)'
|
93
|
+
text 'JavaScript (pastie theme)'
|
127
94
|
code_text(:multi, :h_scroll, :v_scroll, language: 'javascript', theme: 'pastie', lines: {width: 2}) {
|
128
95
|
root {
|
129
96
|
grid_layout(2, false) {
|
@@ -139,28 +106,7 @@ class HelloCodeText
|
|
139
106
|
}
|
140
107
|
tab_item {
|
141
108
|
fill_layout
|
142
|
-
text '
|
143
|
-
code_text(:multi, :h_scroll, :v_scroll, language: 'javascript', theme: 'github') { # default is lines: false
|
144
|
-
text bind(self, :js_code)
|
145
|
-
}
|
146
|
-
}
|
147
|
-
tab_item {
|
148
|
-
fill_layout
|
149
|
-
text 'HTML (glimmer)'
|
150
|
-
code_text(language: 'html', theme: 'glimmer', lines: true) {
|
151
|
-
text bind(self, :html_code)
|
152
|
-
}
|
153
|
-
}
|
154
|
-
tab_item {
|
155
|
-
fill_layout
|
156
|
-
text 'HTML (pastie)'
|
157
|
-
code_text(language: 'html', theme: 'pastie', lines: {width: 2}) {
|
158
|
-
text bind(self, :html_code)
|
159
|
-
}
|
160
|
-
}
|
161
|
-
tab_item {
|
162
|
-
fill_layout
|
163
|
-
text 'HTML (github)'
|
109
|
+
text 'HTML (github theme)'
|
164
110
|
code_text(language: 'html', theme: 'github') { # default is lines: false
|
165
111
|
text bind(self, :html_code)
|
166
112
|
}
|
@@ -48,7 +48,7 @@ class HelloComputed
|
|
48
48
|
|
49
49
|
label {text 'First &Name: '}
|
50
50
|
text {
|
51
|
-
text
|
51
|
+
text <=> [@contact, :first_name]
|
52
52
|
layout_data {
|
53
53
|
horizontal_alignment :fill
|
54
54
|
grab_excess_horizontal_space true
|
@@ -57,7 +57,7 @@ class HelloComputed
|
|
57
57
|
|
58
58
|
label {text '&Last Name: '}
|
59
59
|
text {
|
60
|
-
text
|
60
|
+
text <=> [@contact, :last_name]
|
61
61
|
layout_data {
|
62
62
|
horizontal_alignment :fill
|
63
63
|
grab_excess_horizontal_space true
|
@@ -66,7 +66,7 @@ class HelloComputed
|
|
66
66
|
|
67
67
|
label {text '&Year of Birth: '}
|
68
68
|
text {
|
69
|
-
text
|
69
|
+
text <=> [@contact, :year_of_birth]
|
70
70
|
layout_data {
|
71
71
|
horizontal_alignment :fill
|
72
72
|
grab_excess_horizontal_space true
|
@@ -75,7 +75,7 @@ class HelloComputed
|
|
75
75
|
|
76
76
|
label {text 'Name: '}
|
77
77
|
label {
|
78
|
-
text
|
78
|
+
text <= [@contact, :name, computed_by: [:first_name, :last_name]]
|
79
79
|
layout_data {
|
80
80
|
horizontal_alignment :fill
|
81
81
|
grab_excess_horizontal_space true
|
@@ -84,7 +84,7 @@ class HelloComputed
|
|
84
84
|
|
85
85
|
label {text 'Age: '}
|
86
86
|
label {
|
87
|
-
text
|
87
|
+
text <= [@contact, :age, on_write: :to_i, computed_by: [:year_of_birth]]
|
88
88
|
layout_data {
|
89
89
|
horizontal_alignment :fill
|
90
90
|
grab_excess_horizontal_space true
|
@@ -46,19 +46,19 @@ class HelloDateTime
|
|
46
46
|
}
|
47
47
|
|
48
48
|
date { # alias for date_time(:date)
|
49
|
-
date_time
|
49
|
+
date_time <=> [@person, :date_of_birth]
|
50
50
|
}
|
51
51
|
|
52
52
|
date_drop_down { # alias for date_time(:date, :drop_down)
|
53
|
-
date_time
|
53
|
+
date_time <=> [@person, :date_of_birth]
|
54
54
|
}
|
55
55
|
|
56
56
|
time { # alias for date_time(:time)
|
57
|
-
date_time
|
57
|
+
date_time <=> [@person, :date_of_birth]
|
58
58
|
}
|
59
59
|
|
60
60
|
calendar { # alias for date_time(:calendar)
|
61
|
-
date_time
|
61
|
+
date_time <=> [@person, :date_of_birth]
|
62
62
|
}
|
63
63
|
}
|
64
64
|
}
|
@@ -23,7 +23,7 @@ require 'glimmer-dsl-swt'
|
|
23
23
|
|
24
24
|
include Glimmer
|
25
25
|
|
26
|
-
shell {
|
26
|
+
shell { |shell_proxy|
|
27
27
|
row_layout :vertical
|
28
28
|
|
29
29
|
text 'Hello, Dialog!'
|
@@ -39,7 +39,8 @@ shell {
|
|
39
39
|
text "Dialog #{dialog_number}"
|
40
40
|
|
41
41
|
on_widget_selected {
|
42
|
-
dialog
|
42
|
+
# pass the shell proxy as a parent to make the dialog support hitting the escape button for closing alone without closing app
|
43
|
+
dialog(shell_proxy) { |dialog_proxy|
|
43
44
|
row_layout(:vertical) {
|
44
45
|
center true
|
45
46
|
}
|
@@ -51,8 +51,8 @@ class HelloFontDialog
|
|
51
51
|
height_hint 200
|
52
52
|
}
|
53
53
|
background :white
|
54
|
-
font
|
55
|
-
text
|
54
|
+
font <=> [self, 'selected_font_data']
|
55
|
+
text <=> [self, 'selected_font_data', on_read: ->(font_data) {
|
56
56
|
style = case font_data.style
|
57
57
|
when swt(:normal)
|
58
58
|
'Normal'
|
@@ -64,7 +64,7 @@ class HelloFontDialog
|
|
64
64
|
'Bold Italic'
|
65
65
|
end
|
66
66
|
"#{font_data.name}\n#{font_data.height}\n#{style}"
|
67
|
-
}
|
67
|
+
}]
|
68
68
|
}
|
69
69
|
|
70
70
|
button {
|
@@ -58,12 +58,12 @@ class HelloGroup
|
|
58
58
|
|
59
59
|
radio {
|
60
60
|
text 'Male'
|
61
|
-
selection
|
61
|
+
selection <=> [@person, :male]
|
62
62
|
}
|
63
63
|
|
64
64
|
radio {
|
65
65
|
text 'Female'
|
66
|
-
selection
|
66
|
+
selection <=> [@person, :female]
|
67
67
|
}
|
68
68
|
}
|
69
69
|
|
@@ -75,22 +75,22 @@ class HelloGroup
|
|
75
75
|
|
76
76
|
radio {
|
77
77
|
text 'Child'
|
78
|
-
selection
|
78
|
+
selection <=> [@person, :child]
|
79
79
|
}
|
80
80
|
|
81
81
|
radio {
|
82
82
|
text 'Teen'
|
83
|
-
selection
|
83
|
+
selection <=> [@person, :teen]
|
84
84
|
}
|
85
85
|
|
86
86
|
radio {
|
87
87
|
text 'Adult'
|
88
|
-
selection
|
88
|
+
selection <=> [@person, :adult]
|
89
89
|
}
|
90
90
|
|
91
91
|
radio {
|
92
92
|
text 'Senior'
|
93
|
-
selection
|
93
|
+
selection <=> [@person, :senior]
|
94
94
|
}
|
95
95
|
}
|
96
96
|
|
data/samples/hello/hello_link.rb
CHANGED
@@ -21,62 +21,68 @@
|
|
21
21
|
|
22
22
|
require 'glimmer-dsl-swt'
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
shell { |main_shell|
|
27
|
-
grid_layout {
|
28
|
-
margin_width 20
|
29
|
-
margin_height 10
|
30
|
-
}
|
24
|
+
class HelloLink
|
25
|
+
include Glimmer::UI::CustomShell
|
31
26
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
font height: 16
|
39
|
-
text <<~MULTI_LINE_STRING
|
40
|
-
|
41
|
-
You may click on any <a>link</a> to get help.
|
27
|
+
body {
|
28
|
+
shell { |main_shell|
|
29
|
+
grid_layout {
|
30
|
+
margin_width 20
|
31
|
+
margin_height 10
|
32
|
+
}
|
42
33
|
|
43
|
-
|
34
|
+
background :white
|
35
|
+
text 'Hello, Link!'
|
44
36
|
|
45
|
-
|
46
|
-
|
37
|
+
@link = link {
|
38
|
+
background :white
|
39
|
+
link_foreground :dark_green
|
40
|
+
font height: 16
|
41
|
+
text <<~MULTI_LINE_STRING
|
47
42
|
|
48
|
-
|
49
|
-
# This retrieves the clicked link href (or contained text if no href is set)
|
50
|
-
@selected_link = selection_event.text
|
51
|
-
}
|
52
|
-
on_mouse_up { |mouse_event|
|
53
|
-
unless @selected_link.nil?
|
54
|
-
@help_shell.close unless @help_shell.nil? || @help_shell.disposed?
|
55
|
-
@help_shell = shell(:no_trim) {
|
56
|
-
grid_layout {
|
57
|
-
margin_width 10
|
58
|
-
margin_height 10
|
59
|
-
}
|
43
|
+
You may click on any <a>link</a> to get help.
|
60
44
|
|
61
|
-
|
45
|
+
How do you know <a href="which-link-href-value">which link</a> you clicked?
|
62
46
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
47
|
+
Just keep clicking <a href="all links">links</a> to find out!
|
48
|
+
MULTI_LINE_STRING
|
49
|
+
|
50
|
+
on_widget_selected { |selection_event|
|
51
|
+
# This retrieves the clicked link href (or contained text if no href is set)
|
52
|
+
@selected_link = selection_event.text
|
53
|
+
}
|
54
|
+
on_mouse_up { |mouse_event|
|
55
|
+
unless @selected_link.nil?
|
56
|
+
@help_shell.close unless @help_shell.nil? || @help_shell.disposed?
|
57
|
+
@help_shell = shell(:no_trim) {
|
58
|
+
grid_layout {
|
59
|
+
margin_width 10
|
60
|
+
margin_height 10
|
61
|
+
}
|
62
|
+
|
63
|
+
background :yellow
|
64
|
+
|
65
|
+
label {
|
66
|
+
background :yellow
|
67
|
+
text "Did someone ask for help about \"#{@selected_link}\"?\nYou don't really need help. You did it!"
|
68
|
+
}
|
69
|
+
|
70
|
+
on_swt_show {
|
71
|
+
x = main_shell.location.x + @link.location.x + mouse_event.x
|
72
|
+
y = main_shell.location.y + @link.location.y + mouse_event.y + 20
|
73
|
+
@help_shell.location = Point.new(x, y)
|
74
|
+
}
|
75
|
+
on_focus_lost {
|
76
|
+
@selected_link = nil
|
77
|
+
@help_shell.close
|
78
|
+
}
|
79
|
+
}
|
80
|
+
@help_shell.open
|
81
|
+
end
|
77
82
|
}
|
78
|
-
|
79
|
-
end
|
83
|
+
}
|
80
84
|
}
|
81
85
|
}
|
82
|
-
|
86
|
+
end
|
87
|
+
|
88
|
+
HelloLink.launch
|
@@ -63,7 +63,7 @@ class HelloListMultiSelection
|
|
63
63
|
text 'Hello, List Multi Selection!'
|
64
64
|
|
65
65
|
list(:multi) {
|
66
|
-
selection
|
66
|
+
selection <=> [@person, :provinces] # also binds to provinces_options by convention
|
67
67
|
}
|
68
68
|
|
69
69
|
button {
|
@@ -48,7 +48,7 @@ class HelloListSingleSelection
|
|
48
48
|
text 'Hello, List Single Selection!'
|
49
49
|
|
50
50
|
list {
|
51
|
-
selection
|
51
|
+
selection <=> [@person, :country] # also binds to country_options by convention
|
52
52
|
}
|
53
53
|
|
54
54
|
button {
|