glimmer-dsl-swt 4.17.8.1 → 4.17.10.1

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +41 -0
  3. data/README.md +249 -7
  4. data/VERSION +1 -1
  5. data/glimmer-dsl-swt.gemspec +12 -7
  6. data/lib/glimmer-dsl-swt.rb +4 -3
  7. data/lib/glimmer/data_binding/table_items_binding.rb +5 -5
  8. data/lib/glimmer/dsl/swt/checkbox_group_selection_data_binding_expression.rb +3 -3
  9. data/lib/glimmer/dsl/swt/radio_group_selection_data_binding_expression.rb +3 -3
  10. data/lib/glimmer/dsl/swt/table_items_data_binding_expression.rb +3 -3
  11. data/lib/glimmer/dsl/swt/widget_expression.rb +1 -0
  12. data/lib/glimmer/launcher.rb +9 -9
  13. data/lib/glimmer/swt/custom/checkbox_group.rb +29 -8
  14. data/lib/glimmer/swt/custom/code_text.rb +36 -34
  15. data/lib/glimmer/swt/custom/radio_group.rb +27 -6
  16. data/lib/glimmer/swt/date_time_proxy.rb +87 -0
  17. data/lib/glimmer/swt/display_proxy.rb +6 -6
  18. data/lib/glimmer/swt/dnd_proxy.rb +6 -10
  19. data/lib/glimmer/swt/message_box_proxy.rb +7 -7
  20. data/lib/glimmer/swt/sash_form_proxy.rb +3 -3
  21. data/lib/glimmer/swt/shell_proxy.rb +18 -3
  22. data/lib/glimmer/swt/style_constantizable.rb +5 -5
  23. data/lib/glimmer/swt/swt_proxy.rb +7 -8
  24. data/lib/glimmer/swt/tab_item_proxy.rb +9 -4
  25. data/lib/glimmer/swt/table_column_proxy.rb +13 -5
  26. data/lib/glimmer/swt/table_proxy.rb +187 -66
  27. data/lib/glimmer/swt/widget_listener_proxy.rb +4 -4
  28. data/lib/glimmer/swt/widget_proxy.rb +47 -3
  29. data/samples/elaborate/contact_manager.rb +3 -3
  30. data/samples/elaborate/meta_sample.rb +9 -9
  31. data/samples/hello/hello_browser.rb +3 -3
  32. data/samples/hello/hello_checkbox.rb +4 -4
  33. data/samples/hello/hello_checkbox_group.rb +6 -3
  34. data/samples/hello/hello_combo.rb +5 -5
  35. data/samples/hello/hello_date_time.rb +63 -0
  36. data/samples/hello/hello_group.rb +104 -0
  37. data/samples/hello/hello_menu_bar.rb +3 -3
  38. data/samples/hello/hello_pop_up_context_menu.rb +3 -3
  39. data/samples/hello/hello_radio.rb +6 -6
  40. data/samples/hello/hello_radio_group.rb +9 -6
  41. data/samples/hello/hello_sash_form.rb +3 -3
  42. data/samples/hello/hello_spinner.rb +69 -0
  43. data/samples/hello/hello_tab.rb +3 -3
  44. data/samples/hello/hello_table.rb +287 -0
  45. metadata +11 -6
@@ -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
@@ -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
@@ -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
@@ -19,7 +19,7 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
- class HelloRadio
22
+ class HelloRadio
23
23
  class Person
24
24
  attr_accessor :male, :female, :child, :teen, :adult, :senior
25
25
 
@@ -37,13 +37,13 @@ class HelloRadio
37
37
  end
38
38
  end
39
39
 
40
- include Glimmer
40
+ include Glimmer
41
41
 
42
42
  def launch
43
43
  person = Person.new
44
44
 
