glimmer 0.1.0.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. data/.rvmrc +1 -0
  2. data/Gemfile +9 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.markdown +54 -0
  5. data/Rakefile +54 -0
  6. data/VERSION +1 -0
  7. data/bin/glimmer +132 -0
  8. data/glimmer.gemspec +145 -0
  9. data/images/Bitter-sweet.jpg +0 -0
  10. data/{src → lib}/command_handler.rb +7 -10
  11. data/{src → lib}/command_handler_chain_factory.rb +29 -22
  12. data/{src → lib}/command_handler_chain_link.rb +19 -22
  13. data/{src → lib}/command_handlers.rb +29 -26
  14. data/{src → lib}/command_handlers/bind_command_handler.rb +25 -28
  15. data/lib/command_handlers/combo_selection_data_binding_command_handler.rb +39 -0
  16. data/{src → lib}/command_handlers/data_binding_command_handler.rb +61 -64
  17. data/lib/command_handlers/list_selection_data_binding_command_handler.rb +42 -0
  18. data/lib/command_handlers/models/list_observer.rb +31 -0
  19. data/{src → lib}/command_handlers/models/model_observer.rb +28 -25
  20. data/{src → lib}/command_handlers/models/observable_array.rb +53 -46
  21. data/lib/command_handlers/models/observable_model.rb +61 -0
  22. data/{src → lib}/command_handlers/models/r_runnable.rb +11 -14
  23. data/{src → lib}/command_handlers/models/r_shell.rb +23 -26
  24. data/lib/command_handlers/models/r_tab_item_composite.rb +25 -0
  25. data/{src → lib}/command_handlers/models/r_widget.rb +16 -14
  26. data/lib/command_handlers/models/r_widget_listener.rb +9 -0
  27. data/{src → lib}/command_handlers/models/r_widget_packages.rb +5 -8
  28. data/{src → lib}/command_handlers/models/table_items_updater.rb +38 -39
  29. data/{src → lib}/command_handlers/models/widget_observer.rb +4 -6
  30. data/{src → lib}/command_handlers/shell_command_handler.rb +14 -17
  31. data/{src → lib}/command_handlers/swt_constant_command_handler.rb +18 -21
  32. data/lib/command_handlers/tab_item_command_handler.rb +22 -0
  33. data/{src → lib}/command_handlers/table_column_properties_data_binding_command_handler.rb +20 -23
  34. data/{src → lib}/command_handlers/table_items_data_binding_command_handler.rb +26 -29
  35. data/{src → lib}/command_handlers/widget_command_handler.rb +22 -25
  36. data/{src → lib}/command_handlers/widget_listener_command_handler.rb +36 -34
  37. data/{src → lib}/command_handlers/widget_method_command_handler.rb +18 -21
  38. data/{src → lib}/glimmer.rb +52 -45
  39. data/lib/parent.rb +5 -0
  40. data/{src → lib}/shine.rb +21 -24
  41. data/{src → lib}/xml_command_handlers.rb +15 -18
  42. data/{src → lib}/xml_command_handlers/html_command_handler.rb +45 -49
  43. data/{src → lib}/xml_command_handlers/models/depth_first_search_iterator.rb +17 -20
  44. data/{src → lib}/xml_command_handlers/models/name_space_visitor.rb +17 -20
  45. data/{src → lib}/xml_command_handlers/models/node.rb +80 -83
  46. data/{src → lib}/xml_command_handlers/models/node_visitor.rb +8 -11
  47. data/{src → lib}/xml_command_handlers/models/xml_visitor.rb +58 -61
  48. data/{src → lib}/xml_command_handlers/xml_command_handler.rb +18 -22
  49. data/{src → lib}/xml_command_handlers/xml_name_space_command_handler.rb +31 -34
  50. data/{src → lib}/xml_command_handlers/xml_tag_command_handler.rb +23 -26
  51. data/{src → lib}/xml_command_handlers/xml_text_command_handler.rb +19 -22
  52. data/samples/contactmanager/contact.rb +0 -3
  53. data/samples/contactmanager/contact_manager.rb +1 -4
  54. data/samples/contactmanager/contact_manager_presenter.rb +0 -3
  55. data/samples/contactmanager/contact_repository.rb +0 -3
  56. data/samples/hello_combo.rb +32 -0
  57. data/samples/hello_world.rb +1 -4
  58. data/samples/login.rb +1 -4
  59. data/samples/tictactoe/tic_tac_toe.rb +2 -5
  60. data/samples/tictactoe/tic_tac_toe_board.rb +0 -3
  61. data/test/glimmer_combo_data_binding_test.rb +131 -0
  62. data/test/glimmer_constant_test.rb +6 -11
  63. data/test/glimmer_data_binding_test.rb +16 -16
  64. data/test/glimmer_list_data_binding_test.rb +223 -0
  65. data/test/glimmer_listeners_test.rb +6 -6
  66. data/test/glimmer_shine_data_binding_test.rb +7 -6
  67. data/test/glimmer_tab_item_test.rb +61 -0
  68. data/test/glimmer_table_data_binding_test.rb +7 -20
  69. data/test/glimmer_test.rb +18 -13
  70. data/test/helper.rb +21 -0
  71. data/test/observable_model_test.rb +2 -4
  72. data/test/r_widget_test.rb +5 -5
  73. data/test/samples/contactmanager/contact_manager_presenter_test.rb +1 -4
  74. data/test/samples/tictactoe/tic_tac_toe_test.rb +1 -4
  75. data/test/xml/glimmer_xml_test.rb +43 -43
  76. metadata +210 -105
  77. data/COPYING.LGPL +0 -504
  78. data/README +0 -27
  79. data/src/command_handlers/models/observable_model.rb +0 -35
  80. data/src/command_handlers/models/r_widget_listener.rb +0 -12
  81. data/src/parent.rb +0 -8
  82. data/src/swt.rb +0 -10
  83. data/src/xml.rb +0 -10
