summaryrefslogtreecommitdiffstats
path: root/classes/MIDIStateManager.sc
diff options
context:
space:
mode:
Diffstat (limited to 'classes/MIDIStateManager.sc')
-rw-r--r--classes/MIDIStateManager.sc41
1 files changed, 41 insertions, 0 deletions
diff --git a/classes/MIDIStateManager.sc b/classes/MIDIStateManager.sc
new file mode 100644
index 0000000..ec4b53c
--- /dev/null
+++ b/classes/MIDIStateManager.sc
@@ -0,0 +1,41 @@
+MIDIStateManager{
+
+ var <deviceStates;
+
+ *new{
+ ^super.new.initManager();
+ }
+
+ initManager{
+ deviceStates = Array();
+ }
+
+ // request a state
+ // if a stored and unconnected state is available return that, else return a
+ // new MIDIState
+ requestState{
+ arg name, uid, inPortNum, outPortNum;
+ var devicePosition = -1, stateAvailable = false;
+ deviceStates.do({|storedDevice, i|
+ if((name == storedDevice.name) && (storedDevice.connected.not),{
+ stateAvailable = true;
+ devicePosition = i;
+ });
+ });
+ if(stateAvailable && (devicePosition >= 0),{
+ deviceStates[devicePosition].connected=true;
+ ^deviceStates[devicePosition];
+ },{
+ deviceStates = deviceStates.add(
+ MIDIState.new(name, uid, inPortNum, outPortNum)
+ );
+ ^deviceStates[deviceStates.size-1];
+ });
+ }
+
+ listStates{
+ deviceStates.do({|state, i|
+ postln(i.asString++": ["++state.name++", "++state.uid++", "++state.inPortNum++", "++state.outPortNum++", "++state.connected++"]");
+ });
+ }
+}