From fc2a501474b6af75fade47964d266cc0713111f2 Mon Sep 17 00:00:00 2001 From: Zach Fox Date: Thu, 16 Mar 2017 15:37:59 -0700 Subject: [PATCH] Cleanup JS<->QML messaging --- interface/resources/qml/hifi/NameCard.qml | 15 ++++++-- interface/resources/qml/hifi/Pal.qml | 29 +++++++++++---- .../GlobalServicesScriptingInterface.h | 1 + interface/src/ui/overlays/Web3DOverlay.cpp | 4 ++ libraries/avatars/src/AvatarData.h | 5 ++- libraries/networking/src/AddressManager.h | 4 +- scripts/system/pal.js | 37 +------------------ 7 files changed, 47 insertions(+), 48 deletions(-) diff --git a/interface/resources/qml/hifi/NameCard.qml b/interface/resources/qml/hifi/NameCard.qml index d43cf90386..ea490d248d 100644 --- a/interface/resources/qml/hifi/NameCard.qml +++ b/interface/resources/qml/hifi/NameCard.qml @@ -156,7 +156,10 @@ Item { autoScroll: false; // Signals onEditingFinished: { - pal.sendToScript({method: 'displayNameUpdate', params: text}) + if (MyAvatar.displayName !== text) { + MyAvatar.displayName = text; + UserActivityLogger.palAction("display_name_change", text); + } cursorPosition = 0 focus = false myDisplayName.border.width = 0 @@ -233,7 +236,10 @@ Item { anchors.fill: parent enabled: selected && pal.activeTab == "nearbyTab" && thisNameCard.userName !== ""; hoverEnabled: enabled - onClicked: pal.sendToScript({method: 'goToUser', params: thisNameCard.userName}); + onClicked: { + AddressManager.goToUser(thisNameCard.userName); + UserActivityLogger.palAction("go_to_user", thisNameCard.userName); + } onEntered: { displayNameText.color = hifi.colors.blueHighlight; userNameText.color = hifi.colors.blueHighlight; @@ -323,7 +329,10 @@ Item { anchors.fill: parent enabled: selected && pal.activeTab == "nearbyTab" && thisNameCard.userName !== ""; hoverEnabled: enabled - onClicked: pal.sendToScript({method: 'goToUser', params: thisNameCard.userName}); + onClicked: { + AddressManager.goToUser(thisNameCard.userName); + UserActivityLogger.palAction("go_to_user", thisNameCard.userName); + } onEntered: { displayNameText.color = hifi.colors.blueHighlight; userNameText.color = hifi.colors.blueHighlight; diff --git a/interface/resources/qml/hifi/Pal.qml b/interface/resources/qml/hifi/Pal.qml index ae79c11d1a..8dfab8c62d 100644 --- a/interface/resources/qml/hifi/Pal.qml +++ b/interface/resources/qml/hifi/Pal.qml @@ -42,7 +42,6 @@ Rectangle { property var connectionsUserModelData: []; // This simple list is essentially a mirror of the connectionsUserModel listModel without all the extra complexities. property bool iAmAdmin: false; property var activeTab: "nearbyTab"; - property int usernameAvailability; property bool currentlyEditingDisplayName: false HifiConstants { id: hifi; } @@ -162,6 +161,18 @@ Rectangle { verticalAlignment: Text.AlignTop; } HifiControlsUit.TabletComboBox { + function determineAvailabilityIndex() { + var globalServicesAvailability = GlobalServices.findableBy; + if (globalServicesAvailability === "all") { + return 0; + } else if (globalServicesAvailability === "friends") { + return 1; + } else if (globalServicesAvailability === "none") { + return 2; + } else { + return 1; + } + } id: availabilityComboBox; // Anchors anchors.top: parent.top; @@ -169,14 +180,18 @@ Rectangle { // Size width: parent.width; height: 40; - currentIndex: usernameAvailability; + currentIndex: determineAvailabilityIndex(); model: ListModel { id: availabilityComboBoxListItems ListElement { text: "Everyone"; value: "all"; } ListElement { text: "Friends Only"; value: "friends"; } ListElement { text: "Appear Offline"; value: "none" } } - onCurrentIndexChanged: { pal.sendToScript({method: 'setAvailability', params: availabilityComboBoxListItems.get(currentIndex).value})} + onCurrentIndexChanged: { + GlobalServices.findableBy = availabilityComboBoxListItems.get(currentIndex).value; + UserActivityLogger.palAction("set_availability", availabilityComboBoxListItems.get(currentIndex).value); + print('Setting availability:', JSON.stringify(GlobalServices.findableBy)); + } } } } @@ -928,7 +943,10 @@ Rectangle { anchors.fill: parent hoverEnabled: enabled enabled: connectionsNameCard.selected && pal.activeTab == "connectionsTab" - onClicked: pal.sendToScript({method: 'goToUser', params: model.userName}); + onClicked: { + AddressManager.goToUser(model.userName); + UserActivityLogger.palAction("go_to_user", model.userName); + } onEntered: connectionsLocationData.color = hifi.colors.blueHighlight; onExited: connectionsLocationData.color = hifi.colors.darkGray; } @@ -1260,9 +1278,6 @@ Rectangle { var sessionID = message.params[0]; delete ignored[sessionID]; break; - case 'updateAvailability': - usernameAvailability = message.params; - break; default: console.log('Unrecognized message:', JSON.stringify(message)); } diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.h b/interface/src/scripting/GlobalServicesScriptingInterface.h index 11d8735187..299815b3fd 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.h +++ b/interface/src/scripting/GlobalServicesScriptingInterface.h @@ -18,6 +18,7 @@ #include #include #include +#include class DownloadInfoResult { public: diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 90dcaafc21..3db1aa65bb 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -40,6 +40,8 @@ #include #include "FileDialogHelper.h" #include +#include "avatar/AvatarManager.h" +#include "scripting/GlobalServicesScriptingInterface.h" static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; @@ -171,6 +173,8 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("Account", AccountScriptingInterface::getInstance()); _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); + _webSurface->getRootContext()->setContextProperty("MyAvatar", DependencyManager::get()->getMyAvatar().get()); + _webSurface->getRootContext()->setContextProperty("GlobalServices", GlobalServicesScriptingInterface::getInstance()); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); // Override min fps for tablet UI, for silky smooth scrolling diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index f0759aedbd..1327798a0a 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -340,7 +340,7 @@ class AvatarData : public QObject, public SpatiallyNestable { Q_PROPERTY(float audioLoudness READ getAudioLoudness WRITE setAudioLoudness) Q_PROPERTY(float audioAverageLoudness READ getAudioAverageLoudness WRITE setAudioAverageLoudness) - Q_PROPERTY(QString displayName READ getDisplayName WRITE setDisplayName) + Q_PROPERTY(QString displayName READ getDisplayName WRITE setDisplayName NOTIFY displayNameChanged) // sessionDisplayName is sanitized, defaulted version displayName that is defined by the AvatarMixer rather than by Interface clients. // The result is unique among all avatars present at the time. Q_PROPERTY(QString sessionDisplayName READ getSessionDisplayName WRITE setSessionDisplayName) @@ -614,6 +614,9 @@ public: +signals: + void displayNameChanged(); + public slots: void sendAvatarDataPacket(); void sendIdentityPacket(); diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index c7d283ad02..83eedfc82f 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -41,7 +41,7 @@ class AddressManager : public QObject, public Dependency { Q_PROPERTY(QString pathname READ currentPath) Q_PROPERTY(QString placename READ getPlaceName) Q_PROPERTY(QString domainId READ getDomainId) - Q_PROPERTY(QUrl metaverseServerUrl READ getMetaverseServerUrl) + Q_PROPERTY(QUrl metaverseServerUrl READ getMetaverseServerUrl NOTIFY metaverseServerUrlChanged) public: Q_INVOKABLE QString protocolVersion(); using PositionGetter = std::function; @@ -123,6 +123,8 @@ signals: void goBackPossible(bool isPossible); void goForwardPossible(bool isPossible); + void metaverseServerUrlChanged(); + protected: AddressManager(); private slots: diff --git a/scripts/system/pal.js b/scripts/system/pal.js index b87f25294b..014d89dde7 100644 --- a/scripts/system/pal.js +++ b/scripts/system/pal.js @@ -1,6 +1,6 @@ "use strict"; /*jslint vars:true, plusplus:true, forin:true*/ -/*global Tablet, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation, GlobalServices*/ +/*global Tablet, Settings, Script, AvatarList, Users, Entities, MyAvatar, Camera, Overlays, Vec3, Quat, HMD, Controller, Account, UserActivityLogger, Messages, Window, XMLHttpRequest, print, location, getControllerWorldLocation*/ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ // // pal.js @@ -265,24 +265,6 @@ function fromQml(message) { // messages are {method, params}, like json-rpc. See getConnectionData(); UserActivityLogger.palAction("refresh_connections", ""); break; - case 'displayNameUpdate': - if (MyAvatar.displayName !== message.params) { - MyAvatar.displayName = message.params; - UserActivityLogger.palAction("display_name_change", ""); - } - break; - case 'goToUser': - location.goToUser(message.params); - UserActivityLogger.palAction("go_to_user", ""); - break; - case 'setAvailability': - GlobalServices.findableBy = message.params; - UserActivityLogger.palAction("set_availability", ""); - print('Setting availability:', JSON.stringify(message)); - break; - case 'getAvailability': - findableByChanged(GlobalServices.findableBy); - break; default: print('Unrecognized message from Pal.qml:', JSON.stringify(message)); } @@ -709,7 +691,6 @@ function startup() { Messages.subscribe(CHANNEL); Messages.messageReceived.connect(receiveMessage); Users.avatarDisconnected.connect(avatarDisconnected); - GlobalServices.findableByChanged.connect(findableByChanged); } startup(); @@ -747,7 +728,6 @@ function onTabletButtonClicked() { onPalScreen = true; Users.requestsDomainListData = true; populateNearbyUserList(); - findableByChanged(GlobalServices.findableBy); isWired = true; Script.update.connect(updateOverlays); Controller.mousePressEvent.connect(handleMouseEvent); @@ -857,20 +837,6 @@ function avatarDisconnected(nodeID) { sendToQml({method: 'avatarDisconnected', params: [nodeID]}); } -function findableByChanged(usernameAvailability) { - // Update PAL availability dropdown - // Default to "friends" if undeterminable - var availability = 1; - if (usernameAvailability === "all") { - availability = 0; - } else if (usernameAvailability === "friends") { - availability = 1; - } else if (usernameAvailability === "none") { - availability = 2; - } - sendToQml({ method: 'updateAvailability', params: availability }); -} - function clearLocalQMLDataAndClosePAL() { sendToQml({ method: 'clearLocalQMLData' }); } @@ -888,7 +854,6 @@ function shutdown() { Messages.subscribe(CHANNEL); Messages.messageReceived.disconnect(receiveMessage); Users.avatarDisconnected.disconnect(avatarDisconnected); - GlobalServices.findableByChanged.disconnect(findableByChanged); off(); }