glimmer-dsl-swt 4.19.0.1 → 4.20.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +26 -27
  4. data/RUBY_VERSION +1 -1
  5. data/VERSION +1 -1
  6. data/docs/reference/GLIMMER_GUI_DSL_SYNTAX.md +44 -15
  7. data/docs/reference/GLIMMER_SAMPLES.md +136 -17
  8. data/glimmer-dsl-swt.gemspec +0 -0
  9. data/lib/glimmer/data_binding/shine.rb +41 -26
  10. data/lib/glimmer/dsl/swt/dsl.rb +2 -1
  11. data/lib/glimmer/dsl/swt/shine_data_binding_expression.rb +49 -0
  12. data/lib/glimmer/dsl/swt/widget_expression.rb +2 -0
  13. data/lib/glimmer/launcher.rb +6 -0
  14. data/lib/glimmer/rake_task/scaffold.rb +0 -2
  15. data/lib/glimmer/swt/combo_proxy.rb +48 -0
  16. data/lib/glimmer/swt/custom/code_text.rb +13 -9
  17. data/lib/glimmer/swt/tool_bar_proxy.rb +51 -0
  18. data/lib/glimmer/swt/widget_proxy.rb +6 -0
  19. data/samples/elaborate/contact_manager.rb +7 -5
  20. data/samples/elaborate/login.rb +7 -7
  21. data/samples/elaborate/mandelbrot_fractal.rb +12 -7
  22. data/samples/elaborate/meta_sample.rb +4 -2
  23. data/samples/elaborate/metronome.rb +4 -4
  24. data/samples/elaborate/tetris/model/game.rb +0 -3
  25. data/samples/elaborate/tic_tac_toe.rb +2 -2
  26. data/samples/hello/hello_button.rb +1 -1
  27. data/samples/hello/hello_c_combo.rb +2 -1
  28. data/samples/hello/hello_c_tab.rb +1 -0
  29. data/samples/hello/hello_canvas.rb +5 -5
  30. data/samples/hello/hello_canvas_animation_data_binding.rb +1 -1
  31. data/samples/hello/hello_canvas_data_binding.rb +16 -16
  32. data/samples/hello/hello_checkbox.rb +4 -4
  33. data/samples/hello/hello_code_text.rb +3 -57
  34. data/samples/hello/hello_color_dialog.rb +1 -1
  35. data/samples/hello/hello_combo.rb +1 -1
  36. data/samples/hello/hello_composite.rb +71 -0
  37. data/samples/hello/hello_computed.rb +5 -5
  38. data/samples/hello/hello_cool_bar.rb +147 -0
  39. data/samples/hello/hello_custom_widget.rb +1 -1
  40. data/samples/hello/hello_date_time.rb +4 -4
  41. data/samples/hello/hello_dialog.rb +3 -2
  42. data/samples/hello/hello_drag_and_drop.rb +1 -1
  43. data/samples/hello/hello_file_dialog.rb +1 -1
  44. data/samples/hello/hello_font_dialog.rb +3 -3
  45. data/samples/hello/hello_group.rb +6 -6
  46. data/samples/hello/hello_layout.rb +243 -0
  47. data/samples/hello/hello_link.rb +56 -50
  48. data/samples/hello/hello_list_multi_selection.rb +1 -1
  49. data/samples/hello/hello_list_single_selection.rb +1 -1
  50. data/samples/hello/hello_progress_bar.rb +10 -10
  51. data/samples/hello/hello_radio.rb +6 -6
  52. data/samples/hello/hello_sash_form.rb +4 -4
  53. data/samples/hello/hello_shape.rb +1 -0
  54. data/samples/hello/hello_shell.rb +205 -0
  55. data/samples/hello/hello_spinner.rb +6 -2
  56. data/samples/hello/hello_styled_text.rb +11 -11
  57. data/samples/hello/hello_tool_bar.rb +143 -0
  58. data/vendor/swt/linux/swt.jar +0 -0
  59. data/vendor/swt/linux_aarch64/swt.jar +0 -0
  60. data/vendor/swt/mac/swt.jar +0 -0
  61. data/vendor/swt/mac_aarch64/swt.jar +0 -0
  62. data/vendor/swt/windows/swt.jar +0 -0
  63. metadata +15 -3
