glimmer 0.4.3 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +109 -2
  3. data/bin/girb +4 -2
  4. data/bin/glimmer +3 -2
  5. data/lib/glimmer.rb +6 -3
  6. data/lib/glimmer/command_handlers.rb +37 -34
  7. data/lib/glimmer/ext/module.rb +20 -0
  8. data/lib/glimmer/launcher.rb +75 -0
  9. data/lib/glimmer/swt/command_handlers/bind_command_handler.rb +55 -0
  10. data/lib/glimmer/swt/command_handlers/color_command_handler.rb +30 -0
  11. data/lib/glimmer/swt/command_handlers/combo_selection_data_binding_command_handler.rb +43 -0
  12. data/lib/glimmer/swt/command_handlers/custom_widget_command_handler.rb +24 -0
  13. data/lib/glimmer/swt/command_handlers/data_binding_command_handler.rb +72 -0
  14. data/lib/glimmer/swt/command_handlers/display_command_handler.rb +20 -0
  15. data/lib/glimmer/swt/command_handlers/layout_command_handler.rb +27 -0
  16. data/lib/glimmer/swt/command_handlers/layout_data_command_handler.rb +26 -0
  17. data/lib/glimmer/swt/command_handlers/list_selection_data_binding_command_handler.rb +48 -0
  18. data/lib/glimmer/swt/command_handlers/property_command_handler.rb +24 -0
  19. data/lib/glimmer/swt/command_handlers/shell_command_handler.rb +20 -0
  20. data/lib/glimmer/swt/command_handlers/tab_item_command_handler.rb +24 -0
  21. data/lib/glimmer/swt/command_handlers/table_column_properties_data_binding_command_handler.rb +28 -0
  22. data/lib/glimmer/swt/command_handlers/table_items_data_binding_command_handler.rb +33 -0
  23. data/lib/glimmer/swt/command_handlers/tree_items_data_binding_command_handler.rb +32 -0
  24. data/lib/glimmer/swt/command_handlers/tree_properties_data_binding_command_handler.rb +28 -0
  25. data/lib/glimmer/swt/command_handlers/widget_command_handler.rb +26 -0
  26. data/lib/glimmer/swt/command_handlers/widget_listener_command_handler.rb +43 -0
  27. data/lib/glimmer/swt/custom_widget.rb +91 -0
  28. data/lib/glimmer/swt/g_color.rb +39 -0
  29. data/lib/glimmer/swt/g_display.rb +28 -0
  30. data/lib/glimmer/swt/g_font.rb +75 -0
  31. data/lib/glimmer/swt/g_layout.rb +72 -0
  32. data/lib/glimmer/swt/g_layout_data.rb +56 -0
  33. data/lib/glimmer/swt/g_runnable.rb +15 -0
  34. data/lib/glimmer/swt/g_shell.rb +50 -0
  35. data/lib/glimmer/swt/g_swt.rb +65 -0
  36. data/lib/glimmer/swt/g_tab_item_composite.rb +34 -0
  37. data/lib/glimmer/swt/g_widget.rb +213 -0
  38. data/lib/glimmer/swt/g_widget_listener.rb +12 -0
  39. data/lib/glimmer/swt/list_selection_binding.rb +49 -0
  40. data/lib/glimmer/swt/model_binding.rb +208 -0
  41. data/lib/glimmer/swt/observable.rb +13 -0
  42. data/lib/glimmer/swt/observable_array.rb +105 -0
  43. data/lib/glimmer/swt/observable_model.rb +107 -0
  44. data/lib/glimmer/swt/observer.rb +117 -0
  45. data/lib/glimmer/swt/proc_tracker.rb +16 -0
  46. data/lib/glimmer/swt/table_items_binding.rb +47 -0
  47. data/lib/glimmer/swt/tree_items_binding.rb +51 -0
  48. data/lib/glimmer/swt/widget_binding.rb +31 -0
  49. data/lib/glimmer/xml/command_handlers/html_command_handler.rb +50 -0
  50. data/lib/glimmer/xml/command_handlers/xml_command_handler.rb +23 -0
  51. data/lib/glimmer/xml/command_handlers/xml_name_space_command_handler.rb +36 -0
  52. data/lib/glimmer/xml/command_handlers/xml_tag_command_handler.rb +28 -0
  53. data/lib/glimmer/xml/command_handlers/xml_text_command_handler.rb +24 -0
  54. data/lib/glimmer/xml/depth_first_search_iterator.rb +20 -0
  55. data/lib/glimmer/xml/name_space_visitor.rb +21 -0
  56. data/lib/glimmer/xml/node.rb +84 -0
  57. data/lib/glimmer/xml/node_visitor.rb +13 -0
  58. data/lib/glimmer/xml/xml_visitor.rb +63 -0
  59. data/lib/glimmer/xml_command_handlers.rb +11 -10
  60. metadata +68 -50
  61. data/lib/glimmer/command_handlers/bind_command_handler.rb +0 -51
  62. data/lib/glimmer/command_handlers/color_command_handler.rb +0 -26
  63. data/lib/glimmer/command_handlers/combo_selection_data_binding_command_handler.rb +0 -40
  64. data/lib/glimmer/command_handlers/data_binding_command_handler.rb +0 -69
  65. data/lib/glimmer/command_handlers/display_command_handler.rb +0 -16
  66. data/lib/glimmer/command_handlers/layout_command_handler.rb +0 -23
  67. data/lib/glimmer/command_handlers/layout_data_command_handler.rb +0 -22
  68. data/lib/glimmer/command_handlers/list_selection_data_binding_command_handler.rb +0 -45
  69. data/lib/glimmer/command_handlers/models/g_color.rb +0 -34
  70. data/lib/glimmer/command_handlers/models/g_display.rb +0 -26
  71. data/lib/glimmer/command_handlers/models/g_font.rb +0 -73
  72. data/lib/glimmer/command_handlers/models/g_layout.rb +0 -71
  73. data/lib/glimmer/command_handlers/models/g_layout_data.rb +0 -55
  74. data/lib/glimmer/command_handlers/models/g_runnable.rb +0 -13
  75. data/lib/glimmer/command_handlers/models/g_shell.rb +0 -49
  76. data/lib/glimmer/command_handlers/models/g_swt.rb +0 -63
  77. data/lib/glimmer/command_handlers/models/g_tab_item_composite.rb +0 -33
  78. data/lib/glimmer/command_handlers/models/g_widget.rb +0 -214
  79. data/lib/glimmer/command_handlers/models/g_widget_listener.rb +0 -11
  80. data/lib/glimmer/command_handlers/models/list_selection_binding.rb +0 -47
  81. data/lib/glimmer/command_handlers/models/model_binding.rb +0 -206
  82. data/lib/glimmer/command_handlers/models/observable.rb +0 -11
  83. data/lib/glimmer/command_handlers/models/observable_array.rb +0 -104
  84. data/lib/glimmer/command_handlers/models/observable_model.rb +0 -105
  85. data/lib/glimmer/command_handlers/models/observer.rb +0 -115
  86. data/lib/glimmer/command_handlers/models/table_items_binding.rb +0 -45
  87. data/lib/glimmer/command_handlers/models/tree_items_binding.rb +0 -49
  88. data/lib/glimmer/command_handlers/models/widget_binding.rb +0 -29
  89. data/lib/glimmer/command_handlers/property_command_handler.rb +0 -21
  90. data/lib/glimmer/command_handlers/shell_command_handler.rb +0 -17
  91. data/lib/glimmer/command_handlers/tab_item_command_handler.rb +0 -21
  92. data/lib/glimmer/command_handlers/table_column_properties_data_binding_command_handler.rb +0 -25
  93. data/lib/glimmer/command_handlers/table_items_data_binding_command_handler.rb +0 -30
  94. data/lib/glimmer/command_handlers/tree_items_data_binding_command_handler.rb +0 -29
  95. data/lib/glimmer/command_handlers/tree_properties_data_binding_command_handler.rb +0 -25
  96. data/lib/glimmer/command_handlers/widget_command_handler.rb +0 -22
  97. data/lib/glimmer/command_handlers/widget_listener_command_handler.rb +0 -39
  98. data/lib/glimmer/xml_command_handlers/html_command_handler.rb +0 -47
  99. data/lib/glimmer/xml_command_handlers/models/depth_first_search_iterator.rb +0 -19
  100. data/lib/glimmer/xml_command_handlers/models/name_space_visitor.rb +0 -20
  101. data/lib/glimmer/xml_command_handlers/models/node.rb +0 -82
  102. data/lib/glimmer/xml_command_handlers/models/node_visitor.rb +0 -11
  103. data/lib/glimmer/xml_command_handlers/models/xml_visitor.rb +0 -61
  104. data/lib/glimmer/xml_command_handlers/xml_command_handler.rb +0 -20
  105. data/lib/glimmer/xml_command_handlers/xml_name_space_command_handler.rb +0 -33
  106. data/lib/glimmer/xml_command_handlers/xml_tag_command_handler.rb +0 -25
  107. data/lib/glimmer/xml_command_handlers/xml_text_command_handler.rb +0 -21
  108. data/lib/glimmer_application.rb +0 -65
