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
data/Rakefile CHANGED
@@ -14,23 +14,22 @@ $hoe = Hoe.spec 'MINT-core' do
14
14
  self.developer 'Sebastian Feuerstack', 'Sebastian@Feuerstack.org'
15
15
  self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
16
  self.rubyforge_name = self.name # TODO this is default value
17
- self.extra_deps = [['dm-rinda-adapter','~> 0.1.0'],
18
- ['MINT-statemachine','~> 1.2.3'],
19
- ['MINT-scxml','~> 1.0.0'],
20
- ['cassowary','~> 1.0.0'],
21
- ["dm-core","~>0.10.2" ],
22
- ["dm-rinda-adapter", "~>0.1.2"],
23
- ["cassowary","~>1.0.0"],
24
- ["eventmachine", "~>0.12.10"],
25
- ["rake","0.9.2.2"],
26
- ["rmagick","~>2.12.2"],
27
- ["json","~>1.5.1"],
28
- ["redis","~>2.2.1"],
29
- ["dm-types","~>0.10.2"]]
30
- self.extra_dev_deps = [["rspec","1.3.1"],
31
- ["hoe", "~>2.9.6"],
32
- ["newgem","~>1.5.3"],
33
- [ "rdoc","~>3.11"] ]
17
+ # self.extra_deps = [['dm-redis-adapter','~> 0.1.2'],
18
+ # ['MINT-statemachine','~> 1.2.3'],
19
+ # ['MINT-scxml','~> 1.0.0'],
20
+ # ['cassowary','~> 1.0.1'],
21
+ # ["dm-core","~>1.2.0" ],
22
+ # ["cassowary","~>1.0.1"],
23
+ # ["eventmachine", "~>0.12.10"],
24
+ # ["rake","0.9.2.2"],
25
+ # ["rmagick","~>2.12.2"],
26
+ # ["json","~>1.5.1"],
27
+ # ["redis","~>2.2.1"],
28
+ # ["dm-types","~>1.2.0"],
29
+ # ["dm-serializer","~>1.2.0"]]
30
+ # self.extra_dev_deps = [["rspec","1.3.1"],
31
+ # ["newgem","~>1.5.3"],
32
+ # [ "rdoc","~>3.11"] ]
34
33
 
35
34
 
36
35
  end
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/ruby -d
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
  require 'MINT-core'
@@ -20,10 +20,10 @@ a.addMapping(gesture_previous)
20
20
  #gesture_narrow= Complementary.new(HandGesture,"narrowed",{ AIO =>"focused"},:child)
21
21
  #a.addMapping(gesture_narrow)
22
22
 
23
- gesture_confirmed= ComplementarySendEvent.new(HandGesture,"confirmed",{ AIINChoose =>"focused"},:choose)
23
+ gesture_confirmed= ComplementarySendEvent.new(HandGesture,"confirmed",{ AIChoiceElement =>"focused"},:choose)
24
24
  a.addMapping(gesture_confirmed)
25
25
 
26
- mouse_confirmed= ComplementarySendEvent.new(Pointer,"selected",{ AIINChoose =>"focused"},:choose)
26
+ mouse_confirmed= ComplementarySendEvent.new(Pointer,"selected",{ AIChoiceElement =>"focused"},:choose)
27
27
  a.addMapping(mouse_confirmed)
28
28
 
29
29
  #sync_unhighlight = Synchronize.new(AIO,"presented",CIO, :unhighlight, :displayed)
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env ruby
1
+ #!/usr/bin/ruby -d
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
  require 'MINT-core'
