summaryrefslogtreecommitdiffstats
path: root/src/controllers/midi/midicontroller.h
diff options
context:
space:
mode:
authorRJ Ryan <rryan@mixxx.org>2013-06-19 00:46:54 -0400
committerRJ Ryan <rryan@mixxx.org>2013-06-19 00:46:54 -0400
commit25d57b59dff3947212909634864dd82365c9606b (patch)
treef0d0f8a048f8ed2f45c5ff015fc96891662f72f1 /src/controllers/midi/midicontroller.h
parente50f9f168fa08f2be6d0f13e8a225bbcc9de09bb (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.h94
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