#pragma once // Qt includes #include #include #include #include #include #include // Hyperion includes #include // Effect engine includes #include #include #include #include // pre-declarioation class Effect; typedef struct _ts PyThreadState; 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; }; 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 _effectSchemas; Logger * _log; PyThreadState* _mainThreadState; };