@@ -20,7 +20,7 @@ mapping_cache1 = ExecuteOnStateChange.new(CIO,[:hidden],CUIControl.method(:fill_
20
20
  l.addMapping(mapping_cache1)
21
21
 
22
22
 
23
- realityframe = ExecuteOnStateChange.new(AIINChoose,["dragging"],l.method(:wait_border_crossing))
23
+ realityframe = ExecuteOnStateChange.new(AIChoiceElement,["dragging"],l.method(:wait_border_crossing))
24
24
  l.addMapping(realityframe)
25
25
 
26
26
 
@@ -45,3 +45,4 @@ l.addMapping(realityframe)
45
45
 
46
46
  l.run
47
47
 
48
+
File without changes
File without changes
@@ -2,26 +2,30 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module MINTCore
5
- VERSION = '1.0.1'
5
+ VERSION = '2.0.0'
6
6
  end
7
7
 
8
8
  require 'rubygems'
9
9
  require "bundler/setup"
10
10
  require 'statemachine'
11
11
  require "cassowary"
12
- require 'RMagick'
13
- require "rinda/tuplespace"
12
+ #require 'RMagick'
14
13
  require 'drb/drb'
14
+ require 'redis'
15
15
  require 'dm-core'
16
+ require 'dm-serializer'
16
17
  require 'dm-types'
17
18
  require "MINT-scxml"
19
+ require "eventmachine"
20
+ require 'em-hiredis'
21
+ require 'multi_json'
22
+ require 'oj'
23
+ #MultiJson.engine = :oj
18
24
 
25
+ require "MINT-core/connector/redis_connector"
19
26
  require "MINT-core/agent/agent"
20
- require "MINT-core/mapping/mapping"
21
- require "MINT-core/mapping/on_state_change"
22
- require "MINT-core/mapping/complementary"
23
- require "MINT-core/mapping/sequential"
24
27
 
28
+ require "MINT-core/model/interactor_helpers"
25
29
  require "MINT-core/model/interactor"
26
30
  require "MINT-core/model/task"
27
31
  require "MINT-core/agent/auicontrol"
@@ -31,12 +35,46 @@ require "MINT-core/agent/cui-gfx"
31
35
  require "MINT-core/model/aui/model"
32
36
  require "MINT-core/model/cui/gfx/model"
33
37
 
34
- require "MINT-core/model/device/pointer"
35
- require "MINT-core/model/device/button"
36
- require "MINT-core/model/device/wheel"
37
- require "MINT-core/model/device/joypad"
38
- require "MINT-core/model/device/mouse"
38
+ require "MINT-core/model/ir/ir"
39
+ require "MINT-core/model/ir/irmode"
40
+ require "MINT-core/model/ir/irmedia"
41
+ require "MINT-core/model/ir/screen"
42
+ require "MINT-core/model/ir/browserscreen"
43
+ require "MINT-core/model/ir/pointer"
44
+
45
+ #require "MINT-core/model/device/button"
46
+ #require "MINT-core/model/device/wheel"
47
+ #require "MINT-core/model/device/joypad"
48
+ #require "MINT-core/model/device/mouse"
49
+ require "MINT-core/model/ir/mouse"
50
+
51
+ #require "MINT-core/model/body/gesture_button"
52
+ #require "MINT-core/model/body/handgesture"
53
+ require "MINT-core/model/ir/body/body"
54
+ require "MINT-core/model/ir/body/hand"
55
+ require "MINT-core/model/ir/body/fingertip"
56
+
57
+ require "MINT-core/model/ir/body/pose"
58
+ require "MINT-core/model/ir/body/OneHandPoseNavigation"
59
+ require "MINT-core/model/ir/body/head"
60
+
61
+
62
+ require "MINT-core/mapping/mapping"
63
+ require "MINT-core/mapping/sequential"
64
+ require "MINT-core/mapping/complementary_mapping"
65
+ require "MINT-core/mapping/sequential_mapping"
66
+ require "MINT-core/mapping/observation/observation"
67
+ require "MINT-core/mapping/observation/negation_observation"
68
+ require "MINT-core/mapping/action/action"
69
+ require "MINT-core/mapping/action/backend_action"
70
+ require "MINT-core/mapping/action/event_action"
71
+ require "MINT-core/mapping/action/bind_action"
72
+
73
+ require "MINT-core/manager/mapping_parser"
74
+ require "MINT-core/manager/mapping_manager"
75
+ require "MINT-core/manager/mapping_server"
76
+ require "MINT-core/manager/scxml_server"
77
+ require "MINT-core/manager/scxml_client"
78
+ require "MINT-core/manager/position_updater"
79
+
39
80
 
40
- require "MINT-core/model/body/gesture_button"
41
- require "MINT-core/model/body/handgesture"
42
- require "MINT-core/model/body/head"
@@ -3,7 +3,7 @@ module MINT
3
3
  class Agent
4
4
  attr_reader :running_mappings
5
5
 
6
- def initialize(connection_options = { :adapter => "rinda", :host =>"localhost",:port=>4000})
6
+ def initialize(connection_options = { :adapter => "redis", :host =>"localhost",:port=>6379})
7
7
  DataMapper.setup(:default, connection_options)
8
8
  DRb.start_service
9
9
  @running_mappings = []
@@ -1,19 +1,5 @@
1
1
 
2
2
 
3
- module DataMapper
4
- class Collection
5
- def each
6
- super do |resource|
7
- begin
8
- # original, resource.collection = resource.collection, self
9
- yield resource
10
- ensure
11
- # resource.collection = original
12
- end
13
- end
14
- end
15
- end
16
- end
17
3
 
18
4
  class AUIAgent < MINT::Agent
19
5
  include AUIControl
@@ -1,43 +1,96 @@
1
1
 
2
2
  module AUIControl
3
- include MINT
4
-
3
+ include MINT
4
+
5
+ # called from AISingleChoice mapping
6
+ def AUIControl.present_children(aisc)
7
+ sc = AISingleChoice.first(:name=>aisc['name'])
8
+ sc.children.each do |aio|
9
+ aio.process_event :present
10
+ end
11
+ end
12
+
13
+ def AUIControl.suspend_all
14
+ aics = AIContainer.all(:parent =>nil)
15
+ aics.each do |aic|
16
+ p "Suspend AIC: #{aic.name}"
17
+ aic.process_event :suspend
18
+ end
19
+ end
20
+
21
+ def AUIControl.suspend_others(ais)
22
+ ais = AISinglePresence.first(:name=>ais['name'])
23
+ ais.children.each do |aio|
24
+ aio.process_event :suspend if not aio.name.eql? ais.active_child.name
25
+ end
26
+ end
27
+
5
28
  # ensures that all prev/next relationships are setup properlyin one complete sequence
6
- def AUIControl.organize(aio,parent_aio = nil, layer = 0)
7
-
8
- if (aio.kind_of? AIC)
9
- aio.entry = aio.childs[0]
10
- last = aio
11
- aio.childs.each do |child|
12
- last.next = child
13
- child.previous = last
14
-
15
- last = organize(child,aio,layer+1)
29
+ def AUIControl.organize_sub(aio,parent_aio = nil, layer = 0)
30
+
31
+ last_child = nil
32
+ if (aio.kind_of? MINT::AIContainer)
33
+ # aio.entry = aio.children[0]
34
+ prev = aio
35
+ aio.children.each do |child|
36
+ if (child.instance_of? MINT::AIReference) # skip AIReferences for prev/next navigation
37
+ child.process_event("organize")
38
+ next
39
+ end
40
+ prev.next = child.name
41
+ prev.process_event("organize") #if not prev.kind_of? MINT::AIContainer
42
+
43
+ child.previous = prev.name
44
+
45
+ prev = organize_sub(child,aio,layer+1)
46
+ last_child = child
16
47
  end
17
- aio.process_event("organize")
18
- return last
48
+
49
+ #prev.process_event("organize")
50
+ return prev
19
51
  else
20
- aio.process_event("organize")
21
52
  return aio
22
53
  end
23
54
  end
24
-
55
+
56
+ def AUIControl.organize(aio,parent_aio = nil, layer = 0)
57
+ r= organize_sub(aio,parent_aio, layer )
58
+ r.process_event("organize")
59
+ end
60
+
61
+ def AUIControl.organize_new (aio,prev = nil, layer = 0)
62
+ aio.previous=prev.name if prev
63
+
64
+ if (aio.kind_of? MINT::AIContainer)
65
+ prev_child = aio
66
+ aio.children.each do |child|
67
+ organize(child,prev_child)
68
+ prev_child = child
69
+ end
70
+ if aio.children
71
+ aio.next=aio.children[0].name
72
+ end
73
+ end
74
+ aio.process_event "organize"
75
+ end
76
+
77
+
25
78
  # connects all aios on the same level
26
79
  def AUIControl.organize2(aio,parent_aio = nil, layer = 0)
27
- # if layer == 0
80
+ # if layer == 0
28
81
  # aio.next = aio
29
82
  # aio.previous = aio
30
- # end
31
-
32
- if (aio.kind_of? AIC)
33
- first = aio.childs.first
83
+ # end
84
+
85
+ if (aio.kind_of? MINT::AIContainer)
86
+ first = aio.children.first
34
87
  last = nil
35
88
 
36
- aio.childs.each do |child|
89
+ aio.children.each do |child|
37
90
  if last
38
- last.next = child
91
+ last.next = child.name
92
+ child.previous = last.name
39
93
  end
40
- child.previous = last
41
94
  copy = child
42
95
  organize2(copy,nil,layer+1)
43
96
  last = child
@@ -48,7 +101,7 @@ module AUIControl
48
101
  end
49
102
  p "organized #{aio.name}"
50
103
  end
51
-
104
+
52
105
  # Searches for the common root aic that contains all tasks of {elements}.
53
106
  # During the search towards the root it activates all relevant containters in the
54
107
  # {Layout}model in case {activate} is set to true.
@@ -58,11 +111,11 @@ module AUIControl
58
111
  # @return [String] name of common root aic
59
112
  #
60
113
  def AUIControl.find_common_aic(tasks,activate=false, parents ={ })
61
-
114
+
62
115
  if tasks.length==1
63
116
  return tasks[0]
64
117
  end
65
-
118
+
66
119
  tasks.each do |e|
67
120
  p "processing #{e}"
68
121
  aio = AIO.first(:name=>e)
@@ -74,20 +127,20 @@ module AUIControl
74
127
  end
75
128
  if aio.parent and not parents[aio.parent.name]
76
129
  parents[aio.parent.name]=aio.name
77
- elsif aio.parent and parents[aio.parent.name]
130
+ elsif aio.parent and parents[aio.parent.name]
78
131
  # already existing parent, thus all further saved parents of this task needs to be removed
79
132
  puts "parents #{parents.inspect}"
80
- parents.each {|k,v|
133
+ parents.each {|k,v|
81
134
  if (v.eql? parents[aio.parent.name] or v.eql? aio.name)
82
135
  parents.delete(k)
83
- p "delete key #{k} value #{v}"
136
+ p "delete key #{k} value #{v}"
84
137
  end
85
138
  }
86
139
  parents[aio.parent.name]=aio.name
87
140
  # parents.delete(parents.invert[ parents[aio.parent.name]])
88
141
  end
89
142
  end
90
-
143
+
91
144
  p "next step"
92
145
  if parents.length>0
93
146
  return find_common_aic(parents.keys,activate,parents)
@@ -95,26 +148,26 @@ module AUIControl
95
148
  return tasks.first
96
149
  end
97
150
  end
98
-
151
+
99
152
  def AUIControl.find_common(tasks)
100
-
153
+
101
154
  if tasks.length==1
102
155
  return tasks[0]
103
156
  end
104
-
157
+
105
158
  parents ={ }
106
-
159
+
107
160
  tasks.each do |name|
108
161
  t = AIO.first(:name=>name)
109
162
  tname = t.name
110
163
  parents[tname] = [tname]
111
-
164
+
112
165
  while (t.parent)
113
166
  parents[tname].push t.parent.name
114
167
  t = t.parent
115
168
  end
116
169
  end
117
-
170
+
118
171
  lasttaskname = nil
119
172
  while 1==1
120
173
  taskname = nil
@@ -123,7 +176,7 @@ module AUIControl
123
176
  taskname = parents[k].pop
124
177
  else
125
178
  comp = parents[k].pop
126
- if not comp.eql? taskname
179
+ if not comp.eql? taskname
127
180
  return lasttaskname
128
181
  end
129
182
  end
@@ -16,7 +16,7 @@ class LayoutAgent < MINT::Agent
16
16
  # }
17
17
 
18
18
 
19
- root_cio = CIO.first(:name=>result.root)
19
+ root_cio = CIO.first(:name=>result['root'])
20
20
 
21
21
 
22
22
  # p "#{root_le} root:#{root}"
@@ -33,7 +33,7 @@ class LayoutAgent < MINT::Agent
33
33
  root_cio.calculate_container(@solver,20)
34
34
 
35
35
  CUIControl.fill_active_cio_cache
36
-
36
+ true
37
37
  end
38
38
 
39
39
 
@@ -129,7 +129,7 @@ class LayoutAgent < MINT::Agent
129
129
 
130
130
  Redis.new.subscribe("juggernaut") do |on|
131
131
  on.message do |c,msg|
132
- r = JSON.parse(msg)
132
+ r = MultiJson.decode msg
133
133
  if (r["channels"].include? "pointer")
134
134
  if /POS/.match(r["data"])
135
135
  z,x,y = /POS-(\d+),(\d+)/.match(r["data"]).to_a.map &:to_i
@@ -1,46 +1,116 @@
1
1
  module CUIControl
2
2
  include MINT
3
3
 
4
- @active_cios = nil
5
-
4
+ @active_cios = []
5
+ @cached_highlighted = nil
6
+
7
+ def CUIControl.clearHighlighted
8
+ @cached_highlighted = nil
9
+
10
+ end
11
+ def CUIControl.retrieveHighlighted
12
+ if (@cached_highlighted)
13
+ check = MINT::CIO.get(@cached_highlighted)
14
+ if (check.is_in? "highlighted")
15
+ return check
16
+ end
17
+ end
18
+
19
+ new_highlighted = MINT::CIO.first(:states=>/highlighted/)
20
+
21
+ if new_highlighted
22
+ @cached_highlighted= new_highlighted.name
23
+ else
24
+ @cached_highlighted = nil
25
+ end
26
+
27
+ return new_highlighted
28
+ end
29
+
6
30
  def CUIControl.find_cio_from_coordinates(result)
7
- puts "mouse stopped #{result.inspect}"
8
- if result == nil or @active_cios == nil # we have not finished cui poition calculation, but we already received a mouse stopped event
9
- return
31
+ # puts "mouse stopped #{result.inspect}"
32
+ if result == nil or @active_cios.length ==0# we have not finished cui poition calculation, but we already received a mouse stopped event
33
+ return true
34
+
10
35
  end
11
- x = result.x
12
- y = result.y
36
+ x = result["x"]
37
+ y = result["y"]
13
38
 
14
- highlighted_cio = CIO.first(:abstract_states=>/highlighted/)
39
+ highlighted_cio = retrieveHighlighted()
15
40
 
16
41
  if (highlighted_cio!=nil && highlighted_cio.x<=x && highlighted_cio.y<=y && highlighted_cio.x+highlighted_cio.width>=x && highlighted_cio.y+highlighted_cio.height>=y)
17
- puts "unchanged"
18
- return
42
+ # puts "unchanged"
43
+ return true
19
44
  else
45
+
20
46
  found = @active_cios.select{ |e| e.x <=x && e.y<=y && e.x+e.width>=x && e.y+e.height>=y}
21
-
22
- puts "found #{found.inspect}"
23
-
47
+
48
+ # puts "found #{found.inspect}"
49
+
24
50
  if (highlighted_cio)
25
- highlighted_cio.process_event("unhighlight") # old focus
26
- puts "unhighlight:"+highlighted_cio.name
51
+ highlighted_cio.process_event("unhighlight")
52
+ MINT::AIO.get(highlighted_cio.name).process_event("defocus")
53
+ # old focus
54
+ # puts "unhighlight:"+highlighted_cio.name
27
55
  # @highlighted_cio.update(:state=>"calculated") # old focus
28
56
  end
29
-
57
+
30
58
  if (found.first)
31
- highlighted_cio = CIO.first(:name=>found.first.name)
59
+ highlighted_cio = MINT::CIO.get(found.first.name)
32
60
  highlighted_cio.process_event("highlight")
33
- puts "highlighted:"+highlighted_cio.name
61
+ MINT::AIO.get(highlighted_cio.name).process_event("focus")
62
+ # puts "highlighted:"+highlighted_cio.name
34
63
  else
35
- puts "no highlight"
36
- return
64
+ # puts "no highlight"
65
+ return true
37
66
  end
38
67
  end
68
+ return true
69
+ end
70
+
71
+ def CUIControl.refresh_all
72
+ aics = AIO.all(:parent =>nil).map &:name
73
+ aics.each do |name|
74
+ cio = CIO.get(name)
75
+ p "refrehsing #{cio.name}"
76
+ cio.process_event :refresh
77
+ end
39
78
  end
40
79
 
41
80
  def CUIControl.fill_active_cio_cache(result=nil)
42
- @active_cios = CIO.all.select{ |e| e.is_in?(:presenting) and not e.kind_of? MINT::CIC }
43
- puts "CIO cache initialized with #{@active_cios.length} elements"
44
- end
45
-
81
+ @active_cios = CIO.all.select{ |e| e.is_in?(:displaying) and e.highlightable}
82
+ puts "CIO cache initialized with #{@active_cios.inspect} elements"
83
+ end
84
+
85
+ def CUIControl.add_to_cache(cio)
86
+ if cio['highlightable'] and not @active_cios.index{|x|x.name==cio["name"]}
87
+ c = CIO.get(cio["name"])
88
+ @active_cios << c
89
+ puts "Added #{cio['name']} to CIO cache #{c.x}/#{c.y}"
90
+
91
+ end
92
+ return true
93
+ end
94
+
95
+ def CUIControl.update_cache(cio)
96
+ index = @active_cios.index{|x|x.name==cio["name"]}
97
+ if index
98
+ c = CIO.get(cio["name"])
99
+ @active_cios[index] = c
100
+ puts "Updated#{cio['name']} to CIO cache #{c.x}/#{c.y} #{c.width}/#{c.height}"
101
+
102
+ end
103
+ return true
104
+ end
105
+
106
+
107
+ def CUIControl.remove_from_cache(cio)
108
+ p "remove cache"
109
+ if cio['highlightable']
110
+ @active_cios.delete_if{|x| x.name == cio['name']}
111
+ puts "Removed #{cio['name']} from CIO cache "
112
+ end
113
+ return true
114
+ end
115
+
46
116
  end