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 "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()) {

View file

@ -9,6 +9,7 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include <qwebframe.h>
#include <qwebview.h>
#include <AccountManager.h>
@ -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]);
}
}

View file

@ -15,11 +15,18 @@
#include <qobject.h>
#include <qwebview.h>
typedef QMap<QString, QObject*> 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