From 3ca3c635c01e7c4606859d44d9f79878d46a0a4c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 12 Oct 2015 18:40:47 -0700 Subject: [PATCH] Support functions in QScript contexts --- .../NewControllerScriptingInterface.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp b/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp index 80089b1136..4bc5b9eeb5 100644 --- a/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp +++ b/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp @@ -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(endpoint); + return result; + } + qWarning() << "Unsupported input type " << endpoint.toString(); return Endpoint::Pointer(); }