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,22 +1,18 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require "facets/dictionary"
5
- require File.dirname(__FILE__) + "/../command_handler"
6
- require File.dirname(__FILE__) + "/models/node"
7
-
8
- class XmlCommandHandler
9
- include CommandHandler
10
-
11
- def can_handle?(parent, command_symbol, *args, &block)
12
- (parent == nil or parent.is_a?(Node)) and
13
- (args.size == 0 or ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))))
14
- end
15
-
16
- def do_handle(parent, command_symbol, *args, &block)
17
- attributes = Dictionary.new
18
- attributes = args[0] if (args.size == 1)
19
- Node.new(parent, command_symbol.to_s, attributes, &block)
20
- end
21
-
22
- end
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/node"
3
+
4
+ class XmlCommandHandler
5
+ include CommandHandler
6
+
7
+ def can_handle?(parent, command_symbol, *args, &block)
8
+ (parent == nil or parent.is_a?(Node)) and
9
+ (args.size == 0 or ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))))
10
+ end
11
+
12
+ def do_handle(parent, command_symbol, *args, &block)
13
+ attributes = Hash.new
14
+ attributes = args[0] if (args.size == 1)
15
+ Node.new(parent, command_symbol.to_s, attributes, &block)
16
+ end
17
+
18
+ end
@@ -1,34 +1,31 @@
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/node"
6
- require File.dirname(__FILE__) + "/models/depth_first_search_iterator"
7
- require File.dirname(__FILE__) + "/models/name_space_visitor"
8
-
9
- class XmlNameSpaceCommandHandler
10
- include CommandHandler, Glimmer
11
-
12
- def can_handle?(parent, command_symbol, *args, &block)
13
- (parent == nil or parent.is_a?(Node)) and
14
- (command_symbol.to_s == "name_space")
15
- (args.size == 1) and
16
- (args[0].is_a?(Symbol)) and
17
- block
18
- end
19
-
20
- def do_handle(parent, command_symbol, *args, &block)
21
- node = block.call
22
- unless node.is_a?(String)
23
- name_space_visitor = NameSpaceVisitor.new(args[0].to_s)
24
- DepthFirstSearchIterator.new(node, name_space_visitor).iterate
25
- def node.process_block(block)
26
- puts 'block'
27
- #NOOP
28
- end
29
- end
30
- parent.children << node if parent and !parent.children.include?(node)
31
- node
32
- end
33
-
34
- end
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/node"
3
+ require File.dirname(__FILE__) + "/models/depth_first_search_iterator"
4
+ require File.dirname(__FILE__) + "/models/name_space_visitor"
5
+
6
+ class XmlNameSpaceCommandHandler
7
+ include CommandHandler, Glimmer
8
+
9
+ def can_handle?(parent, command_symbol, *args, &block)
10
+ (parent == nil or parent.is_a?(Node)) and
11
+ (command_symbol.to_s == "name_space")
12
+ (args.size == 1) and
13
+ (args[0].is_a?(Symbol)) and
14
+ block
15
+ end
16
+
17
+ def do_handle(parent, command_symbol, *args, &block)
18
+ node = block.call
19
+ unless node.is_a?(String)
20
+ name_space_visitor = NameSpaceVisitor.new(args[0].to_s)
21
+ DepthFirstSearchIterator.new(node, name_space_visitor).iterate
22
+ def node.process_block(block)
23
+ puts 'block'
24
+ #NOOP
25
+ end
26
+ end
27
+ parent.children << node if parent and !parent.children.include?(node)
28
+ node
29
+ end
30
+
31
+ 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 "facets/dictionary"
5
- require File.dirname(__FILE__) + "/../command_handler"
6
- require File.dirname(__FILE__) + "/models/node"
7
-
8
- class XmlTagCommandHandler
9
- include CommandHandler
10
-
11
- def can_handle?(parent, command_symbol, *args, &block)
12
- (parent == nil or parent.is_a?(Node)) and
13
- (command_symbol.to_s == "tag") and
14
- ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))) and
15
- args[0].include?(:_name)
16
- end
17
-
18
- def do_handle(parent, command_symbol, *args, &block)
19
- attributes = nil
20
- attributes = args[0] if (args.size == 1)
21
- tag_name = attributes[:_name]
22
- attributes.delete(:_name)
23
- Node.new(parent, tag_name, attributes, &block)
24
- end
25
-
26
- end
1
+ require "facets"
2
+ require File.dirname(__FILE__) + "/../command_handler"
3
+ require File.dirname(__FILE__) + "/models/node"
4
+
5
+ class XmlTagCommandHandler
6
+ include CommandHandler
7
+
8
+ def can_handle?(parent, command_symbol, *args, &block)
9
+ (parent == nil or parent.is_a?(Node)) and
10
+ (command_symbol.to_s == "tag") and
11
+ ((args.size == 1) and ((args[0].is_a?(Hash)) or (args[0].is_a?(Hash)))) and
12
+ args[0].include?(:_name)
13
+ end
14
+
15
+ def do_handle(parent, command_symbol, *args, &block)
16
+ attributes = nil
17
+ attributes = args[0] if (args.size == 1)
18
+ tag_name = attributes[:_name]
19
+ attributes.delete(:_name)
20
+ Node.new(parent, tag_name, attributes, &block)
21
+ end
22
+
23
+ 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/node"
6
-
7
- class XmlTextCommandHandler
8
- include CommandHandler
9
-
10
- def can_handle?(parent, command_symbol, *args, &block)
11
- (parent == nil or parent.is_a?(Node)) and
12
- (command_symbol.to_s == "text") and
13
- ((args.size == 1) and (args[0].is_a?(String))) and
14
- !block
15
- end
16
-
17
- def do_handle(parent, command_symbol, *args, &block)
18
- parent.children << args[0] if parent
19
- args[0]
20
- end
21
-
22
- end
1
+ require File.dirname(__FILE__) + "/../command_handler"
2
+ require File.dirname(__FILE__) + "/models/node"
3
+
4
+ class XmlTextCommandHandler
5
+ include CommandHandler
6
+
7
+ def can_handle?(parent, command_symbol, *args, &block)
8
+ (parent == nil or parent.is_a?(Node)) and
9
+ (command_symbol.to_s == "text") and
10
+ ((args.size == 1) and (args[0].is_a?(String))) and
11
+ !block
12
+ end
13
+
14
+ def do_handle(parent, command_symbol, *args, &block)
15
+ parent.children << args[0] if parent
16
+ args[0]
17
+ end
18
+
19
+ end
@@ -1,6 +1,3 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  class Contact
5
2
  attr_accessor :first_name, :last_name, :email