@@ -0,0 +1,43 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ class ComboSelectionDataBindingCommandHandler
8
+ include CommandHandler
9
+ include Glimmer
10
+
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?(Combo) and
16
+ command_symbol.to_s == "selection" and
17
+ args.size == 1 and
18
+ args[0].is_a?(ModelBinding) and
19
+ args[0].evaluate_options_property.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
+ widget_binding = WidgetBinding.new(parent, "items")
26
+ widget_binding.call(model_binding.evaluate_options_property)
27
+ model = model_binding.base_model
28
+ widget_binding.observe(model, model_binding.options_property_name)
29
+
30
+ widget_binding = WidgetBinding.new(parent, "text")
31
+ widget_binding.call(model_binding.evaluate_property)
32
+ widget_binding.observe(model, model_binding.property_name_expression)
33
+
34
+ add_contents(parent) {
35
+ on_widget_selected {
36
+ model_binding.call(widget_binding.evaluate_property)
37
+ }
38
+ }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../custom_widget"
3
+ require File.dirname(__FILE__) + "/../g_widget"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ class CustomWidgetCommandHandler
9
+ include CommandHandler
10
+
11
+ def can_handle?(parent, command_symbol, *args, &block)
12
+ (parent.is_a?(GWidget) || parent.is_a?(SWT::CustomWidget)) and
13
+ SWT::CustomWidget.for(command_symbol)
14
+ end
15
+
16
+ def do_handle(parent, command_symbol, *args, &block)
17
+ options = args.pop if args.last.is_a?(Hash)
18
+ Glimmer.logger.debug "Custom widget #{command_symbol} styles are: [" + args.inspect + "] and options are: #{options}"
19
+ SWT::CustomWidget.for(command_symbol).new(parent, *args, options, &block)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,72 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../observable_model"
4
+ require File.dirname(__FILE__) + "/../model_binding"
5
+ require File.dirname(__FILE__) + "/../widget_binding"
6
+
7
+ module Glimmer
8
+ module SWT
9
+ module CommandHandlers
10
+ # Responsible for wiring two-way data-binding for text and selection properties
11
+ # on Text, Button, and Spinner widgets.
12
+ # Does so by using the output of the bind(model, property) command in the form
13
+ # of a ModelBinding, which is then connected to an anonymous widget observer
14
+ # (aka widget_data_binder as per widget_data_binders array)
15
+ #
16
+ # Depends on BindCommandHandler
17
+ class DataBindingCommandHandler
18
+ extend Glimmer
19
+ include CommandHandler
20
+
21
+ include_package 'org.eclipse.swt.widgets'
22
+
23
+ @@widget_data_binders = {
24
+ Java::OrgEclipseSwtWidgets::Text => {
25
+ :text => Proc.new do |g_widget, model_binding|
26
+ add_contents(g_widget) {
27
+ on_modify_text { |modify_event|
28
+ model_binding.call(g_widget.widget.getText)
29
+ }
30
+ }
31
+ end,
32
+ },
33
+ Java::OrgEclipseSwtWidgets::Button => {
34
+ :selection => Proc.new do |g_widget, model_binding|
35
+ add_contents(g_widget) {
36
+ on_widget_selected { |selection_event|
37
+ model_binding.call(g_widget.widget.getSelection)
38
+ }
39
+ }
40
+ end
41
+ },
42
+ Java::OrgEclipseSwtWidgets::Spinner => {
43
+ :selection => Proc.new do |g_widget, model_binding|
44
+ add_contents(g_widget) {
45
+ on_widget_selected { |selection_event|
46
+ model_binding.call(g_widget.widget.getSelection)
47
+ }
48
+ }
49
+ end
50
+ }
51
+ }
52
+
53
+ def can_handle?(parent, command_symbol, *args, &block)
54
+ (parent.is_a?(GWidget) and
55
+ args.size == 1 and
56
+ args[0].is_a?(ModelBinding))
57
+ end
58
+
59
+ def do_handle(parent, command_symbol, *args, &block)
60
+ model_binding = args[0]
61
+ widget_binding_parameters = [parent, command_symbol.to_s]
62
+ widget_binding = WidgetBinding.new(*widget_binding_parameters)
63
+ widget_binding.call(model_binding.evaluate_property)
64
+ widget_binding.observe(model_binding)
65
+ widget_data_binder_map = @@widget_data_binders[parent.widget.class]
66
+ widget_data_binder = widget_data_binder_map[command_symbol.to_s.to_sym] if widget_data_binder_map
67
+ widget_data_binder.call(parent, model_binding) if widget_data_binder
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_display"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ class DisplayCommandHandler
8
+ include CommandHandler
9
+
10
+ def can_handle?(parent, command_symbol, *args, &block)
11
+ command_symbol.to_s == "display"
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ GDisplay.instance(*args)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_layout"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ class LayoutCommandHandler
8
+ include CommandHandler
9
+
10
+ include_package 'org.eclipse.swt.widgets'
11
+ include_package 'org.eclipse.swt.layout'
12
+
13
+ def can_handle?(parent, command_symbol, *args, &block)
14
+ parent.is_a?(GWidget) and
15
+ parent.widget.is_a?(Composite) and
16
+ command_symbol.to_s.end_with?('_layout') and
17
+ GLayout.layout_exists?(command_symbol.to_s)
18
+ end
19
+
20
+ def do_handle(parent, command_symbol, *args, &block)
21
+ Glimmer.logger.debug "Layout #{command_symbol} args are: #{args.inspect}"
22
+ GLayout.new(command_symbol.to_s, parent.widget, args)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../g_layout_data"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ class LayoutDataCommandHandler
9
+ include CommandHandler
10
+
11
+ include_package 'org.eclipse.swt.widgets'
12
+ include_package 'org.eclipse.swt.layout'
13
+
14
+ def can_handle?(parent, command_symbol, *args, &block)
15
+ parent.is_a?(GWidget) and
16
+ command_symbol.to_s == 'layout_data'
17
+ end
18
+
19
+ def do_handle(parent, command_symbol, *args, &block)
20
+ Glimmer.logger.debug "Layout Data args are: #{args.inspect}"
21
+ GLayoutData.new(parent.widget, args)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,48 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../list_selection_binding"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ class ListSelectionDataBindingCommandHandler
9
+ include CommandHandler
10
+ include Glimmer
11
+
12
+ include_package 'org.eclipse.swt.widgets'
13
+
14
+ def can_handle?(parent, command_symbol, *args, &block)
15
+ parent.is_a?(GWidget) and
16
+ parent.widget.is_a?(List) and
17
+ command_symbol.to_s == "selection" and
18
+ args.size == 1 and
19
+ args[0].is_a?(ModelBinding) and
20
+ args[0].evaluate_options_property.is_a?(Array) and
21
+ block == nil
22
+ end
23
+
24
+ def do_handle(parent, command_symbol, *args, &block)
25
+ model_binding = args[0]
26
+ widget_binding = WidgetBinding.new(parent, "items")
27
+ widget_binding.call(model_binding.evaluate_options_property)
28
+ model = model_binding.base_model
29
+ #TODO make this options observer dependent and all similar observers in widget specific data binding handlers
30
+ widget_binding.observe(model, model_binding.options_property_name)
31
+
32
+ property_type = :string
33
+ property_type = :array if parent.has_style?(:multi)
34
+ list_selection_binding = ListSelectionBinding.new(parent, property_type)
35
+ list_selection_binding.call(model_binding.evaluate_property)
36
+ #TODO check if nested data binding works for list widget and other widgets that need custom data binding
37
+ list_selection_binding.observe(model, model_binding.property_name_expression)
38
+
39
+ add_contents(parent) {
40
+ on_widget_selected {
41
+ model_binding.call(list_selection_binding.evaluate_property)
42
+ }
43
+ }
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+
3
+ module Glimmer
4
+ module SWT
5
+ module CommandHandlers
6
+ class PropertyCommandHandler
7
+ include CommandHandler
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ parent.respond_to?(:set_attribute) and
11
+ parent.respond_to?(:has_attribute?) and
12
+ args.size > 0 and
13
+ block == nil and
14
+ parent.has_attribute?(command_symbol, *args)
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ parent.set_attribute(command_symbol, *args)
19
+ nil
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_shell"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ class ShellCommandHandler
8
+ include CommandHandler
9
+
10
+ def can_handle?(parent, command_symbol, *args, &block)
11
+ command_symbol.to_s == "shell"
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ GShell.send(:new, *args)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_shell"
3
+ require File.dirname(__FILE__) + "/../g_tab_item_composite"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ class TabItemCommandHandler
9
+ include CommandHandler
10
+ include Glimmer
11
+
12
+ def can_handle?(parent, command_symbol, *args, &block)
13
+ parent.is_a?(GWidget) and
14
+ command_symbol.to_s == "tab_item"
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ tab_item = GWidget.new(command_symbol.to_s, parent.widget, args)
19
+ GTabItemComposite.new(tab_item, parent.widget, args)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ # Responsible for providing a readable keyword (command symbol) to capture
8
+ # and return column properties for use in TreeItemsDataBindingCommandHandler
9
+ class TableColumnPropertiesDataBindingCommandHandler
10
+ include CommandHandler
11
+
12
+ include_package 'org.eclipse.swt'
13
+ include_package 'org.eclipse.swt.widgets'
14
+
15
+ def can_handle?(parent, command_symbol, *args, &block)
16
+ parent.is_a?(GWidget) and
17
+ parent.widget.is_a?(Table) and
18
+ command_symbol.to_s == "column_properties" and
19
+ block == nil
20
+ end
21
+
22
+ def do_handle(parent, command_symbol, *args, &block)
23
+ args
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../table_items_binding"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ #Depends on BindCommandHandler and TableColumnPropertiesDataBindingCommandHandler
9
+ class TableItemsDataBindingCommandHandler
10
+ include CommandHandler
11
+
12
+ include_package 'org.eclipse.swt.widgets'
13
+
14
+ def can_handle?(parent, command_symbol, *args, &block)
15
+ parent.is_a?(GWidget) and
16
+ parent.widget.is_a?(Table) and
17
+ command_symbol.to_s == "items" and
18
+ args.size == 2 and
19
+ args[0].is_a?(ModelBinding) and
20
+ args[0].evaluate_property.is_a?(Array) and
21
+ args[1].is_a?(Array) and
22
+ block == nil
23
+ end
24
+
25
+ def do_handle(parent, command_symbol, *args, &block)
26
+ model_binding = args[0]
27
+ column_properties = args[1]
28
+ TableItemsBinding.new(parent, model_binding, column_properties)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+ require File.dirname(__FILE__) + "/../tree_items_binding"
4
+
5
+ module Glimmer
6
+ module SWT
7
+ module CommandHandlers
8
+ class TreeItemsDataBindingCommandHandler
9
+ include CommandHandler
10
+
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 == "items") and
17
+ (args.size == 2) and
18
+ (args[0].is_a?(ModelBinding)) and
19
+ (!args[0].evaluate_property.is_a?(Array)) and
20
+ (args[1].is_a?(Array) && !args[1].empty? && args[1].first.is_a?(Hash)) and
21
+ (block == nil)
22
+ end
23
+
24
+ def do_handle(parent, command_symbol, *args, &block)
25
+ model_binding = args[0]
26
+ tree_properties = args[1]
27
+ TreeItemsBinding.new(parent, model_binding, tree_properties)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + "/../../command_handler"
2
+ require File.dirname(__FILE__) + "/../g_widget"
3
+
4
+ module Glimmer
5
+ module SWT
6
+ module CommandHandlers
7
+ # Responsible for providing a readable keyword (command symbol) to capture
8
+ # and return tree properties for use in TreeItemsDataBindingCommandHandler
9
+ class TreePropertiesDataBindingCommandHandler
10
+ include CommandHandler
11
+
12
+ include_package 'org.eclipse.swt'
13
+ include_package 'org.eclipse.swt.widgets'
14
+
15
+ def can_handle?(parent, command_symbol, *args, &block)
16
+ parent.is_a?(GWidget) and
17
+ parent.widget.is_a?(Tree) and
18
+ command_symbol.to_s == "tree_properties" and
19
+ block == nil
20
+ end
21
+
22
+ def do_handle(parent, command_symbol, *args, &block)
23
+ args
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end