MINT-core 1.0.1 → 2.0.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 (214) hide show
  1. data/Gemfile +22 -3
  2. data/Gemfile.lock +98 -22
  3. data/History.txt +262 -0
  4. data/LICENSE +30 -0
  5. data/MINT-core.gemspec +25 -80
  6. data/Manifest.txt +145 -30
  7. data/README.rdoc +6 -163
  8. data/Rakefile +16 -17
  9. data/bin/mint-aui +3 -3
  10. data/bin/mint-cui-gfx +3 -2
  11. data/bin/mint-juggernaut.sh +0 -0
  12. data/bin/mint-tuplespace +0 -0
  13. data/lib/MINT-core.rb +53 -15
  14. data/lib/MINT-core/agent/agent.rb +1 -1
  15. data/lib/MINT-core/agent/aui.rb +0 -14
  16. data/lib/MINT-core/agent/auicontrol.rb +91 -38
  17. data/lib/MINT-core/agent/cui-gfx.rb +3 -3
  18. data/lib/MINT-core/agent/cuicontrol.rb +94 -24
  19. data/lib/MINT-core/connector/redis_connector.rb +16 -0
  20. data/lib/MINT-core/manager/mapping_manager.rb +101 -0
  21. data/lib/MINT-core/manager/mapping_parser.rb +89 -0
  22. data/lib/MINT-core/manager/mapping_server.rb +99 -0
  23. data/lib/MINT-core/manager/position_updater.rb +33 -0
  24. data/lib/MINT-core/manager/scxml_client.rb +118 -0
  25. data/lib/MINT-core/manager/scxml_server.rb +86 -0
  26. data/lib/MINT-core/mapping/action/action.rb +32 -0
  27. data/lib/MINT-core/mapping/action/backend_action.rb +32 -0
  28. data/lib/MINT-core/mapping/action/bind_action.rb +88 -0
  29. data/lib/MINT-core/mapping/action/event_action.rb +40 -0
  30. data/lib/MINT-core/mapping/complementary_mapping.rb +31 -0
  31. data/lib/MINT-core/mapping/mapping.rb +170 -34
  32. data/lib/MINT-core/mapping/observation/negation_observation.rb +64 -0
  33. data/lib/MINT-core/mapping/observation/observation.rb +219 -0
  34. data/lib/MINT-core/mapping/sequential.rb +1 -2
  35. data/lib/MINT-core/mapping/sequential_mapping.rb +60 -0
  36. data/lib/MINT-core/model/aui/AIChoiceElement.rb +17 -0
  37. data/lib/MINT-core/model/aui/AICommand.rb +7 -0
  38. data/lib/MINT-core/model/aui/AIContainer.rb +73 -0
  39. data/lib/MINT-core/model/aui/AIContext.rb +12 -0
  40. data/lib/MINT-core/model/aui/AIIN.rb +8 -0
  41. data/lib/MINT-core/model/aui/AIINContinuous.rb +56 -0
  42. data/lib/MINT-core/model/aui/AIINDiscrete.rb +8 -0
  43. data/lib/MINT-core/model/aui/AIMultiChoice.rb +1 -2
  44. data/lib/MINT-core/model/aui/AIMultiChoiceElement.rb +4 -51
  45. data/lib/MINT-core/model/aui/AIO.rb +76 -123
  46. data/lib/MINT-core/model/aui/AIOUT.rb +8 -0
  47. data/lib/MINT-core/model/aui/AIOUTContinuous.rb +61 -0
  48. data/lib/MINT-core/model/aui/AIReference.rb +16 -0
  49. data/lib/MINT-core/model/aui/AISingleChoice.rb +18 -1
  50. data/lib/MINT-core/model/aui/AISingleChoiceElement.rb +10 -56
  51. data/lib/MINT-core/model/aui/AISinglePresence.rb +39 -71
  52. data/lib/MINT-core/model/aui/aicommand.scxml +47 -0
  53. data/lib/MINT-core/model/aui/aicontainer.scxml +41 -0
  54. data/lib/MINT-core/model/aui/aicontext.scxml +34 -0
  55. data/lib/MINT-core/model/aui/aiincontinuous.scxml +59 -0
  56. data/lib/MINT-core/model/aui/aiinrange.scxml +86 -0
  57. data/lib/MINT-core/model/aui/aimultichoice.scxml +67 -0
  58. data/lib/MINT-core/model/aui/aimultichoiceelement.scxml +51 -0
  59. data/lib/MINT-core/model/aui/aio.scxml +18 -27
  60. data/lib/MINT-core/model/aui/aioutcontinuous.scxml +66 -0
  61. data/lib/MINT-core/model/aui/aireference.scxml +28 -0
  62. data/lib/MINT-core/model/aui/aisinglechoice.scxml +60 -0
  63. data/lib/MINT-core/model/aui/aisinglechoiceelement.scxml +45 -60
  64. data/lib/MINT-core/model/aui/aisinglepresence.scxml +15 -24
  65. data/lib/MINT-core/model/aui/model.rb +15 -38
  66. data/lib/MINT-core/model/cui/gfx/CIC.rb +34 -10
  67. data/lib/MINT-core/model/cui/gfx/CIO.rb +66 -115
  68. data/lib/MINT-core/model/cui/gfx/CarouFredSel.scxml +58 -0
  69. data/lib/MINT-core/model/cui/gfx/MarkableRadioButton.rb +8 -0
  70. data/lib/MINT-core/model/cui/gfx/RadioButton.rb +8 -0
  71. data/lib/MINT-core/model/cui/gfx/RadioButtonGroup.rb +6 -0
  72. data/lib/MINT-core/model/cui/gfx/button.rb +16 -0
  73. data/lib/MINT-core/model/cui/gfx/button.scxml +58 -0
  74. data/lib/MINT-core/model/cui/gfx/caroufredsel.rb +48 -0
  75. data/lib/MINT-core/model/cui/gfx/cic.scxml +57 -0
  76. data/lib/MINT-core/model/cui/gfx/cio.scxml +54 -0
  77. data/lib/MINT-core/model/cui/gfx/markableradiobutton.scxml +67 -0
  78. data/lib/MINT-core/model/cui/gfx/model.rb +39 -176
  79. data/lib/MINT-core/model/cui/gfx/radiobutton.scxml +59 -0
  80. data/lib/MINT-core/model/interactor.rb +167 -46
  81. data/lib/MINT-core/model/interactor.scxml +3 -0
  82. data/lib/MINT-core/model/interactor_helpers.rb +25 -0
  83. data/lib/MINT-core/model/ir/body/OneHandPoseNavigation.rb +15 -0
  84. data/lib/MINT-core/model/ir/body/body.rb +5 -0
  85. data/lib/MINT-core/model/ir/body/fingertip.rb +114 -0
  86. data/lib/MINT-core/model/ir/body/fingertip.scxml +43 -0
  87. data/lib/MINT-core/model/{body → ir/body}/gesture_button.rb +0 -0
  88. data/lib/MINT-core/model/ir/body/hand.rb +5 -0
  89. data/lib/MINT-core/model/ir/body/head.rb +102 -0
  90. data/lib/MINT-core/model/ir/body/head.scxml +92 -0
  91. data/lib/MINT-core/model/ir/body/onehandposenavigation.scxml +53 -0
  92. data/lib/MINT-core/model/ir/body/pose.rb +99 -0
  93. data/lib/MINT-core/model/ir/browserscreen.rb +27 -0
  94. data/lib/MINT-core/model/ir/browserscreen.scxml +14 -0
  95. data/lib/MINT-core/model/{device → ir}/button.rb +1 -1
  96. data/lib/MINT-core/model/ir/ir.rb +5 -0
  97. data/lib/MINT-core/model/ir/irmedia.rb +5 -0
  98. data/lib/MINT-core/model/ir/irmode.rb +5 -0
  99. data/lib/MINT-core/model/{device → ir}/joypad.rb +1 -1
  100. data/lib/MINT-core/model/ir/mouse.rb +44 -0
  101. data/lib/MINT-core/model/ir/mouse.scxml +35 -0
  102. data/lib/MINT-core/model/{device/mouse.rb → ir/mouse_old.rb} +2 -2
  103. data/lib/MINT-core/model/{device → ir}/pointer.rb +20 -22
  104. data/lib/MINT-core/model/ir/pointer.scxml +19 -0
  105. data/lib/MINT-core/model/ir/screen.rb +5 -0
  106. data/lib/MINT-core/model/{device → ir}/wheel.rb +1 -1
  107. data/lib/MINT-core/model/mim/aicommand_activate_to_button_press.xml +13 -0
  108. data/lib/MINT-core/model/mim/aicommand_deactivate_to_button_release.xml +13 -0
  109. data/lib/MINT-core/model/mim/aio_defocus_to_cio_unhighlight.xml +13 -0
  110. data/lib/MINT-core/model/mim/aio_focus_to_cio_highlight.xml +14 -0
  111. data/lib/MINT-core/model/mim/aio_present_to_cio_display.xml +14 -0
  112. data/lib/MINT-core/model/mim/aio_suspend_to_cio_hide.xml +13 -0
  113. data/lib/MINT-core/model/mim/aisinglechoice_present_to_child_present.xml +14 -0
  114. data/lib/MINT-core/model/mim/aisinglechoiceelement_chosen_to_radiobutton_select.xml +13 -0
  115. data/lib/MINT-core/model/mim/aisinglechoiceelement_unchosen_to_radiobutton_unselect.xml +13 -0
  116. data/lib/MINT-core/model/mim/aisinglepresence_children_finished_to_caroufredsel_init_js.xml +14 -0
  117. data/lib/MINT-core/model/mim/aisinglepresence_present_to_child_present.xml +15 -0
  118. data/lib/MINT-core/model/mim/browserscreen_reload_to_cuicontrol_refresh_all.xml +12 -0
  119. data/lib/MINT-core/model/mim/button_press_to_aicommand_activate.xml +12 -0
  120. data/lib/MINT-core/model/mim/button_release_to_aicommand_deactivate.xml +12 -0
  121. data/lib/MINT-core/model/mim/caroufredsel_refreshing_to_caroufredsel_init_js.xml +14 -0
  122. data/lib/MINT-core/model/mim/cio_display_to_aio_defocus.xml +13 -0
  123. data/lib/MINT-core/model/mim/cio_display_to_aio_present.xml +12 -0
  124. data/lib/MINT-core/model/mim/cio_display_to_cio_display_cache_add.xml +11 -0
  125. data/lib/MINT-core/model/mim/cio_hide_to_aio_suspend.xml +12 -0
  126. data/lib/MINT-core/model/mim/cio_hide_to_cio_display_cache_remove.xml +12 -0
  127. data/lib/MINT-core/model/mim/cio_highlight_to_aio_focus.xml +13 -0
  128. data/lib/MINT-core/model/mim/head_looking_left_to_aisinglepresence_prev.xml +14 -0
  129. data/lib/MINT-core/model/mim/head_looking_right_to_aisinglepresence_next.xml +15 -0
  130. data/lib/MINT-core/model/mim/head_nodding_to_aisinglepresence_next.xml +15 -0
  131. data/lib/MINT-core/model/mim/head_tilting_left_to_aisinglepresence_prev.xml +14 -0
  132. data/lib/MINT-core/model/mim/head_tilting_right_to_aisinglepresence_next.xml +15 -0
  133. data/lib/MINT-core/model/mim/left_button_aisinglepresence_enter.xml +15 -0
  134. data/lib/MINT-core/model/mim/left_button_aisinglepresence_next.xml +15 -0
  135. data/lib/MINT-core/model/mim/mim_default.xml +52 -0
  136. data/lib/MINT-core/model/mim/mint-mappings.xsd +127 -0
  137. data/lib/MINT-core/model/mim/mouse_press_to_aicommand_activate.xml +17 -0
  138. data/lib/MINT-core/model/mim/mouse_press_to_aisinglechoiceelement_choose.xml +17 -0
  139. data/lib/MINT-core/model/mim/mouse_press_to_aisinglechoiceelement_unchoose.xml +17 -0
  140. data/lib/MINT-core/model/mim/mouse_release_to_aicommand_deactivate.xml +16 -0
  141. data/lib/MINT-core/model/mim/mouse_stop_to_cio_highlight.xml +13 -0
  142. data/lib/MINT-core/model/mim/onehandposnav_confirm_to_aichoiceelement_choose.xml +14 -0
  143. data/lib/MINT-core/model/mim/onehandposnav_next_to_aio_next.xml +14 -0
  144. data/lib/MINT-core/model/mim/onehandposnav_previous_to_aio_prev.xml +14 -0
  145. data/lib/MINT-core/model/mim/radiobutton_selected_to_aisinglechoiceelement_choose.xml +13 -0
  146. data/lib/MINT-core/model/mim/radiobutton_unselected_to_aisinglechoiceelement_unchoose.xml +13 -0
  147. data/lib/MINT-core/model/mim/right_button_aisinglepresence_prev.xml +15 -0
  148. data/lib/MINT-core/model/task.rb +6 -6
  149. data/script/console +0 -0
  150. data/script/destroy +0 -0
  151. data/script/generate +0 -0
  152. data/spec/AICommand_spec.rb +20 -0
  153. data/spec/AIContainer_spec.rb +161 -0
  154. data/spec/AIINContinuous_spec.rb +92 -0
  155. data/spec/AIOUTContinuous_spec.rb +93 -0
  156. data/spec/AIO_spec.rb +73 -0
  157. data/spec/AIReference_spec.rb +105 -0
  158. data/spec/AISinglePresence_spec.rb +204 -60
  159. data/spec/Button_spec.rb +114 -0
  160. data/spec/CIO_spec.rb +145 -0
  161. data/spec/Interactor_spec.rb +95 -0
  162. data/spec/MappingManager_spec.rb +126 -0
  163. data/spec/Spontaneous_spec.rb +53 -0
  164. data/spec/aio_agent_spec.rb +215 -186
  165. data/spec/aisinglechoice_spec.rb +147 -88
  166. data/spec/aisinglechoiceelement_spec.rb +154 -70
  167. data/spec/complementary_mapping_spec.rb +158 -0
  168. data/spec/core_spec.rb +27 -15
  169. data/spec/cui_helper.rb +100 -0
  170. data/spec/examples/browserscreen_reload_to_cuicontrol_refresh_all.xml +12 -0
  171. data/spec/examples/mim_streaming_example.xml +9 -0
  172. data/spec/examples/mouse_highlight.xml +22 -0
  173. data/spec/examples/performance_mapping.xml +15 -0
  174. data/spec/examples/reset_click.xml +24 -0
  175. data/spec/interactor_test.scxml +32 -0
  176. data/spec/interactor_test_2.scxml +16 -0
  177. data/spec/mapping_performance_spec.rb +118 -0
  178. data/spec/mapping_server_spec.rb +161 -0
  179. data/spec/mapping_spec.rb +307 -0
  180. data/spec/music_spec.rb +301 -135
  181. data/spec/performance_counter.scxml +9 -0
  182. data/spec/sequential_mappings_spec.rb +69 -0
  183. data/spec/shared/aio_shared.rb +144 -0
  184. data/spec/spec_helper.rb +22 -3
  185. data/spec/spontaneous.scxml +11 -0
  186. data/spec/support/connection_helper.rb +19 -0
  187. data/spec/support/redis_connector_monkey_patch.rb +1 -0
  188. data/spec/support/statemachine_helper.rb +84 -0
  189. data/spec/sync_mappings_spec.rb +96 -0
  190. metadata +219 -354
  191. data/lib/MINT-core/mapping/complementary.rb +0 -100
  192. data/lib/MINT-core/mapping/on_state_change.rb +0 -65
  193. data/lib/MINT-core/model/aui/AIC.rb +0 -86
  194. data/lib/MINT-core/model/aui/AIChoice.rb +0 -65
  195. data/lib/MINT-core/model/aui/AIINChoose.rb +0 -54
  196. data/lib/MINT-core/model/aui/AIOUTDiscrete.rb +0 -43
  197. data/lib/MINT-core/model/aui/aic.png +0 -0
  198. data/lib/MINT-core/model/aui/aic.scxml +0 -50
  199. data/lib/MINT-core/model/aui/aichoice.png +0 -0
  200. data/lib/MINT-core/model/aui/aichoice.scxml +0 -60
  201. data/lib/MINT-core/model/aui/aio.png +0 -0
  202. data/lib/MINT-core/model/aui/aisinglechoiceelement.png +0 -0
  203. data/lib/MINT-core/model/aui/aisinglepresence.png +0 -0
  204. data/lib/MINT-core/model/body/handgesture.rb +0 -279
  205. data/lib/MINT-core/model/body/head.png +0 -0
  206. data/lib/MINT-core/model/body/head.rb +0 -51
  207. data/lib/MINT-core/model/body/head.scxml +0 -28
  208. data/lib/MINT-core/model/cui/gfx/screen.rb +0 -18
  209. data/lib/MINT-core/overrides/rinda.rb +0 -34
  210. data/spec/AIC_spec.rb +0 -69
  211. data/spec/MINT-core_spec.rb +0 -11
  212. data/spec/aio_spec.rb +0 -144
  213. data/spec/cio_spec.rb +0 -369
  214. data/tasks/rspec.rake +0 -21