6
3
 
@@ -1,8 +1,5 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  require File.dirname(__FILE__) + "/contact_manager_presenter"
5
- require File.dirname(__FILE__) + "/../../src/swt"
2
+ require File.dirname(__FILE__) + "/../../lib/glimmer"
6
3
 
7
4
  class RWidget
8
5
  include_package 'org.eclipse.jface.viewers'
@@ -1,6 +1,3 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  require File.dirname(__FILE__) + "/contact_repository"
5
2
 
6
3
  class ContactManagerPresenter
@@ -1,6 +1,3 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  require File.dirname(__FILE__) + "/contact"
5
2
 
6
3
  class ContactRepository
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + "/../lib/glimmer"
2
+
3
+ class Person
4
+ attr_accessor :country, :country_options
5
+
6
+ def initialize
7
+ self.country_options=["", "Canada", "US", "Mexico"]
8
+ self.country = "Canada"
9
+ end
10
+ end
11
+
12
+ class HelloCombo
13
+ include Glimmer
14
+ def launch
15
+ person = Person.new
16
+ shell {
17
+ composite {
18
+ combo(read_only) {
19
+ selection bind(person, :country)
20
+ }
21
+ button {
22
+ text "Reset"
23
+ on_widget_selected do
24
+ person.country = "Canada"
25
+ end
26
+ }
27
+ }
28
+ }.open
29
+ end
30
+ end
31
+
32
+ HelloCombo.new.launch
@@ -1,8 +1,5 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  require "java"
5
- require File.dirname(__FILE__) + "/../src/swt"
2
+ require File.dirname(__FILE__) + "/../lib/glimmer"
6
3
 
7
4
  class HelloWorld
8
5
  include_package 'org.eclipse.swt'
@@ -1,9 +1,6 @@
1
- # Copyright (C) 2007-2008 Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  require "java"
5
2
  require "observer"
6
- require File.dirname(__FILE__) + "/../src/swt"
3
+ require File.dirname(__FILE__) + "/../lib/glimmer"
7
4
 
8
5
  #Presents login screen data
9
6
  class LoginPresenter
@@ -1,7 +1,4 @@
1
- # Copyright (C) 2007-2008 Nick Malnick and Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
- require File.dirname(__FILE__) + "/../../src/swt"
1
+ require File.dirname(__FILE__) + "/../../lib/glimmer"
5
2
  require File.dirname(__FILE__) + "/tic_tac_toe_board"
6
3
 
7
4
 
@@ -22,7 +19,7 @@ class TicTacToe
22
19
  layout GridLayout.new(3,true)
