#pragma once // Qt includes #include #include #include #include #include #include // Hyperion includes #include // Effect engine includes #include #include #include #include // pre-declarioation class Effect; class EffectEngine : public QObject { Q_OBJECT public: EffectEngine(Hyperion * hyperion, const QJsonObject & jsonEffectConfig); virtual ~EffectEngine(); void readEffects(); const std::list & getEffects() const { return _availableEffects; }; const std::list & getActiveEffects(); const std::list & getEffectSchemas() { return _effectSchemas; }; /// /// @brief Get all init data of the running effects and stop them /// void cacheRunningEffects(); /// /// @brief Start all cached effects, origin and smooth cfg is default /// void startCachedEffects(); signals: /// Emit when the effect list has been updated void effectListUpdated(); public slots: /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffect(const QString &effectName, int priority, int timeout = -1, const QString &origin="System"); /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffect(const QString &effectName, const QJsonObject & args, int priority, int timeout = -1, const QString &pythonScript = "", const QString &origin = "System", unsigned smoothCfg=0); /// Clear any effect running on the provided channel void channelCleared(int priority); /// Clear all effects void allChannelsCleared(); private slots: void effectFinished(); private: bool loadEffectDefinition(const QString & path, const QString & effectConfigFile, EffectDefinition &effectDefinition); bool loadEffectSchema(const QString & path, const QString & effectSchemaFile, EffectSchema &effectSchema); /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffectScript(const QString &script, const QString &name, const QJsonObject & args, int priority, int timeout = -1, const QString & origin="System", unsigned smoothCfg=0); private: Hyperion * _hyperion; QJsonObject _effectConfig; std::list _availableEffects; std::list _activeEffects; std::list _availableActiveEffects; std::list _cachedActiveEffects; std::list _effectSchemas; Logger * _log; };