@@ -1,10 +1,8 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  class WidgetObserver
5
2
  attr_reader :widget, :property
6
3
  @@property_type_converters = {
7
- :text => Proc.new { |value| value.to_s }
4
+ :text => Proc.new { |value| value.to_s },
5
+ :items => Proc.new { |value| value.to_java :string}
8
6
  }
9
7
  def initialize model, property
10
8
  @widget = model
@@ -14,10 +12,10 @@ class WidgetObserver
14
12
  converted_value = value
15
13
  converter = @@property_type_converters[@property.to_sym]
16
14
  converted_value = converter.call(value) if converter
17
- @widget.widget.send "set" + @property.camelcase(true), converted_value unless evaluate_property == converted_value
15
+ @widget.widget.send("set#{@property.camelcase(:upper)}", converted_value) unless evaluate_property == converted_value
18
16
  end
19
17
  def evaluate_property
20
- @widget.widget.send("get" + @property.camelcase(true))
18
+ @widget.widget.send(@property)
21
19
  end
22
20
  end
23
21
 
@@ -1,18 +1,15 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_shell"
6
-
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
- RShell.send(:new, *args)
16
- end
17
-
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
+
18
15
  end
@@ -1,22 +1,19 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class SwtConstantCommandHandler
8
- include CommandHandler
9
-
10
- include_package 'org.eclipse.swt'
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- args.size == 0 and
14
- block == nil
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- puts 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
19
- eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
20
- end
21
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class SwtConstantCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ args.size == 0 and
11
+ block == nil
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ puts 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
16
+ eval 'org.eclipse.swt.SWT::' + command_symbol.to_s.upcase
17
+ end
18
+
22
19
  end
@@ -0,0 +1,22 @@
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" and
12
+ (args.size == 0 or
13
+ (args.size == 1 and args[0].is_a?(Fixnum)))
14
+ end
15
+
16
+ def do_handle(parent, command_symbol, *args, &block)
17
+ style = args[0] if args.size == 1
18
+ tab_item = RWidget.new(command_symbol.to_s, parent.widget, style)
19
+ RTabItemComposite.new(tab_item, parent.widget, style)
20
+ end
21
+
22
+ end
@@ -1,24 +1,21 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
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?(RWidget) 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
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class TableColumnPropertiesDataBindingCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt'
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?(Table) and
13
+ command_symbol.to_s == "column_properties" and
14
+ block == nil
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ args
19
+ end
20
+
24
21
  end
