summaryrefslogtreecommitdiffstats
path: root/classes/MIDIStateManager.sc
blob: ec4b53cdf0d62444405a47c2ba458950cb43dc38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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++"]");
    });
  }
}