glimmer-dsl-opal 0.1.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +48 -0
  3. data/README.md +948 -169
  4. data/VERSION +1 -1
  5. data/lib/glimmer-dsl-opal.rb +31 -7
  6. data/lib/glimmer-dsl-opal/ext/date.rb +13 -0
  7. data/lib/glimmer-dsl-opal/ext/exception.rb +5 -0
  8. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager.rb +0 -0
  9. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact.rb +0 -0
  10. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_manager_presenter.rb +0 -0
  11. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/contact_manager/contact_repository.rb +24 -99
  12. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/login.rb +0 -0
  13. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe.rb +0 -0
  14. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/board.rb +0 -0
  15. data/lib/{samples → glimmer-dsl-opal/samples}/elaborate/tic_tac_toe/cell.rb +0 -0
  16. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_browser.rb +0 -0
  17. data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb +85 -0
  18. data/lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb +68 -0
  19. data/lib/glimmer-dsl-opal/samples/hello/hello_combo.rb +63 -0
  20. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed.rb +0 -0
  21. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_computed/contact.rb +0 -0
  22. data/lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb +155 -0
  23. data/lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb +86 -0
  24. data/lib/glimmer-dsl-opal/samples/hello/hello_group.rb +104 -0
  25. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_multi_selection.rb +0 -0
  26. data/lib/{samples → glimmer-dsl-opal/samples}/hello/hello_list_single_selection.rb +1 -1
  27. data/lib/glimmer-dsl-opal/samples/hello/hello_radio.rb +108 -0
  28. data/lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb +84 -0
  29. data/lib/glimmer-dsl-opal/samples/hello/hello_tab.rb +50 -0
  30. data/lib/glimmer-dsl-opal/samples/hello/hello_world.rb +29 -0
  31. data/lib/{jquery.js → glimmer-dsl-opal/vendor/jquery.js} +0 -0
  32. data/lib/glimmer-dsl-swt.rb +37 -0
  33. data/lib/glimmer/data_binding/element_binding.rb +2 -1
  34. data/lib/glimmer/data_binding/ext/observable_model.rb +1 -1
  35. data/lib/glimmer/dsl/opal/async_exec_expression.rb +23 -7
  36. data/lib/glimmer/dsl/opal/checkbox_group_selection_data_binding_expression.rb +61 -0
  37. data/lib/glimmer/dsl/opal/color_expression.rb +38 -0
  38. data/lib/glimmer/dsl/opal/custom_widget_expression.rb +94 -0
  39. data/lib/glimmer/dsl/opal/display_expression.rb +40 -0
  40. data/lib/glimmer/dsl/opal/dsl.rb +14 -0
  41. data/lib/glimmer/dsl/opal/exec_expression.rb +55 -0
  42. data/lib/glimmer/dsl/opal/font_expression.rb +47 -0
  43. data/lib/glimmer/dsl/opal/layout_expression.rb +1 -1
  44. data/lib/glimmer/dsl/opal/property_expression.rb +6 -2
  45. data/lib/glimmer/dsl/opal/radio_group_selection_data_binding_expression.rb +61 -0
  46. data/lib/glimmer/dsl/opal/rgb_expression.rb +32 -0
  47. data/lib/glimmer/dsl/opal/rgba_expression.rb +32 -0
  48. data/lib/glimmer/dsl/opal/shell_expression.rb +19 -2
  49. data/lib/glimmer/dsl/opal/swt_expression.rb +46 -0
  50. data/lib/glimmer/dsl/opal/sync_exec_expression.rb +33 -0
  51. data/lib/glimmer/dsl/opal/widget_expression.rb +2 -1
  52. data/lib/glimmer/dsl/opal/widget_listener_expression.rb +16 -3
  53. data/lib/glimmer/swt.rb +499 -0
  54. data/lib/glimmer/swt/browser_proxy.rb +1 -1
  55. data/lib/glimmer/swt/button_proxy.rb +17 -3
  56. data/lib/glimmer/swt/checkbox_proxy.rb +80 -0
  57. data/lib/glimmer/swt/color_proxy.rb +119 -0
  58. data/lib/glimmer/swt/combo_proxy.rb +13 -12
  59. data/lib/glimmer/swt/composite_proxy.rb +8 -8
  60. data/lib/glimmer/swt/custom/checkbox_group.rb +142 -0
  61. data/lib/glimmer/swt/custom/radio_group.rb +143 -0
  62. data/lib/glimmer/swt/display_proxy.rb +79 -0
  63. data/lib/glimmer/swt/fill_layout_proxy.rb +84 -0
  64. data/lib/glimmer/swt/font_proxy.rb +79 -0
  65. data/lib/glimmer/swt/grid_layout_proxy.rb +45 -4
  66. data/lib/glimmer/swt/group_proxy.rb +38 -0
  67. data/lib/glimmer/swt/label_proxy.rb +28 -4
  68. data/lib/glimmer/swt/layout_data_proxy.rb +59 -6
  69. data/lib/glimmer/swt/layout_proxy.rb +17 -14
  70. data/lib/glimmer/swt/list_proxy.rb +19 -14
  71. data/lib/glimmer/swt/make_shift_shell_proxy.rb +38 -0
  72. data/lib/glimmer/swt/message_box_proxy.rb +5 -8
  73. data/lib/glimmer/swt/radio_proxy.rb +81 -0
  74. data/lib/glimmer/swt/row_layout_proxy.rb +128 -0
  75. data/lib/glimmer/swt/scrolled_composite_proxy.rb +20 -0
  76. data/lib/glimmer/swt/shell_proxy.rb +51 -26
  77. data/lib/glimmer/swt/style_constantizable.rb +154 -0
  78. data/lib/glimmer/swt/styled_text_proxy.rb +44 -0
  79. data/lib/glimmer/swt/swt_proxy.rb +53 -0
  80. data/lib/glimmer/swt/tab_folder_proxy.rb +8 -8
  81. data/lib/glimmer/swt/tab_item_proxy.rb +15 -32
  82. data/lib/glimmer/swt/table_proxy.rb +0 -18
  83. data/lib/glimmer/swt/widget_proxy.rb +173 -54
  84. data/lib/glimmer/ui/custom_shell.rb +92 -0
  85. data/lib/glimmer/ui/custom_widget.rb +292 -0
  86. data/lib/glimmer/util/proc_tracker.rb +39 -0
  87. data/lib/net/http.rb +17 -0
  88. data/lib/uri.rb +64 -0
  89. metadata +108 -57
  90. data/lib/glimmer/opal/display_proxy.rb +0 -23
  91. data/lib/glimmer/opal/element_proxy.rb +0 -312
  92. data/lib/samples/elaborate/launch +0 -6
  93. data/lib/samples/hello/hello_combo.rb +0 -34
  94. data/lib/samples/hello/hello_tab.rb +0 -24
  95. data/lib/samples/hello/hello_world.rb +0 -8
  96. data/lib/samples/hello/launch +0 -10
  97. data/lib/samples/launch +0 -4
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-opal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - AndyMaleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-23 00:00:00.000000000 Z
11
+ date: 2020-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -16,28 +16,56 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.9.5
19
+ version: 1.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.9.5
26
+ version: 1.0.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: glimmer-dsl-xml
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.1.0
33
+ version: 1.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: glimmer-dsl-css
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: opal-async
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.2.0
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 0.1.0
68
+ version: 1.2.0
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: puts_debuggerer
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +100,20 @@ dependencies:
72
100
  - - "<"
