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
@@ -0,0 +1,16 @@
1
+ module MINT
2
+ class AIReference < AIINDiscrete
3
+ property :refers, String
4
+ property :text, String
5
+
6
+ def getSCXML
7
+ "#{File.dirname(__FILE__)}/aireference.scxml"
8
+ end
9
+
10
+
11
+ def refers
12
+ r = super
13
+ AIO.get("aui",r)
14
+ end
15
+ end
16
+ end
@@ -1,8 +1,25 @@
1
1
  module MINT
2
- class AISingleChoice < AIChoice
2
+ class AISingleChoice < AIContainer
3
+
4
+ def getSCXML
5
+ "#{File.dirname(__FILE__)}/aisinglechoice.scxml"
6
+ end
7
+
8
+
9
+ def add(elements)
10
+
11
+ elements.each do |e|
12
+ self.children = self.children << e
13
+ e.parent = self
14
+ e.save
15
+ end
16
+
17
+ self.save
18
+ end
3
19
 
4
20
  end
5
21
 
22
+
6
23
  class ARContainer < AISingleChoice
7
24
 
8
25
  end
@@ -1,62 +1,16 @@
1
1
  module MINT
2
- class AISingleChoiceElement < AIINChoose
3
- def initialize_statemachine
4
- p "enter init"
5
- if @statemachine.blank?
6
- parser = StatemachineParser.new(self)
7
- p "after parsing"
8
- # @statemachine = parser.build_from_scxml "#{File.dirname(__FILE__)}/aisinglechoiceelement.scxml"
9
- @statemachine = Statemachine.build do
2
+ class AISingleChoiceElement < AIChoiceElement
10
3
 
11
- # superstate :AIO do # TODO not supported so far!
12
- trans :initialized,:organize, :organized
13
- trans :organized, :present, :p_t
14
- trans :organized, :suspend, :suspended
15
- trans :suspended, :present, :p_t
16
- trans :suspended, :organize, :organized
17
- state :suspended do
18
- on_entry :sync_cio_to_hidden
19
- end
20
-
21
- superstate :p_t do
22
- event :suspend, :suspended
23
- parallel :p do
24
- statemachine :s1 do
25
- superstate :presenting do
26
- state :defocused do
27
- on_entry :sync_cio_to_displayed
28
- end
29
- state :focused do
30
- on_entry :sync_cio_to_highlighted
31
- end
32
- trans :defocused,:focus,:focused
33
- trans :focused, :defocus, :defocused
34
- trans :focused, :next, :defocused, :focus_next, Proc.new { exists_next}
35
- trans :focused, :prev, :defocused, :focus_previous, Proc.new { exists_prev}
36
- trans :focused, :parent, :defocused, :focus_parent
37
- trans :focused, :drag, :dragging, :choose
38
- trans :dragging, :drop, :defocused
39
- end
40
- end
41
- statemachine :s2 do
42
- superstate :selection_H do
43
- state :unchosen do
44
- on_entry :sync_cio_to_listed
45
- event :choose, :chosen
46
- end
47
- state :chosen do
48
- on_entry [:sync_cio_to_selected,:unchoose_others]
49
- event :unchoose, :unchosen
50
- end
51
- end
52
- end
53
- end
54
- end
4
+ def getSCXML
5
+ "#{File.dirname(__FILE__)}/aisinglechoiceelement.scxml"
55
6
  end
56
- end
57
- end
58
- def remove_from_origin
59
- self.parent.childs.get(self.id).destroy
7
+
8
+ def remove_from_choice
9
+ p = self.parent
10
+ p.children = p.children.delete_if{|e| e.name.eql? self.name}
11
+ self.parent = nil
12
+ p.save
13
+ self.save
60
14
  end
61
15
 
62
16
  def choose
@@ -1,98 +1,66 @@
1
1
  module MINT
