glimmer 0.3.5 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +94 -32
  3. data/lib/glimmer.rb +4 -6
  4. data/lib/glimmer/command_handler.rb +10 -0
  5. data/lib/glimmer/command_handler_chain_factory.rb +32 -0
  6. data/lib/glimmer/command_handler_chain_link.rb +21 -0
  7. data/lib/{command_handlers.rb → glimmer/command_handlers.rb} +21 -17
  8. data/lib/glimmer/command_handlers/bind_command_handler.rb +51 -0
  9. data/lib/glimmer/command_handlers/color_command_handler.rb +26 -0
  10. data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +40 -0
  11. data/lib/glimmer/command_handlers/data_binding_command_handler.rb +69 -0
  12. data/lib/glimmer/command_handlers/display_command_handler.rb +16 -0
  13. data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +45 -0
  14. data/lib/glimmer/command_handlers/models/g_color.rb +34 -0
  15. data/lib/glimmer/command_handlers/models/g_display.rb +26 -0
  16. data/lib/glimmer/command_handlers/models/g_font.rb +62 -0
  17. data/lib/glimmer/command_handlers/models/g_runnable.rb +13 -0
  18. data/lib/glimmer/command_handlers/models/g_shell.rb +27 -0
  19. data/lib/glimmer/command_handlers/models/g_swt.rb +22 -0
  20. data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +33 -0
  21. data/lib/glimmer/command_handlers/models/g_widget.rb +199 -0
  22. data/lib/glimmer/command_handlers/models/g_widget_listener.rb +11 -0
  23. data/lib/glimmer/command_handlers/models/list_selection_binding.rb +47 -0
  24. data/lib/glimmer/command_handlers/models/model_binding.rb +206 -0
  25. data/lib/glimmer/command_handlers/models/observable.rb +11 -0
  26. data/lib/glimmer/command_handlers/models/observable_array.rb +104 -0
  27. data/lib/glimmer/command_handlers/models/observable_model.rb +105 -0
  28. data/lib/glimmer/command_handlers/models/observer.rb +115 -0
  29. data/lib/glimmer/command_handlers/models/table_items_binding.rb +45 -0
  30. data/lib/glimmer/command_handlers/models/tree_items_binding.rb +49 -0
  31. data/lib/glimmer/command_handlers/models/widget_binding.rb +29 -0
  32. data/lib/glimmer/command_handlers/shell_command_handler.rb +17 -0
  33. data/lib/glimmer/command_handlers/tab_item_command_handler.rb +21 -0
  34. data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +25 -0
  35. data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +30 -0
  36. data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +29 -0
  37. data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +25 -0
  38. data/lib/glimmer/command_handlers/widget_command_handler.rb +22 -0
  39. data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +39 -0
  40. data/lib/glimmer/command_handlers/widget_method_command_handler.rb +21 -0
  41. data/lib/glimmer/parent.rb +7 -0
  42. data/lib/{shine.rb → glimmer/shine.rb} +1 -1
  43. data/lib/glimmer/swt_packages.rb +13 -0
  44. data/lib/{xml_command_handlers.rb → glimmer/xml_command_handlers.rb} +10 -8
  45. data/lib/glimmer/xml_command_handlers/html_command_handler.rb +47 -0
  46. data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +19 -0
  47. data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +20 -0
  48. data/lib/glimmer/xml_command_handlers/models/node.rb +82 -0
  49. data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +11 -0
  50. data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +61 -0
  51. data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +20 -0
  52. data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +33 -0
  53. data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +25 -0
  54. data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +21 -0
  55. metadata +53 -54
  56. data/lib/command_handler.rb +0 -8
  57. data/lib/command_handler_chain_factory.rb +0 -30
  58. data/lib/command_handler_chain_link.rb +0 -19
  59. data/lib/command_handlers/bind_command_handler.rb +0 -49
  60. data/lib/command_handlers/color_command_handler.rb +0 -24
  61. data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +0 -38
  62. data/lib/command_handlers/data_binding_command_handler.rb +0 -67
  63. data/lib/command_handlers/list_selection_data_binding_command_handler.rb +0 -43
  64. data/lib/command_handlers/models/block_observer.rb +0 -14
  65. data/lib/command_handlers/models/list_selection_binding.rb +0 -45
  66. data/lib/command_handlers/models/model_binding.rb +0 -205
  67. data/lib/command_handlers/models/observable.rb +0 -9
  68. data/lib/command_handlers/models/observable_array.rb +0 -102
  69. data/lib/command_handlers/models/observable_model.rb +0 -103
  70. data/lib/command_handlers/models/observer.rb +0 -88
  71. data/lib/command_handlers/models/r_color.rb +0 -32
  72. data/lib/command_handlers/models/r_font.rb +0 -60
  73. data/lib/command_handlers/models/r_runnable.rb +0 -11
  74. data/lib/command_handlers/models/r_shell.rb +0 -24
  75. data/lib/command_handlers/models/r_swt.rb +0 -18
  76. data/lib/command_handlers/models/r_tab_item_composite.rb +0 -31
  77. data/lib/command_handlers/models/r_widget.rb +0 -183
  78. data/lib/command_handlers/models/r_widget_listener.rb +0 -9
  79. data/lib/command_handlers/models/table_items_binding.rb +0 -43
  80. data/lib/command_handlers/models/tree_items_binding.rb +0 -47
  81. data/lib/command_handlers/models/widget_binding.rb +0 -27
  82. data/lib/command_handlers/shell_command_handler.rb +0 -15
  83. data/lib/command_handlers/tab_item_command_handler.rb +0 -19
  84. data/lib/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -23
  85. data/lib/command_handlers/table_items_data_binding_command_handler.rb +0 -28
  86. data/lib/command_handlers/tree_items_data_binding_command_handler.rb +0 -27
  87. data/lib/command_handlers/tree_properties_data_binding_command_handler.rb +0 -23
  88. data/lib/command_handlers/widget_command_handler.rb +0 -20
  89. data/lib/command_handlers/widget_listener_command_handler.rb +0 -37
  90. data/lib/command_handlers/widget_method_command_handler.rb +0 -19
  91. data/lib/parent.rb +0 -5
  92. data/lib/string.rb +0 -8
  93. data/lib/swt_packages.rb +0 -11
  94. data/lib/symbol.rb +0 -10
  95. data/lib/xml_command_handlers/html_command_handler.rb +0 -45
  96. data/lib/xml_command_handlers/models/depth_first_search_iterator.rb +0 -17
  97. data/lib/xml_command_handlers/models/name_space_visitor.rb +0 -18
  98. data/lib/xml_command_handlers/models/node.rb +0 -80
  99. data/lib/xml_command_handlers/models/node_visitor.rb +0 -9
  100. data/lib/xml_command_handlers/models/xml_visitor.rb +0 -59
  101. data/lib/xml_command_handlers/xml_command_handler.rb +0 -18
  102. data/lib/xml_command_handlers/xml_name_space_command_handler.rb +0 -31
  103. data/lib/xml_command_handlers/xml_tag_command_handler.rb +0 -23
  104. data/lib/xml_command_handlers/xml_text_command_handler.rb +0 -19