73
101
  - !ruby/object:Gem::Version
74
102
  version: 14.0.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: rake-tui
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
75
117
  - !ruby/object:Gem::Dependency
76
118
  name: jeweler
77
119
  requirement: !ruby/object:Gem::Requirement
@@ -140,20 +182,6 @@ dependencies:
140
182
  - - "~>"
141
183
  - !ruby/object:Gem::Version
142
184
  version: 1.1.2
143
- - !ruby/object:Gem::Dependency
144
- name: opal-async
145
- requirement: !ruby/object:Gem::Requirement
146
- requirements:
147
- - - "~>"
148
- - !ruby/object:Gem::Version
149
- version: 1.1.0
150
- type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- requirements:
154
- - - "~>"
155
- - !ruby/object:Gem::Version
156
- version: 1.1.0
157
185
  - !ruby/object:Gem::Dependency
158
186
  name: opal-jquery
159
187
  requirement: !ruby/object:Gem::Requirement
@@ -168,20 +196,6 @@ dependencies:
168
196
  - - "~>"
169
197
  - !ruby/object:Gem::Version
170
198
  version: 0.4.4
171
- - !ruby/object:Gem::Dependency
172
- name: glimmer-dsl-opal
173
- requirement: !ruby/object:Gem::Requirement
174
- requirements:
175
- - - ">="
176
- - !ruby/object:Gem::Version
177
- version: '0'
178
- type: :development
179
- prerelease: false
180
- version_requirements: !ruby/object:Gem::Requirement
181
- requirements:
182
- - - ">="
183
- - !ruby/object:Gem::Version
184
- version: '0'
185
199
  description: Glimmer DSL for Opal (Web GUI Adapter for Desktop Apps)