2
- class AISinglePresence < AIC
3
- def initialize_statemachine
4
- if @statemachine.blank?
5
- parser = StatemachineParser.new(self)
6
- @statemachine = parser.build_from_scxml "#{File.dirname(__FILE__)}/aisinglepresence.scxml"
7
- =begin
8
- @statemachine = Statemachine.build do
9
- trans :initialized,:organize, :organized
10
- trans :organized, :present, :presenting
11
- trans :suspended, :present, :presenting
12
- state :suspended do
13
- on_entry [:sync_cio_to_hidden]
14
- end
15
-
16
- superstate :presenting do
17
- on_entry :present_first_child
18
- on_exit :hide_children
19
- event :suspend, :suspended
20
-
21
- state :defocused do
22
- on_entry :sync_cio_to_displayed
23
- event :focus, :focused
24
- end
25
- superstate :focused do
26
- event :defocus, :defocused
27
- state :waiting do
28
- on_entry :sync_cio_to_highlighted
29
- event :enter, :entered
30
- event :next, :defocused, :focus_next, Proc.new { exists_next}
31
- event :prev, :defocused, :focus_previous, Proc.new { exists_prev}
32
- event :parent, :defocused, :focus_parent
33
- end
34
- state :entered do
35
- event :leave, :waiting
36
- event :next, :entered, :present_next_child, Proc.new { exists_next_child}
37
- event :prev, :entered, :present_previous_child, Proc.new { exists_prev_child}
38
- end
39
-
40
- end
41
- end
42
- end
43
- =end
2
+ class AISinglePresence < AIContainer
3
+ property :active_child, String
4
+
5
+ def getSCXML
6
+ "#{File.dirname(__FILE__)}/aisinglepresence.scxml"
7
+ end
8
+
9
+ def active_child
10
+ p = super
11
+
12
+ if p == nil
13
+ p = children.first
14
+ attribute_set(:active_child,p.name)
15
+
16
+ return p
17
+ else
18
+ r = AIO.get("aui",p)
19
+ return r
44
20
  end
21
+
45
22
  end
46
23
 
24
+
25
+
47
26
  # hook that is called from a child if it enters presenting state
48
27
  def child_to_presenting(child)
49
- childs.all.each do |e|
50
- e.process_event(:suspend) if e.id != child.id and not e.is_in? :suspended
51
- end
52
- end
53
-
54
- def present_first_child
55
- childs[0].process_event :present
56
28
  end
57
29
 
58
30
  def present_next_child
59
- active = false
60
- childs.each do |c|
61
- if active
62
- c.process_event(:present)
63
- active = false
64
- else
65
- active = true if c.states!=[:suspended]
66
- end
67
- end
31
+ a= active_child
32
+ a.process_event :suspend
33
+ n = a.next
34
+ attribute_set(:active_child,n.name)
35
+ n.process_event :present
68
36
  end
69
37
 
70
38
  def present_previous_child
71
- active = false
72
- childs.reverse_each do |c|
73
- if active
74
- c.process_event(:present)
75
- active = false
76
- else
77
- active = true if c.states!=[:suspended]
78
- end
79
- end
39
+ a= active_child
40
+ a.process_event :suspend
41
+ n = a.previous
42
+ attribute_set(:active_child,n.name)
43
+ n.process_event :present
80
44
  end
81
45
 
82
46
  def add_element
