glimmer-dsl-swt 0.6.3 → 0.6.8

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/VERSION +1 -1
  4. data/lib/ext/glimmer/config.rb +22 -2
  5. data/lib/glimmer-dsl-swt.rb +5 -9
  6. data/lib/glimmer/Rakefile +5 -0
  7. data/lib/glimmer/data_binding/table_items_binding.rb +4 -1
  8. data/lib/glimmer/launcher.rb +59 -21
  9. data/lib/glimmer/rake_task.rb +88 -1
  10. data/lib/glimmer/scaffold.rb +19 -3
  11. data/lib/glimmer/swt/shell_proxy.rb +0 -1
  12. data/lib/glimmer/swt/style_constantizable.rb +1 -0
  13. data/lib/glimmer/swt/table_proxy.rb +10 -0
  14. data/lib/glimmer/swt/widget_proxy.rb +20 -13
  15. data/samples/elaborate/contact_manager.rb +121 -0
  16. data/samples/elaborate/contact_manager/contact.rb +11 -0
  17. data/samples/elaborate/contact_manager/contact_manager_presenter.rb +26 -0
  18. data/samples/elaborate/contact_manager/contact_repository.rb +244 -0
  19. data/samples/elaborate/login.rb +108 -0
  20. data/samples/elaborate/tic_tac_toe.rb +55 -0
  21. data/samples/elaborate/tic_tac_toe/board.rb +124 -0
  22. data/samples/elaborate/tic_tac_toe/cell.rb +27 -0
  23. data/samples/elaborate/user_profile.rb +55 -0
  24. data/samples/hello/hello_browser.rb +8 -0
  25. data/samples/hello/hello_combo.rb +38 -0
  26. data/samples/hello/hello_computed.rb +69 -0
  27. data/samples/hello/hello_computed/contact.rb +21 -0
  28. data/samples/hello/hello_drag_and_drop.rb +29 -0
  29. data/samples/hello/hello_list_multi_selection.rb +48 -0
  30. data/samples/hello/hello_list_single_selection.rb +37 -0
  31. data/samples/hello/hello_menu_bar.rb +64 -0
  32. data/samples/hello/hello_message_box.rb +15 -0
  33. data/samples/hello/hello_pop_up_context_menu.rb +36 -0
  34. data/samples/hello/hello_tab.rb +24 -0
  35. data/samples/hello/hello_world.rb +8 -0
  36. metadata +64 -8
@@ -25,6 +25,7 @@ module Glimmer
25
25
  "arrow" => [:arrow],
26
26
  "button" => [:push],
27
27
  "checkbox" => [:check],
28
+ "check" => [:check],
28
29
  "drag_source" => [:drop_copy],
29
30
  "drop_target" => [:drop_copy],
30
31
  "list" => [:border, :v_scroll],
@@ -41,21 +42,17 @@ module Glimmer
41
42
 
42
43
  DEFAULT_INITIALIZERS = {
43
44
  "composite" => lambda do |composite|
44
- layout = GridLayout.new
45
- layout.marginWidth = 15
46
- layout.marginHeight = 15
47
- composite.layout = layout
45
+ if composite.get_layout.nil?
46
+ layout = GridLayout.new
47
+ layout.marginWidth = 15
48
+ layout.marginHeight = 15
49
+ composite.layout = layout
50
+ end
48
51
  end,
49
52
  "scrolled_composite" => lambda do |scrolled_composite|
50
53
  scrolled_composite.expand_horizontal = true
51
54
  scrolled_composite.expand_vertical = true
52
55
  end,
53
- "shell" => lambda do |shell|
54
- layout = FillLayout.new
55
- layout.marginWidth = 15
56
- layout.marginHeight = 15
57
- shell.layout = layout
58
- end,
59
56
  "table" => lambda do |table|
60
57
  table.setHeaderVisible(true)
61
58
  table.setLinesVisible(true)
@@ -64,10 +61,18 @@ module Glimmer
64
61
  table_column.setWidth(80)
65
62
  end,
66
63
  "group" => lambda do |group|
67
- group.setLayout(GridLayout.new)
64
+ group.layout = GridLayout.new if group.get_layout.nil?
68
65
  end,
69
66
  }
70
67
 