@@ -0,0 +1,71 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer-dsl-swt'
23
+
24
+ class HelloComposite
25
+ include Glimmer::UI::CustomShell
26
+
27
+ body {
28
+ shell {
29
+ # shell (which is a composite) has fill_layout(:horizontal) by default with no margins
30
+ # we override below
31
+ fill_layout(:vertical)
32
+ text 'Hello, Composite!'
33
+
34
+ composite { # composite simply contains widgets for visual organization via a layout
35
+ # it has grid_layout(1, false) as its default layout
36
+ label {
37
+ text "Field is above its text widget"
38
+ }
39
+ text {
40
+ layout_data :fill, :center, true, false # fill horizontally, align center vertically, grab remaining horizontal space, but not vertical
41
+ }
42
+ }
43
+
44
+ composite { # composite simply contains widgets for visual organization via a layout
45
+ grid_layout 2, true
46
+
47
+ label {
48
+ text "Field has equal width to its text widget's"
49
+ }
50
+ text {
51
+ layout_data :fill, :center, true, false # fill horizontally, align center vertically, grab remaining horizontal space, but not vertical
52
+ }
53
+ }
54
+
55
+ composite { # composite simply contains widgets for visual organization via a layout
56
+ grid_layout 2, false
57
+
58
+ label {
59
+ text "Field has inequal width"
60
+ }
61
+
62
+ text {
63
+ layout_data :fill, :center, true, false # fill horizontally, align center vertically, grab remaining horizontal space, but not vertical
64
+ }
65
+ }
66
+ }
67
+
68
+ }
69
+ end
70
+
71
+ HelloComposite.launch
@@ -48,7 +48,7 @@ class HelloComputed
48
48
 
49
49
  label {text 'First &Name: '}