23
20
  (1..3).each { |row_number|
24
21
  (1..3).each { |column_number|
25
- button { |button_parent|
22
+ button {
26
23
  layout_data GridData.new(fill, fill, true, true)
27
24
  text bind(@tic_tac_toe_board.box(row_number, column_number), :sign)
28
25
  enabled bind(@tic_tac_toe_board.box(row_number, column_number), :empty)
@@ -1,6 +1,3 @@
1
- # Copyright (C) 2007-2008 Nick Malnick and Annas Al Maleh
2
- # Licensed under the LGPL. See /COPYING.LGPL for more details.
3
-
4
1
  class TicTacToeBox
5
2
  EMPTY = ""
6
3
  attr_accessor :sign, :empty
@@ -0,0 +1,131 @@
1
+ require File.dirname(__FILE__) + "/helper"
2
+
3
+ class GlimmerComboDataBindingTest < Test::Unit::TestCase
4
+ include Glimmer
5
+
6
+ include_package 'org.eclipse.swt'
7
+ include_package 'org.eclipse.swt.widgets'
8
+ include_package 'org.eclipse.swt.layout'
9
+
10
+ def setup
11
+ dsl :swt
12
+ end
13
+
14
+ def teardown
15
+ @target.display.dispose if @target.display
16
+ end
17
+
18
+ class Person
19
+ attr_accessor :country, :country_options
20
+
21
+ def initialize
22
+ self.country_options=["", "Canada", "US", "Mexico"]
23
+ end
24
+ end
25
+
26
+ def test_data_binding_selection_property
27
+ person = Person.new
28
+
29
+ @target = shell {
30
+ @combo = combo {
31
+ selection bind(person, :country)
32
+ }
33
+ }
34
+
35
+ assert_equal 4, @combo.widget.item_count
36
+ assert_equal -1, @combo.widget.selection_index
37
+ assert_equal "", @combo.widget.text
38
+
39
+ person.country = "Canada"
40
+
41
+ assert_equal "Canada", @combo.widget.text
42
+
43
+ person.country_options << "France"
44
+
45
+ assert_equal 5, @combo.widget.item_count
46
+
47
+ person.country_options=["", "Canada", "US", "Mexico", "Russia", "France"]
48
+
49
+ assert_equal 6, @combo.widget.item_count
50
+
51
+ person.country_options << "Italy"
52
+ person.country_options << "Germany"
53
+ person.country_options << "Australia"
54
+
55
+ assert_equal 9, @combo.widget.item_count
56
+
57
+ assert_equal "", @combo.widget.text
58
+
59
+ @combo.widget.select(2)
60
+ @combo.widget.notifyListeners(SWT::Selection, nil)
61
+ assert_equal "US", person.country
62
+
63
+ person.country = "Canada"
64
+
65
+ assert_equal "Canada", @combo.widget.text
66
+
67
+ person.country = "Russia"
68
+
69
+ assert_equal "Russia", @combo.widget.text
70
+
71
+ person.country = ""
72
+
73
+ assert_equal "", @combo.widget.text
74
+
75
+ person.country = "Japan"
76
+
77
+ assert_equal "Japan", @combo.widget.text
78
+ end
79
+
80
+ def test_read_only_widget_data_binding_selection_property
81
+ person = Person.new
82
+ person.country = "Canada"
83
+
84
+ @target = shell {
85
+ @combo = combo(read_only) {
86
+ selection bind(person, :country)
87
+ }
88
+ }
89
+
90
+ assert_equal 4, @combo.widget.item_count
91
+ assert_equal "Canada", @combo.widget.text
92
+
93
+ person.country_options << "France"
94
+
95
+ assert_equal 5, @combo.widget.item_count
96
+
97
+ person.country_options=["", "Canada", "US", "Mexico", "Russia", "France"]
98
+
99
+ assert_equal 6, @combo.widget.item_count
100
+
101
+ person.country_options << "Italy"
102
+ person.country_options << "Germany"
103
+ person.country_options << "Australia"
104
+
105
+ assert_equal 9, @combo.widget.item_count
106
+
107
+ assert_equal "", @combo.widget.text
108
+
109
+ @combo.widget.select(8)
110
+ @combo.widget.notifyListeners(SWT::Selection, nil)
111
+ assert_equal "Australia", person.country
112
+
113
+ person.country = "Canada"
114
+
115
+ assert_equal "Canada", @combo.widget.text
116
+
117
+ person.country = "Russia"
118
+
119
+ assert_equal "Russia", @combo.widget.text
120
+
121
+ person.country = ""
122
+
123
+ assert_equal "", @combo.widget.text
124
+
125
+ person.country = "Japan"
126
+
127
+ assert_equal "", @combo.widget.text
128
+ end
129
+
130
+ end
131
+