68
+ KEYWORD_ALIASES = {
69
+ 'radio' => 'button',
70
+ 'checkbox' => 'button',
71
+ 'check' => 'button',
72
+ 'toggle' => 'button',
73
+ 'arrow' => 'button',
74
+ }
75
+
71
76
  class << self
72
77
  def create(keyword, parent, args)
73
78
  widget_proxy_class(keyword).new(keyword, parent, args)
@@ -75,6 +80,7 @@ module Glimmer
75
80
 
76
81
  def widget_proxy_class(keyword)
77
82
  begin
83
+ keyword = KEYWORD_ALIASES[keyword] if KEYWORD_ALIASES[keyword]
78
84
  class_name = "#{keyword.camelcase(:upper)}Proxy".to_sym
79
85
  Glimmer::SWT.const_get(class_name)
80
86
  rescue
@@ -88,7 +94,7 @@ module Glimmer
88
94
  end
89
95
 
90
96
  attr_reader :parent_proxy, :swt_widget, :drag_source_proxy, :drop_target_proxy, :drag_source_style, :drag_source_transfer, :drop_target_transfer
91
-
97
+
92
98
  # Initializes a new SWT Widget
93
99
  #
94
100
  # Styles is a comma separate list of symbols representing SWT styles in lower case
@@ -315,7 +321,7 @@ module Glimmer
315
321
 
316
322
  # This supports widgets in and out of basic SWT
317
323
  def self.swt_widget_class_for(underscored_widget_name)
318
- underscored_widget_name = 'button' if %w[radio checkbox toggle arrow].include?(underscored_widget_name)
324
+ underscored_widget_name = KEYWORD_ALIASES[underscored_widget_name] if KEYWORD_ALIASES[underscored_widget_name]
319
325
  swt_widget_name = underscored_widget_name.camelcase(:upper)
320
326
  swt_widget_class = eval(swt_widget_name)
321
327
  unless swt_widget_class.ancestors.include?(org.eclipse.swt.widgets.Widget)
@@ -457,6 +463,7 @@ module Glimmer
457
463
  rescue => e
458
464
  Glimmer::Config.logger.debug {"Neither WidgetProxy nor #{swt_widget.class.name} can handle the method ##{method}"}
459
465
  super
466
+ # TODO consider get_attribute too
460
467
  end
461
468
 
462
469
  def respond_to?(method, *args, &block)