186
200
  email: andy.am@gmail.com
187
201
  executables: []
@@ -196,6 +210,33 @@ files:
196
210
  - README.md
197
211
  - VERSION
198
212
  - lib/glimmer-dsl-opal.rb
213
+ - lib/glimmer-dsl-opal/ext/date.rb
214
+ - lib/glimmer-dsl-opal/ext/exception.rb
215
+ - lib/glimmer-dsl-opal/samples/elaborate/contact_manager.rb
216
+ - lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact.rb
217
+ - lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact_manager_presenter.rb
218
+ - lib/glimmer-dsl-opal/samples/elaborate/contact_manager/contact_repository.rb
219
+ - lib/glimmer-dsl-opal/samples/elaborate/login.rb
220
+ - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe.rb
221
+ - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/board.rb
222
+ - lib/glimmer-dsl-opal/samples/elaborate/tic_tac_toe/cell.rb
223
+ - lib/glimmer-dsl-opal/samples/hello/hello_browser.rb
224
+ - lib/glimmer-dsl-opal/samples/hello/hello_checkbox.rb
225
+ - lib/glimmer-dsl-opal/samples/hello/hello_checkbox_group.rb
226
+ - lib/glimmer-dsl-opal/samples/hello/hello_combo.rb
227
+ - lib/glimmer-dsl-opal/samples/hello/hello_computed.rb
228
+ - lib/glimmer-dsl-opal/samples/hello/hello_computed/contact.rb
229
+ - lib/glimmer-dsl-opal/samples/hello/hello_custom_shell.rb
230
+ - lib/glimmer-dsl-opal/samples/hello/hello_custom_widget.rb
231
+ - lib/glimmer-dsl-opal/samples/hello/hello_group.rb
232
+ - lib/glimmer-dsl-opal/samples/hello/hello_list_multi_selection.rb
233
+ - lib/glimmer-dsl-opal/samples/hello/hello_list_single_selection.rb
234
+ - lib/glimmer-dsl-opal/samples/hello/hello_radio.rb
235
+ - lib/glimmer-dsl-opal/samples/hello/hello_radio_group.rb
236
+ - lib/glimmer-dsl-opal/samples/hello/hello_tab.rb
237
+ - lib/glimmer-dsl-opal/samples/hello/hello_world.rb
238
+ - lib/glimmer-dsl-opal/vendor/jquery.js
239
+ - lib/glimmer-dsl-swt.rb
199
240
  - lib/glimmer/data_binding/element_binding.rb
