From 58d3578fb1e53c3f58165cde3637ec360f1de0bb Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Mon, 12 Oct 2015 17:59:01 -0700 Subject: [PATCH] Making anonymous mappings work --- .../controllers/src/controllers/Mapping.cpp | 4 +++ .../controllers/src/controllers/Mapping.h | 3 ++ .../NewControllerScriptingInterface.cpp | 2 +- .../NewControllerScriptingInterface.h | 2 +- .../controllers/impl/MappingBuilderProxy.cpp | 5 ++++ .../controllers/impl/MappingBuilderProxy.h | 4 ++- tests/controllers/CMakeLists.txt | 2 +- tests/controllers/qml/content.qml | 30 ++++++++++++++++--- tests/controllers/src/main.cpp | 3 ++ 9 files changed, 47 insertions(+), 8 deletions(-) diff --git a/libraries/controllers/src/controllers/Mapping.cpp b/libraries/controllers/src/controllers/Mapping.cpp index 0063a1d24a..7e9ce5d1c4 100644 --- a/libraries/controllers/src/controllers/Mapping.cpp +++ b/libraries/controllers/src/controllers/Mapping.cpp @@ -1,5 +1,9 @@ #include "Mapping.h" namespace controller { + Mapping::Mapping(const QString& name ) : _name(name) { + + } + } diff --git a/libraries/controllers/src/controllers/Mapping.h b/libraries/controllers/src/controllers/Mapping.h index 5b54a1745b..88d2492986 100644 --- a/libraries/controllers/src/controllers/Mapping.h +++ b/libraries/controllers/src/controllers/Mapping.h @@ -27,7 +27,10 @@ namespace controller { using Map = std::map; using Pointer = std::shared_ptr; + Mapping(const QString& name); + Map _channelMappings; + const QString _name; void parse(const QString& json); QString serialize(); diff --git a/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp b/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp index f5d6276b91..80089b1136 100644 --- a/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp +++ b/libraries/controllers/src/controllers/NewControllerScriptingInterface.cpp @@ -158,7 +158,7 @@ namespace controller { qCWarning(controllers) << "Refusing to recreate mapping named " << mappingName; } qDebug() << "Creating new Mapping " << mappingName; - Mapping::Pointer mapping = std::make_shared(); + auto mapping = std::make_shared(mappingName); _mappingsByName[mappingName] = mapping; return new MappingBuilderProxy(*this, mapping); } diff --git a/libraries/controllers/src/controllers/NewControllerScriptingInterface.h b/libraries/controllers/src/controllers/NewControllerScriptingInterface.h index 6bf0bda40d..659c8bfd05 100644 --- a/libraries/controllers/src/controllers/NewControllerScriptingInterface.h +++ b/libraries/controllers/src/controllers/NewControllerScriptingInterface.h @@ -39,7 +39,7 @@ namespace controller { Q_INVOKABLE float getValue(const int& source); Q_INVOKABLE void update(); - Q_INVOKABLE QObject* newMapping(const QString& mappingName); + Q_INVOKABLE QObject* newMapping(const QString& mappingName = QUuid::createUuid().toString()); Q_INVOKABLE void enableMapping(const QString& mappingName, bool enable = true); Q_INVOKABLE void disableMapping(const QString& mappingName) { enableMapping(mappingName, false); diff --git a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp index 4e2c6a4d8c..a826b4fd4d 100644 --- a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp +++ b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.cpp @@ -41,4 +41,9 @@ QObject* MappingBuilderProxy::join(const QJSValue& source1, const QJSValue& sour return from(_parent.compositeEndpointFor(source1Endpoint, source2Endpoint)); } +QObject* MappingBuilderProxy::enable(bool enable) { + _parent.enableMapping(_mapping->_name, enable); + return this; +} + } diff --git a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h index b5e02bbfdf..70495a9cfe 100644 --- a/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h +++ b/libraries/controllers/src/controllers/impl/MappingBuilderProxy.h @@ -30,8 +30,10 @@ public: Q_INVOKABLE QObject* from(const QJSValue& source); Q_INVOKABLE QObject* from(const QScriptValue& source); - Q_INVOKABLE QObject* join(const QJSValue& source1, const QJSValue& source2); + Q_INVOKABLE QObject* enable(bool enable = true); + Q_INVOKABLE QObject* disable() { return enable(false); } + protected: QObject* from(const Endpoint::Pointer& source); diff --git a/tests/controllers/CMakeLists.txt b/tests/controllers/CMakeLists.txt index 34ab4c2eba..d9bef079ff 100644 --- a/tests/controllers/CMakeLists.txt +++ b/tests/controllers/CMakeLists.txt @@ -2,7 +2,7 @@ set(TARGET_NAME controllers-test) # This is not a testcase -- just set it up as a regular hifi project -setup_hifi_project(Script) +setup_hifi_project(Script Qml) set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Tests/manual-tests/") # link in the shared libraries diff --git a/tests/controllers/qml/content.qml b/tests/controllers/qml/content.qml index ce8a491419..aba40af007 100644 --- a/tests/controllers/qml/content.qml +++ b/tests/controllers/qml/content.qml @@ -11,7 +11,7 @@ Column { property var xbox: NewControllers.Hardware.X360Controller1 property var actions: NewControllers.Actions property var standard: NewControllers.Standard - property string mappingName: "TestMapping" + property var testMapping: null spacing: 12 @@ -55,7 +55,7 @@ Column { Button { text: "Build Mapping" onClicked: { - var mapping = NewControllers.newMapping(root.mappingName); + var mapping = NewControllers.newMapping(); // Inverting a value mapping.from(xbox.RY).invert().to(standard.RY); // Assigning a value from a function @@ -63,17 +63,22 @@ Column { // Constrainting a value to -1, 0, or 1, with a deadzone mapping.from(xbox.LY).deadZone(0.5).constrainToInteger().to(standard.LY); mapping.join(standard.LB, standard.RB).pulse(0.5).to(actions.Yaw); + mapping.from(actions.Yaw).clamp(0, 1).invert().to(actions.YAW_RIGHT); + mapping.from(actions.Yaw).clamp(-1, 0).to(actions.YAW_LEFT); + testMapping = mapping; + enabled = false + text = "Built" } } Button { text: "Enable Mapping" - onClicked: NewControllers.enableMapping(root.mappingName) + onClicked: root.testMapping.enable() } Button { text: "Disable Mapping" - onClicked: NewControllers.disableMapping(root.mappingName) + onClicked: root.testMapping.disable() } } @@ -85,6 +90,7 @@ Column { Row { + spacing: 8 ScrollingGraph { controlId: NewControllers.Actions.Yaw label: "Yaw" @@ -92,6 +98,22 @@ Column { max: 3.0 size: 128 } + + ScrollingGraph { + controlId: NewControllers.Actions.YAW_LEFT + label: "Yaw Left" + min: -3.0 + max: 3.0 + size: 128 + } + + ScrollingGraph { + controlId: NewControllers.Actions.YAW_RIGHT + label: "Yaw Right" + min: -3.0 + max: 3.0 + size: 128 + } } } diff --git a/tests/controllers/src/main.cpp b/tests/controllers/src/main.cpp index d694bcae1d..7182862ff1 100644 --- a/tests/controllers/src/main.cpp +++ b/tests/controllers/src/main.cpp @@ -82,6 +82,9 @@ public: int main(int argc, char** argv) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + for (auto path : qApp->libraryPaths()) { + qDebug() << path; + } {