@@ -0,0 +1,121 @@
1
+ require_relative "contact_manager/contact_manager_presenter"
2
+
3
+ class ContactManager
4
+ include Glimmer
5
+
6
+ def initialize
7
+ @contact_manager_presenter = ContactManagerPresenter.new
8
+ @contact_manager_presenter.list
9
+ end
10
+
11
+ def launch
12
+ shell {
13
+ text "Contact Manager"
14
+ composite {
15
+ group {
16
+ grid_layout(2, false) {
17
+ margin_width 0
18
+ margin_height 0
19
+ }
20
+ layout_data :fill, :center, true, false
21
+ text 'Lookup Contacts'
22
+ font height: 24
23
+
24
+ label {
25
+ layout_data :right, :center, false, false
26
+ text "First &Name: "
27
+ font height: 16
28
+ }
29
+ text {
30
+ layout_data :fill, :center, true, false
31
+ text bind(@contact_manager_presenter, :first_name)
32
+ on_key_pressed {|key_event|
33
+ @contact_manager_presenter.find if key_event.keyCode == swt(:cr)
34
+ }
35
+ }
36
+
37
+ label {
38
+ layout_data :right, :center, false, false
39
+ text "&Last Name: "
40
+ font height: 16
41
+ }
42
+ text {
43
+ layout_data :fill, :center, true, false
44
+ text bind(@contact_manager_presenter, :last_name)
45
+ on_key_pressed {|key_event|
46
+ @contact_manager_presenter.find if key_event.keyCode == swt(:cr)
47
+ }
48
+ }
49
+
50
+ label {
51
+ layout_data :right, :center, false, false
52
+ text "&Email: "
53
+ font height: 16
54
+ }
55
+ text {
56
+ layout_data :fill, :center, true, false
57
+ text bind(@contact_manager_presenter, :email)
58
+ on_key_pressed {|key_event|
59
+ @contact_manager_presenter.find if key_event.keyCode == swt(:cr)
60
+ }
61
+ }
62
+
63
+ composite {
64
+ row_layout {
65
+ margin_width 0
66
+ margin_height 0
67
+ }
68
+ layout_data(:right, :center, false, false) {
69
+ horizontal_span 2
70
+ }
71
+
72
+ button {
73
+ text "&Find"
74
+ on_widget_selected { @contact_manager_presenter.find }
75
+ on_key_pressed {|key_event|
76
+ @contact_manager_presenter.find if key_event.keyCode == swt(:cr)
77
+ }
78
+ }
79
+
80
+ button {
81
+ text "&List All"
82
+ on_widget_selected { @contact_manager_presenter.list }
83
+ on_key_pressed {|key_event|
84
+ @contact_manager_presenter.list if key_event.keyCode == swt(:cr)
85
+ }
86
+ }
87
+ }
88
+ }
89
+
90
+ table(:multi) { |table_proxy|
91
+ layout_data {
92
+ horizontal_alignment :fill
93
+ vertical_alignment :fill
94
+ grab_excess_horizontal_space true
95
+ grab_excess_vertical_space true
96
+ height_hint 200
97
+ }
98
+ table_column {
99
+ text "First Name"
100
+ width 80
101
+ }
102
+ table_column {
103
+ text "Last Name"
104
+ width 80
105
+ }
106
+ table_column {
107
+ text "Email"
108
+ width 200
109
+ }
110
+ items bind(@contact_manager_presenter, :results),
111
+ column_properties(:first_name, :last_name, :email)
112
+ on_mouse_up { |event|
113
+ table_proxy.edit_table_item(event.table_item, event.column_index)
114
+ }
115
+ }
116
+ }
117
+ }.open
118
+ end
119
+ end
120
+
121
+ ContactManager.new.launch
@@ -0,0 +1,11 @@
1
+ class ContactManager
2
+ class Contact
3
+ attr_accessor :first_name, :last_name, :email
4
+
5
+ def initialize(attribute_map)
6
+ @first_name = attribute_map[:first_name]
7
+ @last_name = attribute_map[:last_name]
8
+ @email = attribute_map[:email]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ require_relative "contact_repository"
2
+
3
+ class ContactManager
4
+ class ContactManagerPresenter
5
+ attr_accessor :results
6
+ @@contact_attributes = [:first_name, :last_name, :email]
7
+ @@contact_attributes.each {|attribute_name| attr_accessor attribute_name}
8
+
9
+ def initialize(contact_repository = nil)
10
+ @contact_repository = contact_repository || ContactRepository.new
11
+ @results = []
12
+ end
13
+
14
+ def list
15
+ self.results = @contact_repository.find({})
16
+ end
17
+
18
+ def find
19
+ filter_map = {}
20
+ @@contact_attributes.each do |attribute_name|
21
+ filter_map[attribute_name] = self.send(attribute_name) if self.send(attribute_name)
22
+ end
23
+ self.results = @contact_repository.find(filter_map)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,244 @@
1
+ require_relative "contact"
2
+
3
+ class ContactManager
4
+ class ContactRepository
5
+ NAMES_FIRST = %w[
6
+ Liam
7
+ Noah
8
+ William
9
+ James
10
+ Oliver
11
+ Benjamin
12
+ Elijah
13
+ Lucas
14
+ Mason
15
+ Logan
16
+ Alexander
17
+ Ethan
18
+ Jacob
19
+ Michael
20
+ Daniel
21
+ Henry
22
+ Jackson
23
+ Sebastian
24
+ Aiden
25
+ Matthew
26
+ Samuel
27
+ David
28
+ Joseph
29
+ Carter
30
+ Owen
31
+ Wyatt
32
+ John
33
+ Jack
34
+ Luke
35
+ Jayden
36
+ Dylan
37
+ Grayson
38
+ Levi
39
+ Isaac
40
+ Gabriel
41
+ Julian
42
+ Mateo
43
+ Anthony
44
+ Jaxon
45
+ Lincoln
46
+ Joshua
47
+ Christopher
48
+ Andrew
49
+ Theodore
50
+ Caleb
51
+ Ryan
52
+ Asher
53
+ Nathan
54
+ Thomas
55
+ Leo
56
+ Isaiah
57
+ Charles
58
+ Josiah
59
+ Hudson
60
+ Christian
61
+ Hunter
62
+ Connor
63
+ Eli
64
+ Ezra
65
+ Aaron
66
+ Landon
67
+ Adrian
68
+ Jonathan
69
+ Nolan
70
+ Jeremiah
71
+ Easton
72
+ Elias
73
+ Colton
74
+ Cameron
75
+ Carson
76
+ Robert
77
+ Angel
78
+ Maverick
79
+ Nicholas
80
+ Dominic
81
+ Jaxson
82
+ Greyson
83
+ Adam
84
+ Ian
85
+ Austin
86
+ Santiago
87
+ Jordan
88
+ Cooper
89
+ Brayden
90
+ Roman
91
+ Evan
92
+ Ezekiel
93
+ Xaviar
94
+ Jose
95
+ Jace
96
+ Jameson
97
+ Leonardo
98
+ Axel
99
+ Everett
100
+ Kayden
101
+ Miles
102
+ Sawyer
103
+ Jason
104
+ Emma
105
+ Olivia
106
+ Ava
107
+ Isabella
108
+ Sophia
109
+ Charlotte
110
+ Mia
111
+ Amelia
112
+ Harper
113
+ Evelyn
114
+ Abigail
115
+ Emily
116
+ Elizabeth
117
+ Mila
118
+ Ella
119
+ Avery
120
+ Sofia
121
+ Camila
122
+ Aria
123
+ Scarlett
124
+ Victoria
125
+ Madison
126
+ Luna
127
+ Grace
128
+ Chloe
129
+ Penelope
130
+ Layla
131
+ Riley
132
+ Zoey
133
+ Nora
134
+ Lily
135
+ Eleanor
136
+ Hannah
137
+ Lillian
138
+ Addison
139
+ Aubrey
140
+ Ellie
141
+ Stella
142
+ Natalie
143
+ Zoe
144
+ Leah
145
+ Hazel
146
+ Violet
147
+ Aurora
148
+ Savannah
149
+ Audrey
150
+ Brooklyn
151
+ Bella
152
+ Claire
153
+ Skylar
154
+ Lucy
155
+ Paisley
156
+ Everly
157
+ Anna
158
+ Caroline
159
+ Nova
160
+ Genesis
161
+ Emilia
162
+ Kennedy
163
+ Samantha
164
+ Maya
165
+ Willow
166
+ Kinsley
167
+ Naomi
168
+ Aaliyah
169
+ Elena
170
+ Sarah
171
+ Ariana
172
+ Allison
173
+ Gabriella
174
+ Alice
175
+ Madelyn
176
+ Cora
177
+ Ruby
178
+ Eva
179
+ Serenity
180
+ Autumn
181
+ Adeline
182
+ Hailey
183
+ Gianna
184
+ Valentina
185
+ Isla
186
+ Eliana
187
+ Quinn
188
+ Nevaeh
189
+ Ivy
190
+ Sadie
191
+ Piper
192
+ Lydia
193
+ Alexa
194
+ Josephine
195
+ Emery
196
+ Julia
197
+ Delilah
198
+ Arianna
199
+ Vivian
200
+ Kaylee
201
+ Sophie
202
+ Brielle
203
+ Madeline
204
+ ]
205
+ NAMES_LAST = %w[
206
+ Smith
207
+ Johnson
208
+ Williams
209
+ Brown
210
+ Jones
211
+ Miller
212
+ Davis
213
+ Wilson
214
+ Anderson
215
+ Taylor
216
+ ]
217
+ def initialize(contacts = nil)
218
+ @contacts = contacts || 1000.times.map do |n|
219
+ random_first_name_index = (rand*NAMES_FIRST.size).to_i
220
+ random_last_name_index = (rand*NAMES_LAST.size).to_i
221
+ first_name = NAMES_FIRST[random_first_name_index]
222
+ last_name = NAMES_LAST[random_last_name_index]
223
+ email = "#{first_name}@#{last_name}.com".downcase
224
+ Contact.new(
225
+ first_name: first_name,
226
+ last_name: last_name,
227
+ email: email
228
+ )
229
+ end
230
+ end
231
+
232
+ def find(attribute_filter_map)
233
+ @contacts.find_all do |contact|
234
+ match = true
235
+ attribute_filter_map.keys.each do |attribute_name|
236
+ contact_value = contact.send(attribute_name).downcase
237
+ filter_value = attribute_filter_map[attribute_name].downcase
238
+ match = false unless contact_value.match(filter_value)
239
+ end
240
+ match
241
+ end
242
+ end
243
+ end
244
+ end