#pragma once // Qt includes #include // Json includes #include // Hyperion includes #include // Effect engine includes #include #include // pre-declarioation class Effect; typedef struct _ts PyThreadState; class EffectEngine : public QObject { Q_OBJECT public: EffectEngine(Hyperion * hyperion, const Json::Value & jsonEffectConfig); virtual ~EffectEngine(); const std::list & getEffects() const; const std::list & getActiveEffects(); static bool loadEffectDefinition(const std::string & path, const std::string & effectConfigFile, EffectDefinition &effectDefinition); public slots: /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffect(const std::string &effectName, int priority, int timeout = -1); /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffect(const std::string &effectName, const Json::Value & args, int priority, int timeout = -1); /// Clear any effect running on the provided channel void channelCleared(int priority); /// Clear all effects void allChannelsCleared(); private slots: void effectFinished(Effect * effect); private: /// Run the specified effect on the given priority channel and optionally specify a timeout int runEffectScript(const std::string &script, const Json::Value & args, int priority, int timeout = -1); private: Hyperion * _hyperion; std::list _availableEffects; std::list _activeEffects; std::list _availableActiveEffects; PyThreadState * _mainThreadState; };