1 #pragma once 2 3 #include <QDialog> 4 #include <QList> 5 #include <QString> 6 #include <QTimer> 7 8 #include "controllers/ui_dlgcontrollerlearning.h" 9 #include "controllers/controlpickermenu.h" 10 #include "controllers/midi/midicontroller.h" 11 #ifdef __HID__ 12 #include "controllers/hid/hidcontroller.h" 13 #endif 14 #include "controllers/bulk/bulkcontroller.h" 15 #include "controllers/midi/midimessage.h" 16 #include "controllers/controller.h" 17 #include "controllers/controllervisitor.h" 18 #include "preferences/usersettings.h" 19 20 class ControllerPreset; 21 22 //#define CONTROLLERLESSTESTING 23 24 /// The controller mapping learning wizard 25 class DlgControllerLearning : public QDialog, 26 public ControllerVisitor, 27 public Ui::DlgControllerLearning { 28 Q_OBJECT 29 30 public: 31 DlgControllerLearning(QWidget *parent, Controller *controller); 32 virtual ~DlgControllerLearning(); 33 34 void visit(MidiController* pController); 35 void visit(HidController* pController); 36 void visit(BulkController* pController); 37 38 signals: 39 void learnTemporaryInputMappings(const MidiInputMappings& mappings); 40 void clearTemporaryInputMappings(); 41 void commitTemporaryInputMappings(); 42 43 // Used to notify DlgPrefController that we have learned some new input 44 // mappings. 45 void inputMappingsLearned(const MidiInputMappings& mappings); 46 47 void startLearning(); 48 void stopLearning(); 49 void listenForClicks(); 50 void stopListeningForClicks(); 51 52 public slots: 53 // Triggered when the user picks a control from the menu. 54 void controlPicked(const ConfigKey& control); 55 // Triggered when user clicks a control from the GUI 56 void controlClicked(ControlObject* pControl); 57 void comboboxIndexChanged(int index); 58 59 void slotMessageReceived(unsigned char status, 60 unsigned char control, 61 unsigned char value); 62 63 void slotCancelLearn(); 64 void slotChooseControlPressed(); 65 void slotTimerExpired(); 66 void slotFirstMessageTimeout(); 67 void slotRetry(); 68 void slotStartLearningPressed(); 69 void slotMidiOptionsChanged(); 70 71 private slots: 72 void showControlMenu(); 73 #ifdef CONTROLLERLESSTESTING 74 void DEBUGFakeMidiMessage(); 75 void DEBUGFakeMidiMessage2(); 76 #endif 77 78 private: 79 void loadControl(const ConfigKey& key, const QString& title, QString description); 80 void startListening(); 81 void commitMapping(); 82 void resetWizard(bool keepCurrentControl = false); 83 void populateComboBox(); 84 85 Controller* m_pController; 86 MidiController* m_pMidiController; 87 ControlPickerMenu m_controlPickerMenu; 88 ConfigKey m_currentControl; 89 bool m_messagesLearned; 90 QTimer m_firstMessageTimer; 91 QTimer m_lastMessageTimer; 92 QList<QPair<MidiKey, unsigned char> > m_messages; 93 MidiInputMappings m_mappings; 94 }; 95