diff options
author | RJ Ryan <rryan@mixxx.org> | 2013-06-19 00:46:54 -0400 |
---|---|---|
committer | RJ Ryan <rryan@mixxx.org> | 2013-06-19 00:46:54 -0400 |
commit | 25d57b59dff3947212909634864dd82365c9606b (patch) | |
tree | f0d0f8a048f8ed2f45c5ff015fc96891662f72f1 /src/controllers/midi/midicontroller.h | |
parent | e50f9f168fa08f2be6d0f13e8a225bbcc9de09bb (diff) |
Moving mixxx/* to the root. A new era begins!
Diffstat (limited to 'src/controllers/midi/midicontroller.h')
-rw-r--r-- | src/controllers/midi/midicontroller.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/controllers/midi/midicontroller.h b/src/controllers/midi/midicontroller.h new file mode 100644 index 0000000000..cf13007448 --- /dev/null +++ b/src/controllers/midi/midicontroller.h @@ -0,0 +1,94 @@ +/** +* @file midicontroller.h +* @author Sean Pappalardo spappalardo@mixxx.org +* @date Tue 7 Feb 2012 +* @brief MIDI Controller base class +* +* This is a base class representing a MIDI controller. +* It must be inherited by a class that implements it on some API. +* +* Note that the subclass' destructor should call close() at a minimum. +*/ + +#ifndef MIDICONTROLLER_H +#define MIDICONTROLLER_H + +#include "controllers/controller.h" +#include "controllers/midi/midicontrollerpreset.h" +#include "controllers/midi/midicontrollerpresetfilehandler.h" +#include "controllers/midi/midimessage.h" +#include "controllers/midi/midioutputhandler.h" +#include "controllers/softtakeover.h" + +class MidiController : public Controller { + Q_OBJECT + public: + MidiController(); + virtual ~MidiController(); + + virtual QString presetExtension(); + + virtual ControllerPresetPointer getPreset() const { + MidiControllerPreset* pClone = new MidiControllerPreset(); + *pClone = m_preset; + return ControllerPresetPointer(pClone); + } + + virtual bool savePreset(const QString fileName) const; + + virtual ControllerPresetFileHandler* getFileHandler() const { + return new MidiControllerPresetFileHandler(); + } + + virtual void visit(const MidiControllerPreset* preset); + virtual void visit(const HidControllerPreset* preset); + + virtual bool isMappable() const { + return m_preset.isMappable(); + } + + virtual bool matchPreset(const PresetInfo& preset); + + protected: + Q_INVOKABLE void sendShortMsg(unsigned char status, unsigned char byte1, unsigned char byte2); + // Alias for send() + Q_INVOKABLE inline void sendSysexMsg(QList<int> data, unsigned int length) { + Controller::send(data, length); + } + + protected slots: + void receive(unsigned char status, unsigned char control = 0, + unsigned char value = 0); + // For receiving System Exclusive messages + void receive(const QByteArray data); + virtual int close(); + + void clearInputMappings(); + void clearOutputMappings(); + + private slots: + // Initializes the engine and static output mappings. + void applyPreset(QList<QString> scriptPaths); + + private: + virtual void send(unsigned int word) = 0; + double computeValue(MidiOptions options, double _prevmidivalue, double _newmidivalue); + void createOutputHandlers(); + void updateAllOutputs(); + void destroyOutputHandlers(); + + // Returns a pointer to the currently loaded controller preset. For internal + // use only. + virtual ControllerPreset* preset() { + return &m_preset; + } + + QList<MidiOutputHandler*> m_outputs; + MidiControllerPreset m_preset; + SoftTakeover m_st; + + // So it can access sendShortMsg() + friend class MidiOutputHandler; +}; + +#endif |