--- linuxsampler/trunk/src/drivers/midi/MidiInputDeviceCoreMidi.h 2007/04/07 22:32:47 1149 +++ linuxsampler/trunk/src/drivers/midi/MidiInputDeviceCoreMidi.h 2013/03/07 19:23:24 2434 @@ -1,7 +1,7 @@ /*************************************************************************** * * * Copyright (C) 2004, 2005 Grame * - * Copyright (C) 2007 Christian Schoenebeck * + * Copyright (C) 2005 - 2013 Christian Schoenebeck * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -24,7 +24,7 @@ #include -#include "../../common/global.h" +#include "../../common/global_private.h" #include "MidiInputDevice.h" namespace LinuxSampler { @@ -48,7 +48,7 @@ class ParameterName : public MidiInputPort::ParameterName { public: ParameterName(MidiInputPort* pPort) throw (Exception); - virtual void OnSetValue(String s) throw (Exception); + virtual void OnSetValue(String s) throw (Exception) OVERRIDE; }; /** MIDI Port Parameter 'CORE_MIDI_BINDINGS' @@ -59,13 +59,30 @@ class ParameterCoreMidiBindings : public DeviceRuntimeParameterStrings { public: ParameterCoreMidiBindings(MidiInputPortCoreMidi* pPort); - virtual String Description(); - virtual bool Fix(); - virtual std::vector PossibilitiesAsString(); - virtual void OnSetValue(std::vector vS) throw (Exception); + virtual String Description() OVERRIDE; + virtual bool Fix() OVERRIDE; + virtual std::vector PossibilitiesAsString() OVERRIDE; + virtual void OnSetValue(std::vector vS) throw (Exception) OVERRIDE; protected: MidiInputPortCoreMidi* pPort; }; + + /** MIDI Port Parameter 'AUTO_BIND' + * + * If enabled, the port will automatically be connected to all + * CoreMIDI source endpoints at present and future. + */ + class ParameterAutoBind : public DeviceRuntimeParameterBool { + public: + ParameterAutoBind(MidiInputPortCoreMidi* pPort); + virtual String Description() OVERRIDE; + virtual bool Fix() OVERRIDE; + virtual void OnSetValue(bool b) throw (Exception) OVERRIDE; + protected: + MidiInputPortCoreMidi* pPort; + }; + + void ProcessMidiEvents(const MIDIPacketList *pktlist); static void ReadProc(const MIDIPacketList *pktlist, void *refCon, void *connRefCon); static int pPortID; @@ -73,10 +90,15 @@ protected: MidiInputPortCoreMidi(MidiInputDeviceCoreMidi* pDevice) throw (MidiInputException); ~MidiInputPortCoreMidi(); + void connectToSource(MIDIEndpointRef source); + void connectToAllSources(); + void onNewSourceAppeared(MIDIEndpointRef source); + void onNewSourceDisappeared(MIDIEndpointRef source); friend class MidiInputDeviceCoreMidi; private: - MidiInputPortCoreMidi* pDevice; + MidiInputDeviceCoreMidi* pDevice; MIDIEndpointRef pDestination; + std::vector bindings; //TODO: shall probably be protected by a mutex (since the CoreMIDI notification callback thread might also modify it when new sources appear or disappear) friend class ParameterName; friend class ParameterCoreMidiBindings; @@ -86,9 +108,9 @@ virtual ~MidiInputDeviceCoreMidi(); // derived abstract methods from class 'MidiInputDevice' - void Listen(){} - void StopListen(){} - virtual String Driver(); + void Listen() OVERRIDE {} + void StopListen() OVERRIDE {} + virtual String Driver() OVERRIDE; static String Name(); static String Description(); static String Version(); @@ -100,6 +122,7 @@ private: MIDIClientRef hCoreMidiClient; + MIDIPortRef pBridge; }; }