glimmer 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|