45
45
  shell {
46
- text 'Hello, Radio!'
46
+ text 'Hello, Radio!'
47
47
  row_layout :vertical
48
48
 
49
49
  label {
@@ -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
@@ -19,6 +19,9 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ # This sample demonstrates the use of a `radio_group` in Glimmer, which provides terser syntax
23
+ # than HelloRadio for representing multiple radio buttons by relying on data-binding to
24
+ # automatically spawn the `radio` widgets based on available options on the model.
22
25
  class HelloRadioGroup
23
26
  class Person
24
27
  attr_accessor :gender, :age_group
@@ -32,7 +35,7 @@ class HelloRadioGroup
32
35
  end
33
36
 
34
37
  def age_group_options
35
- ['Child', 'Teen', 'Adult', 'Senior']
38
+ ['Child', 'Teen', 'Adult', 'Senior']
36
39
  end
37
40
 
38
41
  def reset
@@ -47,8 +50,8 @@ class HelloRadioGroup
47
50
  person = Person.new
48
51
 
49
52
  shell {
50
- text 'Hello, Radio Group!'
51
- row_layout :vertical
53
+ text 'Hello, Radio Group!'
54
+ row_layout :vertical
52
55
 
53
56
  label {
54
57
  text 'Gender:'
@@ -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
@@ -0,0 +1,69 @@
1
+ # Copyright (c) 2007-2020 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
+ class HelloSpinner
23
+ class Person
24
+ attr_accessor :donation
25
+ end
26
+
27
+ include Glimmer
28
+
29
+ def initialize
30
+ @person = Person.new
31
+ @person.donation = 500
32
+ end
33
+
34
+ def launch
35
+ shell {
36
+ grid_layout
37
+
38
+ text 'Hello, Spinner!'
39
+
40
+ label {
41
+ text 'Please select the amount you would like to donate to the poor:'
42
+ }
43
+
44
+ composite {
45
+ grid_layout 3, false
46
+
47
+ label {
48
+ text 'Amount:'
49
+ font style: :bold
50
+ }
51
+
52
+ label {
53
+ text '$'
54
+ }
55
+
56
+ spinner {
57
+ digits 2 # digits after the decimal point
58
+ minimum 500 # minimum value (including digits after the decimal point)
59
+ maximum 15000 # maximum value (including digits after the decimal point)
60
+ increment 500 # increment on up and down (including digits after the decimal point)
61
+ page_increment 5000 # page increment on page up and page down (including digits after the decimal point)
62
+ selection bind(@person, :donation) # selection must be set last if other properties are configured to ensure value is within bounds
63
+ }
64
+ }
65
+ }.open
66
+ end
67
+ end
68
+
69
+ HelloSpinner.new.launch
@@ -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
@@ -0,0 +1,287 @@
1
+ # Copyright (c) 2007-2020 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
+ class HelloTable
23
+ class BaseballGame
24
+ class << self
25
+ attr_accessor :selected_game
26
+
27
+ def all_playoff_games
28
+ @all_playoff_games ||= {
29
+ 'NLDS' => [
30
+ new(Time.new(2037, 10, 6, 12, 0), 'Chicago Cubs', 'Milwaukee Brewers', 'Free Bobblehead'),
31
+ new(Time.new(2037, 10, 7, 12, 0), 'Chicago Cubs', 'Milwaukee Brewers'),
32
+ new(Time.new(2037, 10, 8, 12, 0), 'Milwaukee Brewers', 'Chicago Cubs'),
33
+ new(Time.new(2037, 10, 9, 12, 0), 'Milwaukee Brewers', 'Chicago Cubs'),
34
+ new(Time.new(2037, 10, 10, 12, 0), 'Milwaukee Brewers', 'Chicago Cubs', 'Free Umbrella'),
35
+ new(Time.new(2037, 10, 6, 18, 0), 'Cincinnati Reds', 'St Louis Cardinals', 'Free Bobblehead'),
36
+ new(Time.new(2037, 10, 7, 18, 0), 'Cincinnati Reds', 'St Louis Cardinals'),
37
+ new(Time.new(2037, 10, 8, 18, 0), 'St Louis Cardinals', 'Cincinnati Reds'),
38
+ new(Time.new(2037, 10, 9, 18, 0), 'St Louis Cardinals', 'Cincinnati Reds'),
39
+ new(Time.new(2037, 10, 10, 18, 0), 'St Louis Cardinals', 'Cincinnati Reds', 'Free Umbrella'),
40
+ ],
41
+ 'ALDS' => [
42
+ new(Time.new(2037, 10, 6, 12, 0), 'New York Yankees', 'Boston Red Sox', 'Free Bobblehead'),
43
+ new(Time.new(2037, 10, 7, 12, 0), 'New York Yankees', 'Boston Red Sox'),
44
+ new(Time.new(2037, 10, 8, 12, 0), 'Boston Red Sox', 'New York Yankees'),
45
+ new(Time.new(2037, 10, 9, 12, 0), 'Boston Red Sox', 'New York Yankees'),
46
+ new(Time.new(2037, 10, 10, 12, 0), 'Boston Red Sox', 'New York Yankees', 'Free Umbrella'),
47
+ new(Time.new(2037, 10, 6, 18, 0), 'Houston Astros', 'Cleveland Indians', 'Free Bobblehead'),
48
+ new(Time.new(2037, 10, 7, 18, 0), 'Houston Astros', 'Cleveland Indians'),
49
+ new(Time.new(2037, 10, 8, 18, 0), 'Cleveland Indians', 'Houston Astros'),
50
+ new(Time.new(2037, 10, 9, 18, 0), 'Cleveland Indians', 'Houston Astros'),
51
+ new(Time.new(2037, 10, 10, 18, 0), 'Cleveland Indians', 'Houston Astros', 'Free Umbrella'),
52
+ ],
53
+ 'NLCS' => [
54
+ new(Time.new(2037, 10, 12, 12, 0), 'Chicago Cubs', 'Cincinnati Reds', 'Free Towel'),
55
+ new(Time.new(2037, 10, 13, 12, 0), 'Chicago Cubs', 'Cincinnati Reds'),
56
+ new(Time.new(2037, 10, 14, 12, 0), 'Cincinnati Reds', 'Chicago Cubs'),
57
+ new(Time.new(2037, 10, 15, 18, 0), 'Cincinnati Reds', 'Chicago Cubs'),
58
+ new(Time.new(2037, 10, 16, 18, 0), 'Cincinnati Reds', 'Chicago Cubs'),
59
+ new(Time.new(2037, 10, 17, 18, 0), 'Chicago Cubs', 'Cincinnati Reds'),
60
+ new(Time.new(2037, 10, 18, 12, 0), 'Chicago Cubs', 'Cincinnati Reds', 'Free Poncho'),
61
+ ],
62
+ 'ALCS' => [
63
+ new(Time.new(2037, 10, 12, 12, 0), 'Houston Astros', 'Boston Red Sox', 'Free Towel'),
64
+ new(Time.new(2037, 10, 13, 12, 0), 'Houston Astros', 'Boston Red Sox'),
65
+ new(Time.new(2037, 10, 14, 12, 0), 'Boston Red Sox', 'Houston Astros'),
66
+ new(Time.new(2037, 10, 15, 18, 0), 'Boston Red Sox', 'Houston Astros'),
67
+ new(Time.new(2037, 10, 16, 18, 0), 'Boston Red Sox', 'Houston Astros'),
68
+ new(Time.new(2037, 10, 17, 18, 0), 'Houston Astros', 'Boston Red Sox'),
69
+ new(Time.new(2037, 10, 18, 12, 0), 'Houston Astros', 'Boston Red Sox', 'Free Poncho'),
70
+ ],
71
+ 'World Series' => [
72
+ new(Time.new(2037, 10, 20, 18, 0), 'Chicago Cubs', 'Boston Red Sox', 'Free Baseball Cap'),
73
+ new(Time.new(2037, 10, 21, 18, 0), 'Chicago Cubs', 'Boston Red Sox'),
74
+ new(Time.new(2037, 10, 22, 18, 0), 'Boston Red Sox', 'Chicago Cubs'),
75
+ new(Time.new(2037, 10, 23, 18, 0), 'Boston Red Sox', 'Chicago Cubs'),
76
+ new(Time.new(2037, 10, 24, 18, 0), 'Boston Red Sox', 'Chicago Cubs'),
77
+ new(Time.new(2037, 10, 25, 18, 0), 'Chicago Cubs', 'Boston Red Sox'),
78
+ new(Time.new(2037, 10, 26, 18, 0), 'Chicago Cubs', 'Boston Red Sox', 'Free World Series Polo'),
79
+ ]
80
+ }
81
+ end
82
+
83
+ def playoff_type
84
+ @playoff_type ||= 'World Series'
85
+ end
86
+
87
+ def playoff_type=(new_playoff_type)
88
+ @playoff_type = new_playoff_type
89
+ self.schedule=(all_playoff_games[@playoff_type])
90
+ end
91
+
92
+ def playoff_type_options
93
+ all_playoff_games.keys
94
+ end
95
+
96
+ def schedule
97
+ @schedule ||= all_playoff_games[playoff_type]
98
+ end
99
+
100
+ def schedule=(new_schedule)
101
+ @schedule = new_schedule
102
+ end
103
+
104
+ def selected_game=(new_game)
105
+ @selected_game = new_game
106
+ end
107
+ end
108
+
109
+ include Glimmer
110
+ include Glimmer::DataBinding::ObservableModel
111
+
112
+ TEAM_BALLPARKS = {
113
+ 'Boston Red Sox' => 'Fenway Park',
114
+ 'Chicago Cubs' => 'Wrigley Field',
115
+ 'Cincinnati Reds' => 'Great American Ball Park',
116
+ 'Cleveland Indians' => 'Progressive Field',
117
+ 'Houston Astros' => 'Minute Maid Park',
118
+ 'Milwaukee Brewers' => 'Miller Park',
119
+ 'New York Yankees' => 'Yankee Stadium',
120
+ 'St Louis Cardinals' => 'Busch Stadium',
121
+ }
122
+
123
+ attr_accessor :date_time, :home_team, :away_team, :ballpark, :promotion
124
+
125
+ def initialize(date_time, home_team, away_team, promotion = 'N/A')
126
+ self.date_time = date_time
127
+ self.home_team = home_team
128
+ self.away_team = away_team
129
+ self.promotion = promotion
130
+ observe(self, :date_time) do |new_value|
131
+ notify_observers(:game_date)
132
+ notify_observers(:game_time)
133
+ end
134
+ end
135
+
136
+ def home_team=(home_team_value)
137
+ if home_team_value != away_team
138
+ @home_team = home_team_value
139
+ self.ballpark = TEAM_BALLPARKS[@home_team]
140
+ end
141
+ end
142
+
143
+ def away_team=(away_team_value)
144
+ if away_team_value != home_team
145
+ @away_team = away_team_value
146
+ end
147
+ end
148
+
149
+ def date
150
+ Date.new(date_time.year, date_time.month, date_time.day)
151
+ end
152
+
153
+ def time
154
+ Time.new(0, 1, 1, date_time.hour, date_time.min, date_time.sec, '+00:00')
155
+ end
156
+
157
+ def game_date
158
+ date_time.strftime("%m/%d/%Y")
159
+ end
160
+
161
+ def game_time
162
+ date_time.strftime("%I:%M %p")
163
+ end
164
+
165
+ def home_team_options
166
+ TEAM_BALLPARKS.keys
167
+ end
168
+
169
+ def away_team_options
170
+ TEAM_BALLPARKS.keys
171
+ end
172
+
173
+ def ballpark_options
174
+ [TEAM_BALLPARKS[@home_team], TEAM_BALLPARKS[@away_team]]
175
+ end
176
+
177
+ def to_s
178
+ "#{home_team} vs #{away_team} at #{ballpark} on #{game_date} #{game_time}"
179
+ end
180
+
181
+ def book!
182
+ "Thank you for booking #{to_s}"
183
+ end
184
+ end
185
+
186
+ include Glimmer
187
+
188
+ def launch
189
+ shell {
190
+ grid_layout
191
+
192
+ text 'Hello, Table!'
193
+
194
+ label {
195
+ layout_data :center, :center, true, false
196
+
197
+ text 'Baseball Playoff Schedule'
198
+ font height: 30, style: :bold
199
+ }
200
+
201
+ combo(:read_only) {
202
+ layout_data :center, :center, true, false
203
+ selection bind(BaseballGame, :playoff_type)
204
+ font height: 16
205
+ }
206
+
207
+ table(:editable) { |table_proxy|
208
+ layout_data :fill, :fill, true, true
209
+
210
+ table_column {
211
+ text 'Game Date'
212
+ width 150
213
+ sort_property :date # ensure sorting by real date value (not `game_date` string specified in items below)
214
+ editor :date_drop_down, property: :date_time
215
+ }
216
+ table_column {
217
+ text 'Game Time'
218
+ width 150
219
+ sort_property :time # ensure sorting by real time value (not `game_time` string specified in items below)
220
+ editor :time, property: :date_time
221
+ }
222
+ table_column {
223
+ text 'Ballpark'
224
+ width 180
225
+ editor :none
226
+ }
227
+ table_column {
228
+ text 'Home Team'
229
+ width 150
230
+ editor :combo, :read_only # read_only is simply an SWT style passed to combo widget
231
+ }
232
+ table_column {
233
+ text 'Away Team'
234
+ width 150
235
+ editor :combo, :read_only # read_only is simply an SWT style passed to combo widget
236
+ }
237
+ table_column {
238
+ text 'Promotion'
239
+ width 150
240
+ # default text editor is used here
241
+ }
242
+
243
+ # Data-bind table items (rows) to a model collection property, specifying column properties ordering per nested model
244
+ items bind(BaseballGame, :schedule), column_properties(:game_date, :game_time, :ballpark, :home_team, :away_team, :promotion)
245
+
246
+ # Data-bind table selection
247
+ selection bind(BaseballGame, :selected_game)
248
+
249
+ # Default initial sort property
250
+ sort_property :date
251
+
252
+ # Sort by these additional properties after handling sort by the column the user clicked
253
+ additional_sort_properties :date, :time, :home_team, :away_team, :ballpark, :promotion
254
+
255
+ menu {
256
+ menu_item {
257
+ text 'Book'
258
+
259
+ on_widget_selected {
260
+ book_selected_game
261
+ }
262
+ }
263
+ }
264
+ }
265
+
266
+ button {
267
+ text 'Book Selected Game'
268
+ layout_data :center, :center, true, false
269
+ font height: 16
270
+ enabled bind(BaseballGame, :selected_game)
271
+
272
+ on_widget_selected {
273
+ book_selected_game
274
+ }
275
+ }
276
+ }.open
277
+ end
278
+
279
+ def book_selected_game
280
+ message_box {
281
+ text 'Baseball Game Booked!'
282
+ message BaseballGame.selected_game.book!
283
+ }.open
284
+ end
285
+ end
286
+
287
+ HelloTable.new.launch