Added the possibility to set effect arguments over json

Former-commit-id: 4bc2920c04853e549c712ec70492371b14d20877
This commit is contained in:
johan
2013-12-01 14:09:01 +01:00
parent ae148afba9
commit 515ae3e8c0
12 changed files with 95 additions and 30 deletions

View File

@@ -14,6 +14,7 @@ SET(EffectEngineQT_HEADERS
)
SET(EffectEngineHEADERS
${CURRENT_HEADER_DIR}/EffectDefinition.h
)
SET(EffectEngineSOURCES

View File

@@ -49,9 +49,9 @@ private:
const int _timeout;
const std::string & _script;
const std::string _script;
const Json::Value & _args;
const Json::Value _args;
int64_t _endTime;

View File

@@ -25,7 +25,7 @@ EffectEngine::EffectEngine(Hyperion * hyperion, const Json::Value & jsonEffectCo
for (const std::string & name : effectNames)
{
const Json::Value & info = jsonEffectConfig[name];
_availableEffects[name] = {info["script"].asString(), info["args"]};
_availableEffects.push_back({name, info["script"].asString(), info["args"]});
}
// initialize the python interpreter
@@ -43,22 +43,33 @@ EffectEngine::~EffectEngine()
Py_Finalize();
}
std::list<std::string> EffectEngine::getEffects() const
const std::list<EffectDefinition> &EffectEngine::getEffects() const
{
std::list<std::string> effectNames;
foreach (auto entry, _availableEffects) {
effectNames.push_back(entry.first);
}
return effectNames;
return _availableEffects;
}
int EffectEngine::runEffect(const std::string &effectName, int priority, int timeout)
{
return runEffect(effectName, Json::Value(Json::nullValue), priority, timeout);
}
int EffectEngine::runEffect(const std::string &effectName, const Json::Value &args, int priority, int timeout)
{
std::cout << "run effect " << effectName << " on channel " << priority << std::endl;
if (_availableEffects.find(effectName) == _availableEffects.end())
const EffectDefinition * effectDefinition = nullptr;
for (const EffectDefinition & e : _availableEffects)
{
if (e.name == effectName)
{
effectDefinition = &e;
break;
}
}
if (effectDefinition == nullptr)
{
// no such effect
std::cerr << "effect " << effectName << " not found" << std::endl;
return -1;
}
@@ -66,8 +77,7 @@ int EffectEngine::runEffect(const std::string &effectName, int priority, int tim
channelCleared(priority);
// create the effect
const EffectDefinition & effectDefinition = _availableEffects[effectName];
Effect * effect = new Effect(priority, timeout, effectDefinition.script, effectDefinition.args);
Effect * effect = new Effect(priority, timeout, effectDefinition->script, args.isNull() ? effectDefinition->args : args);
connect(effect, SIGNAL(setColors(int,std::vector<ColorRgb>,int)), _hyperion, SLOT(setColors(int,std::vector<ColorRgb>,int)), Qt::QueuedConnection);
connect(effect, SIGNAL(effectFinished(Effect*)), this, SLOT(effectFinished(Effect*)));
_activeEffects.push_back(effect);