glimmer 0.1.0.0 → 0.1.2

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 (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
+