From e09eef98f23cb0832c147785644bb0abae2dc855 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 18 Sep 2014 17:17:33 -0700 Subject: [PATCH] add option to add javascript objects to a DataWebDialog --- interface/src/Menu.cpp | 5 ++++- interface/src/ui/DataWebDialog.cpp | 14 +++++++++++++- interface/src/ui/DataWebDialog.h | 9 ++++++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 454d21be20..284b02dbff 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -38,6 +38,7 @@ #include "Application.h" #include "AccountManager.h" #include "Menu.h" +#include "scripting/LocationScriptingInterface.h" #include "scripting/MenuScriptingInterface.h" #include "Util.h" #include "ui/AnimationsDialog.h" @@ -1217,7 +1218,9 @@ void Menu::displayNameLocationResponse(const QString& errorString) { void Menu::toggleLocationList() { if (!_userLocationsDialog) { - _userLocationsDialog = DataWebDialog::dialogForPath("/locations"); + JavascriptObjectMap locationObjectMap; + locationObjectMap.insert("InterfaceLocation", LocationScriptingInterface::getInstance()); + _userLocationsDialog = DataWebDialog::dialogForPath("/locations", locationObjectMap); } if (!_userLocationsDialog->isVisible()) { diff --git a/interface/src/ui/DataWebDialog.cpp b/interface/src/ui/DataWebDialog.cpp index 0f70537b26..2094fe2dbf 100644 --- a/interface/src/ui/DataWebDialog.cpp +++ b/interface/src/ui/DataWebDialog.cpp @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include #include #include @@ -33,9 +34,14 @@ DataWebDialog::DataWebDialog() { connect(this, &QWebView::linkClicked, Application::getInstance(), &Application::openUrl); } -DataWebDialog* DataWebDialog::dialogForPath(const QString& path) { +DataWebDialog* DataWebDialog::dialogForPath(const QString& path, + const JavascriptObjectMap& javascriptObjects) { DataWebDialog* dialogWebView = new DataWebDialog(); + dialogWebView->_javascriptObjects = javascriptObjects; + connect(dialogWebView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, + dialogWebView, &DataWebDialog::addJavascriptObjectsToWindow); + QUrl dataWebUrl(DEFAULT_NODE_AUTH_URL); dataWebUrl.setPath(path); @@ -44,4 +50,10 @@ DataWebDialog* DataWebDialog::dialogForPath(const QString& path) { dialogWebView->load(dataWebUrl); return dialogWebView; +} + +void DataWebDialog::addJavascriptObjectsToWindow() { + foreach(const QString& name, _javascriptObjects.keys()) { + page()->mainFrame()->addToJavaScriptWindowObject(name, _javascriptObjects[name]); + } } \ No newline at end of file diff --git a/interface/src/ui/DataWebDialog.h b/interface/src/ui/DataWebDialog.h index c69a9207b9..219e674620 100644 --- a/interface/src/ui/DataWebDialog.h +++ b/interface/src/ui/DataWebDialog.h @@ -15,11 +15,18 @@ #include #include +typedef QMap JavascriptObjectMap; + class DataWebDialog : public QWebView { Q_OBJECT public: DataWebDialog(); - static DataWebDialog* dialogForPath(const QString& path); + static DataWebDialog* dialogForPath(const QString& path, + const JavascriptObjectMap& javascriptObjects = JavascriptObjectMap()); +private slots: + void addJavascriptObjectsToWindow(); +private: + JavascriptObjectMap _javascriptObjects; }; #endif // hifi_WebkitDialog_h \ No newline at end of file