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.
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