@@ -1,34 +0,0 @@
1
- require "rinda/tuplespace"
2
-
3
- module Rinda
4
- class TupleSpace
5
- def take_all(tuple)
6
- read_all(tuple).each { |t|
7
- take(t)
8
- }
9
- end
10
-
11
-
12
- end
13
-
14
- # fixed Templates to support partially matching
15
- class Template
16
- def match(tuple)
17
- return false unless tuple.respond_to?(:size)
18
- return false unless tuple.respond_to?(:fetch)
19
- return false unless self.size <= tuple.size
20
- each do |k, v|
21
- begin
22
- it = tuple.fetch(k)
23
- rescue
24
- return false
25
- end
26
- next if v.nil?
27
- next if v == it
28
- next if v === it
29
- return false
30
- end
31
- return true
32
- end
33
- end
34
- end
@@ -1,69 +0,0 @@
1
- require "spec_helper"
2
-
3
- include MINT
4
- describe 'AUI' do
5
- before :each do
6
- connection_options = { :adapter => "in_memory"}
7
- DataMapper.setup(:default, connection_options)
8
- # DataMapper.setup(:default, { :adapter => "rinda",:local =>Rinda::TupleSpace.new})
9
- AIC.new(:name=>"a", :childs =>[
10
- AIO.new(:name => "e1"),
11
- AIO.new(:name => "e2"),
12
- AIO.new(:name => "e3")
13
- ]).save
14
-
15
- @a = AIC.first
16
- end
17
-
18
- describe 'AIC' do
19
- it 'should initialize with initiated' do
20
- @a.states.should ==[:initialized]
21
- @a.new_states.should == [:initialized]
22
- end
23
-
24
- it 'should transform to organizing state ' do
25
- @a.process_event(:organize).should ==[:organized]
26
- @a.states.should == [:organized]
27
- @a.new_states.should == [:organized]
28
- end
29
-
30
- it 'should support navigation to child' do
31
- aio = @a.childs.first
32
- aio.states=[:defocused]
33
-
34
- @a.states = [:focused]
35
-
36
- @a.process_event(:child)
37
-
38
- @a.states.should ==[:defocused]
39
- aio.states.should ==[:focused]
40
- end
41
-
42
-
43
- it 'should transform all children to presented if presented' do
44
- AUIControl.organize(@a,nil,0)
45
- # @a.process_event(:organize).should ==[:organized]
46
- @a.states.should == [:organized]
47
- @a.new_states.should == [:organized]
48
- @a.process_event(:present).should ==[:defocused]
49
- @a.childs.each do |c|
50
- c.states.should == [:defocused]
51
- end
52
- end
53
-
54
- it 'should transform all children to suspended if suspended' do
55
- @a.childs.each do |c|
56
- c.states = [:defocused]
57
- end
58
- @a.states = [:focused]
59
-
60
- @a.process_event(:suspend).should ==[:suspended]
61
- @a.childs.each do |c|
62
- c.states.should == [:suspended]
63
- end
64
- end
65
-
66
-
67
-
68
- end
69
- end
@@ -1,11 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
2
-
3
- # Time to add your specs!
4
- # http://rspec.info/
5
- describe "Place your specs here" do
6
-
7
- it "find this spec in spec directory" do
8
- # violated "Be sure to write your specs"
9
- end
10
-
11
- end
@@ -1,144 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe 'AUI' do
4
- before :each do
5
- connection_options = { :adapter => "in_memory"}
6
- DataMapper.setup(:default, connection_options)
7
- # DataMapper.setup(:default, { :adapter => "rinda",:local =>Rinda::TupleSpace.new})
8
- @a = MINT::AIO.create(:name => "test")
9
-
10
- end
11
-
12
- describe 'AIO' do
13
- it 'should initialize with initiated' do
14
- @a.states.should ==[:initialized]
15
- @a.new_states.should == [:initialized]
16
- end
17
-
18
- it 'should transform to organizing state for present action' do
19
- @a.process_event(:organize).should ==[:organized]
20
- @a.states.should == [:organized]
21
- @a.new_states.should == [:organized]
22
- end
23
-
24
- it 'should call back after event has been processed' do
25
- class CallbackContext
26
- attr_accessor :called
27
-
28
- def initialize
29
- @called = false
30
- end
31
- def focus_next
32
- @called = true
33
- end
34
- def inform_parent_presenting
35
- end
36
-
37
- def sync_cio_to_displayed
38
- end
39
- def sync_cio_to_highlighted
40
- end
41
- def exists_next
42
- true
43
- end
44
- def exists_prev
45
- true
46
- end
47
-
48
- end
49
-
50
- callback = CallbackContext.new
51
-
52
- @a.process_event(:organize,callback).should == [:organized]
53
- callback.called.should == false
54
-
55
- @a.process_event(:present,callback).should == [:defocused]
56
- callback.called.should == false
57
-
58
- @a.process_event(:focus,callback).should == [:focused]
59
- callback.called.should == false
60
-
61
- @a.process_event(:next,callback).should == [:defocused]
62
- callback.called.should == true
63
- end
64
-
65
- it 'should recover state after save and reload' do
66
- @a.process_event(:organize).should == [:organized]
67
- @a.save!
68
- b = MINT::AIO.first(:name=>"test")
69
- b.states.should == [:organized]
70
- b.process_event(:present).should == [:defocused]
71
- end
72
-
73
- it 'should store the state' do
74
- a = MINT::AIINReference.create(:name=>"RecipeSelection_label",:label=>"Rezeptdetails")
75
- a.states.should == [:initialized]
76
- a.process_event(:organize)
77
- a.states.should == [:organized]
78
- a.save!
79
- MINT::AIINReference.first(:name=>"RecipeSelection_label").states.should == [:organized]
80
- end
81
-
82
- #TODO Bug first sets states to array not sure ahy
83
-
84
- # it "should process after load" do
85
- # t = MINT::AIO.create(:name => "p")
86
- #
87
- # b = MINT::AIO.first(:name => "p")
88
- # # b.states.should == [:initialized]
89
- # b.process_event(:organized)
90
- #
91
- # end
92
-
93
-
94
- it 'should focus to next element' do
95
- b = MINT::AIO.create(:name=>"next")
96
- @a.next = b
97
- b.previous =@a
98
-
99
- @a.process_event(:organize)
100
- b.process_event(:organize)
101
-
102
- @a.process_event(:present)
103
- b.process_event(:present)
104
-
105
- @a.process_event(:focus).should == [:focused]
106
-
107
- @a.process_event(:next).should == [:defocused]
108
- b.states.should ==[:focused]
109
- @a.states.should ==[:defocused]
110
- end
111
-
112
- it 'should not defocus on next if there is no next element' do
113
- @a.states=[:focused]
114
- @a.process_event(:next)
115
- @a.states.should == [:focused]
116
- end
117
-
118
- it 'should not defocus on prev if there is no previous element' do
119
- @a.states=[:focused]
120
- @a.process_event(:prev).should ==[:focused]
121
- end
122
-
123
- it 'should handle previous' do
124
- @a.states=[:defocused]
125
- b = MINT::AIO.new(:name=>"test", :previous =>@a)
126
- b.states= [:focused]
127
- b.process_event(:prev)
128
-
129
- @a.states.should ==[:focused]
130
- b.states.should ==[:defocused]
131
- end
132
-
133
- it 'should handle parent' do
134
- @a.states=[:focused]
135
- b = MINT::AIC.new(:name=>"parent",:childs =>[@a])
136
- b.states = [:defocused]
137
- @a.process_event(:parent)
138
-
139
- @a.states.should ==[:defocused]
140
- b.states.should ==[:focused]
141
- end
142
- end
143
-
144
- end
@@ -1,369 +0,0 @@
1
- require "spec_helper"
2
-
3
- describe 'CUI' do
4
- before :each do
5
- connection_options = { :adapter => "in_memory"}
6
- DataMapper.setup(:default, connection_options)
7
- # DataMapper.setup(:default, { :adapter => "rinda",:local =>Rinda::TupleSpace.new})
8
-
9
- end
10
-
11
- describe 'CIO' do
12
- before :each do
13
- @up = MINT::CIO.create(:name => "up")
14
- @down = MINT::CIO.create(:name => "down")
15
- @left = MINT::CIO.create(:name => "left")
16
- @right = MINT::CIO.create(:name => "right")
17
- @center = MINT::CIO.create(:name => "center",:left=>@left,:right =>@right,:up =>@up, :down=>@down)
18
- @down.up = @center
19
- @up.down = @center
20
- @left.right = @center
21
- @right.left = @center
22
- end
23
-
24
- it 'should initialize with initiated' do
25
- @center.states.should == [:initialized]
26
- end
27
-
28
- it 'should transform to display state after sequence of position,calculate, ready events ' do
29
- @center.process_event(:position).should ==[:positioning]
30
- @center.process_event(:calculated).should ==[:positioned]
31
- @center.process_event(:display).should ==[:displayed]
32
- @center.states.should == [:displayed]
33
- end
34
-
35
-
36
-
37
- describe "highlighting" do
38
- before :each do
39
- @up.states=[:displayed]
40
- @down.states=[:displayed]
41
- @left.states=[:displayed]
42
- @right.states=[:displayed]
43
- @center.states=[:highlighted]
44
- end
45
-
46
- it 'should move highlight to up and down' do
47
- @center.process_event("up").should ==[:displayed]
48
- @up.states.should ==[:highlighted]
49
-
50
- @up.process_event("down").should == [:displayed]
51
- @center.states.should ==[:highlighted]
52
- end
53
-
54
- it 'should move highlight to left and right' do
55
- @center.process_event("left").should ==[:displayed]
56
- @left.states.should ==[:highlighted]
57
-
58
- @left.process_event("right").should == [:displayed]
59
- @center.states.should ==[:highlighted]
60
- end
61
- end
62
-
63
- describe "sync with AUI" do
64
- before :each do
65
-
66
- @up.states=[:displayed]
67
- @down.states=[:displayed]
68
- @left.states=[:displayed]
69
- @right.states=[:displayed]
70
- @center.states=[:highlighted]
71
-
72
- @a_left = MINT::AIO.new(:name => "left",:states =>[:defocused])
73
- @a_left.save!
74
-
75
- @a_right = MINT::AIO.new(:name => "right",:states =>[:defocused])
76
- @a_right.save!
77
- @a_up = MINT::AIO.new(:name => "up",:states =>[:defocused])
78
- @a_up.save!
79
- @a_down = MINT::AIO.new(:name => "down",:states =>[:defocused])
80
- @a_down.save!
81
- @a_center = MINT::AIO.new(:name => "center",:states =>[:focused], :next =>@a_down)
82
- @a_center.save!
83
-
84
- end
85
-
86
- it 'should sync highlight movements to AUI' do
87
- @center.process_event(:left).should ==[:displayed]
88
- MINT::AIO.first(:name=>"center").states.should ==[:defocused]
89
- MINT::AIO.first(:name=>"left").states.should ==[:focused]
90
- @left.states.should ==[:highlighted]
91
- end
92
-
93
- it 'should sync AUI focus movements to CUI' do
94
- @center.save!
95
- @down.save!
96
- @a_center.process_event("next").should ==[:defocused]
97
- @a_down.states.should ==[:focused]
98
- MINT::CIO.first(:name=>"center").states.should ==[:displayed]
99
- MINT::CIO.first(:name=>"down").states.should ==[:highlighted]
100
- end
101
-
102
- it 'should calculate its minimum size' do
103
- @center.text="Hello world!"
104
- @center.calculateMinimumSize
105
- @center.minwidth.should==77
106
- @center.minheight.should==26
107
- end
108
-
109
- def checkSizes(cio,x,y,width,height)
110
- cio.x.should == x
111
- cio.y.should == y
112
- cio.width.should == width
113
- cio.height.should ==height
114
- end
115
-
116
- describe "layout calculation" do
117
- before :each do
118
- @solver = Cassowary::ClSimplexSolver.new
119
-
120
- @up.states=[:initialized]
121
- @down.states=[:initialized]
122
- @left.states=[:initialized]
123
- @right.states=[:initialized]
124
-
125
-
126
- @a_left.states=[:organized]
127
- @a_right.states=[:organized]
128
- @a_up.states=[:organized]
129
- @a_down.states=[:organized]
130
- end
131
- it "should calculate sizes for CIC" do
132
- a_parent = MINT::AIC.new(:name=>"parent", :childs =>[@a_left,@a_right,@a_up,@a_down])
133
- a_parent.save!
134
-
135
- parent_cic = MINT::CIC.create(:name =>"parent",:cols=>2,:rows=>2,:x=>0,:y=>0,:width=>800,:height=>600)
136
-
137
- parent_cic.calculate_container(@solver,10)
138
-
139
- checkSizes(MINT::CIO.first(:name=>"left"),10,10,385,285)
140
- checkSizes(MINT::CIO.first(:name=>"right"),405,10,385,285)
141
- checkSizes(MINT::CIO.first(:name=>"up"),10,305,385,285)
142
- checkSizes(MINT::CIO.first(:name=>"down"),405,305,385,285)
143
- end
144
-
145
- it "should calculate sizes for nested CICs" do
146
- a_top = MINT::AIC.new(:name=>"top", :childs =>[
147
- MINT::AIC.new(:name=>"parent_left", :childs =>[@a_left,@a_right,@a_up,@a_down],:states =>[:organized]),
148
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
149
- ])
150
- a_top.save
151
-
152
- top_cic = MINT::CIC.create(:name =>"top",:cols=>2,:rows=>1,:x=>0,:y=>0,:width=>800,:height=>600)
153
- parent_left_cic = MINT::CIC.create(:name =>"parent_left",:cols=>2,:rows=>2)
154
- parent_right_cic = MINT::CIC.create(:name =>"parent_right",:cols=>2,:rows=>2)
155
-
156
- top_cic.calculate_container(@solver,10)
157
-
158
- checkSizes(MINT::CIO.first(:name=>"parent_left"),10,10,385,580)
159
- checkSizes(MINT::CIO.first(:name=>"parent_right"),405,10,385,580)
160
-
161
- checkSizes(MINT::CIO.first(:name=>"left"),20,20,177,275)
162
- checkSizes(MINT::CIO.first(:name=>"right"),207,20,177,275)
163
- checkSizes(MINT::CIO.first(:name=>"up"),20,305,177,275)
164
- checkSizes(MINT::CIO.first(:name=>"down"),207,305,177,275)
165
-
166
- end
167
-
168
- it "should consider CIC definitions without column or row definition to be positioned vertically" do
169
-
170
- a_top = MINT::AIC.new(:name=>"top", :childs =>[
171
- MINT::AIC.new(:name=>"parent_left", :childs =>[@a_left,@a_right],:states =>[:organized]),
172
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
173
- ])
174
- a_top.save!
175
-
176
- top_cic = MINT::CIC.create(:name =>"top",:x=>0,:y=>0,:width=>800,:height=>800)
177
- parent_left_cic = MINT::CIC.create(:name =>"parent_left").save!
178
- parent_right_cic = MINT::CIC.create(:name =>"parent_right").save!
179
-
180
- top_cic.calculate_container(@solver,10)
181
-
182
- checkSizes(MINT::CIO.first(:name=>"parent_left"),10,10,780,385)
183
- checkSizes(MINT::CIO.first(:name=>"parent_right"),10,405,780,385)
184
-
185
- checkSizes(MINT::CIO.first(:name=>"left"),20,20,760,177)
186
- checkSizes(MINT::CIO.first(:name=>"right"),20,207,760,177)
187
-
188
- end
189
-
190
- it "should create CIC definitions that are missing and position them vertically vertically" do
191
-
192
- a_top = MINT::AIC.new(:name=>"top", :childs =>[
193
- MINT::AIC.new(:name=>"parent_left", :childs =>[@a_left,@a_right],:states =>[:organized]),
194
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
195
- ])
196
- a_top.save!
197
-
198
- top_cic = MINT::CIC.create(:name =>"top",:x=>0,:y=>0,:width=>800,:height=>800)
199
-
200
- top_cic.calculate_container(@solver,10)
201
-
202
- checkSizes(MINT::CIO.first(:name=>"parent_left"),10,10,780,385)
203
- checkSizes(MINT::CIO.first(:name=>"parent_right"),10,405,780,385)
204
-
205
- checkSizes(MINT::CIO.first(:name=>"left"),20,20,760,177)
206
- checkSizes(MINT::CIO.first(:name=>"right"),20,207,760,177)
207
-
208
- end
209
-
210
- it "should handle nested AIC definitions" do
211
-
212
- MINT::AIC.new(:name=>"RecipeFinder_content",:states =>[:organized],
213
- :childs =>[
214
- MINT::AIC.new(:name=>"RecipeFilter",:states =>[:organized],
215
- :childs => [
216
- MINT::AIC.new(:name=>"RecipeFilter_description1",:states =>[:organized],
217
- :childs =>[
218
- MINT::AIINReference.new(:name=>"RecipeFilter_label",:label=>"Suchkriterien",:states =>[:organized]),
219
- MINT::AIOUTContext.new(:name=>"RecipeFilter_description",:states =>[:organized],:text=>"In diesem Feld können Sie mit genauen Angaben zu Ihrem Gericht-Wunsch die Suche nach Ihrem Rezeptvorschlag eingrenzen."),
220
- ]),
221
- MINT::AIC.new(:name=>"RecipeFilter_content",:states =>[:organized])
222
- ])
223
- ]).save!
224
-
225
-
226
- test = MINT::CIC.new( :name => "RecipeFinder_content", :rows => 1, :cols=> 1,:x=>0, :y=>0, :width =>800, :height => 600)
227
- test.save!
228
-
229
- test.calculate_container(@solver,10)
230
-
231
- checkSizes(MINT::CIO.first(:name=>"RecipeFilter_content"),20,305,760,275)
232
- MINT::AIO.first(:name=>"RecipeFilter_label").label.should=="Suchkriterien"
233
- end
234
-
235
- it "should calculate the layer level for nested containers" do
236
-
237
- MINT::AIC.new(:name=>"RecipeFinder_content",:states =>[:organized],
238
- :childs =>[
239
- MINT::AIC.new(:name=>"RecipeFilter",:states =>[:organized],
240
- :childs => [
241
- MINT::AIC.new(:name=>"RecipeFilter_description1",:states =>[:organized],
242
- :childs =>[
243
- MINT::AIINReference.new(:name=>"RecipeFilter_label",:states =>[:organized],:label=>"Suchkriterien"),
244
- MINT::AIOUTContext.new(:name=>"RecipeFilter_description",:states =>[:organized],:text=>"In diesem Feld können Sie mit genauen Angaben zu Ihrem Gericht-Wunsch die Suche nach Ihrem Rezeptvorschlag eingrenzen."),
245
- ]),
246
- MINT::AIC.new(:name=>"RecipeFilter_content",:states =>[:organized])
247
- ])
248
- ]).save!
249
-
250
-
251
- test = MINT::CIC.new( :name => "RecipeFinder_content", :rows => 1, :cols=> 1,:x=>0, :y=>0, :width =>800, :height => 600)
252
- test.save!
253
-
254
- test.calculate_container(@solver,10)
255
-
256
- MINT::CIO.first(:name=>"RecipeFilter_content").layer.should ==2
257
- MINT::CIO.first(:name=>"RecipeFilter_label").layer.should== 3
258
- end
259
-
260
-
261
-
262
- it "should end up with all cios set to state >positioned< after layout calculation" do
263
- @solver = Cassowary::ClSimplexSolver.new
264
- a_top = MINT::AIC.new(:name=>"top",:states =>[:organized], :childs =>[
265
- MINT::AIC.new(:name=>"parent_left", :childs =>[@a_left,@a_right],:states =>[:organized]),
266
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
267
- ])
268
- a_top.save!
269
-
270
- top_cic = MINT::CIC.create(:name =>"top",:x=>0,:y=>0,:width=>800,:height=>800)
271
- parent_left_cic = MINT::CIC.create(:name =>"parent_left").save!
272
- parent_right_cic = MINT::CIC.create(:name =>"parent_right").save!
273
-
274
- top_cic.calculate_container(@solver,10)
275
-
276
- MINT::CIC.first(:name=>"top").states.should==[:positioned]
277
- MINT::CIC.first(:name=>"parent_left").states.should==[:positioned]
278
- MINT::CIC.first(:name=>"parent_right").states.should==[:positioned]
279
- end
280
-
281
- it "should layout only elements that have not been calculated - case uncalculated leaf cios" do
282
- @solver = Cassowary::ClSimplexSolver.new
283
- a_top = MINT::AIC.new(:name=>"top",:states =>[:organized], :childs =>[
284
- MINT::AIC.new(:name=>"parent_left",:states =>[:organized], :childs =>[@a_left,@a_right]),
285
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
286
- ])
287
- a_top.save!
288
-
289
- top_cic = MINT::CIC.create(:name =>"top",:states=>[:positioned],:x=>0,:y=>0,:width=>800,:height=>800)
290
- parent_left_cic = MINT::CIC.create(:name =>"parent_left",:states=>[:positioned],:x=>10,:y=>10,:width=>300,:height=>800).save!
291
- parent_right_cic = MINT::CIC.create(:name =>"parent_right",:states=>[:positioned],:x=>310,:y=>10,:width=>470,:height=>800).save!
292
-
293
- top_cic.calculate_container(@solver,10)
294
-
295
- MINT::CIC.first(:name=>"parent_left").states.should==[:positioned]
296
- checkSizes(MINT::CIO.first(:name=>"parent_left"),10,10,300,800)
297
- checkSizes(MINT::CIO.first(:name=>"left"),20,20,280,385)
298
- checkSizes(MINT::CIO.first(:name=>"right"),20,415,280,385)
299
-
300
- MINT::CIO.first(:name=>"left").states.should==[:positioned]
301
- MINT::CIO.first(:name=>"right").states.should==[:positioned]
302
- end
303
-
304
- it "should layout uncalculated parental elements based on calculated leaf cios" do
305
- pending("get the right container calculation working that has no childs!")
306
- @solver = Cassowary::ClSimplexSolver.new
307
- a_top = MINT::AIC.new(:name=>"top",:states =>[:organized], :childs =>[
308
- MINT::AIC.new(:name=>"parent_left",:states =>[:organized], :childs =>[@a_left,@a_right]),
309
- MINT::AIC.new(:name=>"parent_right",:states =>[:organized])
310
- ])
311
- a_top.save!
312
-
313
- top_cic = MINT::CIC.create(:name =>"top",:x=>0,:y=>0,:width=>800,:height=>800)
314
- parent_left_cic = MINT::CIC.create(:name =>"parent_left").save!
315
- parent_right_cic = MINT::CIC.create(:name =>"parent_right").save!
316
- MINT::CIO.first(:name=>"left").update(:x =>20,:y=>20,:width=>280,:height=>385,:states=>[:positioned])
317
- MINT::CIO.first(:name=>"right").update(:x =>20,:y=>415,:width=>280,:height=>385,:states=>[:positioned])
318
-
319
- top_cic.calculate_position(nil,nil,@solver,0,10)
320
-
321
- checkSizes(MINT::CIO.first(:name=>"right"),20,415,280,385)
322
- checkSizes(MINT::CIO.first(:name=>"left"),20,20,280,385)
323
-
324
- MINT::CIO.first(:name=>"parent_left").states.should==[:positioned]
325
- MINT::CIO.first(:name=>"parent_right").states.should==[:positioned]
326
-
327
- checkSizes(MINT::CIO.first(:name=>"parent_left"),10,10,300,800) # results are wrong border missing!
328
- checkSizes(MINT::CIO.first(:name=>"parent_right"),10,10,0,0)
329
- end
330
-
331
- end
332
- end
333
-
334
- end
335
-
336
- describe 'mouse' do
337
- it "should highlight CIOs based on coordinates retrieved by mouse" do
338
- connection_options = { :adapter => "in_memory"}
339
- DataMapper.setup(:default, connection_options)
340
- # DataMapper.setup(:default, { :adapter => "rinda",:local =>Rinda::TupleSpace.new})
341
-
342
- a= MINT::CIO.create(:name=>"left_2x",:x=>1,:y =>1, :width=>390,:height =>800,:states => [:displayed])
343
- b= MINT::CIO.create(:name=>"right_2x",:x=>400,:y =>2, :width=>389,:height =>799,:states => [:displayed])
344
-
345
- puts b.pos.Xvalue
346
-
347
- CUIControl.fill_active_cio_cache
348
-
349
- Result = Struct.new(:x, :y)
350
-
351
- CUIControl.find_cio_from_coordinates(Result.new(10,10))
352
-
353
- a = MINT::CIO.first(:name=>"left_2x")
354
- a.states.should==[:highlighted]
355
- MINT::CIO.first(:name=>"right_2x").states.should==[:displayed]
356
-
357
- CUIControl.find_cio_from_coordinates(Result.new(410,10))
358
-
359
- MINT::CIO.first(:name=>"left_2x").states.should==[:displayed]
360
- MINT::CIO.first(:name=>"right_2x").states.should==[:highlighted]
361
-
362
- CUIControl.find_cio_from_coordinates(Result.new(395,10))
363
-
364
- MINT::CIO.first(:name=>"left_2x").states.should==[:displayed]
365
- MINT::CIO.first(:name=>"right_2x").states.should==[:displayed]
366
-
367
- end
368
- end
369
- end