50
50
  text {
51
- text bind(@contact, :first_name)
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 bind(@contact, :last_name)
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 bind(@contact, :year_of_birth)
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 bind(@contact, :name, computed_by: [:first_name, :last_name])
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 bind(@contact, :age, on_write: :to_i, computed_by: [:year_of_birth])
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
@@ -0,0 +1,147 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer-dsl-swt'
23
+
24
+ class HelloCoolBar
25
+ include Glimmer::UI::CustomShell
26
+
27
+ attr_accessor :operation, :font_size
28
+
29
+ def font_size_options
30
+ (10..30).to_a.map(&:to_s)
31
+ end
32
+
33
+ before_body {
34
+ self.font_size = '10'
35
+ }
36
+
37
+ body {
38
+ shell {
39
+ fill_layout(:vertical) {
40
+ margin_width 0
41
+ margin_height 0
42
+ }
43
+
44
+ text 'Hello, Cool Bar!'
45
+
46
+ cool_bar { # optionally takes a :flat style and/or :vertical style if you need vertical layout
47
+ tool_bar {
48
+ tool_item {
49
+ image cut_image # alternatively you can pass an image file path
50
+
51
+ on_widget_selected do
52
+ self.operation = 'Cut'
53
+ end
54
+ }
55
+ tool_item {
56
+ image copy_image # alternatively you can pass an image file path
57
+
58
+ on_widget_selected do
59
+ self.operation = 'Copy'
60
+ end
61
+ }
62
+ tool_item {
63
+ image paste_image # alternatively you can pass an image file path
64
+
65
+ on_widget_selected do
66
+ self.operation = 'Paste'
67
+ end
68
+ }
69
+ }
70
+ tool_bar {
71
+ tool_item {
72
+ text 'Font Size'
73
+ }
74
+ # a combo can be nested in a tool_bar (it auto-generates a tool_item for itself behind the scenes)
75
+ combo {
76
+ selection bind(self, :font_size)
77
+ }
78
+ }
79
+ }
80
+
81
+
82
+ label {
83
+ font height: 30
84
+ text bind(self, :operation)
85
+ text bind(self, :font_size)
86
+ }
87
+ }
88
+ }
89
+
90
+ def cut_image
91
+ # building image on the fly with Canvas Shape DSL
92
+ image(25, 25) {
93
+ rectangle(0, 0, 25, 25) {
94
+ background_pattern 0, 0, 0, 25, :white, :gray
95
+ line(20, 2, 9, 15) {
96
+ line_width 2
97
+ }
98
+ line(5, 2, 16, 15) {
99
+ line_width 2
100
+ }
101
+ oval(2, 15, 8, 8) {
102
+ line_width 2
103
+ }
104
+ oval(16, 15, 8, 8) {
105
+ line_width 2
106
+ }
107
+ }
108
+ }
109
+ end
110
+
111
+ def copy_image
112
+ # building image on the fly with Canvas Shape DSL
113
+ image(25, 25) {
114
+ rectangle(0, 0, 25, 25) {
115
+ background_pattern 0, 0, 0, 25, :white, :gray
116
+ rectangle([:default, 2], [:default, -2], 14, 14, 5, 5) {
117
+ line_width 2
118
+ }
119
+ rectangle([:default, -2], [:default, 2], 14, 14, 5, 5) {
120
+ line_width 2
121
+ }
122
+ }
123
+ }
124
+ end
125
+
126
+ def paste_image
127
+ image(25, 25) {
128
+ rectangle(0, 0, 25, 25) {
129
+ background_pattern 0, 0, 0, 25, :white, :gray
130
+ rectangle(:default, [:default, 1], 15, 20, 5, 5) {
131
+ line_width 2
132
+ }
133
+ line(7, 8, 18, 8) {
134
+ line_width 2
135
+ }
136
+ line(7, 13, 18, 13) {
137
+ line_width 2
138
+ }
139
+ line(7, 18, 18, 18) {
140
+ line_width 2
141
+ }
142
+ }
143
+ }
144
+ end
145
+ end
146
+
147
+ HelloCoolBar.launch
@@ -55,7 +55,7 @@ class GreetingLabel
55
55
  label(swt_style) {
56
56
  text "#{greeting}, #{name}!"
57
57
  font @font
58
- foreground bind(self, :color)
58
+ foreground <=> [self, :color]
59
59
  }
60
60
  }
61
61
 
@@ -46,19 +46,19 @@ class HelloDateTime
46
46
  }
47
47
 
48
48
  date { # alias for date_time(:date)
49
- date_time bind(@person, :date_of_birth)
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 bind(@person, :date_of_birth)
53
+ date_time <=> [@person, :date_of_birth]
54
54
  }
55
55
 
56
56
  time { # alias for date_time(:time)
57
- date_time bind(@person, :date_of_birth)
57
+ date_time <=> [@person, :date_of_birth]
58
58
  }
59
59
 
