1 #pragma once 2 3 #include <QSharedPointer> 4 5 #include "controllers/controllerenumerator.h" 6 #include "controllers/controllerpreset.h" 7 #include "controllers/controllerpresetinfo.h" 8 #include "controllers/controllerpresetinfoenumerator.h" 9 #include "preferences/usersettings.h" 10 11 // Forward declaration(s) 12 class Controller; 13 class ControllerLearningEventFilter; 14 15 /// Function to sort controllers by name 16 bool controllerCompare(Controller *a, Controller *b); 17 18 /// Manages enumeration/operation/deletion of hardware controllers. 19 class ControllerManager : public QObject { 20 Q_OBJECT 21 public: 22 ControllerManager(UserSettingsPointer pConfig); 23 virtual ~ControllerManager(); 24 25 static const mixxx::Duration kPollInterval; 26 27 QList<Controller*> getControllers() const; 28 QList<Controller*> getControllerList(bool outputDevices=true, bool inputDevices=true); 29 ControllerLearningEventFilter* getControllerLearningEventFilter() const; getMainThreadUserPresetEnumerator()30 QSharedPointer<PresetInfoEnumerator> getMainThreadUserPresetEnumerator() { 31 return m_pMainThreadUserPresetEnumerator; 32 } getMainThreadSystemPresetEnumerator()33 QSharedPointer<PresetInfoEnumerator> getMainThreadSystemPresetEnumerator() { 34 return m_pMainThreadSystemPresetEnumerator; 35 } 36 QString getConfiguredPresetFileForDevice(const QString& name); 37 38 /// Prevent other parts of Mixxx from having to manually connect to our slots setUpDevices()39 void setUpDevices() { emit requestSetUpDevices(); }; 40 41 static QList<QString> getPresetPaths(UserSettingsPointer pConfig); 42 43 signals: 44 void devicesChanged(); 45 void requestSetUpDevices(); 46 void requestShutdown(); 47 void requestInitialize(); 48 49 public slots: 50 void updateControllerList(); 51 52 void slotApplyPreset(Controller* pController, ControllerPresetPointer pPreset, bool bEnabled); 53 void openController(Controller* pController); 54 void closeController(Controller* pController); 55 56 private slots: 57 /// Perform initialization that should be delayed until the ControllerManager 58 /// thread is started. 59 void slotInitialize(); 60 /// Open whatever controllers are selected in the preferences. This currently 61 /// only runs on start-up but maybe should instead be signaled by the 62 /// preferences dialog on apply, and only open/close changed devices 63 void slotSetUpDevices(); 64 void slotShutdown(); 65 /// Calls poll() on all devices that have isPolling() true. 66 void pollDevices(); 67 void startPolling(); 68 void stopPolling(); 69 void maybeStartOrStopPolling(); 70 71 private: 72 UserSettingsPointer m_pConfig; 73 ControllerLearningEventFilter* m_pControllerLearningEventFilter; 74 QTimer m_pollTimer; 75 mutable QMutex m_mutex; 76 QList<ControllerEnumerator*> m_enumerators; 77 QList<Controller*> m_controllers; 78 QThread* m_pThread; 79 QSharedPointer<PresetInfoEnumerator> m_pMainThreadUserPresetEnumerator; 80 QSharedPointer<PresetInfoEnumerator> m_pMainThreadSystemPresetEnumerator; 81 bool m_skipPoll; 82 }; 83