@@ -1,31 +0,0 @@
1
- require File.dirname(__FILE__) + "/r_widget_listener"
2
- require File.dirname(__FILE__) + "/r_runnable"
3
-
4
- class RTabItemComposite < RWidget
5
- include_package 'org.eclipse.swt.widgets'
6
-
7
- attr_reader :tab_item
8
- def initialize(tab_item, parent, style, &contents)
9
- super("composite", parent, style, &contents)
10
- @tab_item = tab_item
11
- @tab_item.widget.control = self.widget
12
- end
13
-
14
- def has_attribute?(attribute_name, *args)
15
- if attribute_name.to_s == "text"
16
- true
17
- else
18
- super(attribute_name, *args)
19
- end
20
- end
21
-
22
- def set_attribute(attribute_name, *args)
23
- if attribute_name.to_s == "text"
24
- text_value = args[0]
25
- @tab_item.widget.text = text_value
26
- else
27
- super(attribute_name, *args)
28
- end
29
- end
30
-
31
- end
@@ -1,183 +0,0 @@
1
- require_relative "r_widget_listener"
2
- require_relative "r_runnable"
3
- require_relative "r_color"
4
- require_relative "r_font"
5
- require_relative "r_swt"
6
-
7
- class RWidget
8
- include_package 'org.eclipse.swt'
9
- include_package 'org.eclipse.swt.widgets'
10
- include_package 'org.eclipse.swt.layout'
11
- include_package 'org.eclipse.swt.graphics'
12
- include Parent
13
-
14
- attr_reader :widget
15
-
16
- #TODO externalize
17
- @@default_styles = {
18
- "text" => RSwt[:border],
19
- "table" => RSwt[:border],
20
- "spinner" => RSwt[:border],
21
- "list" => RSwt[:border, :v_scroll],
22
- "button" => RSwt[:push],
23
- }
24
-
25
- #TODO externalize
26
- @@default_initializers = {
27
- "composite" => Proc.new {|composite| composite.setLayout(GridLayout.new) },
28
- "table" => Proc.new do |table|
29
- table.setHeaderVisible(true)
30
- table.setLinesVisible(true)
31
- end,
32
- "table_column" => Proc.new { |table_column| table_column.setWidth(80) },
33
- "group" => Proc.new {|group| group.setLayout(GridLayout.new) },
34
- }
35
-
36
- #styles is a comma separate list of symbols representing SWT styles in lower case
37
- def initialize(underscored_widget_name, parent, styles, &contents)
38
- @widget = underscored_widget_name.swt_widget.new(parent, style(underscored_widget_name, styles))
39
- @@default_initializers[underscored_widget_name].call(@widget) if @@default_initializers[underscored_widget_name]
40
- end
41
-
42
- def has_attribute?(attribute_name, *args)
43
- @widget.respond_to?(attribute_setter(attribute_name), args)
44
- end
45
-
46
- def set_attribute(attribute_name, *args)
47
- apply_property_type_converters(attribute_name, args)
48
- @widget.send(attribute_setter(attribute_name), *args)
49
- end
50
-
51
- def property_type_converters
52
- @property_type_converters ||= {
53
- :text => Proc.new { |value| value.to_s },
54
- :items => Proc.new { |value| value.to_java :string},
55
- :visible => Proc.new { |value| !!value},
56
- :font => Proc.new do |value|
57
- if value.is_a?(Hash)
58
- font_properties = value
59
- RFont.for(self).font(font_properties)
60
- else
61
- value
62
- end
63
- end,
64
- }
65
- end
66
-
67
- def apply_property_type_converters(attribute_name, args)
68
- if args.count == 1
69
- value = args.first
70
- converter = property_type_converters[attribute_name.to_sym]
71
- args[0] = converter.call(value) if converter
72
- end
73
- if args.count == 1 && args.first.is_a?(Symbol) && args.first.to_s.start_with?('color_')
74
- standard_color = args.first
75
- args[0] = RColor.for(widget.getDisplay, standard_color)
76
- elsif args.count == 1 && args.first.is_a?(RColor)
77
- r_color = args.first
78
- r_color.display = widget.display if r_color.display.nil? || r_color.display != widget.display
79
- args[0] = r_color.color
80
- end
81
- end
82
-
83
- def self.widget_exists?(underscored_widget_name)
84
- begin
85
- eval underscored_widget_name.camelcase(:upper)
86
- true
87
- rescue NameError
88
- false
89
- end
90
- end
91
-
92
- def widget_listener_exists?(underscored_listener_name)
93
- listener_method_name = underscored_listener_name.listener_method_name(:lower)
94
- @widget.getClass.getMethods.each do |widget_method|
95
- if widget_method.getName.match(/add.*Listener/)
96
- widget_method.getParameterTypes.each do |listener_type|
97
- listener_type.getMethods.each do |listener_method|
98
- if (listener_method.getName == listener_method_name)
99
- return true
100
- end
101
- end
102
- end
103
- end
104
- end
105
- return false
106
- end
107
-
108
- def can_add_listener?(underscored_listener_name)
109
- listener_method_name = underscored_listener_name.camelcase(:lower)
110
- @widget.getClass.getMethods.each do |widget_method|
111
- if widget_method.getName.match(/add.*Listener/)
112
- widget_method.getParameterTypes.each do |listener_type|
113
- listener_type.getMethods.each do |listener_method|
114
- if (listener_method.getName == listener_method_name)
115
- return true
116
- end
117
- end
118
- end
119
- end
120
- end
121
- return false
122
- end
123
-
124
- def add_listener(underscored_listener_name, &block)
125
- listener_method_name = underscored_listener_name.camelcase(:lower)
126
- @widget.getClass.getMethods.each do |widget_method|
127
- if widget_method.getName.match(/add.*Listener/)
128
- widget_method.getParameterTypes.each do |listener_type|
129
- listener_type.getMethods.each do |listener_method|
130
- if (listener_method.getName == listener_method_name)
131
- listener_class = Class.new(Object)
132
- listener_class.send :include, (eval listener_type.to_s.sub("interface", ""))
133
- listener = listener_class.new
134
- listener_type.getMethods.each do |t_method|
135
- eval "def listener.#{t_method.getName}(event) end"
136
- end
137
- def listener.block=(block)
138
- @block = block
139
- end
140
- listener.block=block
141
- eval "def listener.#{listener_method.getName}(event) @block.call(event) if @block end"
142
- @widget.send(widget_method.getName, listener)
143
- return RWidgetListener.new(listener)
144
- end
145
- end
146
- end
147
- end
148
- end
149
- end
150
-
151
- def process_block(block)
152
- block.call(@widget)
153
- end
154
-
155
- def async_exec(&block)
156
- @widget.getDisplay.asyncExec(RRunnable.new(&block))
157
- end
158
-
159
- def sync_exec(&block)
160
- @widget.getDisplay.syncExec(RRunnable.new(&block))
161
- end
162
-
163
- def has_style?(style)
164
- (widget.style & RSwt[style]) == RSwt[style]
165
- end
166
-
167
- private
168
-
169
- def style(underscored_widget_name, styles)
170
- styles.empty? ? default_style(underscored_widget_name) : RSwt[*styles]
171
- end
172
-
173
- def default_style(underscored_widget_name)
174
- style = @@default_styles[underscored_widget_name] if @@default_styles[underscored_widget_name]
175
- style = RSwt[:none] unless style
176
- style
177
- end
178
-
179
- def attribute_setter(attribute_name)
180
- "set#{attribute_name.to_s.camelcase(:upper)}"
181
- end
182
-
183
- end
@@ -1,9 +0,0 @@
1
- class RWidgetListener
2
-
3
- attr_reader :listener
4
-
5
- def initialize(listener)
6
- @listener = listener
7
- end
8
-
9
- end
@@ -1,43 +0,0 @@
1
- require_relative 'observable_array'
2
- require_relative 'observable_model'
3
- require_relative 'observable'
4
- require_relative 'observer'
5
-
6
- class TableItemsBinding
7
- include Glimmer
8
- include Observable
9
- include Observer
10
- include_package 'org.eclipse.swt'
11
- include_package 'org.eclipse.swt.widgets'
12
-
13
- def initialize(parent, model_binding, column_properties)
14
- @table = parent
15
- @model_binding = model_binding
16
- @column_properties = column_properties
17
- update(@model_binding.evaluate_property)
18
- model = model_binding.base_model
19
- observe(model, model_binding.property_name_expression)
20
- add_contents(@table) {
21
- on_widget_disposed { |dispose_event|
22
- unregister_all_observables
23
- }
24
- }
25
- end
26
- def update(model_collection=nil)
27
- if model_collection and model_collection.is_a?(Array)
28
- observe(model_collection, @column_properties)
29
- @model_collection = model_collection
30
- end
31
- populate_table(@model_collection, @table, @column_properties)
32
- end
33
- def populate_table(model_collection, parent, column_properties)
34
- parent.widget.removeAll
35
- model_collection.each do |model|
36
- table_item = TableItem.new(parent.widget, RSwt[:none])
37
- for index in 0..(column_properties.size-1)
38
- table_item.setText(index, model.send(column_properties[index]).to_s)
39
- end
40
- end
41
- end
42
-
43
- end
@@ -1,47 +0,0 @@
1
- require_relative 'observable_array'
2
- require_relative 'observable_model'
3
- require_relative 'observable'
4
- require_relative 'observer'
5
-
6
- class TreeItemsBinding
7
- include Glimmer
8
- include Observable
9
- include Observer
10
- include_package 'org.eclipse.swt'
11
- include_package 'org.eclipse.swt.widgets'
12
-
13
- def initialize(parent, model_binding, tree_properties)
14
- @tree = parent
15
- @model_binding = model_binding
16
- @tree_properties = [tree_properties].flatten.first.to_h
17
- update(@model_binding.evaluate_property)
18
- model = model_binding.base_model
19
- observe(model, model_binding.property_name_expression)
20
- add_contents(@tree) {
21
- on_widget_disposed { |dispose_event|
22
- unregister_all_observables
23
- }
24
- }
25
- end
26
- def update(model_tree_root_node=nil)
27
- if model_tree_root_node and model_tree_root_node.respond_to?(@tree_properties[:children])
28
- observe(model_tree_root_node, @tree_properties[:text])
29
- observe(model_tree_root_node, @tree_properties[:children])
30
- @model_tree_root_node = model_tree_root_node
31
- end
32
- populate_tree(@model_tree_root_node, @tree, @tree_properties)
33
- end
34
- def populate_tree(model_tree_root_node, parent, tree_properties)
35
- parent.widget.removeAll
36
- populate_tree_node(model_tree_root_node, parent.widget, tree_properties)
37
- end
38
- def populate_tree_node(model_tree_node, parent, tree_properties)
39
- table_item = TreeItem.new(parent, RSwt[:none])
40
- table_item.setText((model_tree_node && model_tree_node.send(tree_properties[:text])).to_s)
41
- [model_tree_node && model_tree_node.send(tree_properties[:children])].flatten.to_a.compact.each do |child|
42
- observe(child, @tree_properties[:text])
43
- populate_tree_node(child, table_item, tree_properties)
44
- end
45
- end
46
-
47
- end
@@ -1,27 +0,0 @@
1
- require_relative 'observable'
2
- require_relative 'observer'
3
-
4
- class WidgetBinding
5
- include Glimmer
6
- include Observable
7
- include Observer
8
-
9
- attr_reader :widget, :property
10
- def initialize(model, property, translator = nil)
11
- @widget = model
12
- @property = property
13
- @translator = translator || proc {|value| value}
14
- add_contents(@widget) {
15
- on_widget_disposed { |dispose_event|
16
- unregister_all_observables
17
- }
18
- }
19
- end
20
- def update(value)
21
- converted_value = translated_value = @translator.call(value)
22
- @widget.set_attribute(@property, converted_value) unless evaluate_property == converted_value
23
- end
24
- def evaluate_property
25
- @widget.widget.send(@property)
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/r_shell"
3
-
4
- class ShellCommandHandler
5
- include CommandHandler
6
-
7
- def can_handle?(parent, command_symbol, *args, &block)
8
- command_symbol.to_s == "shell"
9
- end
10
-
11
- def do_handle(parent, command_symbol, *args, &block)
12
- RShell.send(:new, *args)
13
- end
14
-
15
- end
@@ -1,19 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/r_shell"
3
- require File.dirname(__FILE__) + "/models/r_tab_item_composite"
4
-
5
- class TabItemCommandHandler
6
- include CommandHandler
7
- include Glimmer
8
-
9
- def can_handle?(parent, command_symbol, *args, &block)
10
- parent.is_a?(RWidget) and
11
- command_symbol.to_s == "tab_item"
12
- end
13
-
14
- def do_handle(parent, command_symbol, *args, &block)
15
- tab_item = RWidget.new(command_symbol.to_s, parent.widget, args)
16
- RTabItemComposite.new(tab_item, parent.widget, args)
17
- end
18
-
19
- end
@@ -1,23 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/r_widget"
3
-
4
- # Responsible for providing a readable keyword (command symbol) to capture
5
- # and return column properties for use in TreeItemsDataBindingCommandHandler
6
- class TableColumnPropertiesDataBindingCommandHandler
7
- include CommandHandler
8
-
9
- include_package 'org.eclipse.swt'
10
- include_package 'org.eclipse.swt.widgets'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- parent.is_a?(RWidget) and
14
- parent.widget.is_a?(Table) and
15
- command_symbol.to_s == "column_properties" and
16
- block == nil
17
- end
18
-
19
- def do_handle(parent, command_symbol, *args, &block)
20
- args
21
- end
22
-
23
- end
@@ -1,28 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/r_widget"
3
- require File.dirname(__FILE__) + "/models/table_items_binding"
4
-
5
- #Depends on BindCommandHandler and TableColumnPropertiesDataBindingCommandHandler
6
- class TableItemsDataBindingCommandHandler
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?(RWidget) and
13
- parent.widget.is_a?(Table) 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) and
19
- block == nil
20
- end
21
-
22
- def do_handle(parent, command_symbol, *args, &block)
23
- model_binding = args[0]
24
- column_properties = args[1]
25
- TableItemsBinding.new(parent, model_binding, column_properties)
26
- end
27
-
28
- end
@@ -1,27 +0,0 @@
1
- require File.dirname(__FILE__) + "/../command_handler"
2
- require File.dirname(__FILE__) + "/models/r_widget"
3
- require File.dirname(__FILE__) + "/models/tree_items_binding"
4
-
5
- class TreeItemsDataBindingCommandHandler
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?(RWidget)) and
12
- (parent.widget.is_a?(Tree)) and
13
- (command_symbol.to_s == "items") and
14
- (args.size == 2) and
15
- (args[0].is_a?(ModelBinding)) and
16
- (!args[0].evaluate_property.is_a?(Array)) and
17
- (args[1].is_a?(Array) && !args[1].empty? && args[1].first.is_a?(Hash)) and
18
- (block == nil)
19
- end
20
-
21
- def do_handle(parent, command_symbol, *args, &block)
22
- model_binding = args[0]
23
- tree_properties = args[1]
24
- TreeItemsBinding.new(parent, model_binding, tree_properties)
25
- end
26
-
27
- end