MINT-core 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gemtest +0 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +69 -0
- data/History.txt +3 -0
- data/MINT-core.gemspec +58 -0
- data/Manifest.txt +77 -0
- data/PostInstall.txt +7 -0
- data/README.rdoc +63 -0
- data/Rakefile +29 -0
- data/bin/mint-aui +40 -0
- data/bin/mint-cui-gfx +47 -0
- data/bin/mint-juggernaut.sh +4 -0
- data/bin/mint-tuplespace +12 -0
- data/lib/MINT-core.rb +42 -0
- data/lib/MINT-core/agent/agent.rb +28 -0
- data/lib/MINT-core/agent/aui.rb +52 -0
- data/lib/MINT-core/agent/auicontrol.rb +135 -0
- data/lib/MINT-core/agent/cui-gfx.rb +160 -0
- data/lib/MINT-core/agent/cuicontrol.rb +46 -0
- data/lib/MINT-core/mapping/complementary.rb +100 -0
- data/lib/MINT-core/mapping/mapping.rb +47 -0
- data/lib/MINT-core/mapping/on_state_change.rb +65 -0
- data/lib/MINT-core/mapping/sequential.rb +87 -0
- data/lib/MINT-core/model/aui/AIC.rb +86 -0
- data/lib/MINT-core/model/aui/AIChoice.rb +65 -0
- data/lib/MINT-core/model/aui/AIINChoose.rb +54 -0
- data/lib/MINT-core/model/aui/AIMultiChoice.rb +5 -0
- data/lib/MINT-core/model/aui/AIMultiChoiceElement.rb +56 -0
- data/lib/MINT-core/model/aui/AIO.rb +170 -0
- data/lib/MINT-core/model/aui/AIOUTDiscrete.rb +43 -0
- data/lib/MINT-core/model/aui/AISingleChoice.rb +9 -0
- data/lib/MINT-core/model/aui/AISingleChoiceElement.rb +69 -0
- data/lib/MINT-core/model/aui/AISinglePresence.rb +100 -0
- data/lib/MINT-core/model/aui/aic.png +0 -0
- data/lib/MINT-core/model/aui/aic.scxml +50 -0
- data/lib/MINT-core/model/aui/aichoice.png +0 -0
- data/lib/MINT-core/model/aui/aichoice.scxml +60 -0
- data/lib/MINT-core/model/aui/aio.png +0 -0
- data/lib/MINT-core/model/aui/aio.scxml +43 -0
- data/lib/MINT-core/model/aui/aisinglechoiceelement.png +0 -0
- data/lib/MINT-core/model/aui/aisinglechoiceelement.scxml +71 -0
- data/lib/MINT-core/model/aui/aisinglepresence.png +0 -0
- data/lib/MINT-core/model/aui/aisinglepresence.scxml +58 -0
- data/lib/MINT-core/model/aui/model.rb +50 -0
- data/lib/MINT-core/model/body/gesture_button.rb +26 -0
- data/lib/MINT-core/model/body/handgesture.rb +279 -0
- data/lib/MINT-core/model/body/head.png +0 -0
- data/lib/MINT-core/model/body/head.rb +51 -0
- data/lib/MINT-core/model/body/head.scxml +28 -0
- data/lib/MINT-core/model/cui/gfx/CIC.rb +266 -0
- data/lib/MINT-core/model/cui/gfx/CIO.rb +381 -0
- data/lib/MINT-core/model/cui/gfx/model.rb +204 -0
- data/lib/MINT-core/model/cui/gfx/screen.rb +18 -0
- data/lib/MINT-core/model/device/button.rb +20 -0
- data/lib/MINT-core/model/device/joypad.rb +30 -0
- data/lib/MINT-core/model/device/mouse.rb +171 -0
- data/lib/MINT-core/model/device/pointer.rb +85 -0
- data/lib/MINT-core/model/device/wheel.rb +51 -0
- data/lib/MINT-core/model/interactor.rb +167 -0
- data/lib/MINT-core/model/task.rb +71 -0
- data/lib/MINT-core/overrides/rinda.rb +34 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/AIC_spec.rb +69 -0
- data/spec/AISinglePresence_spec.rb +94 -0
- data/spec/MINT-core_spec.rb +11 -0
- data/spec/aio_agent_spec.rb +234 -0
- data/spec/aio_spec.rb +144 -0
- data/spec/aisinglechoice_spec.rb +152 -0
- data/spec/aisinglechoiceelement_spec.rb +106 -0
- data/spec/cio_spec.rb +369 -0
- data/spec/core_spec.rb +29 -0
- data/spec/music_spec.rb +179 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +7 -0
- data/tasks/rspec.rake +21 -0
- metadata +227 -0
@@ -0,0 +1,204 @@
|
|
1
|
+
module MINT
|
2
|
+
require "MINT-core/model/cui/gfx/CIO"
|
3
|
+
|
4
|
+
require "MINT-core/model/cui/gfx/CIC"
|
5
|
+
class Button < CIO
|
6
|
+
end
|
7
|
+
|
8
|
+
class Image < CIO
|
9
|
+
property :path, String
|
10
|
+
end
|
11
|
+
|
12
|
+
class Selectable_sync_callback < CIO_sync_callback
|
13
|
+
def sync_aio_to_unchosen
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def sync_aio_to_chosen
|
18
|
+
true
|
19
|
+
end
|
20
|
+
end
|
21
|
+
# Abstract class to handle objects that can be selected
|
22
|
+
class Selectable < CIO
|
23
|
+
def initialize_statemachine
|
24
|
+
if @statemachine.blank?
|
25
|
+
|
26
|
+
@statemachine = Statemachine.build do
|
27
|
+
|
28
|
+
superstate :CIO do
|
29
|
+
trans :initialized,:position,:positioning
|
30
|
+
trans :positioning,:calculated,:positioned, :store_calculated_values_in_model
|
31
|
+
trans :positioned, :display, :presenting
|
32
|
+
trans :disabled, :hide, :hidden
|
33
|
+
trans :hidden,:display, :presenting
|
34
|
+
|
35
|
+
|
36
|
+
parallel :p do
|
37
|
+
statemachine :s1 do
|
38
|
+
superstate :presenting do
|
39
|
+
on_entry :sync_aio_to_presented
|
40
|
+
|
41
|
+
event :hide, :hidden
|
42
|
+
|
43
|
+
state :displayed do
|
44
|
+
on_entry :sync_aio_to_defocus
|
45
|
+
end
|
46
|
+
|
47
|
+
state :highlighted do
|
48
|
+
on_entry :sync_aio_to_focused
|
49
|
+
end
|
50
|
+
|
51
|
+
trans :displayed, :highlight, :highlighted
|
52
|
+
trans :highlighted,:unhighlight, :displayed
|
53
|
+
trans :highlighted, :up, :displayed, :highlight_up
|
54
|
+
trans :highlighted, :down, :displayed, :highlight_down
|
55
|
+
trans :highlighted, :left, :displayed, :highlight_left
|
56
|
+
trans :highlighted, :right, :displayed, :highlight_right
|
57
|
+
|
58
|
+
event :disable, :disabled
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
statemachine :s2 do
|
63
|
+
superstate :selection do
|
64
|
+
trans :listed, :select, :selected
|
65
|
+
trans :selected, :select, :listed
|
66
|
+
|
67
|
+
state :listed do
|
68
|
+
on_entry :sync_aio_to_unchosen
|
69
|
+
end
|
70
|
+
|
71
|
+
state :selected do
|
72
|
+
on_entry :sync_aio_to_chosen
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def sync_event(event)
|
83
|
+
process_event(event, Selectable_sync_callback.new)
|
84
|
+
end
|
85
|
+
|
86
|
+
def sync_aio_to_unchosen
|
87
|
+
aio = MINT::AIINChoose.first(:name=>self.name)
|
88
|
+
if (aio and not aio.is_in? :unchosen)
|
89
|
+
aio.sync_event(:unchoose)
|
90
|
+
end
|
91
|
+
true
|
92
|
+
end
|
93
|
+
|
94
|
+
def sync_aio_to_chosen
|
95
|
+
aio = MINT::AIINChoose.first(:name=>self.name)
|
96
|
+
if (aio and not aio.is_in? :chosen)
|
97
|
+
aio.sync_event(:choose)
|
98
|
+
end
|
99
|
+
true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class FurnitureItem < Selectable
|
104
|
+
property :title, String
|
105
|
+
property :price, String
|
106
|
+
property :image, String
|
107
|
+
property :description, String
|
108
|
+
end
|
109
|
+
|
110
|
+
class SingleHighlight < CIC
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
class ARFrame < CIO
|
115
|
+
|
116
|
+
end
|
117
|
+
|
118
|
+
class CheckBox < Selectable
|
119
|
+
end
|
120
|
+
|
121
|
+
class CheckBoxGroup < CIC
|
122
|
+
end
|
123
|
+
|
124
|
+
class RadioButton < Selectable
|
125
|
+
end
|
126
|
+
|
127
|
+
class MarkableRadioButton < RadioButton
|
128
|
+
def initialize_statemachine
|
129
|
+
if @statemachine.blank?
|
130
|
+
|
131
|
+
@statemachine = Statemachine.build do
|
132
|
+
|
133
|
+
superstate :CIO do
|
134
|
+
trans :initialized,:position,:positioning
|
135
|
+
trans :positioning,:calculated,:positioned, :store_calculated_values_in_model
|
136
|
+
trans :positioned, :display, :presenting
|
137
|
+
trans :disabled, :hide, :hidden
|
138
|
+
trans :hidden,:display, :presenting
|
139
|
+
|
140
|
+
|
141
|
+
parallel :p do
|
142
|
+
statemachine :s1 do
|
143
|
+
superstate :presenting do
|
144
|
+
on_entry :sync_aio_to_presented
|
145
|
+
|
146
|
+
state :displayed do
|
147
|
+
on_entry :sync_aio_to_defocus
|
148
|
+
end
|
149
|
+
|
150
|
+
state :highlighted do
|
151
|
+
on_entry :sync_aio_to_focused
|
152
|
+
end
|
153
|
+
|
154
|
+
trans :displayed, :highlight, :highlighted
|
155
|
+
trans :highlighted,:unhighlight, :displayed
|
156
|
+
trans :highlighted, :up, :displayed, :highlight_up
|
157
|
+
trans :highlighted, :down, :displayed, :highlight_down
|
158
|
+
trans :highlighted, :left, :displayed, :highlight_left
|
159
|
+
trans :highlighted, :right, :displayed, :highlight_right
|
160
|
+
|
161
|
+
event :disable, :disabled
|
162
|
+
event :hide, :hidden
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
166
|
+
statemachine :s2 do
|
167
|
+
superstate :selection do
|
168
|
+
trans :listed, :select, :selected
|
169
|
+
trans :selected, :select, :listed
|
170
|
+
|
171
|
+
state :listed do
|
172
|
+
on_entry :sync_aio_to_unchosen
|
173
|
+
end
|
174
|
+
|
175
|
+
state :selected do
|
176
|
+
on_entry :sync_aio_to_chosen
|
177
|
+
end
|
178
|
+
end
|
179
|
+
end
|
180
|
+
statemachine :s3 do
|
181
|
+
superstate :marker do
|
182
|
+
trans :unmarked, :mark, :marked
|
183
|
+
trans :marked, :unmark, :unmarked
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
class RadioButtonGroup < CIC
|
194
|
+
end
|
195
|
+
|
196
|
+
class BasicText < CIO
|
197
|
+
end
|
198
|
+
|
199
|
+
class Label <CIO
|
200
|
+
end
|
201
|
+
|
202
|
+
require "MINT-core/model/cui/gfx/screen"
|
203
|
+
|
204
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module MINT
|
2
|
+
class Screen < Element
|
3
|
+
property :root, String
|
4
|
+
|
5
|
+
|
6
|
+
protected
|
7
|
+
def initialize_statemachine
|
8
|
+
if @statemachine.blank?
|
9
|
+
@statemachine = Statemachine.build do
|
10
|
+
trans :initialized, :calculate, :calculating
|
11
|
+
trans :calculating, :done, :finished
|
12
|
+
trans :finished, :calculate, :calculating
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module MINT
|
2
|
+
|
3
|
+
class HWButton < Element
|
4
|
+
|
5
|
+
def initialize_statemachine
|
6
|
+
if @statemachine.blank?
|
7
|
+
@statemachine = Statemachine.build do
|
8
|
+
|
9
|
+
trans :disconnected,:connect, :connected
|
10
|
+
trans :connected, :disconnect, :disconnected
|
11
|
+
|
12
|
+
superstate :connected do
|
13
|
+
trans :released, :press, :pressed
|
14
|
+
trans :pressed, :release, :released
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module MINT
|
2
|
+
|
3
|
+
class Joypad < Element
|
4
|
+
def initialize_statemachine
|
5
|
+
if @statemachine.blank?
|
6
|
+
@statemachine = Statemachine.build do
|
7
|
+
|
8
|
+
trans :disconnected,:connect, :connected
|
9
|
+
trans :connected, :disconnect, :disconnected
|
10
|
+
|
11
|
+
superstate :connected do
|
12
|
+
state :released
|
13
|
+
superstate :pressed do
|
14
|
+
state :left
|
15
|
+
state :right
|
16
|
+
state :down
|
17
|
+
state :up
|
18
|
+
event :release, :released
|
19
|
+
end
|
20
|
+
event :press_left, :left
|
21
|
+
event :press_right, :right
|
22
|
+
event :press_up, :up
|
23
|
+
event :press_down, :down
|
24
|
+
event :disconnect, :disconnected
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require "eventmachine"
|
2
|
+
module MINT
|
3
|
+
|
4
|
+
class MouseMode < Element
|
5
|
+
def initialize_statemachine
|
6
|
+
if @statemachine.blank?
|
7
|
+
@statemachine = Statemachine.build do
|
8
|
+
trans :selecting,:drag, :dragging
|
9
|
+
trans :dragging, :select, :selecting
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Mouse < Pointer
|
16
|
+
|
17
|
+
class CoordinateTracker
|
18
|
+
include EventMachine::Deferrable
|
19
|
+
def initialize(mouse)
|
20
|
+
@mouse = mouse
|
21
|
+
p "handling juggernait"
|
22
|
+
Redis.new.subscribe("juggernaut") do |on|
|
23
|
+
on.mon.message do |msg|
|
24
|
+
r = msg.parseJSON
|
25
|
+
if (r["channels"].eql? "pointer")
|
26
|
+
@x,@y = r["data"].split
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
def save(state)
|
32
|
+
@mouse.x=@x
|
33
|
+
@mouse.y=@y
|
34
|
+
@mouse.process_event(state)
|
35
|
+
p "stopped"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# property :x, Integer, :default => -1
|
40
|
+
# property :y, Integer, :default => -1
|
41
|
+
property :z, Integer, :default => 0
|
42
|
+
|
43
|
+
def cache_coordinates(x,y)
|
44
|
+
@x = x
|
45
|
+
@y = y
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize_statemachine
|
49
|
+
if @statemachine.blank?
|
50
|
+
|
51
|
+
@pointer_timer = nil
|
52
|
+
@wheel_timer = nil
|
53
|
+
|
54
|
+
@statemachine = Statemachine.build do
|
55
|
+
|
56
|
+
trans :disconnected,:connect, :connected
|
57
|
+
trans :connected, :disconnect, :disconnected
|
58
|
+
|
59
|
+
superstate :connected do
|
60
|
+
parallel :p do
|
61
|
+
statemachine :s1 do
|
62
|
+
superstate :pointer do
|
63
|
+
on_entry :start_coordinates_tracker
|
64
|
+
on_exit :stop_coordinates_tracker
|
65
|
+
|
66
|
+
|
67
|
+
trans :stopped, :move, :moving
|
68
|
+
trans :moving,:move, :moving
|
69
|
+
trans :moving,:stop,:stopped
|
70
|
+
|
71
|
+
state :moving do
|
72
|
+
on_entry :start_timeout_pointer # TODO no support for varibles in on_entry on_exit
|
73
|
+
on_exit :stop_timeout_pointer
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
statemachine :s2 do
|
78
|
+
superstate :right_button do # TODO we still not have name spaces :-(
|
79
|
+
trans :right_released, :right_press, :right_pressed
|
80
|
+
trans :right_pressed, :right_release, :right_released
|
81
|
+
end
|
82
|
+
end
|
83
|
+
statemachine :s3 do
|
84
|
+
superstate :left_button do # TODO we still not have name spaces :-(
|
85
|
+
trans :left_released, :left_press, :left_pressed
|
86
|
+
trans :left_pressed, :left_release, :left_released
|
87
|
+
end
|
88
|
+
end
|
89
|
+
statemachine :s4 do
|
90
|
+
superstate :middle_button do # TODO we still not have name spaces :-(
|
91
|
+
trans :middle_released, :middle_press, :middle_pressed
|
92
|
+
trans :middle_pressed, :middle_release, :middle_released
|
93
|
+
end
|
94
|
+
end
|
95
|
+
statemachine :s5 do
|
96
|
+
superstate :wheel do
|
97
|
+
trans :wheel_stopped,:regress, :regressing
|
98
|
+
trans :wheel_stopped,:progress, :progressing
|
99
|
+
|
100
|
+
trans :regressing, :regress, :regressing
|
101
|
+
trans :regressing, :stop_wheel, :wheel_stopped
|
102
|
+
trans :regressing, :progress, :progressing
|
103
|
+
|
104
|
+
trans :progressing, :progress, :progressing
|
105
|
+
trans :progressing, :stop_wheel, :wheel_stopped
|
106
|
+
trans :progressing, :regress, :regressing
|
107
|
+
|
108
|
+
state :regressing do
|
109
|
+
on_entry :start_timeout_wheel
|
110
|
+
on_exit :stop_timeout_wheel
|
111
|
+
end
|
112
|
+
state :progressing do
|
113
|
+
on_entry :start_timeout_wheel
|
114
|
+
on_exit :stop_timeout_wheel
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def start_timeout_wheel
|
124
|
+
if not @wheel_timer
|
125
|
+
@wheel_timer = EventMachine::Timer.new(0.3) do
|
126
|
+
process_event("stop_wheel")
|
127
|
+
end
|
128
|
+
else
|
129
|
+
puts "wheel timer already started!!!"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def stop_timeout_wheel
|
134
|
+
stop_timeout(@wheel_timer)
|
135
|
+
end
|
136
|
+
|
137
|
+
def start_timeout_pointer
|
138
|
+
# @tracker = CoordinateTracker.new(self)
|
139
|
+
# @tracker.callback do |x|
|
140
|
+
# @tracker.save(state)
|
141
|
+
# end
|
142
|
+
|
143
|
+
if not @pointer_timer
|
144
|
+
@pointer_timer = EventMachine::Timer.new(0.3) do
|
145
|
+
@mouse.x=@x
|
146
|
+
@mouse.y=@y
|
147
|
+
@mouse.process_event("stop")
|
148
|
+
|
149
|
+
# @tracker.set_deferred_status :succeeded, "stop"
|
150
|
+
end
|
151
|
+
else
|
152
|
+
puts "pointer timer already started!!!"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
|
157
|
+
def stop_timeout_pointer
|
158
|
+
stop_timeout(@pointer_timer)
|
159
|
+
end
|
160
|
+
|
161
|
+
def stop_timeout(timer)
|
162
|
+
if timer
|
163
|
+
timer.cancel
|
164
|
+
timer = nil
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|