From 93cdb3a293afc164a55726d58760c5d9669543bb Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Fri, 13 Mar 2015 11:51:40 -0700 Subject: [PATCH] Add option for non-tool window WebWindows --- interface/src/scripting/WebWindowClass.cpp | 42 +++++++++++++------ interface/src/scripting/WebWindowClass.h | 5 ++- .../scripting/WindowScriptingInterface.cpp | 4 +- .../src/scripting/WindowScriptingInterface.h | 2 +- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/interface/src/scripting/WebWindowClass.cpp b/interface/src/scripting/WebWindowClass.cpp index 2e0f88c776..36f0139a6d 100644 --- a/interface/src/scripting/WebWindowClass.cpp +++ b/interface/src/scripting/WebWindowClass.cpp @@ -18,6 +18,7 @@ #include #include "Application.h" +#include "MainWindow.h" #include "WindowScriptingInterface.h" #include "WebWindowClass.h" @@ -33,26 +34,40 @@ void ScriptEventBridge::emitScriptEvent(const QString& data) { } -WebWindowClass::WebWindowClass(const QString& title, const QString& url, int width, int height) +WebWindowClass::WebWindowClass(const QString& title, const QString& url, int width, int height, bool isToolWindow) : QObject(NULL), - _eventBridge(new ScriptEventBridge(this)) { + _eventBridge(new ScriptEventBridge(this)), + _isToolWindow(isToolWindow) { - ToolWindow* toolWindow = Application::getInstance()->getToolWindow(); + if (_isToolWindow) { + ToolWindow* toolWindow = Application::getInstance()->getToolWindow(); - _dockWidget = new QDockWidget(title, toolWindow); - _dockWidget->setFeatures(QDockWidget::DockWidgetMovable); + auto dockWidget = new QDockWidget(title, toolWindow); + dockWidget->setFeatures(QDockWidget::DockWidgetMovable); - _webView = new QWebView(_dockWidget); + _webView = new QWebView(dockWidget); + addEventBridgeToWindowObject(); + + dockWidget->setWidget(_webView); + + toolWindow->addDockWidget(Qt::RightDockWidgetArea, dockWidget); + + _windowWidget = dockWidget; + } else { + _windowWidget = new QWidget(Application::getInstance()->getWindow(), Qt::Window); + _windowWidget->setMinimumSize(width, height); + + _webView = new QWebView(_windowWidget); + addEventBridgeToWindowObject(); + } + + _webView->setPage(new InterfaceWebPage()); _webView->setUrl(url); - addEventBridgeToWindowObject(); - _dockWidget->setWidget(_webView); - - toolWindow->addDockWidget(Qt::RightDockWidgetArea, _dockWidget); + connect(this, &WebWindowClass::destroyed, _windowWidget, &QWidget::deleteLater); connect(_webView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared, this, &WebWindowClass::addEventBridgeToWindowObject); - connect(this, &WebWindowClass::destroyed, _dockWidget, &QWidget::deleteLater); } WebWindowClass::~WebWindowClass() { @@ -67,7 +82,7 @@ void WebWindowClass::setVisible(bool visible) { QMetaObject::invokeMethod( Application::getInstance()->getToolWindow(), "setVisible", Qt::BlockingQueuedConnection, Q_ARG(bool, visible)); } - QMetaObject::invokeMethod(_dockWidget, "setVisible", Qt::BlockingQueuedConnection, Q_ARG(bool, visible)); + QMetaObject::invokeMethod(_windowWidget, "setVisible", Qt::BlockingQueuedConnection, Q_ARG(bool, visible)); } QScriptValue WebWindowClass::constructor(QScriptContext* context, QScriptEngine* engine) { @@ -78,7 +93,8 @@ QScriptValue WebWindowClass::constructor(QScriptContext* context, QScriptEngine* Q_ARG(const QString&, file), Q_ARG(QString, context->argument(1).toString()), Q_ARG(int, context->argument(2).toInteger()), - Q_ARG(int, context->argument(3).toInteger())); + Q_ARG(int, context->argument(3).toInteger()), + Q_ARG(bool, context->argument(4).toBool())); connect(engine, &QScriptEngine::destroyed, retVal, &WebWindowClass::deleteLater); diff --git a/interface/src/scripting/WebWindowClass.h b/interface/src/scripting/WebWindowClass.h index 0fa88804f2..c923fdd748 100644 --- a/interface/src/scripting/WebWindowClass.h +++ b/interface/src/scripting/WebWindowClass.h @@ -35,7 +35,7 @@ class WebWindowClass : public QObject { Q_OBJECT Q_PROPERTY(QObject* eventBridge READ getEventBridge) public: - WebWindowClass(const QString& title, const QString& url, int width, int height); + WebWindowClass(const QString& title, const QString& url, int width, int height, bool isToolWindow = false); ~WebWindowClass(); static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine); @@ -46,9 +46,10 @@ public slots: void addEventBridgeToWindowObject(); private: - QDockWidget* _dockWidget; + QWidget* _windowWidget; QWebView* _webView; ScriptEventBridge* _eventBridge; + bool _isToolWindow; }; #endif diff --git a/interface/src/scripting/WindowScriptingInterface.cpp b/interface/src/scripting/WindowScriptingInterface.cpp index 52de31df3c..4a6afe4dbe 100644 --- a/interface/src/scripting/WindowScriptingInterface.cpp +++ b/interface/src/scripting/WindowScriptingInterface.cpp @@ -35,8 +35,8 @@ WindowScriptingInterface::WindowScriptingInterface() : connect(Application::getInstance(), &Application::svoImportRequested, this, &WindowScriptingInterface::svoImportRequested); } -WebWindowClass* WindowScriptingInterface::doCreateWebWindow(const QString& title, const QString& url, int width, int height) { - return new WebWindowClass(title, url, width, height); +WebWindowClass* WindowScriptingInterface::doCreateWebWindow(const QString& title, const QString& url, int width, int height, bool isToolWindow) { + return new WebWindowClass(title, url, width, height, isToolWindow); } QScriptValue WindowScriptingInterface::hasFocus() { diff --git a/interface/src/scripting/WindowScriptingInterface.h b/interface/src/scripting/WindowScriptingInterface.h index 34942366eb..e3af898267 100644 --- a/interface/src/scripting/WindowScriptingInterface.h +++ b/interface/src/scripting/WindowScriptingInterface.h @@ -83,7 +83,7 @@ private slots: void nonBlockingFormAccepted() { _nonBlockingFormActive = false; _formResult = QDialog::Accepted; emit nonBlockingFormClosed(); } void nonBlockingFormRejected() { _nonBlockingFormActive = false; _formResult = QDialog::Rejected; emit nonBlockingFormClosed(); } - WebWindowClass* doCreateWebWindow(const QString& title, const QString& url, int width, int height); + WebWindowClass* doCreateWebWindow(const QString& title, const QString& url, int width, int height, bool isToolWindow); private: QString jsRegExp2QtRegExp(QString string);