From 4c3a6842a53c0107ae0626bdae3b5877f669aeef Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 9 Feb 2017 14:03:01 -0800 Subject: [PATCH] start on moving edit.js to tablet --- .../resources/html/createGlobalEventBridge.js | 4 +++ .../qml/controls-uit/BaseWebView.qml | 2 +- .../qml/hifi/tablet/TabletMouseHandler.qml | 8 ++---- interface/src/ui/overlays/Web3DOverlay.cpp | 17 ++++++++++++ interface/src/ui/overlays/Web3DOverlay.h | 2 ++ .../src/TabletScriptingInterface.cpp | 12 ++++++++- .../src/TabletScriptingInterface.h | 2 ++ scripts/system/edit.js | 27 +++++++++++-------- scripts/system/html/js/entityProperties.js | 1 + 9 files changed, 56 insertions(+), 19 deletions(-) diff --git a/interface/resources/html/createGlobalEventBridge.js b/interface/resources/html/createGlobalEventBridge.js index 027d6fe8db..1dd232ae0a 100644 --- a/interface/resources/html/createGlobalEventBridge.js +++ b/interface/resources/html/createGlobalEventBridge.js @@ -27,6 +27,10 @@ var EventBridge; }; }; + console.log("---"); + console.log("CREATING GLOBAL EVENT BRIDGE"); + console.log("---"); + EventBridge = new TempEventBridge(); var webChannel = new QWebChannel(qt.webChannelTransport, function (channel) { diff --git a/interface/resources/qml/controls-uit/BaseWebView.qml b/interface/resources/qml/controls-uit/BaseWebView.qml index 763e6530fb..9c22a8ff8c 100644 --- a/interface/resources/qml/controls-uit/BaseWebView.qml +++ b/interface/resources/qml/controls-uit/BaseWebView.qml @@ -15,7 +15,7 @@ import HFWebEngineProfile 1.0 WebEngineView { id: root - profile: desktop.browserProfile + // profile: desktop.browserProfile Component.onCompleted: { console.log("Connecting JS messaging to Hifi Logging") diff --git a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml b/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml index 17a00eccde..f2fa5f8d75 100644 --- a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml +++ b/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml @@ -84,14 +84,10 @@ Item { topMenu.focus = true; topMenu.forceActiveFocus(); // show current menu level on nav bar - if (topMenu.objectName === "") { + if (topMenu.objectName === "" || menuStack.length === 1) { breadcrumbText.text = "Menu"; } else { - if (menuStack.length === 1) { - breadcrumbText.text = "Menu"; - } else { - breadcrumbText.text = topMenu.objectName; - } + breadcrumbText.text = topMenu.objectName; } } else { breadcrumbText.text = "Menu"; diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index f33ef24c0d..9fc53f85e8 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -133,12 +133,29 @@ QString Web3DOverlay::pickURL() { void Web3DOverlay::loadSourceURL() { + // if (_javaScriptToInject == "") { + // QString javaScriptToInject; + // QFile webChannelFile(":qtwebchannel/qwebchannel.js"); + // QFile createGlobalEventBridgeFile(PathUtils::resourcesPath() + "/html/createGlobalEventBridge.js"); + // if (webChannelFile.open(QFile::ReadOnly | QFile::Text) && + // createGlobalEventBridgeFile.open(QFile::ReadOnly | QFile::Text)) { + // QString webChannelStr = QTextStream(&webChannelFile).readAll(); + // QString createGlobalEventBridgeStr = QTextStream(&createGlobalEventBridgeFile).readAll(); + // // concatenate these js files + // _javaScriptToInject = webChannelStr + createGlobalEventBridgeStr; + // } + // } + QUrl sourceUrl(_url); if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" || _url.toLower().endsWith(".htm") || _url.toLower().endsWith(".html")) { _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "/qml/")); _webSurface->load("Web3DOverlay.qml"); + // _webSurface->load("Web3DOverlay.qml", [&](QQmlContext* context, QObject* obj) { + // qDebug() << "Web3DOverlay::loadSourceURL -- " << _javaScriptToInject; + // context->setContextProperty("eventBridgeJavaScriptToInject", QVariant(_javaScriptToInject)); + // }); _webSurface->resume(); _webSurface->getRootItem()->setProperty("url", _url); _webSurface->getRootItem()->setProperty("scriptURL", _scriptURL); diff --git a/interface/src/ui/overlays/Web3DOverlay.h b/interface/src/ui/overlays/Web3DOverlay.h index 2b9686919d..2dea70cfd6 100644 --- a/interface/src/ui/overlays/Web3DOverlay.h +++ b/interface/src/ui/overlays/Web3DOverlay.h @@ -82,6 +82,8 @@ private: QMetaObject::Connection _emitScriptEventConnection; QMetaObject::Connection _webEventReceivedConnection; + + // QString _javaScriptToInject; }; #endif // hifi_Web3DOverlay_h diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index e7f8ebe2cb..3db4d7d840 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -215,6 +215,7 @@ void TabletProxy::gotoMenuScreen() { void TabletProxy::loadQMLSource(const QVariant& path) { if (_qmlTabletRoot) { if (_state != State::QML) { + // _qmlTabletRoot->setProperty("eventBridge", QVariant::fromValue(_qmlOffscreenSurface)); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, path)); _state = State::QML; } @@ -370,7 +371,7 @@ QQuickItem* TabletProxy::getQmlTablet() const { } QQuickItem* TabletProxy::getQmlMenu() const { - if (!_qmlTabletRoot) { + if (!_qmlTabletRoot) { return nullptr; } @@ -391,6 +392,15 @@ QQuickItem* TabletProxy::getQmlMenu() const { return menuList; } +QQuickItem* TabletProxy::findChild(QString childName) const { + if (!_qmlTabletRoot) { + return nullptr; + } + + return _qmlTabletRoot->findChild(childName); +} + + // // TabletButtonProxy // diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index a005152fa9..f5032dbff6 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -130,6 +130,8 @@ public: QQuickItem* getQmlMenu() const; + Q_INVOKABLE QQuickItem* findChild(QString childName) const; + signals: /**jsdoc * Signaled when this tablet receives an event from the html/js embedded in the tablet diff --git a/scripts/system/edit.js b/scripts/system/edit.js index f8cce6a544..9fa6d89bcc 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -457,7 +457,7 @@ var toolBar = (function () { that.toggle = function () { that.setActive(!isActive); - activeButton.editProperties({isActive: isActive}); + // activeButton.editProperties({isActive: isActive}); }; that.setActive = function (active) { @@ -1436,11 +1436,12 @@ var ServerScriptStatusMonitor = function(entityID, statusCallback) { var PropertiesTool = function (opts) { var that = {}; - var webView = new OverlayWebWindow({ - title: 'Entity Properties', - source: ENTITY_PROPERTIES_URL, - toolWindow: true - }); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + // var webView = new OverlayWebWindow({ + // title: 'Entity Properties', + // source: ENTITY_PROPERTIES_URL, + // toolWindow: true + // }); var visible = false; @@ -1449,16 +1450,20 @@ var PropertiesTool = function (opts) { var currentSelectedEntityID = null; var statusMonitor = null; - webView.setVisible(visible); + // webView.setVisible(visible); that.setVisible = function (newVisible) { + print("PropertiesTool.setVisible --> " + newVisible); visible = newVisible; - webView.setVisible(visible); + // webView.setVisible(visible); + if (visible) { + tablet.loadQMLSource("Edit.qml"); + } }; function updateScriptStatus(info) { info.type = "server_script_status"; - webView.emitScriptEvent(JSON.stringify(info)); + tablet.emitScriptEvent(JSON.stringify(info)); }; function resetScriptStatus() { @@ -1510,10 +1515,10 @@ var PropertiesTool = function (opts) { selections.push(entity); } data.selections = selections; - webView.emitScriptEvent(JSON.stringify(data)); + tablet.emitScriptEvent(JSON.stringify(data)); }); - webView.webEventReceived.connect(function (data) { + tablet.webEventReceived.connect(function (data) { try { data = JSON.parse(data); } diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 6b3bdaa0a4..63e964c218 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -710,6 +710,7 @@ function loaded() { if (window.EventBridge !== undefined) { var properties; + console.log("HERE -- " + (typeof EventBridge) + " -- " + JSON.stringify(EventBridge)); EventBridge.scriptEventReceived.connect(function(data) { data = JSON.parse(data); if (data.type == "server_script_status") {