00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef LS_INSTRUMENT_EDITOR_H
00022 #define LS_INSTRUMENT_EDITOR_H
00023
00024 #include "../common/global.h"
00025 #include "../common/Thread.h"
00026 #include "../drivers/midi/VirtualMidiDevice.h"
00027
00028 #include <set>
00029
00030 namespace LinuxSampler {
00031
00032
00033 class InstrumentEditorListener;
00034
00050 class InstrumentEditor : public VirtualMidiDevice, protected Thread {
00051 public:
00052
00054
00055
00056
00073 virtual int Main(void* pInstrument, String sTypeName, String sTypeVersion, void* pUserData = NULL) = 0;
00074
00085 virtual bool IsTypeSupported(String sTypeName, String sTypeVersion) = 0;
00086
00090 virtual String Name() = 0;
00091
00095 virtual String Version() = 0;
00096
00101 virtual String Description() = 0;
00102
00103
00104
00106
00107
00108
00122 void NotifySamplesToBeRemoved(std::set<void*> Samples);
00123
00129 void NotifySamplesRemoved();
00130
00151 void NotifyDataStructureToBeChanged(void* pStruct, String sStructType);
00152
00162 void NotifyDataStructureChanged(void* pStruct, String sStructType);
00163
00190 void NotifySampleReferenceChanged(void* pOldSample, void* pNewSample);
00191
00201 void Launch(void* pInstrument, String sTypeName, String sTypeVersion, void* pUserData = NULL);
00202
00206 void AddListener(InstrumentEditorListener* pListener);
00207
00211 void RemoveListener(InstrumentEditorListener* pListener);
00212
00216 InstrumentEditor();
00217
00221 virtual ~InstrumentEditor();
00222
00223 protected:
00224 std::set<InstrumentEditorListener*> listeners;
00225
00226
00227 virtual int Main();
00228 private:
00229 void* pInstrument;
00230 String sTypeName;
00231 String sTypeVersion;
00232 void* pUserData;
00233 };
00234
00243 class InstrumentEditorListener {
00244 public:
00252 virtual void OnInstrumentEditorQuit(InstrumentEditor* pSender) = 0;
00253
00265 virtual void OnSamplesToBeRemoved(std::set<void*> Samples, InstrumentEditor* pSender) = 0;
00266
00275 virtual void OnSamplesRemoved(InstrumentEditor* pSender) = 0;
00276
00289 virtual void OnDataStructureToBeChanged(void* pStruct, String sStructType, InstrumentEditor* pSender) = 0;
00290
00302 virtual void OnDataStructureChanged(void* pStruct, String sStructType, InstrumentEditor* pSender) = 0;
00303
00313 virtual void OnSampleReferenceChanged(void* pOldSample, void* pNewSample, InstrumentEditor* pSender) = 0;
00314 };
00315
00316 }
00317
00318 #endif // LS_INSTRUMENT_EDITOR_H