glimmer-dsl-opal 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +9 -0
  3. data/README.md +195 -167
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal.rb +24 -7
  6. data/lib/glimmer-dsl-opal/ext/exception.rb +5 -0
  7. data/lib/glimmer-dsl-opal/missing/net/http.rb +17 -0
  8. data/lib/glimmer-dsl-opal/missing/uri.rb +26 -0
  9. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager.rb +0 -0
  10. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact.rb +0 -0
  11. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_manager_presenter.rb +0 -0
  12. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_repository.rb +24 -99
  13. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/login.rb +0 -0
  14. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe.rb +0 -0
  15. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/board.rb +0 -0
  16. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/cell.rb +0 -0
  17. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_browser.rb +0 -0
  18. data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +63 -0
  19. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed.rb +0 -0
  20. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed/contact.rb +0 -0
  21. data/lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb +155 -0
  22. data/lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb +86 -0
  23. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_multi_selection.rb +0 -0
  24. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_single_selection.rb +0 -0
  25. data/lib/glimmer-dsl-opal/samples/hello/hello_tab.rb +50 -0
  26. data/lib/glimmer-dsl-opal/samples/hello/hello_world.rb +29 -0
  27. data/lib/{jquery.js → glimmer-dsl-opal/vendor/jquery.js} +0 -0
  28. data/lib/glimmer/data_binding/ext/observable_model.rb +1 -1
  29. data/lib/glimmer/dsl/opal/async_exec_expression.rb +2 -2
  30. data/lib/glimmer/dsl/opal/color_expression.rb +38 -0
  31. data/lib/glimmer/dsl/opal/custom_widget_expression.rb +57 -0
  32. data/lib/glimmer/dsl/opal/dsl.rb +7 -0
  33. data/lib/glimmer/dsl/opal/font_expression.rb +47 -0
  34. data/lib/glimmer/dsl/opal/property_expression.rb +5 -2
  35. data/lib/glimmer/dsl/opal/rgb_expression.rb +32 -0
  36. data/lib/glimmer/dsl/opal/rgba_expression.rb +32 -0
  37. data/lib/glimmer/dsl/opal/swt_expression.rb +46 -0
  38. data/lib/glimmer/dsl/opal/widget_expression.rb +2 -1
  39. data/lib/glimmer/dsl/opal/widget_listener_expression.rb +16 -3
  40. data/lib/glimmer/swt.rb +499 -0
  41. data/lib/glimmer/swt/browser_proxy.rb +1 -1
  42. data/lib/glimmer/swt/button_proxy.rb +2 -2
  43. data/lib/glimmer/swt/color_proxy.rb +119 -0
  44. data/lib/glimmer/swt/combo_proxy.rb +10 -9
  45. data/lib/glimmer/swt/composite_proxy.rb +8 -8
  46. data/lib/glimmer/{opal → swt}/display_proxy.rb +3 -1
  47. data/lib/glimmer/swt/fill_layout_proxy.rb +84 -0
  48. data/lib/glimmer/swt/font_proxy.rb +79 -0
  49. data/lib/glimmer/swt/grid_layout_proxy.rb +34 -4
  50. data/lib/glimmer/swt/label_proxy.rb +7 -3
  51. data/lib/glimmer/swt/layout_proxy.rb +15 -13
  52. data/lib/glimmer/swt/list_proxy.rb +17 -12
  53. data/lib/glimmer/swt/message_box_proxy.rb +4 -7
  54. data/lib/glimmer/swt/row_layout_proxy.rb +105 -0
  55. data/lib/glimmer/swt/shell_proxy.rb +32 -22
  56. data/lib/glimmer/swt/style_constantizable.rb +154 -0
  57. data/lib/glimmer/swt/swt_proxy.rb +53 -0
  58. data/lib/glimmer/swt/tab_folder_proxy.rb +8 -8
  59. data/lib/glimmer/swt/tab_item_proxy.rb +15 -32
  60. data/lib/glimmer/swt/table_proxy.rb +0 -18
  61. data/lib/glimmer/swt/widget_proxy.rb +140 -39
  62. data/lib/glimmer/ui/custom_shell.rb +73 -0
  63. data/lib/glimmer/ui/custom_widget.rb +290 -0
  64. data/lib/glimmer/util/proc_tracker.rb +39 -0
  65. metadata +88 -57
  66. data/lib/glimmer/opal/element_proxy.rb +0 -312
  67. data/lib/samples/elaborate/launch +0 -6
  68. data/lib/samples/hello/hello_combo.rb +0 -34
  69. data/lib/samples/hello/hello_tab.rb +0 -24
  70. data/lib/samples/hello/hello_world.rb +0 -8
  71. data/lib/samples/hello/launch +0 -10
  72. data/lib/samples/launch +0 -4
