Support functions in QScript contexts

This commit is contained in:
Brad Davis 2015-10-12 18:40:47 -07:00
parent 58d3578fb1
commit 3ca3c635c0

View file

@ -59,6 +59,25 @@ namespace controller {
QJSValue _callable;
};
class ScriptEndpoint : public Endpoint {
public:
ScriptEndpoint(const QScriptValue& callable)
: Endpoint(UserInputMapper::Input(-1)), _callable(callable) {
}
virtual float value() {
float result = (float)_callable.call().toNumber();
return result;
}
virtual void apply(float newValue, float oldValue, const Pointer& source) {
_callable.call(QScriptValue(), QScriptValueList({ QScriptValue(newValue) }));
}
private:
QScriptValue _callable;
};
class CompositeEndpoint : public Endpoint, Endpoint::Pair {
public:
CompositeEndpoint(Endpoint::Pointer first, Endpoint::Pointer second)
@ -297,6 +316,11 @@ namespace controller {
return endpointFor(UserInputMapper::Input(endpoint.toInt32()));
}
if (endpoint.isFunction()) {
auto result = std::make_shared<ScriptEndpoint>(endpoint);
return result;
}
qWarning() << "Unsupported input type " << endpoint.toString();
return Endpoint::Pointer();
}