glimmer 0.4.3 → 0.4.4
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 +109 -2
- data/bin/girb +4 -2
- data/bin/glimmer +3 -2
- data/lib/glimmer.rb +6 -3
- data/lib/glimmer/command_handlers.rb +37 -34
- data/lib/glimmer/ext/module.rb +20 -0
- data/lib/glimmer/launcher.rb +75 -0
- data/lib/glimmer/swt/command_handlers/bind_command_handler.rb +55 -0
- data/lib/glimmer/swt/command_handlers/color_command_handler.rb +30 -0
- data/lib/glimmer/swt/command_handlers/combo_selection_data_binding_command_handler.rb +43 -0
- data/lib/glimmer/swt/command_handlers/custom_widget_command_handler.rb +24 -0
- data/lib/glimmer/swt/command_handlers/data_binding_command_handler.rb +72 -0
- data/lib/glimmer/swt/command_handlers/display_command_handler.rb +20 -0
- data/lib/glimmer/swt/command_handlers/layout_command_handler.rb +27 -0
- data/lib/glimmer/swt/command_handlers/layout_data_command_handler.rb +26 -0
- data/lib/glimmer/swt/command_handlers/list_selection_data_binding_command_handler.rb +48 -0
- data/lib/glimmer/swt/command_handlers/property_command_handler.rb +24 -0
- data/lib/glimmer/swt/command_handlers/shell_command_handler.rb +20 -0
- data/lib/glimmer/swt/command_handlers/tab_item_command_handler.rb +24 -0
- data/lib/glimmer/swt/command_handlers/table_column_properties_data_binding_command_handler.rb +28 -0
- data/lib/glimmer/swt/command_handlers/table_items_data_binding_command_handler.rb +33 -0
- data/lib/glimmer/swt/command_handlers/tree_items_data_binding_command_handler.rb +32 -0
- data/lib/glimmer/swt/command_handlers/tree_properties_data_binding_command_handler.rb +28 -0
- data/lib/glimmer/swt/command_handlers/widget_command_handler.rb +26 -0
- data/lib/glimmer/swt/command_handlers/widget_listener_command_handler.rb +43 -0
- data/lib/glimmer/swt/custom_widget.rb +91 -0
- data/lib/glimmer/swt/g_color.rb +39 -0
- data/lib/glimmer/swt/g_display.rb +28 -0
- data/lib/glimmer/swt/g_font.rb +75 -0
- data/lib/glimmer/swt/g_layout.rb +72 -0
- data/lib/glimmer/swt/g_layout_data.rb +56 -0
- data/lib/glimmer/swt/g_runnable.rb +15 -0
- data/lib/glimmer/swt/g_shell.rb +50 -0
- data/lib/glimmer/swt/g_swt.rb +65 -0
- data/lib/glimmer/swt/g_tab_item_composite.rb +34 -0
- data/lib/glimmer/swt/g_widget.rb +213 -0
- data/lib/glimmer/swt/g_widget_listener.rb +12 -0
- data/lib/glimmer/swt/list_selection_binding.rb +49 -0
- data/lib/glimmer/swt/model_binding.rb +208 -0
- data/lib/glimmer/swt/observable.rb +13 -0
- data/lib/glimmer/swt/observable_array.rb +105 -0
- data/lib/glimmer/swt/observable_model.rb +107 -0
- data/lib/glimmer/swt/observer.rb +117 -0
- data/lib/glimmer/swt/proc_tracker.rb +16 -0
- data/lib/glimmer/swt/table_items_binding.rb +47 -0
- data/lib/glimmer/swt/tree_items_binding.rb +51 -0
- data/lib/glimmer/swt/widget_binding.rb +31 -0
- data/lib/glimmer/xml/command_handlers/html_command_handler.rb +50 -0
- data/lib/glimmer/xml/command_handlers/xml_command_handler.rb +23 -0
- data/lib/glimmer/xml/command_handlers/xml_name_space_command_handler.rb +36 -0
- data/lib/glimmer/xml/command_handlers/xml_tag_command_handler.rb +28 -0
- data/lib/glimmer/xml/command_handlers/xml_text_command_handler.rb +24 -0
- data/lib/glimmer/xml/depth_first_search_iterator.rb +20 -0
- data/lib/glimmer/xml/name_space_visitor.rb +21 -0
- data/lib/glimmer/xml/node.rb +84 -0
- data/lib/glimmer/xml/node_visitor.rb +13 -0
- data/lib/glimmer/xml/xml_visitor.rb +63 -0
- data/lib/glimmer/xml_command_handlers.rb +11 -10
- metadata +68 -50
- data/lib/glimmer/command_handlers/bind_command_handler.rb +0 -51
- data/lib/glimmer/command_handlers/color_command_handler.rb +0 -26
- data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +0 -40
- data/lib/glimmer/command_handlers/data_binding_command_handler.rb +0 -69
- data/lib/glimmer/command_handlers/display_command_handler.rb +0 -16
- data/lib/glimmer/command_handlers/layout_command_handler.rb +0 -23
- data/lib/glimmer/command_handlers/layout_data_command_handler.rb +0 -22
- data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +0 -45
- data/lib/glimmer/command_handlers/models/g_color.rb +0 -34
- data/lib/glimmer/command_handlers/models/g_display.rb +0 -26
- data/lib/glimmer/command_handlers/models/g_font.rb +0 -73
- data/lib/glimmer/command_handlers/models/g_layout.rb +0 -71
- data/lib/glimmer/command_handlers/models/g_layout_data.rb +0 -55
- data/lib/glimmer/command_handlers/models/g_runnable.rb +0 -13
- data/lib/glimmer/command_handlers/models/g_shell.rb +0 -49
- data/lib/glimmer/command_handlers/models/g_swt.rb +0 -63
- data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +0 -33
- data/lib/glimmer/command_handlers/models/g_widget.rb +0 -214
- data/lib/glimmer/command_handlers/models/g_widget_listener.rb +0 -11
- data/lib/glimmer/command_handlers/models/list_selection_binding.rb +0 -47
- data/lib/glimmer/command_handlers/models/model_binding.rb +0 -206
- data/lib/glimmer/command_handlers/models/observable.rb +0 -11
- data/lib/glimmer/command_handlers/models/observable_array.rb +0 -104
- data/lib/glimmer/command_handlers/models/observable_model.rb +0 -105
- data/lib/glimmer/command_handlers/models/observer.rb +0 -115
- data/lib/glimmer/command_handlers/models/table_items_binding.rb +0 -45
- data/lib/glimmer/command_handlers/models/tree_items_binding.rb +0 -49
- data/lib/glimmer/command_handlers/models/widget_binding.rb +0 -29
- data/lib/glimmer/command_handlers/property_command_handler.rb +0 -21
- data/lib/glimmer/command_handlers/shell_command_handler.rb +0 -17
- data/lib/glimmer/command_handlers/tab_item_command_handler.rb +0 -21
- data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -25
- data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +0 -30
- data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +0 -29
- data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +0 -25
- data/lib/glimmer/command_handlers/widget_command_handler.rb +0 -22
- data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +0 -39
- data/lib/glimmer/xml_command_handlers/html_command_handler.rb +0 -47
- data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +0 -19
- data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +0 -20
- data/lib/glimmer/xml_command_handlers/models/node.rb +0 -82
- data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +0 -11
- data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +0 -61
- data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +0 -20
- data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +0 -33
- data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +0 -25
- data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +0 -21
- data/lib/glimmer_application.rb +0 -65
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cec5986595dd78ec9811f6a717e689834b5808757932488751393047d58b62a1
|
|
4
|
+
data.tar.gz: 73cd3972ef8d0b637a1fdeed9a7f8117da2afec2dffeedc9f9b3cc2e4fc971b9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: efa303ce11d71e9b7b9864de4c6edac9431e0a85905d2bf74a3d1c6b8b36131cf84a17a7e32977b4f1421aa1bc558da7a392dbc5814201928034fc98b2f158c5
|
|
7
|
+
data.tar.gz: 8fd39a5f47a9d10d6c6b00e2c14925579f3817e803c7e1fdd71e69b7d9a7c0fc70c04b9db034822bd7e1ab002d96c8f998f412561111cee21dcd985d3fa887f3
|
data/README.markdown
CHANGED
|
@@ -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.4.
|
|
105
|
+
jgem install glimmer -v 0.4.4
|
|
106
106
|
```
|
|
107
107
|
|
|
108
108
|
### Option 2: Bundler
|
|
109
109
|
|
|
110
110
|
Add the following to `Gemfile`:
|
|
111
111
|
```
|
|
112
|
-
gem 'glimmer', '~> 0.4.
|
|
112
|
+
gem 'glimmer', '~> 0.4.4'
|
|
113
113
|
```
|
|
114
114
|
|
|
115
115
|
And, then run:
|
|
@@ -569,6 +569,113 @@ class TicTacToe
|
|
|
569
569
|
end
|
|
570
570
|
```
|
|
571
571
|
|
|
572
|
+
## Custom Widgets
|
|
573
|
+
|
|
574
|
+
Glimmer supports creating custom widgets with minimal code, which automatically extends Glimmer's DSL syntax with an underscored lowercase keyword.
|
|
575
|
+
|
|
576
|
+
Simply create a new class that includes `Glimmer::SWT::CustomWidget` and put Glimmer DSL code in its `#body` method (its return value is stored in `#body_root` attribute). Glimmer will then automatically recognize this class by convention when it encounters a keyword matching the class name converted to underscored lowercase (and namespace double-colons `::` replaced with double-underscores `__`)
|
|
577
|
+
|
|
578
|
+
**Example:**
|
|
579
|
+
|
|
580
|
+
Definition:
|
|
581
|
+
```ruby
|
|
582
|
+
class RedLabel
|
|
583
|
+
include Glimmer::SWT::CustomWidget
|
|
584
|
+
def body
|
|
585
|
+
label(swt_style) {
|
|
586
|
+
background :red
|
|
587
|
+
}
|
|
588
|
+
end
|
|
589
|
+
end
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
Usage:
|
|
593
|
+
```ruby
|
|
594
|
+
shell {
|
|
595
|
+
red_label {
|
|
596
|
+
text 'Red Label'
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
As you can see, `RedLabel` became Glimmer DSL keyword: `red_label`
|
|
602
|
+
|
|
603
|
+
**Another Example:**
|
|
604
|
+
|
|
605
|
+
Definition:
|
|
606
|
+
```ruby
|
|
607
|
+
module Red
|
|
608
|
+
class Composite
|
|
609
|
+
include Glimmer::SWT::CustomWidget
|
|
610
|
+
def body
|
|
611
|
+
composite(swt_style) {
|
|
612
|
+
background :red
|
|
613
|
+
}
|
|
614
|
+
end
|
|
615
|
+
end
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
Usage:
|
|
619
|
+
```ruby
|
|
620
|
+
shell {
|
|
621
|
+
red__composite {
|
|
622
|
+
label {
|
|
623
|
+
foreground :white
|
|
624
|
+
text 'This is showing inside a Red Composite'
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
```
|
|
629
|
+
|
|
630
|
+
Notice how `Red::Composite` became `red__composite` with double-underscore, which is how Glimmer Custom Widgets signify namespaces by convention.
|
|
631
|
+
|
|
632
|
+
Custom Widgets have the following attributes available to call from inside the `#body` method:
|
|
633
|
+
- `#parent`: Glimmer object parenting custom widget
|
|
634
|
+
- `#swt_style`: SWT style integer. Can be useful if you want to allow consumers to customize a widget inside the custom widget body
|
|
635
|
+
- `#options`: a hash of options passed in parentheses when declaring a custom widget (useful for passing in model data) (e.g. `calendar(events: events)`). Custom widget class can declare option names (array) with `.options` method as shown below (not to be confused with `#options` instance method for retrieving options hash containing names & values)
|
|
636
|
+
- `#content`: nested block underneath custom widget. It will be automatically called at the end of processing the custom widget body. Alternatively, the custom widget body may call `content.call` at the place where the content is needed to show up as shown in the following example.
|
|
637
|
+
|
|
638
|
+
**Content/Options Example:**
|
|
639
|
+
|
|
640
|
+
Definition:
|
|
641
|
+
```ruby
|
|
642
|
+
class Sandwich
|
|
643
|
+
include Glimmer::SWT::CustomWidget
|
|
644
|
+
options :orientation, :bg_color
|
|
645
|
+
def body
|
|
646
|
+
composite(swt_style) { # gets custom widget style
|
|
647
|
+
fill_layout orientation # using orientation option
|
|
648
|
+
background container_background # using container_background option
|
|
649
|
+
label {
|
|
650
|
+
text 'SANDWICH TOP'
|
|
651
|
+
}
|
|
652
|
+
content.call # this is where content block is called
|
|
653
|
+
label {
|
|
654
|
+
text 'SANDWICH BOTTOM'
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
end
|
|
658
|
+
end
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
Usage:
|
|
662
|
+
```ruby
|
|
663
|
+
shell {
|
|
664
|
+
sandwich(:no_focus, orientation: :horizontal, bg_color: :white) {
|
|
665
|
+
label {
|
|
666
|
+
text 'SANDWICH CONTENT'
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
```
|
|
671
|
+
|
|
672
|
+
Notice how `:no_focus` was the `swt_style` value, followed by the `options` hash `{orientation: :horizontal, bg_color: :white}`, and finally the `content` block containing the label with `'SANDWICH CONTENT'`
|
|
673
|
+
|
|
674
|
+
The following additional attributes may be called from outside a custom widget in addition to the attributes mentioned above, assuming it's been captured in a variable:
|
|
675
|
+
- `#body_root`: top-most root Glimmer widget returned in `#body` method
|
|
676
|
+
- `#widget`: actual SWT widget for `body_root`
|
|
677
|
+
|
|
678
|
+
|
|
572
679
|
## Samples
|
|
573
680
|
|
|
574
681
|
Check the [samples](https://github.com/AndyObtiva/glimmer/tree/master/samples) directory for examples on how to write Glimmer applications. To run a sample, make sure to install the `glimmer` gem first and then use the `glimmer` command to run it (alternatively, you may clone the repo, follow [CONTRIBUTING.md](https://github.com/AndyObtiva/glimmer/blob/master/CONTRIBUTING.md) instructions, and run samples locally with development glimmer command: `bin/glimmer --dev`).
|
data/bin/girb
CHANGED
data/bin/glimmer
CHANGED
data/lib/glimmer.rb
CHANGED
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
require "rubygems"
|
|
7
7
|
require "facets"
|
|
8
|
+
require "super_module"
|
|
8
9
|
require "logger"
|
|
9
10
|
require "java"
|
|
10
11
|
require_relative "glimmer/parent"
|
|
11
|
-
require_relative "glimmer/swt_packages"
|
|
12
|
+
require_relative "glimmer/swt_packages" #TODO move into SWT namespace
|
|
13
|
+
require_relative "glimmer/swt/custom_widget"
|
|
14
|
+
require_relative "glimmer/ext/module"
|
|
12
15
|
|
|
13
16
|
module Glimmer
|
|
14
17
|
#TODO make it configurable to include or not include
|
|
@@ -62,5 +65,5 @@ module Glimmer
|
|
|
62
65
|
end
|
|
63
66
|
|
|
64
67
|
# Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
|
|
65
|
-
require File.dirname(__FILE__) + "/glimmer/xml_command_handlers"
|
|
66
|
-
require File.dirname(__FILE__) + "/glimmer/command_handlers"
|
|
68
|
+
require File.dirname(__FILE__) + "/glimmer/xml_command_handlers" #TODO move into namespace
|
|
69
|
+
require File.dirname(__FILE__) + "/glimmer/command_handlers" #TODO move into namespace
|
|
@@ -1,41 +1,44 @@
|
|
|
1
1
|
require_relative "command_handler_chain_factory"
|
|
2
|
-
require_relative "command_handlers/color_command_handler"
|
|
3
|
-
require_relative "command_handlers/display_command_handler"
|
|
4
|
-
require_relative "command_handlers/shell_command_handler"
|
|
5
|
-
require_relative "command_handlers/layout_command_handler"
|
|
6
|
-
require_relative "command_handlers/layout_data_command_handler"
|
|
7
|
-
require_relative "command_handlers/widget_listener_command_handler"
|
|
8
|
-
require_relative "command_handlers/bind_command_handler"
|
|
9
|
-
require_relative "command_handlers/tab_item_command_handler"
|
|
10
|
-
require_relative "command_handlers/combo_selection_data_binding_command_handler"
|
|
11
|
-
require_relative "command_handlers/list_selection_data_binding_command_handler"
|
|
12
|
-
require_relative "command_handlers/tree_items_data_binding_command_handler"
|
|
13
|
-
require_relative "command_handlers/tree_properties_data_binding_command_handler"
|
|
14
|
-
require_relative "command_handlers/table_items_data_binding_command_handler"
|
|
15
|
-
require_relative "command_handlers/table_column_properties_data_binding_command_handler"
|
|
16
|
-
require_relative "command_handlers/data_binding_command_handler"
|
|
17
|
-
require_relative "command_handlers/property_command_handler"
|
|
18
|
-
require_relative "command_handlers/widget_command_handler"
|
|
2
|
+
require_relative "swt/command_handlers/color_command_handler"
|
|
3
|
+
require_relative "swt/command_handlers/display_command_handler"
|
|
4
|
+
require_relative "swt/command_handlers/shell_command_handler"
|
|
5
|
+
require_relative "swt/command_handlers/layout_command_handler"
|
|
6
|
+
require_relative "swt/command_handlers/layout_data_command_handler"
|
|
7
|
+
require_relative "swt/command_handlers/widget_listener_command_handler"
|
|
8
|
+
require_relative "swt/command_handlers/bind_command_handler"
|
|
9
|
+
require_relative "swt/command_handlers/tab_item_command_handler"
|
|
10
|
+
require_relative "swt/command_handlers/combo_selection_data_binding_command_handler"
|
|
11
|
+
require_relative "swt/command_handlers/list_selection_data_binding_command_handler"
|
|
12
|
+
require_relative "swt/command_handlers/tree_items_data_binding_command_handler"
|
|
13
|
+
require_relative "swt/command_handlers/tree_properties_data_binding_command_handler"
|
|
14
|
+
require_relative "swt/command_handlers/table_items_data_binding_command_handler"
|
|
15
|
+
require_relative "swt/command_handlers/table_column_properties_data_binding_command_handler"
|
|
16
|
+
require_relative "swt/command_handlers/data_binding_command_handler"
|
|
17
|
+
require_relative "swt/command_handlers/property_command_handler"
|
|
18
|
+
require_relative "swt/command_handlers/widget_command_handler"
|
|
19
|
+
require_relative "swt/command_handlers/custom_widget_command_handler"
|
|
19
20
|
|
|
21
|
+
# TODO move into SWT namespace
|
|
20
22
|
module Glimmer
|
|
21
23
|
# edit to add more command handlers and extend Glimmer
|
|
22
24
|
CommandHandlerChainFactory.def_dsl(:swt,
|
|
23
|
-
DisplayCommandHandler.new,
|
|
24
|
-
ShellCommandHandler.new,
|
|
25
|
-
LayoutDataCommandHandler.new,
|
|
26
|
-
LayoutCommandHandler.new,
|
|
27
|
-
WidgetListenerCommandHandler.new,
|
|
28
|
-
BindCommandHandler.new,
|
|
29
|
-
TabItemCommandHandler.new,
|
|
30
|
-
ComboSelectionDataBindingCommandHandler.new,
|
|
31
|
-
ListSelectionDataBindingCommandHandler.new,
|
|
32
|
-
TreeItemsDataBindingCommandHandler.new,
|
|
33
|
-
TreePropertiesDataBindingCommandHandler.new,
|
|
34
|
-
TableItemsDataBindingCommandHandler.new,
|
|
35
|
-
TableColumnPropertiesDataBindingCommandHandler.new,
|
|
36
|
-
DataBindingCommandHandler.new,
|
|
37
|
-
ColorCommandHandler.new,
|
|
38
|
-
PropertyCommandHandler.new,
|
|
39
|
-
WidgetCommandHandler.new
|
|
25
|
+
SWT::CommandHandlers::DisplayCommandHandler.new,
|
|
26
|
+
SWT::CommandHandlers::ShellCommandHandler.new,
|
|
27
|
+
SWT::CommandHandlers::LayoutDataCommandHandler.new,
|
|
28
|
+
SWT::CommandHandlers::LayoutCommandHandler.new,
|
|
29
|
+
SWT::CommandHandlers::WidgetListenerCommandHandler.new,
|
|
30
|
+
SWT::CommandHandlers::BindCommandHandler.new,
|
|
31
|
+
SWT::CommandHandlers::TabItemCommandHandler.new,
|
|
32
|
+
SWT::CommandHandlers::ComboSelectionDataBindingCommandHandler.new,
|
|
33
|
+
SWT::CommandHandlers::ListSelectionDataBindingCommandHandler.new,
|
|
34
|
+
SWT::CommandHandlers::TreeItemsDataBindingCommandHandler.new,
|
|
35
|
+
SWT::CommandHandlers::TreePropertiesDataBindingCommandHandler.new,
|
|
36
|
+
SWT::CommandHandlers::TableItemsDataBindingCommandHandler.new,
|
|
37
|
+
SWT::CommandHandlers::TableColumnPropertiesDataBindingCommandHandler.new,
|
|
38
|
+
SWT::CommandHandlers::DataBindingCommandHandler.new,
|
|
39
|
+
SWT::CommandHandlers::ColorCommandHandler.new,
|
|
40
|
+
SWT::CommandHandlers::PropertyCommandHandler.new,
|
|
41
|
+
SWT::CommandHandlers::WidgetCommandHandler.new,
|
|
42
|
+
SWT::CommandHandlers::CustomWidgetCommandHandler.new
|
|
40
43
|
)
|
|
41
44
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Module
|
|
2
|
+
# TODO improve this (make it work dynamically per DSL loaded)
|
|
3
|
+
begin
|
|
4
|
+
instance_method(:const_missing_without_glimmer)
|
|
5
|
+
rescue
|
|
6
|
+
alias const_missing_without_glimmer const_missing
|
|
7
|
+
|
|
8
|
+
def const_missing(constant)
|
|
9
|
+
return const_missing_without_glimmer(constant) if @const_missing_without_glimmer_constant
|
|
10
|
+
@const_missing_without_glimmer_constant = constant
|
|
11
|
+
::Glimmer::SWT.const_get(constant)
|
|
12
|
+
rescue LoadError => e
|
|
13
|
+
const_missing_without_glimmer(constant)
|
|
14
|
+
rescue => e
|
|
15
|
+
const_missing_without_glimmer(constant)
|
|
16
|
+
ensure
|
|
17
|
+
@const_missing_without_glimmer_constant = nil
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require 'os'
|
|
2
|
+
|
|
3
|
+
module Glimmer
|
|
4
|
+
class Launcher
|
|
5
|
+
OPERATING_SYSTEMS_SUPPORTED = ["mac", "windows", "linux"]
|
|
6
|
+
TEXT_USAGE = <<-MULTILINE
|
|
7
|
+
Usage: glimmer application.rb
|
|
8
|
+
|
|
9
|
+
Runs a Glimmer application using JRuby, automatically preloading
|
|
10
|
+
the glimmer ruby gem and SWT jar dependency.
|
|
11
|
+
|
|
12
|
+
Example: glimmer hello_world.rb
|
|
13
|
+
This runs the Glimmer application hello_world.rb
|
|
14
|
+
MULTILINE
|
|
15
|
+
GLIMMER_LIB_LOCAL = File.expand_path(File.join(__FILE__, '..', '..', 'glimmer.rb'))
|
|
16
|
+
GLIMMER_LIB_GEM = 'glimmer'
|
|
17
|
+
|
|
18
|
+
class << self
|
|
19
|
+
def platform_os
|
|
20
|
+
OPERATING_SYSTEMS_SUPPORTED.detect {|os| OS.send("#{os}?")}
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def swt_jar_file
|
|
24
|
+
@swt_jar_file ||= File.expand_path(File.join(__FILE__, '..', '..', '..', 'vendor', 'swt', platform_os, 'swt.jar'))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def jruby_os_specific_options
|
|
28
|
+
OS.mac? ? "-J-XstartOnFirstThread" : ""
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def jruby_swt_options
|
|
32
|
+
"#{jruby_os_specific_options} -J-classpath \"#{swt_jar_file}\""
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def launch(application, dev_mode = false, debug_mode = false)
|
|
36
|
+
glimmer_lib = GLIMMER_LIB_GEM
|
|
37
|
+
if dev_mode
|
|
38
|
+
glimmer_lib = GLIMMER_LIB_LOCAL
|
|
39
|
+
puts "[DEVELOPMENT MODE] (#{glimmer_lib})"
|
|
40
|
+
end
|
|
41
|
+
debug_option = ''
|
|
42
|
+
if debug_mode
|
|
43
|
+
debug_option = '--debug '
|
|
44
|
+
puts "[DEBUG MODE]"
|
|
45
|
+
end
|
|
46
|
+
system "jruby #{debug_option}#{jruby_swt_options} -r #{glimmer_lib} -S #{application}"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def initialize(options)
|
|
51
|
+
@dev_mode = !!options.delete('--dev')
|
|
52
|
+
@debug_mode = !!options.delete('--debug')
|
|
53
|
+
@application_path = options.first
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def launch
|
|
57
|
+
if @application_path
|
|
58
|
+
launch_application
|
|
59
|
+
else
|
|
60
|
+
display_usage
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def launch_application
|
|
67
|
+
puts "Launching Glimmer Application: #{@application_path}" unless @application_path == 'irb'
|
|
68
|
+
self.class.launch(@application_path, @dev_mode, @debug_mode)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def display_usage
|
|
72
|
+
puts TEXT_USAGE
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + "/../../command_handler"
|
|
2
|
+
require File.dirname(__FILE__) + "/../g_widget"
|
|
3
|
+
require File.dirname(__FILE__) + "/../model_binding"
|
|
4
|
+
|
|
5
|
+
module Glimmer
|
|
6
|
+
module SWT
|
|
7
|
+
module CommandHandlers
|
|
8
|
+
# Responsible for setting up the return value of the bind keyword (command symbol)
|
|
9
|
+
# as a ModelBinding. It is then used by another command handler like
|
|
10
|
+
# DataBindingCommandHandler for text and selection properties on Text and Spinner
|
|
11
|
+
# or TableItemsDataBindingCommandHandler for items in a Table
|
|
12
|
+
class BindCommandHandler
|
|
13
|
+
include CommandHandler
|
|
14
|
+
|
|
15
|
+
include_package 'org.eclipse.swt.widgets'
|
|
16
|
+
|
|
17
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
|
18
|
+
# TODO refactor this long condition below
|
|
19
|
+
(
|
|
20
|
+
parent.is_a?(GWidget) and
|
|
21
|
+
command_symbol.to_s == "bind" and
|
|
22
|
+
(
|
|
23
|
+
(
|
|
24
|
+
(args.size == 2) and
|
|
25
|
+
(
|
|
26
|
+
args[1].is_a?(Symbol) or
|
|
27
|
+
args[1].is_a?(String)
|
|
28
|
+
)
|
|
29
|
+
) or
|
|
30
|
+
(
|
|
31
|
+
(args.size == 3) and
|
|
32
|
+
(args[1].is_a?(Symbol) or args[1].is_a?(String)) and
|
|
33
|
+
(args[2].is_a?(Symbol) or args[2].is_a?(String) or args[2].is_a?(Hash))
|
|
34
|
+
) or
|
|
35
|
+
(
|
|
36
|
+
(args.size == 4) and
|
|
37
|
+
(args[1].is_a?(Symbol) or args[1].is_a?(String)) and
|
|
38
|
+
(args[2].is_a?(Symbol) or args[2].is_a?(String)) and
|
|
39
|
+
(args[3].is_a?(Hash))
|
|
40
|
+
)
|
|
41
|
+
) and
|
|
42
|
+
block == nil
|
|
43
|
+
)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def do_handle(parent, command_symbol, *args, &block)
|
|
47
|
+
property_type = args[2] if (args.size == 3) && !args[2].is_a?(Hash)
|
|
48
|
+
binding_options = args[2] if args[2].is_a?(Hash)
|
|
49
|
+
binding_options = args[3] if args[3].is_a?(Hash)
|
|
50
|
+
ModelBinding.new(args[0], args[1].to_s, property_type, binding_options)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative '../../command_handler'
|
|
2
|
+
require_relative '../g_color'
|
|
3
|
+
|
|
4
|
+
module Glimmer
|
|
5
|
+
module SWT
|
|
6
|
+
module CommandHandlers
|
|
7
|
+
class ColorCommandHandler
|
|
8
|
+
include CommandHandler
|
|
9
|
+
|
|
10
|
+
include_package 'org.eclipse.swt.widgets'
|
|
11
|
+
|
|
12
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
|
13
|
+
['rgba', 'rgb'].include?(command_symbol.to_s) and
|
|
14
|
+
(3..5).include?(args.count)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def do_handle(parent, command_symbol, *args, &block)
|
|
18
|
+
if args.first.is_a?(Display) || args.first.nil?
|
|
19
|
+
display = args.delete_at(0)
|
|
20
|
+
elsif parent.is_a?(GWidget)
|
|
21
|
+
display = parent.widget.display
|
|
22
|
+
else
|
|
23
|
+
display = GDisplay.instance.display
|
|
24
|
+
end
|
|
25
|
+
GColor.new(display, *args)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|