200
241
  - lib/glimmer/data_binding/ext/observable_model.rb
201
242
  - lib/glimmer/data_binding/list_selection_binding.rb
@@ -203,38 +244,63 @@ files:
203
244
  - lib/glimmer/data_binding/table_items_binding.rb
204
245
  - lib/glimmer/dsl/opal/async_exec_expression.rb
205
246
  - lib/glimmer/dsl/opal/bind_expression.rb
247
+ - lib/glimmer/dsl/opal/checkbox_group_selection_data_binding_expression.rb
248
+ - lib/glimmer/dsl/opal/color_expression.rb
206
249
  - lib/glimmer/dsl/opal/column_properties_expression.rb
207
250
  - lib/glimmer/dsl/opal/combo_selection_data_binding_expression.rb
251
+ - lib/glimmer/dsl/opal/custom_widget_expression.rb
208
252
  - lib/glimmer/dsl/opal/data_binding_expression.rb
253
+ - lib/glimmer/dsl/opal/display_expression.rb
209
254
  - lib/glimmer/dsl/opal/dsl.rb
255
+ - lib/glimmer/dsl/opal/exec_expression.rb
256
+ - lib/glimmer/dsl/opal/font_expression.rb
210
257
  - lib/glimmer/dsl/opal/layout_data_expression.rb
211
258
  - lib/glimmer/dsl/opal/layout_expression.rb
212
259
  - lib/glimmer/dsl/opal/list_selection_data_binding_expression.rb
213
260
  - lib/glimmer/dsl/opal/message_box_expression.rb
214
261
  - lib/glimmer/dsl/opal/observe_expression.rb
215
262
  - lib/glimmer/dsl/opal/property_expression.rb
263
+ - lib/glimmer/dsl/opal/radio_group_selection_data_binding_expression.rb
264
+ - lib/glimmer/dsl/opal/rgb_expression.rb
265
+ - lib/glimmer/dsl/opal/rgba_expression.rb
216
266
  - lib/glimmer/dsl/opal/shell_expression.rb
267
+ - lib/glimmer/dsl/opal/swt_expression.rb
268
+ - lib/glimmer/dsl/opal/sync_exec_expression.rb
217
269
  - lib/glimmer/dsl/opal/table_column_expression.rb
218
270
  - lib/glimmer/dsl/opal/table_expression.rb
219
271
  - lib/glimmer/dsl/opal/table_items_data_binding_expression.rb
220
272
  - lib/glimmer/dsl/opal/widget_expression.rb
221
273
  - lib/glimmer/dsl/opal/widget_listener_expression.rb
222
- - lib/glimmer/opal/display_proxy.rb
223
- - lib/glimmer/opal/element_proxy.rb
274
+ - lib/glimmer/swt.rb
224
275
  - lib/glimmer/swt/browser_proxy.rb
225
276
  - lib/glimmer/swt/button_proxy.rb
277
+ - lib/glimmer/swt/checkbox_proxy.rb
278
+ - lib/glimmer/swt/color_proxy.rb
226
279
  - lib/glimmer/swt/combo_proxy.rb
227
280
  - lib/glimmer/swt/composite_proxy.rb
281
+ - lib/glimmer/swt/custom/checkbox_group.rb
282
+ - lib/glimmer/swt/custom/radio_group.rb
283
+ - lib/glimmer/swt/display_proxy.rb
228
284
  - lib/glimmer/swt/event_listener_proxy.rb
285
+ - lib/glimmer/swt/fill_layout_proxy.rb
286
+ - lib/glimmer/swt/font_proxy.rb
229
287
  - lib/glimmer/swt/grid_layout_proxy.rb
288
+ - lib/glimmer/swt/group_proxy.rb
230
289
  - lib/glimmer/swt/label_proxy.rb