83
47
  f = AISingleChoiceElement.first(:new_states=> /#{Regexp.quote("dragging")}/)
84
- self.childs << f
85
- self.childs.save
48
+ self.children << f
49
+ self.children.save
86
50
  f.process_event(:drop)
87
51
  f.destroy
88
52
  end
89
53
 
54
+
55
+ # these methods implemenent navigation inside singlepresence (if entered) and do not permit to leave the interactor
90
56
  def exists_next_child
91
- self.childs.next!=nil
57
+ return true if active_child and active_child.next and not active_child.name.eql? children.last.name
58
+ false
92
59
  end
93
60
 
94
61
  def exists_prev_child
95
- self.childs.previous!=nil
62
+ return true if active_child and active_child.previous and not active_child.name.eql? children.first.name
63
+ false
96
64
  end
97
65
 
98
66
  end
@@ -0,0 +1,47 @@
1
+ <scxml initial="initialized" name="AICommand" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=514.0 h=619.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=404.0 y=43.0 w=90.00000000000001 h=30.0 -->
3
+ <transition event="organize" target="organized"></transition>
4
+ </state>
5
+ <state id="organized"><!-- node-size-and-position x=404.0 y=123.0 w=90.00000000000001 h=30.0 -->
6
+ <transition event="present" target="p"><!-- edge-path [p] pointx=0.0 pointy=-1.0 offsetx=5.0 offsety=3.0 --></transition>
7
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=405.6903639607025 y=363.4691792784482 pointx=0.0 pointy=0.0 offsetx=39.0 offsety=0.0 --></transition>
8
+ </state>
9
+ <state id="suspended"><!-- node-size-and-position x=290.0 y=569.0 w=90.00000000000001 h=30.0 -->
10
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=386.30963603929746 y=358.5308207215518 pointx=0.0 pointy=0.0 offsetx=61.0 offsety=0.0 --></transition>
11
+ <transition event="present" target="p"><!-- edge-path [p] x=305.127831987654 y=548.6135273664199 --></transition>
12
+ </state>
13
+ <parallel id="p"><!-- node-size-and-position x=20.0 y=203.0 w=400.0 h=316.0 -->
14
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=322.8721680123459 y=539.3864726335801 --></transition>
15
+ <state id="activation" initial="deactivated"><!-- node-size-and-position x=250.0 y=43.0 w=130.0 h=253.0 -->
16
+ <state id="deactivated"><!-- node-size-and-position x=20.0 y=123.0 w=90.00000000000001 h=30.0 -->
17
+ <transition cond="self.is_in?(:focused)" event="activate" target="activated"><!-- edge-path [activated] x=70.0 y=178.0 --></transition>
18
+ </state>
19
+ <state id="activated"><!-- node-size-and-position x=20.0 y=203.0 w=90.00000000000001 h=30.0 -->
20
+ <transition cond="self.is_in?(:focused)" event="deactivate" target="deactivated"><!-- edge-path [deactivated] x=50.0 y=178.0 --></transition>
21
+ </state>
22
+ <history id="H" type="deep"><!-- node-size-and-position x=50.0 y=43.0 w=30.0 h=30.0 -->
23
+ <transition target="deactivated"></transition>
24
+ </history>
25
+ </state>
26
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=43.0 w=170.0 h=173.0 -->
27
+ <onentry>
28
+ <invoke src="inform_parent_presenting" type="x-mint"></invoke>
29
+ </onentry>
30
+ <state id="focused"><!-- node-size-and-position x=20.0 y=123.0 w=130.0 h=30.0 -->
31
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=86.0 y=98.0 --></transition>
32
+ <transition cond="exists_next" event="next" target="defocused">
33
+ <invoke src="focus_next" type="x-mint"></invoke>
34
+ <!-- edge-path [defocused] x=66.0 y=98.0 --></transition>
35
+ <transition cond="exists_prev" event="prev" target="defocused">
36
+ <invoke src="focus_previous" type="x-mint"></invoke>
37
+ <!-- edge-path [defocused] x=106.0 y=98.0 --></transition>
38
+ <transition event="parent" target="defocused">
39
+ <invoke src="focus_parent" type="x-mint"></invoke>
40
+ <!-- edge-path [defocused] x=126.0 y=98.0 --></transition>
41
+ </state>
42
+ <state id="defocused"><!-- node-size-and-position x=35.0 y=43.0 w=100.0 h=30.0 -->
43
+ <transition event="focus" target="focused"><!-- edge-path [focused] x=146.0 y=98.0 --></transition>
44
+ </state>
45
+ </state>
46
+ </parallel>
47
+ </scxml>
@@ -0,0 +1,41 @@
1
+ <scxml initial="initialized" name="AIContainer" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=310.0 h=520.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=182.75 y=43.0 w=90.0 h=30.0 -->
3
+ <transition event="organize" target="organized"></transition>
4
+ </state>
5
+ <state id="organized"><!-- node-size-and-position x=182.75 y=123.0 w=90.0 h=30.0 -->
6
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=290.0 y=440.0 pointx=1.0 pointy=31.0 offsetx=86.0 offsety=-86.0 --></transition>
7
+ <transition event="present" target="presenting"></transition>
8
+ </state>
9
+ <state id="suspended"><!-- node-size-and-position x=149.75 y=490.0 w=90.0 h=30.0 -->
10
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=290.0 y=240.0 pointx=0.0 pointy=-38.0 offsetx=22.0 offsety=-60.0 --></transition>
11
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=90.0 y=510.0 --></transition>
12
+ </state>
13
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=180.0 w=200.0 h=190.0 -->
14
+ <onentry>
15
+ <invoke src="inform_parent_presenting" type="x-mint"></invoke>
16
+ <invoke src="present_children" type="x-mint"></invoke>
17
+ </onentry>
18
+ <onexit>
19
+ <invoke src="suspend_children" type="x-mint"></invoke>
20
+ </onexit>
21
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=290.0 y=500.0 --></transition>
22
+ <state id="defocused"><!-- node-size-and-position x=65.5 y=50.0 w=90.0 h=30.0 -->
23
+ <transition event="focus" target="focused"><!-- edge-path [focused] x=160.5 y=105.0 --></transition>
24
+ </state>
25
+ <state id="focused"><!-- node-size-and-position x=65.5 y=130.0 w=90.0 h=30.0 -->
26
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=140.5 y=105.0 --></transition>
27
+ <transition cond="exists_next" event="next" target="defocused">
28
+ <invoke src="focus_next" type="x-mint"></invoke>
29
+ <!-- edge-path [defocused] x=80.5 y=105.0 pointx=0.0 pointy=14.0 offsetx=2.0 offsety=-2.0 --></transition>
30
+ <transition cond="exists_prev" event="prev" target="defocused">
31
+ <invoke src="focus_previous" type="x-mint"></invoke>
32
+ <!-- edge-path [defocused] x=120.5 y=105.0 --></transition>
33
+ <transition event="child" target="defocused">
34
+ <invoke src="focus_child" type="x-mint"></invoke>
35
+ <!-- edge-path [defocused] x=100.5 y=105.0 pointx=0.0 pointy=2.0 offsetx=2.0 offsety=16.0 --></transition>
36
+ <transition event="parent" target="defocused">
37
+ <invoke src="focus_parent" type="x-mint"></invoke>
38
+ <!-- edge-path [defocused] x=60.5 y=105.0 --></transition>
39
+ </state>
40
+ </state>
41
+ </scxml>
@@ -0,0 +1,34 @@
1
+ <scxml initial="initialized" name="AIContext" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=208.0 h=426.0 -->
2
+ <state id="organized"><!-- node-size-and-position x=69.0 y=113.0 w=70.0 h=20.0 -->
3
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=114.0 y=158.0 --></transition>
4
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=165.0 y=193.0 --></transition>
5
+ </state>
6
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=253.0 w=168.0 h=153.0 -->
7
+ <onentry>
8
+ <invoke src="inform_parent_presenting" type="x-mint"></invoke>
9
+ </onentry>
10
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=94.0 y=228.0 --></transition>
11
+ <state id="focused"><!-- node-size-and-position x=59.5 y=113.0 w=60.0 h=20.0 -->
12
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=61.0 y=88.0 pointx=0.0 pointy=0.0 offsetx=-5.0 offsety=0.0 --></transition>
13
+ <transition cond="exists_next" event="next" target="defocused">
14
+ <invoke src="focus_next" type="x-mint"></invoke>
15
+ <!-- edge-path [defocused] x=101.0 y=88.0 --></transition>
16
+ <transition cond="exists_prev" event="prev" target="defocused">
17
+ <invoke src="focus_previous" type="x-mint"></invoke>
18
+ <!-- edge-path [defocused] x=121.0 y=88.0 --></transition>
19
+ <transition event="parent" target="defocused">
20
+ <invoke src="focus_parent" type="x-mint"></invoke>
21
+ <!-- edge-path [defocused] x=81.0 y=88.0 --></transition>
22
+ </state>
23
+ <state id="defocused"><!-- node-size-and-position x=59.5 y=43.0 w=60.0 h=20.0 -->
24
+ <transition event="focus" target="focused"><!-- edge-path [focused] x=141.0 y=88.0 --></transition>
25
+ </state>
26
+ </state>
27
+ <state id="suspended"><!-- node-size-and-position x=74.0 y=183.0 w=60.0 h=20.0 -->
28
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=114.0 y=228.0 --></transition>
29
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=94.0 y=158.0 --></transition>
30
+ </state>
31
+ <state id="initialized"><!-- node-size-and-position x=69.0 y=43.0 w=70.0 h=20.0 -->
32
+ <transition event="organize" target="organized"></transition>
33
+ </state>
34
+ </scxml>
@@ -0,0 +1,59 @@
1
+ <scxml initial="initialized" name="AIINContinuous" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=333.3256369726928 h=832.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=126.66281848634637 y=43.0 w=80.0 h=20.0 -->
3
+ <transition event="organize" target="organized"></transition>
4
+ </state>
5
+ <state id="organized"><!-- node-size-and-position x=131.66281848634637 y=113.0 w=70.0 h=20.0 -->
6
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=231.66281848634637 y=193.0 pointx=0.0 pointy=0.0 offsetx=4.0 offsety=0.0 --></transition>
7
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=176.66281848634637 y=158.0 --></transition>
8
+ </state>
9
+ <state id="suspended"><!-- node-size-and-position x=131.66281848634637 y=183.0 w=70.0 h=20.0 -->
10
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=156.66281848634637 y=158.0 --></transition>
11
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=176.66281848634637 y=228.0 --></transition>
12
+ </state>
13
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=253.0 w=296.5756369726928 h=559.0 -->
14
+ <onentry>
15
+ <script>
16
+
17
+ inform_parent_presenting
18
+ publish(&quot;data&quot;)
19
+ </script>
20
+ </onentry>
21
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=156.66281848634637 y=228.0 --></transition>
22
+ <state id="focused" initial="waiting"><!-- node-size-and-position x=20.0 y=113.0 w=256.57563697269273 h=426.0 -->
23
+ <transition cond="exists_prev" event="prev" target="defocused">
24
+ <invoke src="focus_previous" type="x-mint"></invoke>
25
+ <!-- edge-path [defocused] x=210.0 y=97.0 --></transition>
26
+ <transition cond="exists_next" event="next" target="defocused">
27
+ <invoke src="focus_next" type="x-mint"></invoke>
28
+ <!-- edge-path [defocused] x=120.0 y=87.0 --></transition>
29
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=260.0 y=77.0 pointx=0.0 pointy=0.0 offsetx=-5.0 offsety=0.0 --></transition>
30
+ <transition event="parent" target="defocused">
31
+ <invoke src="focus_parent" type="x-mint"></invoke>
32
+ <!-- edge-path [defocused] x=90.0 y=97.0 x=90.0 y=77.0 pointx=0.0 pointy=29.0 offsetx=0.0 offsety=3.0 --></transition>
33
+ <state id="moving"><!-- node-size-and-position x=20.0 y=113.0 w=182.15127394538547 h=293.0 -->
34
+ <transition event="halt" target="waiting"></transition>
35
+ <state id="progressing"><!-- node-size-and-position x=25.0 y=183.0 w=80.0 h=20.0 -->
36
+ <transition cond="data==max" target="max"></transition>
37
+ <transition event="regress" target="regressing"><!-- edge-path [regressing] x=71.71019580262394 y=120.96045745887999 pointx=0.0 pointy=0.0 offsetx=4.0 offsety=0.0 --></transition>
38
+ </state>
39
+ <state id="regressing"><!-- node-size-and-position x=60.0 y=43.0 w=70.0 h=20.0 -->
40
+ <transition event="progress" target="progressing"><!-- edge-path [progressing] x=91.28980419737604 y=125.03954254112001 pointx=0.0 pointy=0.0 offsetx=6.0 offsety=0.0 --></transition>
41
+ <transition cond="data == min" target="min"></transition>
42
+ </state>
43
+ <state id="max"><!-- node-size-and-position x=85.0 y=253.0 w=30.0 h=20.0 -->
44
+ <transition event="regress" target="regressing"><!-- edge-path [regressing] x=135.0 y=193.0 x=140.0 y=123.0 --></transition>
45
+ </state>
46
+ <state id="min"><!-- node-size-and-position x=20.0 y=113.0 w=30.0 h=20.0 -->
47
+ <transition event="progress" target="progressing"></transition>
48
+ </state>
49
+ </state>
50
+ <state id="waiting"><!-- node-size-and-position x=86.07563697269273 y=43.0 w=50.0 h=20.0 -->
51
+ <transition event="progress" target="progressing"><!-- edge-path [progressing] pointx=0.0 pointy=0.0 offsetx=0.0 offsety=-75.0 --></transition>
52
+ <transition event="regress" target="regressing"><!-- edge-path [regressing] pointx=0.0 pointy=0.0 offsetx=99.0 offsety=-5.0 --></transition>
53
+ </state>
54
+ </state>
55
+ <state id="defocused"><!-- node-size-and-position x=120.5 y=37.0 w=60.0 h=20.0 -->
56
+ <transition event="focus" target="focused"></transition>
57
+ </state>
58
+ </state>
59
+ </scxml>
@@ -0,0 +1,86 @@
1
+ <scxml initial="initialized" name="AIINRange" version="0.9" xmlns="http://www.w3.org/2005/07/scxml"><!-- node-size-and-position x=0.0 y=0.0 w=670.0 h=840.0 -->
2
+ <state id="initialized"><!-- node-size-and-position x=126.66281848634637 y=43.0 w=80.0 h=20.0 -->
3
+ <transition event="organize" target="organized"></transition>
4
+ </state>
5
+ <state id="organized"><!-- node-size-and-position x=131.66281848634637 y=113.0 w=70.0 h=20.0 -->
6
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=231.66281848634637 y=193.0 pointx=0.0 pointy=0.0 offsetx=4.0 offsety=0.0 --></transition>
7
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=176.66281848634637 y=158.0 --></transition>
8
+ </state>
9
+ <state id="suspended"><!-- node-size-and-position x=131.66281848634637 y=183.0 w=70.0 h=20.0 -->
10
+ <transition event="organize" target="organized"><!-- edge-path [organized] x=156.66281848634637 y=158.0 --></transition>
11
+ <transition event="present" target="presenting"><!-- edge-path [presenting] x=176.66281848634637 y=228.0 --></transition>
12
+ </state>
13
+ <state id="presenting" initial="defocused"><!-- node-size-and-position x=20.0 y=250.0 w=630.0 h=570.0 -->
14
+ <onentry>
15
+ <script>
16
+
17
+ inform_parent_presenting
18
+ publish(&quot;data&quot;)
19
+ </script>
20
+ </onentry>
21
+ <transition event="suspend" target="suspended"><!-- edge-path [suspended] x=156.66281848634637 y=228.0 --></transition>
22
+ <parallel id="focused"><!-- node-size-and-position x=20.0 y=110.0 w=580.0 h=450.0 -->
23
+ <transition cond="exists_prev" event="prev" target="defocused">
24
+ <invoke src="focus_previous" type="x-mint"></invoke>
25
+ <!-- edge-path [defocused] x=210.0 y=97.0 --></transition>
26
+ <transition cond="exists_next" event="next" target="defocused">
27
+ <invoke src="focus_next" type="x-mint"></invoke>
28
+ <!-- edge-path [defocused] x=120.0 y=87.0 --></transition>
29
+ <transition event="defocus" target="defocused"><!-- edge-path [defocused] x=260.0 y=77.0 pointx=0.0 pointy=0.0 offsetx=-5.0 offsety=0.0 --></transition>
30
+ <transition event="parent" target="defocused">
31
+ <invoke src="focus_parent" type="x-mint"></invoke>
32
+ <!-- edge-path [defocused] x=90.0 y=97.0 x=90.0 y=77.0 pointx=0.0 pointy=29.0 offsetx=0.0 offsety=3.0 --></transition>
33
+ <state id="min_moving" initial="min_waiting"><!-- node-size-and-position x=20.0 y=30.0 w=240.0 h=400.0 -->
34
+ <state id="minimum"><!-- node-size-and-position x=20.0 y=100.0 w=182.15127394538547 h=293.0 -->
35
+ <transition event="min_halt" target="min_waiting"></transition>
36
+ <state id="min_progressing"><!-- node-size-and-position x=25.0 y=183.0 w=80.0 h=20.0 -->
37
+ <transition cond="min_data==max_data" target="max_min"></transition>
38
+ <transition event="min_regress" target="min_regressing"><!-- edge-path [min_regressing] x=71.71019580262394 y=120.96045745887999 pointx=0.0 pointy=0.0 offsetx=4.0 offsety=0.0 --></transition>
39
+ </state>
40
+ <state id="min_regressing"><!-- node-size-and-position x=60.0 y=43.0 w=70.0 h=20.0 -->
41
+ <transition event="min_progress" target="min_progressing"><!-- edge-path [min_progressing] x=91.28980419737604 y=125.03954254112001 pointx=0.0 pointy=0.0 offsetx=6.0 offsety=0.0 --></transition>
42
+ <transition cond="min_data == min" target="min"></transition>
43
+ </state>
44
+ <state id="max_min"><!-- node-size-and-position x=90.0 y=250.0 w=50.0 h=20.0 -->
45
+ <transition event="min_regress" target="min_regressing"><!-- edge-path [min_regressing] x=135.0 y=193.0 x=140.0 y=123.0 --></transition>
46
+ <transition cond="min_data&lt;max_data" target="min_waiting"><!-- edge-path [min_waiting] x=220.0 y=360.0 x=220.0 y=40.0 --></transition>
47
+ </state>
48
+ <state id="min"><!-- node-size-and-position x=20.0 y=113.0 w=30.0 h=20.0 -->
49
+ <transition event="min_progress" target="min_progressing"></transition>
50
+ </state>
51
+ </state>
52
+ <state id="min_waiting"><!-- node-size-and-position x=70.0 y=30.0 w=80.0 h=20.0 -->
53
+ <transition event="min_progress" target="min_progressing"><!-- edge-path [min_progressing] pointx=0.0 pointy=0.0 offsetx=0.0 offsety=-75.0 --></transition>
54
+ <transition event="min_regress" target="min_regressing"><!-- edge-path [min_regressing] pointx=1.0 pointy=36.0 offsetx=-1.0 offsety=-11.0 --></transition>
55
+ </state>
56
+ </state>
57
+ <state id="max_moving" initial="max_waiting"><!-- node-size-and-position x=290.0 y=30.0 w=240.0 h=400.0 -->
58
+ <state id="maximum"><!-- node-size-and-position x=20.0 y=100.0 w=182.15127394538547 h=293.0 -->
59
+ <transition event="max_halt" target="max_waiting"></transition>
60
+ <state id="max_progressing"><!-- node-size-and-position x=10.0 y=180.0 w=110.0 h=20.0 -->
61
+ <transition cond="max_data==max" target="max"></transition>
62
+ <transition event="max_regress" target="max_regressing"><!-- edge-path [max_regressing] x=71.71019580262394 y=120.96045745887999 pointx=0.0 pointy=0.0 offsetx=4.0 offsety=0.0 --></transition>
63
+ </state>
64
+ <state id="max_regressing"><!-- node-size-and-position x=60.0 y=40.0 w=90.0 h=20.0 -->
65
+ <transition event="max_progress" target="max_progressing"><!-- edge-path [max_progressing] x=91.28980419737604 y=125.03954254112001 pointx=0.0 pointy=0.0 offsetx=6.0 offsety=0.0 --></transition>
66
+ <transition cond="max_data==min_data" target="min_max"></transition>
67
+ </state>
68
+ <state id="max"><!-- node-size-and-position x=90.0 y=250.0 w=50.0 h=20.0 -->
69
+ <transition event="max_regress" target="max_regressing"><!-- edge-path [max_regressing] x=135.0 y=193.0 x=140.0 y=123.0 --></transition>
70
+ </state>
71
+ <state id="min_max"><!-- node-size-and-position x=20.0 y=113.0 w=30.0 h=20.0 -->
72
+ <transition event="min_progress" target="max_progressing"></transition>
73
+ <transition cond="min_data&lt;max_data" target="max_waiting"><!-- edge-path [max_waiting] x=10.0 y=50.0 --></transition>
74
+ </state>
75
+ </state>
76
+ <state id="max_waiting"><!-- node-size-and-position x=70.0 y=30.0 w=80.0 h=20.0 -->
77
+ <transition event="max_progress" target="max_progressing"><!-- edge-path [max_progressing] x=50.0 y=70.0 pointx=0.0 pointy=0.0 offsetx=0.0 offsety=-75.0 --></transition>
78
+ <transition event="max_regress" target="max_regressing"><!-- edge-path [max_regressing] x=140.0 y=80.0 pointx=0.0 pointy=26.0 offsetx=20.0 offsety=-13.0 --></transition>
79
+ </state>
80
+ </state>
81
+ </parallel>
82
+ <state id="defocused"><!-- node-size-and-position x=120.5 y=37.0 w=60.0 h=20.0 -->
83
+ <transition event="focus" target="focused"></transition>
84
+ </state>
85
+ </state>
86
+ </scxml>