60
60
  calendar { # alias for date_time(:calendar)
61
- date_time bind(@person, :date_of_birth)
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 { |dialog_proxy|
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
  }
@@ -36,7 +36,7 @@ include Glimmer
36
36
  shell {
37
37
  text 'Hello, Drag and Drop!'
38
38
  list {
39
- selection bind(@location, :country)
39
+ selection <=> [@location, :country]
40
40
  on_drag_set_data { |event|
41
41
  list = event.widget.getControl
42
42
  event.data = list.getSelection.first
@@ -44,7 +44,7 @@ class HelloFileDialog
44
44
 
45
45
  label {
46
46
  layout_data :fill, :center, true, false
47
- text bind(self, :selected_file)
47
+ text <=> [self, :selected_file]
48
48
  font height: 14
49
49
  }
50
50
 
@@ -51,8 +51,8 @@ class HelloFontDialog
51
51
  height_hint 200
52
52
  }
53
53
  background :white
54
- font bind(self, 'selected_font_data')
55
- text bind(self, 'selected_font_data') {|font_data|
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 bind(@person, :male)
61
+ selection <=> [@person, :male]
62
62
  }
63
63
 
64
64
  radio {
65
65
  text 'Female'
66
- selection bind(@person, :female)
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 bind(@person, :child)
78
+ selection <=> [@person, :child]
79
79
  }
80
80
 
81
81
  radio {
82
82
  text 'Teen'
83
- selection bind(@person, :teen)
83
+ selection <=> [@person, :teen]
84
84
  }
85
85
 
86
86
  radio {
87
87
  text 'Adult'
88
- selection bind(@person, :adult)
88
+ selection <=> [@person, :adult]
89
89
  }
90
90
 
91
91
  radio {
92
92
  text 'Senior'
93
- selection bind(@person, :senior)
93
+ selection <=> [@person, :senior]
94
94
  }
95
95
  }
96
96
 
@@ -0,0 +1,243 @@
1
+ # Copyright (c) 2007-2021 Andy Maleh
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining
4
+ # a copy of this software and associated documentation files (the
5
+ # "Software"), to deal in the Software without restriction, including
6
+ # without limitation the rights to use, copy, modify, merge, publish,
7
+ # distribute, sublicense, and/or sell copies of the Software, and to
8
+ # permit persons to whom the Software is furnished to do so, subject to
9
+ # the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be
12
+ # included in all copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
22
+ require 'glimmer-dsl-swt'
23
+
24
+ class HelloLayout
25
+ include Glimmer::UI::CustomShell
26
+
27
+ body {
28
+ shell {
29
+ # shell (which is a composite) has fill_layout(:horizontal) by default with no margins
30
+ text 'Hello, Layout!'
31
+ tab_folder {
32
+
33
+ # every tab item has its own composite, which can set a layout
34
+ tab_item {
35
+ text 'Fill Layout (horizontal)'
36
+
37
+ fill_layout(:horizontal) {
38
+ margin_width 30
39
+ margin_height 40
40
+ spacing 5
41
+ }
42
+
43
+ 10.times { |n|
44
+ label {
45
+ text "<label #{n+1}>"
46
+ }
47
+
48
+ }
49
+
50
+ }
51
+
52
+ tab_item {
53
+ text 'Fill Layout (vertical)'
54
+
55
+ fill_layout {
56
+ type :vertical # alternative way of specifying orientation
57
+ margin_width 40
58
+ margin_height 30
59
+ spacing 10
60
+ }
61
+
62
+ 10.times { |n|
63
+ label(:center) {
64
+ text "<label #{n+1}>"
65
+ }
66
+
67
+ }
68
+
69
+ }
70
+
71
+ tab_item {
72
+ text 'Row Layout (horizontal)'
73
+
74
+ row_layout(:horizontal) {
75
+ # row layout has margin attributes for top, left, right, and bottom
76
+ # in addition to width and height (and sets margin_width and margin_height to 5 by default)
77
+ margin_top 40
78
+ margin_left 30
79
+ spacing 5
80
+ wrap false
81
+ center true
82
+ justify true
83
+ }
84
+
85
+ 10.times { |n|
86
+ label {
87
+ text "<label #{n+1}>"
88
+ }
89
+
90
+ }
91
+
92
+ }
93
+
94
+ tab_item {
95
+ text 'Row Layout (wrap on shrink)'
96
+
97
+ row_layout { # :horizontal is the default type
98
+ margin_height 40
99
+ margin_width 30
100
+ spacing 35
101
+ # wrap true # is the default
102
+ }
103
+
104
+ 10.times { |n|
105
+ label {
106
+ text "<label #{n+1}>"
107
+ }
108
+
109
+ }
110
+
111
+ }
112
+
113
+ tab_item {
114
+ text 'Row Layout (vertical)'
115
+ background :yellow
116
+
117
+ row_layout(:vertical) { |l|
118
+ margin_height 0
119
+ margin_width 0
120
+ spacing 10
121
+ fill true # fills horizontally to match the widest child (opposite to row layout orientation)
122
+ center false # enable and disable fill to see what this does
123
+ }
124
+
125
+ 10.times { |n|
126
+ label {
127
+ # layout_data allows a widget to tweak its layout configuration (generating RowData object for RowLayout)
128
+ layout_data {
129
+ height 30
130
+ # width unspecified yet calculated
131
+ }
132
+ text "<this is a ver#{'r'*(rand*200).to_i}y wide label #{n+1}>"
133
+ background :green
134
+ }
135
+
136
+ }
137
+
138
+ }
139
+
140
+ tab_item {
141
+ text 'Grid Layout'
142
+
143
+ grid_layout {
144
+ num_columns 5
145
+ make_columns_equal_width true
146
+ horizontal_spacing 15
147
+ vertical_spacing 10
148
+
149
+ # grid layout has margin attributes for top, left, right, and bottom
150
+ # in addition to width and height (and sets margin_width and margin_height to 5 by default)
151
+ margin_height 0
152
+ margin_top 20
153
+ }
154
+
155
+ 10.times { |n|
156
+ label {
157
+ text "<this label is wide enough to fill #{n+1}>"
158
+ background :white
159
+ }
160
+ }
161
+
162
+ label {
163
+ # layout_data allows a widget to tweak its layout configuration (generating GridData object for GridLayout)
164
+ layout_data {
165
+ width_hint 120
166
+ height_hint 40
167
+ }
168
+ text "<this label is clipped>"
169
+ background :cyan
170
+ }
171
+
172
+ label {
173
+ # layout_data allows a widget to tweak its layout configuration (generating GridData object for GridLayout)
174
+ layout_data {
175
+ horizontal_span 2
176
+ }
177
+ text "<this label spans two columns, so it can contain more text than normal>"
178
+ background :green
179
+ }
180
+
181
+ label {
182
+ # layout_data allows a widget to tweak its layout configuration (generating GridData object for GridLayout)
183
+ layout_data {
184
+ vertical_span 2
185
+ vertical_alignment :fill
186
+ }
187
+ text "<this label spans two rows, \nso it can contain new lines\n1\n2\n3\n4\n5\n6\n7>"
188
+ background :yellow
189
+ }
190
+
191
+ 5.times { label } # just filler
192
+
193
+ label {
194
+
195
+ # layout_data allows a widget to tweak its layout configuration (generating GridData object for GridLayout)
196
+ layout_data {
197
+ horizontal_span 5
198
+ horizontal_alignment :fill # could be :beginning, :center or :end too
199
+ vertical_alignment :fill # could be :beginning, :center, or :end too
200
+ grab_excess_horizontal_space true
201
+ grab_excess_vertical_space true
202
+ }
203
+
204
+ # this is a short alternative for specifying what is above
205
+ # layout_data(:fill, :fill, true, true) {
206
+ # horizontal_span 5
207
+ # }
208
+
209
+ text "<this label fills all the space it can get\nhorizontally and vertically>"
210
+ background :magenta
211
+ }
212
+
213
+ }
214
+
215
+
216
+ tab_item {
217
+ text 'Grid Layout (non-equal columns)'
218
+
219
+ grid_layout(2, false) # alt syntax: (numColumns, make_columns_equal_width)
220
+
221
+ 10.times { |n|
222
+ label {
223
+ text "Field #{n+1}"
224
+ }
225
+ text {
226
+ layout_data {
227
+ width_hint 600
228
+ }
229
+
230
+ text "Please enter text"
231
+ }
232
+ }
233
+
234
+ }
235
+
236
+ }
237
+
238
+ }
239
+
240
+ }
241
+ end
242
+
243
+ HelloLayout.launch