@@ -1,30 +1,27 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
- require File.dirname(__FILE__) + "/models/table_items_updater"
7
-
8
- class TableItemsDataBindingCommandHandler
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?(RWidget) and
15
- parent.widget.is_a?(Table) and
16
- command_symbol.to_s == "items" and
17
- args.size == 2 and
18
- args[0].is_a?(ModelObserver) and
19
- args[0].evaluate_property.is_a?(Array) and
20
- args[1].is_a?(Array) and
21
- block == nil
22
- end
23
-
24
- def do_handle(parent, command_symbol, *args, &block)
25
- model_observer = args[0]
26
- column_properties = args[1]
27
- TableItemsUpdater.new(parent, model_observer, column_properties)
28
- end
29
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+ require File.dirname(__FILE__) + "/models/table_items_updater"
4
+
5
+ class TableItemsDataBindingCommandHandler
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?(Table) and
13
+ command_symbol.to_s == "items" and
14
+ args.size == 2 and
15
+ args[0].is_a?(ModelObserver) and
16
+ args[0].evaluate_property.is_a?(Array) and
17
+ args[1].is_a?(Array) and
18
+ block == nil
19
+ end
20
+
21
+ def do_handle(parent, command_symbol, *args, &block)
22
+ model_observer = args[0]
23
+ column_properties = args[1]
24
+ TableItemsUpdater.new(parent, model_observer, column_properties)
25
+ end
26
+
30
27
  end
@@ -1,26 +1,23 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetCommandHandler
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?(RWidget) and
14
- command_symbol.to_s != "shell" and
15
- (args.size == 0 or
16
- (args.size == 1 and args[0].is_a?(Fixnum))) and
17
- RWidget.widget_exists?(command_symbol.to_s)
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- style = args[0] if args.size == 1
22
- puts "style argument is: " + style.to_s
23
- RWidget.new(command_symbol.to_s, parent.widget, style)
24
- end
25
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt.widgets'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ parent.is_a?(RWidget) and
11
+ command_symbol.to_s != "shell" and
12
+ (args.size == 0 or
13
+ (args.size == 1 and args[0].is_a?(Fixnum))) and
14
+ RWidget.widget_exists?(command_symbol.to_s)
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ style = args[0] if args.size == 1
19
+ puts "style argument is: " + style.to_s
20
+ RWidget.new(command_symbol.to_s, parent.widget, style)
21
+ end
22
+
26
23
  end
@@ -1,35 +1,37 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetListenerCommandHandler
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?(RWidget) and
14
- command_symbol.to_s[0,3] == "on_" and
15
- command_symbol.to_s.length > 3 and
16
- args.size == 0 and
17
- parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
22
- ListenerParent.new #TODO refactor and move to models
23
- end
24
-
25
- #TODO refactor and move to separate file
26
- class ListenerParent
27
- include Parent
28
-
29
- def process_block(block)
30
- #NOOP
31
- end
32
-
33
- end
34
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetListenerCommandHandler
5
+ include CommandHandler
6
+
7
+ include_package 'org.eclipse.swt.widgets'
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ puts "parent is a widget: " + (parent.is_a?(RWidget)).to_s
11
+ return unless parent.is_a?(RWidget)
12
+ puts "on listener?: " + (command_symbol.to_s[0,3] == "on_").to_s
13
+ return unless command_symbol.to_s[0,3] == "on_"
14
+ puts "command symbol is longer than 3: " + (command_symbol.to_s.length > 3).to_s
15
+ return unless command_symbol.to_s.length > 3
16
+ puts "args are 0?: " + (args.size == 0).to_s
17
+ return unless args.size == 0
18
+ puts "can add listener? " + (parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])).to_s
19
+ parent.can_add_listener?(command_symbol.to_s[3, command_symbol.to_s.length])
20
+ end
21
+
22
+ def do_handle(parent, command_symbol, *args, &block)
23
+ parent.add_listener(command_symbol.to_s[3, command_symbol.to_s.length], &block)
24
+ ListenerParent.new #TODO refactor and move to models
25
+ end
26
+
27
+ #TODO refactor and move to separate file
28
+ class ListenerParent
29
+ include Parent
30
+
31
+ def process_block(block)
32
+ #NOOP
33
+ end
34
+
35
+ end
36
+
35
37
  end