231
290
  - lib/glimmer/swt/layout_data_proxy.rb
232
291
  - lib/glimmer/swt/layout_proxy.rb
233
292
  - lib/glimmer/swt/list_proxy.rb
293
+ - lib/glimmer/swt/make_shift_shell_proxy.rb
234
294
  - lib/glimmer/swt/message_box_proxy.rb
235
295
  - lib/glimmer/swt/point.rb
236
296
  - lib/glimmer/swt/property_owner.rb
297
+ - lib/glimmer/swt/radio_proxy.rb
298
+ - lib/glimmer/swt/row_layout_proxy.rb
299
+ - lib/glimmer/swt/scrolled_composite_proxy.rb
237
300
  - lib/glimmer/swt/shell_proxy.rb
301
+ - lib/glimmer/swt/style_constantizable.rb
302
+ - lib/glimmer/swt/styled_text_proxy.rb
303
+ - lib/glimmer/swt/swt_proxy.rb
238
304
  - lib/glimmer/swt/tab_folder_proxy.rb
239
305
  - lib/glimmer/swt/tab_item_proxy.rb
240
306
  - lib/glimmer/swt/table_column_proxy.rb
@@ -242,26 +308,11 @@ files:
242
308
  - lib/glimmer/swt/table_proxy.rb
243
309
  - lib/glimmer/swt/text_proxy.rb
244
310
  - lib/glimmer/swt/widget_proxy.rb
245
- - lib/jquery.js
246
- - lib/samples/elaborate/contact_manager.rb
247
- - lib/samples/elaborate/contact_manager/contact.rb
248
- - lib/samples/elaborate/contact_manager/contact_manager_presenter.rb
249
- - lib/samples/elaborate/contact_manager/contact_repository.rb
250
- - lib/samples/elaborate/launch
251
- - lib/samples/elaborate/login.rb
252
- - lib/samples/elaborate/tic_tac_toe.rb
253
- - lib/samples/elaborate/tic_tac_toe/board.rb
254
- - lib/samples/elaborate/tic_tac_toe/cell.rb
255
- - lib/samples/hello/hello_browser.rb
256
- - lib/samples/hello/hello_combo.rb
257
- - lib/samples/hello/hello_computed.rb
258
- - lib/samples/hello/hello_computed/contact.rb
259
- - lib/samples/hello/hello_list_multi_selection.rb
260
- - lib/samples/hello/hello_list_single_selection.rb
261
- - lib/samples/hello/hello_tab.rb
262
- - lib/samples/hello/hello_world.rb
263
- - lib/samples/hello/launch
264
- - lib/samples/launch
311
+ - lib/glimmer/ui/custom_shell.rb
312
+ - lib/glimmer/ui/custom_widget.rb
313
+ - lib/glimmer/util/proc_tracker.rb
314
+ - lib/net/http.rb
315
+ - lib/uri.rb
265
316
  homepage: http://github.com/AndyObtiva/glimmer-dsl-opal
266
317
  licenses:
267
318
  - MIT
@@ -281,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
332
  - !ruby/object:Gem::Version
282
333
  version: '0'
283
334
  requirements: []
284
- rubygems_version: 3.1.2
335
+ rubygems_version: 3.1.4
285
336
  signing_key:
286
337
  specification_version: 4
287
338
  summary: Glimmer DSL for Opal
@@ -1,23 +0,0 @@
1
- module Glimmer
2
- module Opal
3
- class DisplayProxy
4
- class << self
5
- def instance
6
- @instance ||= new
7
- end
8
- end
9
-
10
- def async_exec(&block)
11
- executer = lambda do
12
- if Document.find('.modal').to_a.empty?
13
- block.call
14
- else
15
- sleep(0.05)
16
- Async::Task.new(&executer)
17
- end
18
- end
19
- Async::Task.new(&executer)
20
- end
21
- end
22
- end
23
- end
@@ -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