@@ -1,312 +0,0 @@
1
- require 'glimmer/swt/property_owner'
2
-
3
- module Glimmer
4
- module Opal
5
- class ElementProxy
6
- include Glimmer
7
- include Glimmer::SWT::PropertyOwner
8
- attr_reader :parent, :args, :css_classes, :css, :children, :enabled
9
-
10
- class << self
11
- def next_id_number_for(name)
12
- @max_id_numbers[name] = max_id_number_for(name) + 1
13
- end
14
-
15
- def max_id_number_for(name)
16
- @max_id_numbers[name] = max_id_numbers[name] || 0
17
- end
18
-
19
- def max_id_numbers
20
- @max_id_numbers ||= reset_max_id_numbers!
21
- end
22
-
23
- def reset_max_id_numbers!
24
- @max_id_numbers = {}
25
- end
26
- end
27
-
28
- def initialize(parent, args)
29
- @parent = parent
30
- @args = args
31
- @children = Set.new
32
- @css_classes = Set.new
33
- @css = ''
34
- @enabled = true
35
- @parent.add_child(self)
36
- end
37
-
38
- def dispose
39
- dom.remove
40
- end
41
-
42
- def add_child(child)
43
- # return if @children.include?(child) # TODO consider adding an option to enable this if needed to prevent dom repetition
44
- @children << child
45
- dom << child.dom
46
- end
47
-
48
- def enabled=(value)
49
- @enabled = value
50
- redraw
51
- end
52
-
53
- def redraw
54
- if @dom
55
- old_dom = @dom
56
- @dom = nil
57
- old_dom.replace dom
58
- else
59
- dom
60
- end
61
- @children.each do |child|
62
- child.redraw
63
- end
64
- end
65
-
66
- # Subclasses must override with their own mappings
67
- def observation_request_to_event_mapping
68
- {}
69
- end
70
-
71
- def name
72
- self.class.name.split('::').last.underscore.sub(/_proxy$/, '')
73
- end
74
-
75
- def id
76
- @id ||= "#{name}-#{ElementProxy.next_id_number_for(name)}"
77
- end
78
-
79
- # Sets id explicitly. Useful in cases of wanting to maintain a stable id
80
- def id=(value)
81
- @id = value
82
- end
83
-
84
- # Subclasses can override with their own selector
85
- def selector
86
- "#{name}##{id}"
87
- end
88
-
89
- def add_css_class(css_class)
90
- @css_classes << css_class
91
- redraw
92
- end
93
-
94
- def add_css_classes(css_classes)
95
- @css_classes += css_classes
96
- redraw
97
- end
98
-
99
- def remove_css_class(css_class)
100
- @css_classes.delete(css_class)
101
- redraw
102
- end
103
-
104
- def remove_css_classes(css_classes)
105
- @css_classes -= css_classes
106
- redraw
107
- end
108
-
109
- def clear_css_classes(css_class)
110
- @css_classes.clear
111
- redraw
112
- end
113
-
114
- def css=(css)
115
- @css = css
116
- redraw
117
- end
118
-
119
- def has_style?(symbol)
120
- @args.include?(symbol) # not a very solid implementation. Bring SWT constants eventually
121
- end
122
-
123
- def handle_observation_request(keyword, &event_listener)
124
- return unless observation_request_to_event_mapping.keys.include?(keyword)
125
- event = nil
126
- delegate = nil
127
- [observation_request_to_event_mapping[keyword]].flatten.each do |mapping|
128
- event = mapping[:event]
129
- event_handler = mapping[:event_handler]
130
- potential_event_listener = event_handler&.call(event_listener)
131
- event_listener = event_handler&.call(event_listener) || event_listener
132
- delegate = $document.on(event, selector, &event_listener)
133
- end
134
- EventListenerProxy.new(element_proxy: self, event: event, selector: selector, delegate: delegate)
135
- end
136
-
137
- def add_observer(observer, property_name)
138
- property_listener_installers = self.class.ancestors.map {|ancestor| widget_property_listener_installers[ancestor]}.compact
139
- widget_listener_installers = property_listener_installers.map{|installer| installer[property_name.to_s.to_sym]}.compact if !property_listener_installers.empty?
140
- widget_listener_installers.to_a.each do |widget_listener_installer|
141
- widget_listener_installer.call(observer)
142
- end
143
- end
144
-
145
- def set_attribute(attribute_name, *args)
146
- apply_property_type_converters(attribute_name, args)
147
- super(attribute_name, *args)
148
- end
149
-
150
- def apply_property_type_converters(attribute_name, args)
151
- if args.count == 1
152
- value = args.first
153
- converter = property_type_converters[attribute_name.to_sym]
154
- args[0] = converter.call(value) if converter
155
- end
156
- # if args.count == 1 && args.first.is_a?(ColorProxy)
157
- # g_color = args.first
158
- # args[0] = g_color.swt_color
159
- # end
160
- end
161
-
162
- def property_type_converters
163
- @property_type_converters ||= {
164
- # :background => color_converter,
165
- # :background_image => lambda do |value|
166
- # if value.is_a?(String)
167
- # if value.start_with?('uri:classloader')
168
- # value = value.sub(/^uri\:classloader\:\//, '')
169
- # object = java.lang.Object.new
170
- # value = object.java_class.resource_as_stream(value)
171
- # value = java.io.BufferedInputStream.new(value)
172
- # end
173
- # image_data = ImageData.new(value)
174
- # on_event_Resize do |resize_event|
175
- # new_image_data = image_data.scaledTo(@swt_widget.getSize.x, @swt_widget.getSize.y)
176
- # @swt_widget.getBackgroundImage&.dispose
177
- # @swt_widget.setBackgroundImage(Image.new(@swt_widget.getDisplay, new_image_data))
178
- # end
179
- # Image.new(@swt_widget.getDisplay, image_data)
180
- # else
181
- # value
182
- # end
183
- # end,
184
- # :foreground => color_converter,
185
- # :font => lambda do |value|
186
- # if value.is_a?(Hash)
187
- # font_properties = value
188
- # FontProxy.new(self, font_properties).swt_font
189
- # else
190
- # value
191
- # end
192
- # end,
193
- # :items => lambda do |value|
194
- # value.to_java :string
195
- # end,
196
- :text => lambda do |value|
197
- # if swt_widget.is_a?(Browser)
198
- # value.to_s
199
- # else
200
- value.to_s
201
- # end
202
- end,
203
- # :visible => lambda do |value|
204
- # !!value
205
- # end,
206
- }
207
- end
208
-
209
- def widget_property_listener_installers
210
- @swt_widget_property_listener_installers ||= {
211
- # ElementProxy => {
212
- # :focus => lambda do |observer|
213
- # on_focus_gained { |focus_event|
214
- # observer.call(true)
215
- # }
216
- # on_focus_lost { |focus_event|
217
- # observer.call(false)
218
- # }
219
- # end,
220
- # },
221
- InputProxy => {
222
- :text => lambda do |observer|
223
- on_modify_text { |modify_event|
224
- observer.call(text)
225
- }
226
- end,
227
- # :caret_position => lambda do |observer|
228
- # on_event_keydown { |event|
229
- # observer.call(getCaretPosition)
230
- # }
231
- # on_event_keyup { |event|
232
- # observer.call(getCaretPosition)
233
- # }
234
- # on_event_mousedown { |event|
235
- # observer.call(getCaretPosition)
236
- # }
237
- # on_event_mouseup { |event|
238
- # observer.call(getCaretPosition)
239
- # }
240
- # end,
241
- # :selection => lambda do |observer|
242
- # on_event_keydown { |event|
243
- # observer.call(getSelection)
244
- # }
245
- # on_event_keyup { |event|
246
- # observer.call(getSelection)
247
- # }
248
- # on_event_mousedown { |event|
249
- # observer.call(getSelection)
250
- # }
251
- # on_event_mouseup { |event|
252
- # observer.call(getSelection)
253
- # }
254
- # end,
255
- # :selection_count => lambda do |observer|
256
- # on_event_keydown { |event|
257
- # observer.call(getSelectionCount)
258
- # }
259
- # on_event_keyup { |event|
260
- # observer.call(getSelectionCount)
261
- # }
262
- # on_event_mousedown { |event|
263
- # observer.call(getSelectionCount)
264
- # }
265
- # on_event_mouseup { |event|
266
- # observer.call(getSelectionCount)
267
- # }
268
- # end,
269
- # :top_index => lambda do |observer|
270
- # @last_top_index = getTopIndex
271
- # on_paint_control { |event|
272
- # if getTopIndex != @last_top_index
273
- # @last_top_index = getTopIndex
274
- # observer.call(@last_top_index)
275
- # end
276
- # }
277
- # end,
278
- },
279
- # Java::OrgEclipseSwtCustom::StyledText => {
280
- # :text => lambda do |observer|
281
- # on_modify_text { |modify_event|
282
- # observer.call(getText)
283
- # }
284
- # end,
285
- # },
286
- # InputProxy => {
287
- # :selection => lambda do |observer|
288
- # on_widget_selected { |selection_event|
289
- # observer.call(getSelection)
290
- # }
291
- # end
292
- # },
293
- # Java::OrgEclipseSwtWidgets::MenuItem => {
294
- # :selection => lambda do |observer|
295
- # on_widget_selected { |selection_event|
296
- # observer.call(getSelection)
297
- # }
298
- # end
299
- # },
300
- # Java::OrgEclipseSwtWidgets::Spinner => {
301
- # :selection => lambda do |observer|
302
- # on_widget_selected { |selection_event|
303
- # observer.call(getSelection)
304
- # }
305
- # end
306
- # },
307
- }
308
- end
309
-
310
- end
311
- end
312
- end
@@ -1,6 +0,0 @@
1
- # Launches all samples
2
- export DIR=`echo $0 | sed "s/launch//"`
3
- ${DIR}../../bin/glimmer \
4
- "${DIR}contact_manager.rb" \
5
- "${DIR}login.rb" \
6
- "${DIR}tic_tac_toe.rb"
@@ -1,34 +0,0 @@
1
- class Person
2
- attr_accessor :country, :country_options
3
-
4
- def initialize
5
- self.country_options=["", "Canada", "US", "Mexico"]
6
- self.country = "Canada"
7
- end
8
-
9
- def reset_country
10
- self.country = "Canada"
11
- end
12
- end
13
-
14
- class HelloCombo
15
- include Glimmer
16
- def launch
17
- person = Person.new
18
- shell {
19
- composite {
20
- combo(:read_only) {
21
- selection bind(person, :country)
22
- }
23
- button {
24
- text "Reset"
25
- on_widget_selected do
26
- person.reset_country
27
- end
28
- }
29
- }
30
- }.open
31
- end
32
- end
33
-
34
- HelloCombo.new.launch
@@ -1,24 +0,0 @@
1
- class HelloTab
2
- include Glimmer
3
- def launch
4
- shell {
5
- text "Hello, Tab!"
6
- tab_folder {
7
- tab_item {
8
- text "English"
9
- label {
10
- text "Hello, World!"
11
- }
12
- }
13
- tab_item {
14
- text "French"
15
- label {
16
- text "Bonjour, Univers!"
17
- }
18
- }
19
- }
20
- }.open
21
- end
22
- end
23
-
24
- HelloTab.new.launch
@@ -1,8 +0,0 @@
1
- include Glimmer
2
-
3
- shell {
4
- text "Glimmer"
5
- label {
6
- text "Hello, World!"
7
- }
8
- }.open
@@ -1,10 +0,0 @@
1
- # Launches all samples
2
- export DIR=`echo $0 | sed "s/launch//"`
3
- ${DIR}../../bin/glimmer \
4
- "${DIR}hello_browser.rb" \
5
- "${DIR}hello_combo.rb" \
6
- "${DIR}hello_computed.rb" \
7
- "${DIR}hello_list_multi_selection.rb" \
8
- "${DIR}hello_list_single_selection.rb" \
9
- "${DIR}hello_tab.rb" \
10
- "${DIR}hello_world.rb"
@@ -1,4 +0,0 @@
1
- # Launches all samples
2
- export DIR=`echo $0 | sed "s/launch//"`
3
- ${DIR}hello/launch &
4
- ${DIR}elaborate/launch