00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __LS_MIDIINPUTDEVICE_H__
00025 #define __LS_MIDIINPUTDEVICE_H__
00026
00027 #include <stdexcept>
00028 #include <set>
00029 #include <map>
00030 #include <vector>
00031
00032 #include "../../common/global.h"
00033 #include "../../common/Exception.h"
00034 #include "../DeviceParameter.h"
00035 #include "MidiInputPort.h"
00036 #include "../../engines/Engine.h"
00037 #include "../../EventListeners.h"
00038
00039 namespace LinuxSampler {
00040
00041
00042 class MidiInputPort;
00043 class Engine;
00044 class MidiInputDeviceFactory;
00045
00052 class MidiInputException : public Exception {
00053 public:
00054 MidiInputException(const std::string& msg) : Exception(msg) {}
00055 };
00056
00066 class MidiInputDevice : public Device {
00067 public:
00068
00070
00071
00076 class ParameterActive : public DeviceCreationParameterBool {
00077 public:
00078 ParameterActive();
00079 ParameterActive(String active);
00080 virtual String Description();
00081 virtual bool Fix();
00082 virtual bool Mandatory();
00083 virtual std::map<String,DeviceCreationParameter*> DependsAsParameters();
00084 virtual optional<bool> DefaultAsBool(std::map<String,String> Parameters);
00085 virtual void OnSetValue(bool b) throw (Exception);
00086 static String Name();
00087 };
00088
00094 class ParameterPorts : public DeviceCreationParameterInt {
00095 public:
00096 ParameterPorts();
00097 ParameterPorts(String val);
00098 virtual String Description();
00099 virtual bool Fix();
00100 virtual bool Mandatory();
00101 virtual std::map<String,DeviceCreationParameter*> DependsAsParameters();
00102 virtual optional<int> DefaultAsInt(std::map<String,String> Parameters);
00103 virtual optional<int> RangeMinAsInt(std::map<String,String> Parameters);
00104 virtual optional<int> RangeMaxAsInt(std::map<String,String> Parameters);
00105 virtual std::vector<int> PossibilitiesAsInt(std::map<String,String> Parameters);
00106 virtual void OnSetValue(int i) throw (Exception);
00107 static String Name();
00108 };
00109
00110
00111
00113
00114
00115
00122 virtual void Listen() = 0;
00123
00129 virtual void StopListen() = 0;
00130
00134 virtual String Driver() = 0;
00135
00141 virtual MidiInputPort* CreateMidiPort() = 0;
00142
00143
00144
00146
00147
00148
00154 MidiInputPort* GetPort(uint iPort) throw (MidiInputException);
00155
00160 uint PortCount();
00161
00165 std::map<String,DeviceCreationParameter*> DeviceParameters();
00166
00171 void AddMidiPortCountListener(MidiPortCountListener* l);
00172
00177 void RemoveMidiPortCountListener(MidiPortCountListener* l);
00178
00179 protected:
00180 std::map<String,DeviceCreationParameter*> Parameters;
00181 std::map<int,MidiInputPort*> Ports;
00182 void* pSampler;
00183 ListenerList<MidiPortCountListener*> portCountListeners;
00184
00194 MidiInputDevice(std::map<String,DeviceCreationParameter*> DriverParameters, void* pSampler);
00195
00199 virtual ~MidiInputDevice();
00200
00206 void fireMidiPortCountChanged(int NewCount);
00207
00213 void fireMidiPortToBeRemoved(MidiInputPort* pPort);
00214
00220 void fireMidiPortAdded(MidiInputPort* pPort);
00221
00230 void AcquirePorts(uint Ports);
00231
00232 friend class ParameterActive;
00233 friend class ParameterPorts;
00234 friend class MidiInputDeviceFactory;
00235 friend class MidiInputPort;
00236 };
00237 }
00238
00239 #endif // __LS_MIDIINPUTDEVICE_H__