add option to add javascript objects to a DataWebDialog

This commit is contained in:
Stephen Birarda 2014-09-18 17:17:33 -07:00
parent a66b6e7237
commit e09eef98f2
3 changed files with 25 additions and 3 deletions

View file

@ -38,6 +38,7 @@
#include "Application.h" #include "Application.h"
#include "AccountManager.h" #include "AccountManager.h"
#include "Menu.h" #include "Menu.h"
#include "scripting/LocationScriptingInterface.h"
#include "scripting/MenuScriptingInterface.h" #include "scripting/MenuScriptingInterface.h"
#include "Util.h" #include "Util.h"
#include "ui/AnimationsDialog.h" #include "ui/AnimationsDialog.h"
@ -1217,7 +1218,9 @@ void Menu::displayNameLocationResponse(const QString& errorString) {
void Menu::toggleLocationList() { void Menu::toggleLocationList() {
if (!_userLocationsDialog) { if (!_userLocationsDialog) {
_userLocationsDialog = DataWebDialog::dialogForPath("/locations"); JavascriptObjectMap locationObjectMap;
locationObjectMap.insert("InterfaceLocation", LocationScriptingInterface::getInstance());
_userLocationsDialog = DataWebDialog::dialogForPath("/locations", locationObjectMap);
} }
if (!_userLocationsDialog->isVisible()) { if (!_userLocationsDialog->isVisible()) {

View file

@ -9,6 +9,7 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
#include <qwebframe.h>
#include <qwebview.h> #include <qwebview.h>
#include <AccountManager.h> #include <AccountManager.h>
@ -33,9 +34,14 @@ DataWebDialog::DataWebDialog() {
connect(this, &QWebView::linkClicked, Application::getInstance(), &Application::openUrl); 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(); DataWebDialog* dialogWebView = new DataWebDialog();
dialogWebView->_javascriptObjects = javascriptObjects;
connect(dialogWebView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared,
dialogWebView, &DataWebDialog::addJavascriptObjectsToWindow);
QUrl dataWebUrl(DEFAULT_NODE_AUTH_URL); QUrl dataWebUrl(DEFAULT_NODE_AUTH_URL);
dataWebUrl.setPath(path); dataWebUrl.setPath(path);
@ -45,3 +51,9 @@ DataWebDialog* DataWebDialog::dialogForPath(const QString& path) {
return dialogWebView; return dialogWebView;
} }
void DataWebDialog::addJavascriptObjectsToWindow() {
foreach(const QString& name, _javascriptObjects.keys()) {
page()->mainFrame()->addToJavaScriptWindowObject(name, _javascriptObjects[name]);
}
}

View file

@ -15,11 +15,18 @@
#include <qobject.h> #include <qobject.h>
#include <qwebview.h> #include <qwebview.h>
typedef QMap<QString, QObject*> JavascriptObjectMap;
class DataWebDialog : public QWebView { class DataWebDialog : public QWebView {
Q_OBJECT Q_OBJECT
public: public:
DataWebDialog(); 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 #endif // hifi_WebkitDialog_h