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
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
3
|
+
module Glimmer
|
4
|
+
# Mixin representing Observer trait from Observer Design Pattern
|
5
|
+
# Allows classes to include without interfering with their
|
6
|
+
# inheritance hierarchy.
|
7
|
+
#
|
8
|
+
# Includes a default implementation that can receive an observer block
|
9
|
+
# Example: Observer.proc {|new_value| puts new_value}
|
10
|
+
# Subclasses may override
|
11
|
+
module Observer
|
12
|
+
# Observer Proc default implementation that takes an observer block to process updates
|
13
|
+
# via call method
|
14
|
+
class Proc
|
15
|
+
include Observer
|
16
|
+
|
17
|
+
def initialize(&observer_block)
|
18
|
+
@observer_block = observer_block
|
19
|
+
end
|
20
|
+
|
21
|
+
# Called by observables once updates occur sending in the new_value if any
|
22
|
+
def call(new_value=nil)
|
23
|
+
@observer_block.call(new_value)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def proc(&observer_block)
|
29
|
+
Proc.new(&observer_block)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def registrations
|
34
|
+
@registrations ||= Set.new
|
35
|
+
end
|
36
|
+
|
37
|
+
def registrations_for(observable, property = nil)
|
38
|
+
registrations.select {|o, p| o == observable && p == property}
|
39
|
+
end
|
40
|
+
|
41
|
+
# mapping of registrations to dependents
|
42
|
+
# {[observable, property] => [[dependent, dependent_observable, dependent_property], ...]}
|
43
|
+
def dependents
|
44
|
+
@dependents ||= Hash.new
|
45
|
+
end
|
46
|
+
|
47
|
+
def dependents_for(registration)
|
48
|
+
dependents[registration] ||= Set.new
|
49
|
+
end
|
50
|
+
|
51
|
+
# registers observer in an observable on a property (optional)
|
52
|
+
# observer maintains registration list to unregister later
|
53
|
+
def register(observable, property = nil)
|
54
|
+
unless observable.is_a?(Observable)
|
55
|
+
# TODO refactor code to be more smart/polymorphic/automated and honor open/closed principle
|
56
|
+
if observable.is_a?(Array)
|
57
|
+
observable.extend(ObservableArray)
|
58
|
+
else
|
59
|
+
observable.extend(ObservableModel)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
observable.add_observer(*[self, property].compact)
|
63
|
+
[observable, property].tap do |registration|
|
64
|
+
self.registrations << registration
|
65
|
+
end
|
66
|
+
end
|
67
|
+
alias observe register
|
68
|
+
|
69
|
+
def unregister(observable, property = nil)
|
70
|
+
observable.remove_observer(*[self, property].compact)
|
71
|
+
registration = [observable, property]
|
72
|
+
dependents_for(registration).each do |dependent|
|
73
|
+
dependent_observer, dependent_observable, dependent_property = dependent
|
74
|
+
dependent_observer.unregister(dependent_observable, dependent_property)
|
75
|
+
remove_dependent(registration => dependent)
|
76
|
+
end
|
77
|
+
registrations.delete(registration)
|
78
|
+
end
|
79
|
+
alias unobserve unregister
|
80
|
+
|
81
|
+
def unregister_dependents_with_observable(registration, dependent_observable)
|
82
|
+
thedependents = dependents_for(registration).select do |d_observer, d_observable, d_property|
|
83
|
+
d_observable == dependent_observable
|
84
|
+
end
|
85
|
+
thedependents.each do |d_observer, d_observable, d_property|
|
86
|
+
d_observer.unregister(d_observable, d_property)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# cleans up all registrations in observables
|
91
|
+
def unregister_all_observables
|
92
|
+
registrations.each do |observable, property|
|
93
|
+
unregister(observable, property)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
alias unobserve_all_observables unregister_all_observables
|
97
|
+
|
98
|
+
# add dependent observer to unregister when unregistering observer
|
99
|
+
def add_dependent(parent_to_dependent_hash)
|
100
|
+
observable, property = registration = parent_to_dependent_hash.keys.first
|
101
|
+
dependent_observer, dependent_observable, dependent_property = dependent = parent_to_dependent_hash.values.first
|
102
|
+
dependents_for(registration) << dependent
|
103
|
+
end
|
104
|
+
|
105
|
+
def remove_dependent(parent_to_dependent_hash)
|
106
|
+
observable, property = registration = parent_to_dependent_hash.keys.first
|
107
|
+
dependent_observer, dependent_observable, dependent_property = dependent = parent_to_dependent_hash.values.first
|
108
|
+
dependents_for(registration).delete(dependent)
|
109
|
+
end
|
110
|
+
|
111
|
+
def call(new_value)
|
112
|
+
raise 'Not implemented!'
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'observable_array'
|
2
|
+
require_relative 'observable_model'
|
3
|
+
require_relative 'observable'
|
4
|
+
require_relative 'observer'
|
5
|
+
|
6
|
+
module Glimmer
|
7
|
+
class TableItemsBinding
|
8
|
+
include Glimmer
|
9
|
+
include Observable
|
10
|
+
include Observer
|
11
|
+
include_package 'org.eclipse.swt'
|
12
|
+
include_package 'org.eclipse.swt.widgets'
|
13
|
+
|
14
|
+
def initialize(parent, model_binding, column_properties)
|
15
|
+
@table = parent
|
16
|
+
@model_binding = model_binding
|
17
|
+
@column_properties = column_properties
|
18
|
+
call(@model_binding.evaluate_property)
|
19
|
+
model = model_binding.base_model
|
20
|
+
observe(model, model_binding.property_name_expression)
|
21
|
+
add_contents(@table) {
|
22
|
+
on_widget_disposed { |dispose_event|
|
23
|
+
unregister_all_observables
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
def call(model_collection=nil)
|
28
|
+
if model_collection and model_collection.is_a?(Array)
|
29
|
+
observe(model_collection, @column_properties)
|
30
|
+
@model_collection = model_collection
|
31
|
+
end
|
32
|
+
populate_table(@model_collection, @table, @column_properties)
|
33
|
+
end
|
34
|
+
def populate_table(model_collection, parent, column_properties)
|
35
|
+
parent.widget.removeAll
|
36
|
+
model_collection.each do |model|
|
37
|
+
table_item = TableItem.new(parent.widget, GSWT[:none])
|
38
|
+
for index in 0..(column_properties.size-1)
|
39
|
+
table_item.setText(index, model.send(column_properties[index]).to_s)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative 'observable_array'
|
2
|
+
require_relative 'observable_model'
|
3
|
+
require_relative 'observable'
|
4
|
+
require_relative 'observer'
|
5
|
+
|
6
|
+
module Glimmer
|
7
|
+
class TreeItemsBinding
|
8
|
+
include Glimmer
|
9
|
+
include Observable
|
10
|
+
include Observer
|
11
|
+
include_package 'org.eclipse.swt'
|
12
|
+
include_package 'org.eclipse.swt.widgets'
|
13
|
+
|
14
|
+
def initialize(parent, model_binding, tree_properties)
|
15
|
+
@tree = parent
|
16
|
+
@model_binding = model_binding
|
17
|
+
@tree_properties = [tree_properties].flatten.first.to_h
|
18
|
+
call(@model_binding.evaluate_property)
|
19
|
+
model = model_binding.base_model
|
20
|
+
observe(model, model_binding.property_name_expression)
|
21
|
+
add_contents(@tree) {
|
22
|
+
on_widget_disposed { |dispose_event|
|
23
|
+
unregister_all_observables
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
def call(model_tree_root_node=nil)
|
28
|
+
if model_tree_root_node and model_tree_root_node.respond_to?(@tree_properties[:children])
|
29
|
+
observe(model_tree_root_node, @tree_properties[:text])
|
30
|
+
observe(model_tree_root_node, @tree_properties[:children])
|
31
|
+
@model_tree_root_node = model_tree_root_node
|
32
|
+
end
|
33
|
+
populate_tree(@model_tree_root_node, @tree, @tree_properties)
|
34
|
+
end
|
35
|
+
def populate_tree(model_tree_root_node, parent, tree_properties)
|
36
|
+
parent.widget.removeAll
|
37
|
+
populate_tree_node(model_tree_root_node, parent.widget, tree_properties)
|
38
|
+
end
|
39
|
+
def populate_tree_node(model_tree_node, parent, tree_properties)
|
40
|
+
table_item = TreeItem.new(parent, GSWT[:none])
|
41
|
+
table_item.setText((model_tree_node && model_tree_node.send(tree_properties[:text])).to_s)
|
42
|
+
[model_tree_node && model_tree_node.send(tree_properties[:children])].flatten.to_a.compact.each do |child|
|
43
|
+
observe(child, @tree_properties[:text])
|
44
|
+
populate_tree_node(child, table_item, tree_properties)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative 'observable'
|
2
|
+
require_relative 'observer'
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class WidgetBinding
|
6
|
+
include Glimmer
|
7
|
+
include Observable
|
8
|
+
include Observer
|
9
|
+
|
10
|
+
attr_reader :widget, :property
|
11
|
+
def initialize(model, property, translator = nil)
|
12
|
+
@widget = model
|
13
|
+
@property = property
|
14
|
+
@translator = translator || proc {|value| value}
|
15
|
+
add_contents(@widget) {
|
16
|
+
on_widget_disposed { |dispose_event|
|
17
|
+
unregister_all_observables
|
18
|
+
}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
def call(value)
|
22
|
+
converted_value = translated_value = @translator.call(value)
|
23
|
+
@widget.set_attribute(@property, converted_value) unless evaluate_property == converted_value
|
24
|
+
end
|
25
|
+
def evaluate_property
|
26
|
+
@widget.widget.send(@property)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_shell"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class ShellCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
|
8
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
9
|
+
command_symbol.to_s == "shell"
|
10
|
+
end
|
11
|
+
|
12
|
+
def do_handle(parent, command_symbol, *args, &block)
|
13
|
+
GShell.send(:new, *args)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_shell"
|
3
|
+
require File.dirname(__FILE__) + "/models/g_tab_item_composite"
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
class TabItemCommandHandler
|
7
|
+
include CommandHandler
|
8
|
+
include Glimmer
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
parent.is_a?(GWidget) and
|
12
|
+
command_symbol.to_s == "tab_item"
|
13
|
+
end
|
14
|
+
|
15
|
+
def do_handle(parent, command_symbol, *args, &block)
|
16
|
+
tab_item = GWidget.new(command_symbol.to_s, parent.widget, args)
|
17
|
+
GTabItemComposite.new(tab_item, parent.widget, args)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
# Responsible for providing a readable keyword (command symbol) to capture
|
6
|
+
# and return column properties for use in TreeItemsDataBindingCommandHandler
|
7
|
+
class TableColumnPropertiesDataBindingCommandHandler
|
8
|
+
include CommandHandler
|
9
|
+
|
10
|
+
include_package 'org.eclipse.swt'
|
11
|
+
include_package 'org.eclipse.swt.widgets'
|
12
|
+
|
13
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
14
|
+
parent.is_a?(GWidget) and
|
15
|
+
parent.widget.is_a?(Table) and
|
16
|
+
command_symbol.to_s == "column_properties" and
|
17
|
+
block == nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def do_handle(parent, command_symbol, *args, &block)
|
21
|
+
args
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
require File.dirname(__FILE__) + "/models/table_items_binding"
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
#Depends on BindCommandHandler and TableColumnPropertiesDataBindingCommandHandler
|
7
|
+
class TableItemsDataBindingCommandHandler
|
8
|
+
include CommandHandler
|
9
|
+
|
10
|
+
include_package 'org.eclipse.swt.widgets'
|
11
|
+
|
12
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
13
|
+
parent.is_a?(GWidget) and
|
14
|
+
parent.widget.is_a?(Table) and
|
15
|
+
command_symbol.to_s == "items" and
|
16
|
+
args.size == 2 and
|
17
|
+
args[0].is_a?(ModelBinding) and
|
18
|
+
args[0].evaluate_property.is_a?(Array) and
|
19
|
+
args[1].is_a?(Array) and
|
20
|
+
block == nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def do_handle(parent, command_symbol, *args, &block)
|
24
|
+
model_binding = args[0]
|
25
|
+
column_properties = args[1]
|
26
|
+
TableItemsBinding.new(parent, model_binding, column_properties)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
require File.dirname(__FILE__) + "/models/tree_items_binding"
|
4
|
+
|
5
|
+
module Glimmer
|
6
|
+
class TreeItemsDataBindingCommandHandler
|
7
|
+
include CommandHandler
|
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?(Tree)) and
|
14
|
+
(command_symbol.to_s == "items") and
|
15
|
+
(args.size == 2) and
|
16
|
+
(args[0].is_a?(ModelBinding)) and
|
17
|
+
(!args[0].evaluate_property.is_a?(Array)) and
|
18
|
+
(args[1].is_a?(Array) && !args[1].empty? && args[1].first.is_a?(Hash)) and
|
19
|
+
(block == nil)
|
20
|
+
end
|
21
|
+
|
22
|
+
def do_handle(parent, command_symbol, *args, &block)
|
23
|
+
model_binding = args[0]
|
24
|
+
tree_properties = args[1]
|
25
|
+
TreeItemsBinding.new(parent, model_binding, tree_properties)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
# Responsible for providing a readable keyword (command symbol) to capture
|
6
|
+
# and return tree properties for use in TreeItemsDataBindingCommandHandler
|
7
|
+
class TreePropertiesDataBindingCommandHandler
|
8
|
+
include CommandHandler
|
9
|
+
|
10
|
+
include_package 'org.eclipse.swt'
|
11
|
+
include_package 'org.eclipse.swt.widgets'
|
12
|
+
|
13
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
14
|
+
parent.is_a?(GWidget) and
|
15
|
+
parent.widget.is_a?(Tree) and
|
16
|
+
command_symbol.to_s == "tree_properties" and
|
17
|
+
block == nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def do_handle(parent, command_symbol, *args, &block)
|
21
|
+
args
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class WidgetCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
|
8
|
+
include_package 'org.eclipse.swt.widgets'
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
parent.is_a?(GWidget) and
|
12
|
+
command_symbol.to_s != "shell" and
|
13
|
+
GWidget.widget_exists?(command_symbol.to_s)
|
14
|
+
end
|
15
|
+
|
16
|
+
def do_handle(parent, command_symbol, *args, &block)
|
17
|
+
Glimmer.logger.debug "widget styles are: " + args.inspect
|
18
|
+
GWidget.new(command_symbol.to_s, parent.widget, args)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../command_handler"
|
2
|
+
require File.dirname(__FILE__) + "/models/g_widget"
|
3
|
+
|
4
|
+
module Glimmer
|
5
|
+
class WidgetListenerCommandHandler
|
6
|
+
include CommandHandler
|
7
|
+
|
8
|
+
include_package 'org.eclipse.swt.widgets'
|
9
|
+
|
10
|
+
def can_handle?(parent, command_symbol, *args, &block)
|
11
|
+
Glimmer.logger.debug "parent is a widget: " + (parent.is_a?(GWidget)).to_s
|
12
|
+
return unless parent.is_a?(GWidget)
|
13
|
+
Glimmer.logger.debug "on listener?: " + (command_symbol.to_s[0,3] == "on_").to_s
|
14
|
+
return unless command_symbol.to_s[0,3] == "on_"
|
15
|
+
Glimmer.logger.debug "command symbol is longer than 3: " + (command_symbol.to_s.length > 3).to_s
|
16
|
+
return unless command_symbol.to_s.length > 3
|
17
|
+
Glimmer.logger.debug "args are 0?: " + (args.size == 0).to_s
|
18
|
+
return unless args.size == 0
|
19
|
+
Glimmer.logger.debug "can add listener? " + (parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])).to_s
|
20
|
+
parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
|
21
|
+
end
|
22
|
+
|
23
|
+
def do_handle(parent, command_symbol, *args, &block)
|
24
|
+
parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
|
25
|
+
ListenerParent.new #TODO refactor and move to models
|
26
|
+
end
|
27
|
+
|
28
|
+
#TODO refactor and move to separate file
|
29
|
+
class ListenerParent
|
30
|
+
include Parent
|
31
|
+
|
32
|
+
def process_block(block)
|
33
|
+
#NOOP
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|