glimmer 0.3.5 → 0.4.0
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.
- checksums.yaml +4 -4
- data/README.markdown +94 -32
- data/lib/glimmer.rb +4 -6
- data/lib/glimmer/command_handler.rb +10 -0
- data/lib/glimmer/command_handler_chain_factory.rb +32 -0
- data/lib/glimmer/command_handler_chain_link.rb +21 -0
- data/lib/{command_handlers.rb → glimmer/command_handlers.rb} +21 -17
- data/lib/glimmer/command_handlers/bind_command_handler.rb +51 -0
- data/lib/glimmer/command_handlers/color_command_handler.rb +26 -0
- data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +40 -0
- data/lib/glimmer/command_handlers/data_binding_command_handler.rb +69 -0
- data/lib/glimmer/command_handlers/display_command_handler.rb +16 -0
- data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +45 -0
- data/lib/glimmer/command_handlers/models/g_color.rb +34 -0
- data/lib/glimmer/command_handlers/models/g_display.rb +26 -0
- data/lib/glimmer/command_handlers/models/g_font.rb +62 -0
- data/lib/glimmer/command_handlers/models/g_runnable.rb +13 -0
- data/lib/glimmer/command_handlers/models/g_shell.rb +27 -0
- data/lib/glimmer/command_handlers/models/g_swt.rb +22 -0
- data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +33 -0
- data/lib/glimmer/command_handlers/models/g_widget.rb +199 -0
- data/lib/glimmer/command_handlers/models/g_widget_listener.rb +11 -0
- data/lib/glimmer/command_handlers/models/list_selection_binding.rb +47 -0
- data/lib/glimmer/command_handlers/models/model_binding.rb +206 -0
- data/lib/glimmer/command_handlers/models/observable.rb +11 -0
- data/lib/glimmer/command_handlers/models/observable_array.rb +104 -0
- data/lib/glimmer/command_handlers/models/observable_model.rb +105 -0
- data/lib/glimmer/command_handlers/models/observer.rb +115 -0
- data/lib/glimmer/command_handlers/models/table_items_binding.rb +45 -0
- data/lib/glimmer/command_handlers/models/tree_items_binding.rb +49 -0
- data/lib/glimmer/command_handlers/models/widget_binding.rb +29 -0
- data/lib/glimmer/command_handlers/shell_command_handler.rb +17 -0
- data/lib/glimmer/command_handlers/tab_item_command_handler.rb +21 -0
- data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +25 -0
- data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +30 -0
- data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +29 -0
- data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +25 -0
- data/lib/glimmer/command_handlers/widget_command_handler.rb +22 -0
- data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +39 -0
- data/lib/glimmer/command_handlers/widget_method_command_handler.rb +21 -0
- data/lib/glimmer/parent.rb +7 -0
- data/lib/{shine.rb → glimmer/shine.rb} +1 -1
- data/lib/glimmer/swt_packages.rb +13 -0
- data/lib/{xml_command_handlers.rb → glimmer/xml_command_handlers.rb} +10 -8
- data/lib/glimmer/xml_command_handlers/html_command_handler.rb +47 -0
- data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +19 -0
- data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +20 -0
- data/lib/glimmer/xml_command_handlers/models/node.rb +82 -0
- data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +11 -0
- data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +61 -0
- data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +20 -0
- data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +33 -0
- data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +25 -0
- data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +21 -0
- metadata +53 -54
- data/lib/command_handler.rb +0 -8
- data/lib/command_handler_chain_factory.rb +0 -30
- data/lib/command_handler_chain_link.rb +0 -19
- data/lib/command_handlers/bind_command_handler.rb +0 -49
- data/lib/command_handlers/color_command_handler.rb +0 -24
- data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +0 -38
- data/lib/command_handlers/data_binding_command_handler.rb +0 -67
- data/lib/command_handlers/list_selection_data_binding_command_handler.rb +0 -43
- data/lib/command_handlers/models/block_observer.rb +0 -14
- data/lib/command_handlers/models/list_selection_binding.rb +0 -45
- data/lib/command_handlers/models/model_binding.rb +0 -205
- data/lib/command_handlers/models/observable.rb +0 -9
- data/lib/command_handlers/models/observable_array.rb +0 -102
- data/lib/command_handlers/models/observable_model.rb +0 -103
- data/lib/command_handlers/models/observer.rb +0 -88
- data/lib/command_handlers/models/r_color.rb +0 -32
- data/lib/command_handlers/models/r_font.rb +0 -60
- data/lib/command_handlers/models/r_runnable.rb +0 -11
- data/lib/command_handlers/models/r_shell.rb +0 -24
- data/lib/command_handlers/models/r_swt.rb +0 -18
- data/lib/command_handlers/models/r_tab_item_composite.rb +0 -31
- data/lib/command_handlers/models/r_widget.rb +0 -183
- data/lib/command_handlers/models/r_widget_listener.rb +0 -9
- data/lib/command_handlers/models/table_items_binding.rb +0 -43
- data/lib/command_handlers/models/tree_items_binding.rb +0 -47
- data/lib/command_handlers/models/widget_binding.rb +0 -27
- data/lib/command_handlers/shell_command_handler.rb +0 -15
- data/lib/command_handlers/tab_item_command_handler.rb +0 -19
- data/lib/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -23
- data/lib/command_handlers/table_items_data_binding_command_handler.rb +0 -28
- data/lib/command_handlers/tree_items_data_binding_command_handler.rb +0 -27
- data/lib/command_handlers/tree_properties_data_binding_command_handler.rb +0 -23
- data/lib/command_handlers/widget_command_handler.rb +0 -20
- data/lib/command_handlers/widget_listener_command_handler.rb +0 -37
- data/lib/command_handlers/widget_method_command_handler.rb +0 -19
- data/lib/parent.rb +0 -5
- data/lib/string.rb +0 -8
- data/lib/swt_packages.rb +0 -11
- data/lib/symbol.rb +0 -10
- data/lib/xml_command_handlers/html_command_handler.rb +0 -45
- data/lib/xml_command_handlers/models/depth_first_search_iterator.rb +0 -17
- data/lib/xml_command_handlers/models/name_space_visitor.rb +0 -18
- data/lib/xml_command_handlers/models/node.rb +0 -80
- data/lib/xml_command_handlers/models/node_visitor.rb +0 -9
- data/lib/xml_command_handlers/models/xml_visitor.rb +0 -59
- data/lib/xml_command_handlers/xml_command_handler.rb +0 -18
- data/lib/xml_command_handlers/xml_name_space_command_handler.rb +0 -31
- data/lib/xml_command_handlers/xml_tag_command_handler.rb +0 -23
- data/lib/xml_command_handlers/xml_text_command_handler.rb +0 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '039508d9d31dec60207c13aa5ab20abe07af71d5e1d06fa2e26694151e06a124'
|
4
|
+
data.tar.gz: 402f7855f32fa23a157d044dd5f080b7ab4a9c16c353ed209a14d46565ab2c9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07ae480ae5c8807d663bead2005fd303f53238c3b8684e70b8e87c30341c119faf2a3420e25fa75037cd44019fc8ed7f09f7d0bb58bbe395e8fa353b29a5bbbf
|
7
|
+
data.tar.gz: cf4866df36d0fcd4dd75192e246edbf77bde8c63bd741adb5fc5969202415e22430b15091bac5b53a4dd9778f0f15679666d52f2cee2648b49836d1ac8ad4ee0
|
data/README.markdown
CHANGED
@@ -42,7 +42,7 @@ shell {
|
|
42
42
|
(1..3).each { |row|
|
43
43
|
(1..3).each { |column|
|
44
44
|
button {
|
45
|
-
layout_data GridData.new(
|
45
|
+
layout_data GridData.new(GSWT[:fill], GSWT[:fill], true, true)
|
46
46
|
text bind(@tic_tac_toe_board.box(row, column), :sign)
|
47
47
|
enabled bind(@tic_tac_toe_board.box(row, column), :empty)
|
48
48
|
on_widget_selected {
|
@@ -102,14 +102,14 @@ Please follow these instructions to make the `glimmer` command available on your
|
|
102
102
|
|
103
103
|
Run this command to install directly:
|
104
104
|
```
|
105
|
-
jgem install glimmer -v 0.
|
105
|
+
jgem install glimmer -v 0.4.0
|
106
106
|
```
|
107
107
|
|
108
108
|
### Option 2: Bundler
|
109
109
|
|
110
110
|
Add the following to `Gemfile`:
|
111
111
|
```
|
112
|
-
gem 'glimmer', '~> 0.
|
112
|
+
gem 'glimmer', '~> 0.4.0'
|
113
113
|
```
|
114
114
|
|
115
115
|
And, then run:
|
@@ -198,13 +198,13 @@ Glimmer ships with SWT style **smart defaults** so you wouldn't have to set them
|
|
198
198
|
|
199
199
|
You may check out all available `SWT` styles here:
|
200
200
|
|
201
|
-
https://help.eclipse.org/2019-12/
|
201
|
+
https://help.eclipse.org/2019-12/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/SWT.html
|
202
202
|
|
203
203
|
**Final Note** (advanced case outside of standard Glimmer DSL):
|
204
204
|
|
205
205
|
When building a widget-related SWT object manually (e.g. `GridData.new(...)`), you are expected to use `SWT::CONSTANT` directly or BIT-OR a few SWT constants together like `SWT::BORDER | SWT::V_SCROLL`.
|
206
206
|
|
207
|
-
Glimmer facilitates that with `
|
207
|
+
Glimmer facilitates that with `GSWT` class by allowing you to pass multiple styles as an argument array of symbols instead of dealing with BIT-OR. For example: `GSWT[:border, :v_scroll]`
|
208
208
|
|
209
209
|
### Widget Properties
|
210
210
|
|
@@ -257,9 +257,9 @@ label {
|
|
257
257
|
}
|
258
258
|
```
|
259
259
|
|
260
|
-
You may check out all available standard colors in `SWT` over here:
|
260
|
+
You may check out all available standard colors in `SWT` over here (having `COLOR_` prefix):
|
261
261
|
|
262
|
-
https://help.eclipse.org/2019-12/
|
262
|
+
https://help.eclipse.org/2019-12/nftopic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/swt/SWT.html
|
263
263
|
|
264
264
|
### Fonts
|
265
265
|
|
@@ -314,36 +314,69 @@ You may learn more about Glimmer's syntax by reading the Eclipse Zone Tutorial m
|
|
314
314
|
|
315
315
|
Glimmer comes with `Observer` module, which is used internally for data-binding, but can also be used externally for custom use of the Observer Pattern.
|
316
316
|
|
317
|
-
In summary, the class that needs to observe an object, must include Observer and implement `#
|
317
|
+
In summary, the class that needs to observe an object, must include Observer and implement `#call(new_value)` method. The class to be observed doesn't need to do anything. It will automatically be enhanced by Glimmer for observation.
|
318
318
|
|
319
|
-
|
320
|
-
|
321
|
-
Look at `samples/tictactoe/tic_tac_toe.rb` for an `Observer` dialog message example.
|
319
|
+
To register observer, one has to call the `#observe` method and pass in the observable and the property(ies) to observe.
|
322
320
|
|
323
321
|
```ruby
|
324
|
-
|
322
|
+
class TicTacToe
|
323
|
+
include Glimmer
|
324
|
+
include Observer
|
325
|
+
|
326
|
+
def initialize
|
327
|
+
# ...
|
328
|
+
observe(@tic_tac_toe_board, "game_status")
|
329
|
+
end
|
330
|
+
|
331
|
+
def call(game_status)
|
332
|
+
display_win_message if game_status == TicTacToeBoard::WIN
|
333
|
+
display_draw_message if game_status == TicTacToeBoard::DRAW
|
334
|
+
end
|
335
|
+
# ...
|
336
|
+
end
|
325
337
|
```
|
326
338
|
|
339
|
+
Alternatively, one can use a default Observer::Proc implementation via Observer#proc method:
|
327
340
|
```ruby
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
end
|
341
|
+
observer = Observer.proc { |new_value| puts new_value }
|
342
|
+
observer.observe(@tic_tac_toe_board, "game_status")
|
343
|
+
```
|
332
344
|
|
333
|
-
|
334
|
-
display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
|
335
|
-
end
|
345
|
+
Observers can be a good mechanism for displaying dialog messages with Glimmer (using SWT's `MessageBox`).
|
336
346
|
|
337
|
-
|
338
|
-
display_game_over_message("Draw!")
|
339
|
-
end
|
347
|
+
Look at `samples/tictactoe/tic_tac_toe.rb` for an `Observer` dialog message example (sample below).
|
340
348
|
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
349
|
+
```ruby
|
350
|
+
class TicTacToe
|
351
|
+
include Glimmer
|
352
|
+
include Observer
|
353
|
+
|
354
|
+
def initialize
|
355
|
+
# ...
|
356
|
+
observe(@tic_tac_toe_board, "game_status")
|
357
|
+
end
|
358
|
+
|
359
|
+
def call(game_status)
|
360
|
+
display_win_message if game_status == TicTacToeBoard::WIN
|
361
|
+
display_draw_message if game_status == TicTacToeBoard::DRAW
|
362
|
+
end
|
363
|
+
|
364
|
+
def display_win_message
|
365
|
+
display_game_over_message("Player #{@tic_tac_toe_board.winning_sign} has won!")
|
366
|
+
end
|
367
|
+
|
368
|
+
def display_draw_message
|
369
|
+
display_game_over_message("Draw!")
|
370
|
+
end
|
371
|
+
|
372
|
+
def display_game_over_message(message)
|
373
|
+
message_box = MessageBox.new(@shell.widget)
|
374
|
+
message_box.setText("Game Over")
|
375
|
+
message_box.setMessage(message)
|
376
|
+
message_box.open
|
377
|
+
@tic_tac_toe_board.reset
|
378
|
+
end
|
379
|
+
# ...
|
347
380
|
end
|
348
381
|
```
|
349
382
|
|
@@ -361,6 +394,10 @@ glimmer samples/hello_world.rb
|
|
361
394
|
|
362
395
|
https://www.eclipse.org/swt/docs.php
|
363
396
|
|
397
|
+
Here is the SWT API:
|
398
|
+
|
399
|
+
https://help.eclipse.org/2019-12/nftopic/org.eclipse.platform.doc.isv/reference/api/index.html
|
400
|
+
|
364
401
|
Here is a list of SWT widgets:
|
365
402
|
|
366
403
|
https://help.eclipse.org/2019-12/topic/org.eclipse.platform.doc.isv/guide/swt_widgets_controls.htm?cp=2_0_7_0_0
|
@@ -373,7 +410,7 @@ https://wiki.eclipse.org/SWT_Widget_Style_Bits
|
|
373
410
|
|
374
411
|
Glimmer automatically imports all SWT Java packages upon adding `include Glimmer` to a class or module.
|
375
412
|
|
376
|
-
Still, if you'd like to import manually elsewhere, you may add the following lines to your code
|
413
|
+
Still, if you'd like to import manually elsewhere, you may add the following lines to your code import a SWT Java package using `include_package`:
|
377
414
|
|
378
415
|
```ruby
|
379
416
|
include_package 'org.eclipse.swt'
|
@@ -382,9 +419,15 @@ include_package 'org.eclipse.swt.layout'
|
|
382
419
|
include_package 'org.eclipse.swt.graphics'
|
383
420
|
```
|
384
421
|
|
385
|
-
|
422
|
+
Or only import a specific SWT Java class using `java_import`:
|
423
|
+
|
424
|
+
```ruby
|
425
|
+
java_import 'org.eclipse.swt.SWT'
|
426
|
+
```
|
427
|
+
|
428
|
+
This allows you to call SWT Java classes from Ruby without mentioning package namespaces.
|
386
429
|
|
387
|
-
For example, `org.eclipse.swt.graphics.Color`
|
430
|
+
For example, after imports, `org.eclipse.swt.graphics.Color` can be referred to by just `Color`
|
388
431
|
|
389
432
|
## Girb (Glimmer irb)
|
390
433
|
|
@@ -458,9 +501,28 @@ a new component and extend the DSL with it
|
|
458
501
|
- Avoid disposing display when disposing a shell to allow recycling
|
459
502
|
- Provide a display builder method to use independently of shell
|
460
503
|
- Supported a single computed data binding as a string (not array)
|
461
|
-
- Disallow use of SWT::CONSTANTs with ORing since it's not intuitive at all
|
462
504
|
- Support data binding translator option via a block
|
463
505
|
- Center windows upon launching
|
506
|
+
- Add TruffleRuby support
|
507
|
+
- Make Shell automatically use last instantiated Display if not disposed
|
508
|
+
- Allow ability to instantiate Display independently of Shell
|
509
|
+
|
510
|
+
## Release Notes
|
511
|
+
|
512
|
+
[RELEASE.md](https://github.com/AndyObtiva/glimmer/blob/master/RELEASE.md)
|
513
|
+
|
514
|
+
## Contributing
|
515
|
+
|
516
|
+
- Clone repo
|
517
|
+
- Setup pre-requisites (installing JRuby via RVM on the Mac)
|
518
|
+
- cd into project again to activiate RVM glimmer gemset
|
519
|
+
- gem install bundler
|
520
|
+
- bundle
|
521
|
+
- rake # runs specs (ensure they finish successfully)
|
522
|
+
- rake install # builds/installs glimmer gem to be able to run samples via (glimmer samples/**)
|
523
|
+
|
524
|
+
To run a specific spec, run:
|
525
|
+
`rake SPEC=spec_file_path`
|
464
526
|
|
465
527
|
## Contributors
|
466
528
|
|
data/lib/glimmer.rb
CHANGED
@@ -7,10 +7,8 @@ require "rubygems"
|
|
7
7
|
require "facets"
|
8
8
|
require "logger"
|
9
9
|
require "java"
|
10
|
-
require_relative "
|
11
|
-
require_relative "
|
12
|
-
require_relative "parent"
|
13
|
-
require_relative "swt_packages"
|
10
|
+
require_relative "glimmer/parent"
|
11
|
+
require_relative "glimmer/swt_packages"
|
14
12
|
|
15
13
|
module Glimmer
|
16
14
|
#TODO make it configurable to include or not include
|
@@ -63,5 +61,5 @@ module Glimmer
|
|
63
61
|
end
|
64
62
|
|
65
63
|
# Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
|
66
|
-
require File.dirname(__FILE__) + "/xml_command_handlers"
|
67
|
-
require File.dirname(__FILE__) + "/command_handlers"
|
64
|
+
require File.dirname(__FILE__) + "/glimmer/xml_command_handlers"
|
65
|
+
require File.dirname(__FILE__) + "/glimmer/command_handlers"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/command_handler_chain_link"
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
class CommandHandlerChainFactory
|
5
|
+
@@dsls = {}
|
6
|
+
|
7
|
+
def self.def_dsl(dsl, *command_handler_array)
|
8
|
+
@@last_chain_link = nil
|
9
|
+
@@chain = nil
|
10
|
+
command_handler_array.each do |command_handler|
|
11
|
+
Glimmer.logger.debug "Loading #{command_handler.class.to_s}..."
|
12
|
+
chain_link = CommandHandlerChainLink.new(command_handler)
|
13
|
+
@@last_chain_link.chain_to(chain_link) if @@last_chain_link
|
14
|
+
@@last_chain_link = chain_link
|
15
|
+
@@chain = chain_link unless @@chain
|
16
|
+
end
|
17
|
+
@@dsls[dsl] = {
|
18
|
+
:last_chain_link => @@last_chain_link,
|
19
|
+
:chain => @@chain
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.select_dsl(dsl)
|
24
|
+
@@last_chain_link = @@dsls[dsl][:last_chain_link]
|
25
|
+
@@chain = @@dsls[dsl][:chain]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.chain
|
29
|
+
@@chain
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Glimmer
|
2
|
+
class CommandHandlerChainLink
|
3
|
+
def initialize(command_handler)
|
4
|
+
@command_handler = command_handler
|
5
|
+
end
|
6
|
+
def chain_to(next_chain_link)
|
7
|
+
@next_chain_link = next_chain_link
|
8
|
+
end
|
9
|
+
def handle(parent, command_symbol, *args, &block)
|
10
|
+
if (@command_handler.can_handle?(parent, command_symbol, *args, &block))
|
11
|
+
Glimmer.logger.debug "#{@command_handler.class.to_s} will handle command: #{command_symbol} with arguments #{args}"
|
12
|
+
return @command_handler.do_handle(parent, command_symbol, *args, &block)
|
13
|
+
elsif @next_chain_link
|
14
|
+
return @next_chain_link.handle(parent, command_symbol, *args, &block)
|
15
|
+
else
|
16
|
+
Glimmer.logger.debug "Command: #{command_symbol} cannot be handled!"
|
17
|
+
return nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative "command_handler_chain_factory"
|
2
2
|
require_relative "command_handlers/color_command_handler"
|
3
|
+
require_relative "command_handlers/display_command_handler"
|
3
4
|
require_relative "command_handlers/shell_command_handler"
|
4
5
|
require_relative "command_handlers/widget_listener_command_handler"
|
5
6
|
require_relative "command_handlers/bind_command_handler"
|
@@ -14,20 +15,23 @@ require_relative "command_handlers/data_binding_command_handler"
|
|
14
15
|
require_relative "command_handlers/widget_method_command_handler"
|
15
16
|
require_relative "command_handlers/widget_command_handler"
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
18
|
+
module Glimmer
|
19
|
+
# edit to add more command handlers and extend Glimmer
|
20
|
+
CommandHandlerChainFactory.def_dsl(:swt,
|
21
|
+
DisplayCommandHandler.new,
|
22
|
+
ShellCommandHandler.new,
|
23
|
+
WidgetListenerCommandHandler.new,
|
24
|
+
BindCommandHandler.new,
|
25
|
+
TabItemCommandHandler.new,
|
26
|
+
ComboSelectionDataBindingCommandHandler.new,
|
27
|
+
ListSelectionDataBindingCommandHandler.new,
|
28
|
+
TreeItemsDataBindingCommandHandler.new,
|
29
|
+
TreePropertiesDataBindingCommandHandler.new,
|
30
|
+
TableItemsDataBindingCommandHandler.new,
|
31
|
+
TableColumnPropertiesDataBindingCommandHandler.new,
|
32
|
+
DataBindingCommandHandler.new,
|
33
|
+
ColorCommandHandler.new,
|
34
|
+
WidgetMethodCommandHandler.new,
|
35
|
+
WidgetCommandHandler.new
|
36
|
+
)
|
37
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
require File.dirname(__FILE__) + "/models/model_binding"
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
# Responsible for setting up the return value of the bind keyword (command symbol)
|
7
|
+
# as a ModelBinding. It is then used by another command handler like
|
8
|
+
# DataBindingCommandHandler for text and selection properties on Text and Spinner
|
9
|
+
# or TableItemsDataBindingCommandHandler for items in a Table
|
10
|
+
class BindCommandHandler
|
11
|
+
include CommandHandler
|
12
|
+
|
13
|
+
include_package 'org.eclipse.swt.widgets'
|
14
|
+
|
15
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
16
|
+
(
|
17
|
+
parent.is_a?(GWidget) and
|
18
|
+
command_symbol.to_s == "bind" and
|
19
|
+
(
|
20
|
+
(
|
21
|
+
(args.size == 2) and
|
22
|
+
(
|
23
|
+
args[1].is_a?(Symbol) or
|
24
|
+
args[1].is_a?(String)
|
25
|
+
)
|
26
|
+
) or
|
27
|
+
(
|
28
|
+
(args.size == 3) and
|
29
|
+
(args[1].is_a?(Symbol) or args[1].is_a?(String)) and
|
30
|
+
(args[2].is_a?(Symbol) or args[2].is_a?(String) or args[2].is_a?(Hash))
|
31
|
+
) or
|
32
|
+
(
|
33
|
+
(args.size == 4) and
|
34
|
+
(args[1].is_a?(Symbol) or args[1].is_a?(String)) and
|
35
|
+
(args[2].is_a?(Symbol) or args[2].is_a?(String)) and
|
36
|
+
(args[3].is_a?(Hash))
|
37
|
+
)
|
38
|
+
) and
|
39
|
+
block == nil
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
def do_handle(parent, command_symbol, *args, &block)
|
44
|
+
property_type = args[2] if (args.size == 3) && !args[2].is_a?(Hash)
|
45
|
+
binding_options = args[2] if args[2].is_a?(Hash)
|
46
|
+
binding_options = args[3] if args[3].is_a?(Hash)
|
47
|
+
ModelBinding.new(args[0], args[1].to_s, property_type, binding_options)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../command_handler'
|
2
|
+
require_relative 'models/g_color'
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class ColorCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
|
8
|
+
include_package 'org.eclipse.swt.widgets'
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
['rgba', 'rgb'].include?(command_symbol.to_s) and
|
12
|
+
(3..5).include?(args.count)
|
13
|
+
end
|
14
|
+
|
15
|
+
def do_handle(parent, command_symbol, *args, &block)
|
16
|
+
if args.first.is_a?(Display) || args.first.nil?
|
17
|
+
display = args.delete_at(0)
|
18
|
+
elsif parent.is_a?(GWidget)
|
19
|
+
display = parent.widget.display
|
20
|
+
else
|
21
|
+
display = nil
|
22
|
+
end
|
23
|
+
GColor.new(display, *args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class ComboSelectionDataBindingCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
include Glimmer
|
8
|
+
|
9
|
+
include_package 'org.eclipse.swt.widgets'
|
10
|
+
|
11
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
12
|
+
parent.is_a?(GWidget) and
|
13
|
+
parent.widget.is_a?(Combo) and
|
14
|
+
command_symbol.to_s == "selection" and
|
15
|
+
args.size == 1 and
|
16
|
+
args[0].is_a?(ModelBinding) and
|
17
|
+
args[0].evaluate_options_property.is_a?(Array) and
|
18
|
+
block == nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_handle(parent, command_symbol, *args, &block)
|
22
|
+
model_binding = args[0]
|
23
|
+
widget_binding = WidgetBinding.new(parent, "items")
|
24
|
+
widget_binding.call(model_binding.evaluate_options_property)
|
25
|
+
model = model_binding.base_model
|
26
|
+
widget_binding.observe(model, model_binding.options_property_name)
|
27
|
+
|
28
|
+
widget_binding = WidgetBinding.new(parent, "text")
|
29
|
+
widget_binding.call(model_binding.evaluate_property)
|
30
|
+
widget_binding.observe(model, model_binding.property_name_expression)
|
31
|
+
|
32
|
+
add_contents(parent) {
|
33
|
+
on_widget_selected {
|
34
|
+
model_binding.call(widget_binding.evaluate_property)
|
35
|
+
}
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|