From bd73c950acc43928cf1673ece7abb2530ce3e211 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 26 Sep 2014 15:44:10 -0700 Subject: [PATCH 1/5] cleanup for eyePosition ifdef HAVE_LIBOVR --- interface/src/devices/OculusManager.cpp | 6 +++--- interface/src/devices/OculusManager.h | 10 ++-------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/interface/src/devices/OculusManager.cpp b/interface/src/devices/OculusManager.cpp index 5f5a5650c9..27590d9a72 100644 --- a/interface/src/devices/OculusManager.cpp +++ b/interface/src/devices/OculusManager.cpp @@ -55,11 +55,11 @@ bool OculusManager::_programInitialized = false; Camera* OculusManager::_camera = NULL; int OculusManager::_activeEyeIndex = -1; -glm::vec3 OculusManager::_leftEyePosition; -glm::vec3 OculusManager::_rightEyePosition; - #endif +glm::vec3 OculusManager::_leftEyePosition = glm::vec3(); +glm::vec3 OculusManager::_rightEyePosition = glm::vec3(); + void OculusManager::connect() { #ifdef HAVE_LIBOVR ovr_Initialize(); diff --git a/interface/src/devices/OculusManager.h b/interface/src/devices/OculusManager.h index 09880243e9..604580a24e 100644 --- a/interface/src/devices/OculusManager.h +++ b/interface/src/devices/OculusManager.h @@ -46,14 +46,8 @@ public: static void overrideOffAxisFrustum(float& left, float& right, float& bottom, float& top, float& nearVal, float& farVal, glm::vec4& nearClipPlane, glm::vec4& farClipPlane); -#ifdef HAVE_LIBOVR static glm::vec3 getLeftEyePosition() { return _leftEyePosition; } static glm::vec3 getRightEyePosition() { return _rightEyePosition; } -#else - static glm::vec3 getLeftEyePosition() { return glm::vec3(); } - static glm::vec3 getRightEyePosition() { return glm::vec3(); } -#endif - private: #ifdef HAVE_LIBOVR @@ -105,10 +99,10 @@ private: static bool _programInitialized; static Camera* _camera; static int _activeEyeIndex; +#endif + static glm::vec3 _leftEyePosition; static glm::vec3 _rightEyePosition; - -#endif }; From d389f13e1b59f61fc2ded3ea6b486808be9fdac6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 26 Sep 2014 16:21:09 -0700 Subject: [PATCH 2/5] fix for role lookup in domain-server --- domain-server/src/DomainServer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 4393f2557f..0d095aaa82 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1435,13 +1435,13 @@ bool DomainServer::isAuthenticatedRequest(HTTPConnection* connection, const QUrl DomainServerWebSessionData sessionData = _cookieSessionHash.value(cookieUUID); QString profileUsername = sessionData.getUsername(); - if (settingsMap.value(ADMIN_USERS_CONFIG_KEY).toJsonValue().toArray().contains(profileUsername)) { + if (settingsMap.value(ADMIN_USERS_CONFIG_KEY).toStringList().contains(profileUsername)) { // this is an authenticated user return true; } // loop the roles of this user and see if they are in the admin-roles array - QJsonArray adminRolesArray = settingsMap.value(ADMIN_ROLES_CONFIG_KEY).toJsonValue().toArray(); + QStringList adminRolesArray = settingsMap.value(ADMIN_ROLES_CONFIG_KEY).toStringList(); if (!adminRolesArray.isEmpty()) { foreach(const QString& userRole, sessionData.getRoles()) { From 9e02a36d3dbba4c51fec69b4574417e1d42bd743 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 26 Sep 2014 16:23:57 -0700 Subject: [PATCH 3/5] fix for domain-server allowed roles --- domain-server/src/DomainServer.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 0d095aaa82..a015b73ea2 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -1573,14 +1573,13 @@ void DomainServer::handleProfileRequestFinished() { // pull the user roles from the response QJsonArray userRolesArray = profileJSON.object()["data"].toObject()["user"].toObject()["roles"].toArray(); - QJsonArray allowedRolesArray = _settingsManager.getSettingsMap() - .value(ALLOWED_ROLES_CONFIG_KEY).toJsonValue().toArray(); + QStringList allowedRolesArray = _settingsManager.getSettingsMap().value(ALLOWED_ROLES_CONFIG_KEY).toStringList(); QString connectableUsername; QString profileUsername = profileJSON.object()["data"].toObject()["user"].toObject()["username"].toString(); foreach(const QJsonValue& roleValue, userRolesArray) { - if (allowedRolesArray.contains(roleValue)) { + if (allowedRolesArray.contains(roleValue.toString())) { // the user has a role that lets them in // set the bool to true and break connectableUsername = profileUsername; From cbc502553b37f4115bf2f2c8f47fa4de1b71dd94 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 26 Sep 2014 16:25:24 -0700 Subject: [PATCH 4/5] add rescale support to entity properties UI --- examples/editModels.js | 29 +++++++++ .../scripting/WindowScriptingInterface.cpp | 60 +++++++++++++++++++ .../src/scripting/WindowScriptingInterface.h | 2 + 3 files changed, 91 insertions(+) diff --git a/examples/editModels.js b/examples/editModels.js index 43e73104e2..c47c497a78 100644 --- a/examples/editModels.js +++ b/examples/editModels.js @@ -2794,6 +2794,7 @@ var editModelID = -1; var dimensionX; var dimensionY; var dimensionZ; +var rescalePercentage; function handeMenuEvent(menuItem) { print("menuItemEvent() in JS... menuItem=" + menuItem); @@ -2896,6 +2897,11 @@ function handeMenuEvent(menuItem) { index++; array.push({ label: "", type: "inlineButton", buttonLabel: "Reset to Natural Dimensions", name: "resetDimensions" }); index++; + array.push({ label: "Rescale Percentage:", value: 100 }); + rescalePercentage = index; + index++; + array.push({ label: "", type: "inlineButton", buttonLabel: "Rescale", name: "rescaleDimensions" }); + index++; array.push({ label: "Velocity:", type: "header" }); index++; @@ -3023,6 +3029,27 @@ Window.inlineButtonClicked.connect(function (name) { { value: propertiesForEditedEntity.naturalDimensions.z.toFixed(decimals), oldIndex: dimensionZ } ]); } + + if (name == "rescaleDimensions") { + var decimals = 3; + var peekValues = editEntityFormArray; + Window.peekNonBlockingFormResult(peekValues); + var peekX = peekValues[dimensionX].value; + var peekY = peekValues[dimensionY].value; + var peekZ = peekValues[dimensionZ].value; + var peekRescale = peekValues[rescalePercentage].value; + var rescaledX = peekX * peekRescale / 100.0; + var rescaledY = peekY * peekRescale / 100.0; + var rescaledZ = peekZ * peekRescale / 100.0; + + Window.reloadNonBlockingForm([ + { value: rescaledX.toFixed(decimals), oldIndex: dimensionX }, + { value: rescaledY.toFixed(decimals), oldIndex: dimensionY }, + { value: rescaledZ.toFixed(decimals), oldIndex: dimensionZ }, + { value: 100, oldIndex: rescalePercentage } + ]); + } + }); Window.nonBlockingFormClosed.connect(function() { array = editEntityFormArray; @@ -3056,6 +3083,8 @@ Window.nonBlockingFormClosed.connect(function() { properties.dimensions.y = array[index++].value; properties.dimensions.z = array[index++].value; index++; // skip reset button + index++; // skip rescale percentage + index++; // skip rescale button index++; // skip header properties.velocity.x = array[index++].value; diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index c909d90fb7..913655195d 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -127,6 +127,14 @@ QScriptValue WindowScriptingInterface::getNonBlockingFormResult(QScriptValue for return retVal; } +QScriptValue WindowScriptingInterface::peekNonBlockingFormResult(QScriptValue form) { + QScriptValue retVal; + QMetaObject::invokeMethod(this, "doPeekNonBlockingFormResult", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QScriptValue, retVal), + Q_ARG(QScriptValue, form)); + return retVal; +} + /// Display an alert box /// \param const QString& message message to display @@ -234,6 +242,58 @@ bool WindowScriptingInterface::nonBlockingFormActive() { return _nonBlockingFormActive; } +QScriptValue WindowScriptingInterface::doPeekNonBlockingFormResult(QScriptValue array) { + QScriptValue retVal; + + int e = -1; + int d = -1; + int c = -1; + for (int i = 0; i < _form.property("length").toInt32(); ++i) { + QScriptValue item = _form.property(i); + QScriptValue value = item.property("value"); + + if (item.property("button").toString() != "") { + // Nothing to do + } else if (item.property("type").toString() == "inlineButton") { + // Nothing to do + } else if (item.property("type").toString() == "header") { + // Nothing to do + } else if (item.property("directory").toString() != "") { + d += 1; + value = _directories.at(d)->property("path").toString(); + item.setProperty("directory", value); + _form.setProperty(i, item); + } else if (item.property("options").isArray()) { + c += 1; + item.setProperty("value", _combos.at(c)->currentText()); + _form.setProperty(i, item); + } else { + e += 1; + bool ok = true; + if (value.isNumber()) { + value = _edits.at(e)->text().toDouble(&ok); + } else if (value.isString()) { + value = _edits.at(e)->text(); + } else if (value.isBool()) { + if (_edits.at(e)->text() == "true") { + value = true; + } else if (_edits.at(e)->text() == "false") { + value = false; + } else { + ok = false; + } + } + if (ok) { + item.setProperty("value", value); + _form.setProperty(i, item); + } + } + } + + array = _form; + return (_formResult == QDialog::Accepted); +} + QScriptValue WindowScriptingInterface::doGetNonBlockingFormResult(QScriptValue array) { QScriptValue retVal; diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index c3a553d24a..24c21765b5 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -46,6 +46,7 @@ public slots: void nonBlockingForm(const QString& title, QScriptValue array); void reloadNonBlockingForm(QScriptValue array); QScriptValue getNonBlockingFormResult(QScriptValue array); + QScriptValue peekNonBlockingFormResult(QScriptValue array); signals: void inlineButtonClicked(const QString& name); @@ -64,6 +65,7 @@ private slots: void doReloadNonBlockingForm(QScriptValue array); bool nonBlockingFormActive(); QScriptValue doGetNonBlockingFormResult(QScriptValue array); + QScriptValue doPeekNonBlockingFormResult(QScriptValue array); void chooseDirectory(); void inlineButtonClicked(); From ae542419d10ae5271291db24a18708732d8ea7a7 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 26 Sep 2014 16:36:18 -0700 Subject: [PATCH 5/5] fix for static assignments from queue --- domain-server/src/DomainServer.cpp | 50 ++++++++++++------------------ domain-server/src/DomainServer.h | 4 +-- 2 files changed, 22 insertions(+), 32 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index a015b73ea2..b1ed765be6 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -367,19 +367,12 @@ void DomainServer::parseAssignmentConfigs(QSet& excludedTypes) if (assignmentType < Assignment::AllTypes && !excludedTypes.contains(assignmentType)) { QVariant mapValue = settingsMap[variantMapKeys[configIndex]]; - QJsonArray assignmentArray; - - if (mapValue.type() == QVariant::String) { - QJsonDocument deserializedDocument = QJsonDocument::fromJson(mapValue.toString().toUtf8()); - assignmentArray = deserializedDocument.array(); - } else { - assignmentArray = mapValue.toJsonValue().toArray(); - } + QVariantList assignmentList = mapValue.toList(); if (assignmentType != Assignment::AgentType) { - createStaticAssignmentsForType(assignmentType, assignmentArray); + createStaticAssignmentsForType(assignmentType, assignmentList); } else { - createScriptedAssignmentsFromArray(assignmentArray); + createScriptedAssignmentsFromList(assignmentList); } excludedTypes.insert(assignmentType); @@ -395,23 +388,23 @@ void DomainServer::addStaticAssignmentToAssignmentHash(Assignment* newAssignment _allAssignments.insert(newAssignment->getUUID(), SharedAssignmentPointer(newAssignment)); } -void DomainServer::createScriptedAssignmentsFromArray(const QJsonArray &configArray) { - foreach(const QJsonValue& jsonValue, configArray) { - if (jsonValue.isObject()) { - QJsonObject jsonObject = jsonValue.toObject(); +void DomainServer::createScriptedAssignmentsFromList(const QVariantList &configList) { + foreach(const QVariant& configVariant, configList) { + if (configVariant.canConvert(QMetaType::QVariantMap)) { + QVariantMap configMap = configVariant.toMap(); // make sure we were passed a URL, otherwise this is an invalid scripted assignment const QString ASSIGNMENT_URL_KEY = "url"; - QString assignmentURL = jsonObject[ASSIGNMENT_URL_KEY].toString(); + QString assignmentURL = configMap[ASSIGNMENT_URL_KEY].toString(); if (!assignmentURL.isEmpty()) { // check the json for a pool const QString ASSIGNMENT_POOL_KEY = "pool"; - QString assignmentPool = jsonObject[ASSIGNMENT_POOL_KEY].toString(); + QString assignmentPool = configMap[ASSIGNMENT_POOL_KEY].toString(); // check for a number of instances, if not passed then default is 1 const QString ASSIGNMENT_INSTANCES_KEY = "instances"; - int numInstances = jsonObject[ASSIGNMENT_INSTANCES_KEY].toInt(); + int numInstances = configMap[ASSIGNMENT_INSTANCES_KEY].toInt(); numInstances = (numInstances == 0 ? 1 : numInstances); qDebug() << "Adding a static scripted assignment from" << assignmentURL; @@ -431,37 +424,34 @@ void DomainServer::createScriptedAssignmentsFromArray(const QJsonArray &configAr } } -void DomainServer::createStaticAssignmentsForType(Assignment::Type type, const QJsonArray& configArray) { +void DomainServer::createStaticAssignmentsForType(Assignment::Type type, const QVariantList &configList) { // we have a string for config for this type qDebug() << "Parsing config for assignment type" << type; int configCounter = 0; - foreach(const QJsonValue& jsonValue, configArray) { - if (jsonValue.isObject()) { - QJsonObject jsonObject = jsonValue.toObject(); + foreach(const QVariant& configVariant, configList) { + if (configVariant.canConvert(QMetaType::QVariantMap)) { + QVariantMap configMap = configVariant.toMap(); // check the config string for a pool const QString ASSIGNMENT_POOL_KEY = "pool"; - QString assignmentPool; - QJsonValue poolValue = jsonObject[ASSIGNMENT_POOL_KEY]; - if (!poolValue.isUndefined()) { - assignmentPool = poolValue.toString(); - - jsonObject.remove(ASSIGNMENT_POOL_KEY); + QString assignmentPool = configMap.value(ASSIGNMENT_POOL_KEY).toString(); + if (!assignmentPool.isEmpty()) { + configMap.remove(ASSIGNMENT_POOL_KEY); } ++configCounter; - qDebug() << "Type" << type << "config" << configCounter << "=" << jsonObject; + qDebug() << "Type" << type << "config" << configCounter << "=" << configMap; Assignment* configAssignment = new Assignment(Assignment::CreateCommand, type, assignmentPool); // setup the payload as a semi-colon separated list of key = value QStringList payloadStringList; - foreach(const QString& payloadKey, jsonObject.keys()) { + foreach(const QString& payloadKey, configMap.keys()) { QString dashes = payloadKey.size() == 1 ? "-" : "--"; - payloadStringList << QString("%1%2 %3").arg(dashes).arg(payloadKey).arg(jsonObject[payloadKey].toString()); + payloadStringList << QString("%1%2 %3").arg(dashes).arg(payloadKey).arg(configMap[payloadKey].toString()); } configAssignment->setPayload(payloadStringList.join(' ').toUtf8()); diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 1e439b99b8..44b8a15901 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -83,8 +83,8 @@ private: void parseAssignmentConfigs(QSet& excludedTypes); void addStaticAssignmentToAssignmentHash(Assignment* newAssignment); - void createScriptedAssignmentsFromArray(const QJsonArray& configArray); - void createStaticAssignmentsForType(Assignment::Type type, const QJsonArray& configArray); + void createScriptedAssignmentsFromList(const QVariantList& configList); + void createStaticAssignmentsForType(Assignment::Type type, const QVariantList& configList); void populateDefaultStaticAssignmentsExcludingTypes(const QSet& excludedTypes); SharedAssignmentPointer matchingQueuedAssignmentForCheckIn(const QUuid& checkInUUID, NodeType_t nodeType);