11namespace tracktion {
inline namespace engine
27VirtualMidiInputDevice::VirtualMidiInputDevice (
Engine& e,
juce::String deviceName, DeviceType devType,
30 :
TRANS(
"Virtual MIDI Input"),
31 deviceName, deviceIDToUse),
32 useAllInputs (isAllMIDIIns),
36 defaultMonitorMode = MonitorMode::on;
41VirtualMidiInputDevice::~VirtualMidiInputDevice()
43 notifyListenersOfDeletion();
49 if (! isTrackDevice() && retrospectiveBuffer ==
nullptr)
55juce::String VirtualMidiInputDevice::openDevice() {
return {}; }
56void VirtualMidiInputDevice::closeDevice() {}
58void VirtualMidiInputDevice::setEnabled (
bool b)
60 if (b && isTrackDevice())
63 MidiInputDevice::setEnabled (b);
66void VirtualMidiInputDevice::setMIDIInputSourceDevices (
const juce::StringArray deviceIDs)
68 if (deviceIDs != inputDeviceIDs)
70 inputDeviceIDs = deviceIDs;
76void VirtualMidiInputDevice::toggleMIDIInputSourceDevice (
const juce::String& deviceIDToToggle)
78 auto devices = inputDeviceIDs;
80 if (devices.contains (deviceIDToToggle))
83 devices.add (deviceIDToToggle);
85 setMIDIInputSourceDevices (devices);
88void VirtualMidiInputDevice::loadProps()
90 juce::String propName = isTrackDevice() ?
"TRACKTION_TRACK_DEVICE" : getName();
92 auto n = engine.
getPropertyStorage().getXmlPropertyItem (SettingID::virtualmidiin, propName);
94 if (! isTrackDevice() && n !=
nullptr)
96 inputDeviceIDs.
addTokens (n->getStringAttribute (
"inputDevices"),
";", {});
97 useAllInputs = n->getBoolAttribute (
"useAllInputs",
false);
100 MidiInputDevice::loadMidiProps (n.get());
103void VirtualMidiInputDevice::saveProps()
107 n.setAttribute (
"inputDevices", inputDeviceIDs.
joinIntoString (
";"));
108 n.setAttribute (
"useAllInputs", useAllInputs);
109 MidiInputDevice::saveMidiProps (n);
111 juce::String propName = isTrackDevice() ?
"TRACKTION_TRACK_DEVICE" : getName();
113 engine.
getPropertyStorage().setXmlPropertyItem (SettingID::virtualmidiin, propName, n);
116void VirtualMidiInputDevice::handleIncomingMidiMessage (
const juce::MidiMessage& m)
121 sendMessageToInstances (message);
124void VirtualMidiInputDevice::handleMessageFromPhysicalDevice (MidiInputDevice& dev,
const juce::MidiMessage& m)
126 if (useAllInputs || inputDeviceIDs.
contains (dev.getDeviceID()))
127 handleIncomingMidiMessage (m);
132 if (getDeviceType() == trackMidiDevice)
133 return getAlias() +
" (" + getType() +
")";
String joinIntoString(StringRef separatorString, int startIndex=0, int numberOfElements=-1) const
bool contains(StringRef stringToLookFor, bool ignoreCase=false) const
void removeString(StringRef stringToRemove, bool ignoreCase=false)
int addTokens(StringRef stringToTokenise, bool preserveQuotedStrings)
The Engine is the central class for all tracktion sessions.
PropertyStorage & getPropertyStorage() const
Returns the PropertyStorage user settings customisable XML file.
virtual void changed()
This should be called to send a change notification to any SelectableListeners that are registered wi...
#define TRANS(stringLiteral)