@@ -1,22 +1,19 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../command_handler"
5
- require File.dirname(__FILE__) + "/models/r_widget"
6
-
7
- class WidgetMethodCommandHandler
8
- include CommandHandler
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- parent.is_a?(RWidget) and
12
- args.size > 0 and
13
- block == nil and
14
- parent.respond_to?(command_symbol, *args)
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- parent.send(command_symbol, *args)
19
- nil
20
- end
21
-
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/r_widget"
3
+
4
+ class WidgetMethodCommandHandler
5
+ include CommandHandler
6
+
7
+ def can_handle?(parent, command_symbol, *args, &block)
8
+ parent.is_a?(RWidget) and
9
+ args.size > 0 and
10
+ block == nil and
11
+ parent.respond_to?(command_symbol, *args)
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ parent.send(command_symbol, *args)
16
+ nil
17
+ end
18
+
22
19
  end
@@ -1,45 +1,52 @@
1
- # Glimmer - a JRuby DSL that enables easy and efficient authoring of user-interfaces
2
- # using the robust platform-independent Eclipse SWT library. Glimmer comes with built-in
3
- # data-binding support to greatly facilitate synchronizing UI with domain models.
4
- #
5
- # Copyright (C) 2007-2008 Annas Al Maleh
6
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
7
-
8
- require "rubygems"
9
- require "facets"
10
- require "java"
11
- require File.dirname(__FILE__) + "/parent"
12
-
13
- module Glimmer
14
-
15
- include_package 'org.eclipse.swt'
16
-
17
- @@parent_stack = []
18
-
19
- def self.method_missing(method_symbol, *args, &block)
20
- puts "method: " + method_symbol.to_s + " and args: " + args.to_s
21
- command_handler_chain = CommandHandlerChainFactory.chain
22
- return_value = command_handler_chain.handle(@@parent_stack.last, method_symbol, *args, &block)
23
- add_contents(return_value, &block)
24
- return return_value
25
- end
26
-
27
- def self.add_contents(parent, &block)
28
- @@parent_stack.push(parent) if parent.is_a?(Parent)
29
- @@parent_stack.last.process_block(block) if block and @@parent_stack.last
30
- @@parent_stack.pop if parent.is_a?(Parent)
31
- end
32
-
33
- #added for convenience
34
-
35
- def method_missing(method_symbol, *args, &block)
36
- Glimmer.method_missing(method_symbol, *args, &block)
37
- end
38
-
39
- def add_contents(parent, &block)
40
- Glimmer.add_contents(parent, &block)
41
- end
42
- end
43
-
44
- # Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
45
- #require File.dirname(__FILE__) + "/command_handlers"
1
+ # Glimmer - a JRuby DSL that enables easy and efficient authoring of user
2
+ # interfaces using the robust platform-independent Eclipse SWT library. Glimmer
3
+ # comes with built-in data-binding support to greatly facilitate synchronizing
4
+ # UI with domain models.
5
+
6
+ require "rubygems"
7
+ require "facets"
8
+ require "java"
9
+ require File.dirname(__FILE__) + "/parent"
10
+
11
+ module Glimmer
12
+
13
+ include_package 'org.eclipse.swt'
14
+
15
+ @@parent_stack = []
16
+
17
+ def self.method_missing(method_symbol, *args, &block)
18
+ puts "method: " + method_symbol.to_s + " and args: " + args.to_s
19
+ command_handler_chain = CommandHandlerChainFactory.chain
20
+ return_value = command_handler_chain.handle(@@parent_stack.last, method_symbol, *args, &block)
21
+ add_contents(return_value, &block)
22
+ return return_value
23
+ end
24
+
25
+ def self.add_contents(parent, &block)
26
+ @@parent_stack.push(parent) if parent.is_a?(Parent)
27
+ @@parent_stack.last.process_block(block) if block and @@parent_stack.last
28
+ @@parent_stack.pop if parent.is_a?(Parent)
29
+ end
30
+
31
+ def self.dsl(dsl)
32
+ CommandHandlerChainFactory.select_dsl(dsl)
33
+ end
34
+
35
+ #added for convenience
36
+
37
+ def method_missing(method_symbol, *args, &block)
38
+ Glimmer.method_missing(method_symbol, *args, &block)
39
+ end
40
+
41
+ def add_contents(parent, &block)
42
+ Glimmer.add_contents(parent, &block)
43
+ end
44
+
45
+ def dsl(dsl)
46
+ CommandHandlerChainFactory.select_dsl(dsl)
47
+ end
48
+ end
49
+
50
+ # Command handlers may rely on Glimmer, so this is put here to avoid an infinite loop.
51
+ require File.dirname(__FILE__) + "/command_handlers"
52
+ require File.dirname(__FILE__) + "/xml_command_handlers"