mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 13:09:52 +02:00
Add option for non-tool window WebWindows
This commit is contained in:
parent
33f255fad2
commit
93cdb3a293
4 changed files with 35 additions and 18 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include <QListWidget>
|
#include <QListWidget>
|
||||||
|
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
#include "MainWindow.h"
|
||||||
#include "WindowScriptingInterface.h"
|
#include "WindowScriptingInterface.h"
|
||||||
#include "WebWindowClass.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),
|
: 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);
|
auto dockWidget = new QDockWidget(title, toolWindow);
|
||||||
_dockWidget->setFeatures(QDockWidget::DockWidgetMovable);
|
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);
|
_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,
|
connect(_webView->page()->mainFrame(), &QWebFrame::javaScriptWindowObjectCleared,
|
||||||
this, &WebWindowClass::addEventBridgeToWindowObject);
|
this, &WebWindowClass::addEventBridgeToWindowObject);
|
||||||
connect(this, &WebWindowClass::destroyed, _dockWidget, &QWidget::deleteLater);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WebWindowClass::~WebWindowClass() {
|
WebWindowClass::~WebWindowClass() {
|
||||||
|
@ -67,7 +82,7 @@ void WebWindowClass::setVisible(bool visible) {
|
||||||
QMetaObject::invokeMethod(
|
QMetaObject::invokeMethod(
|
||||||
Application::getInstance()->getToolWindow(), "setVisible", Qt::BlockingQueuedConnection, Q_ARG(bool, visible));
|
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) {
|
QScriptValue WebWindowClass::constructor(QScriptContext* context, QScriptEngine* engine) {
|
||||||
|
@ -78,7 +93,8 @@ QScriptValue WebWindowClass::constructor(QScriptContext* context, QScriptEngine*
|
||||||
Q_ARG(const QString&, file),
|
Q_ARG(const QString&, file),
|
||||||
Q_ARG(QString, context->argument(1).toString()),
|
Q_ARG(QString, context->argument(1).toString()),
|
||||||
Q_ARG(int, context->argument(2).toInteger()),
|
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);
|
connect(engine, &QScriptEngine::destroyed, retVal, &WebWindowClass::deleteLater);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ class WebWindowClass : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_PROPERTY(QObject* eventBridge READ getEventBridge)
|
Q_PROPERTY(QObject* eventBridge READ getEventBridge)
|
||||||
public:
|
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();
|
~WebWindowClass();
|
||||||
|
|
||||||
static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine);
|
static QScriptValue constructor(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
@ -46,9 +46,10 @@ public slots:
|
||||||
void addEventBridgeToWindowObject();
|
void addEventBridgeToWindowObject();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QDockWidget* _dockWidget;
|
QWidget* _windowWidget;
|
||||||
QWebView* _webView;
|
QWebView* _webView;
|
||||||
ScriptEventBridge* _eventBridge;
|
ScriptEventBridge* _eventBridge;
|
||||||
|
bool _isToolWindow;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -35,8 +35,8 @@ WindowScriptingInterface::WindowScriptingInterface() :
|
||||||
connect(Application::getInstance(), &Application::svoImportRequested, this, &WindowScriptingInterface::svoImportRequested);
|
connect(Application::getInstance(), &Application::svoImportRequested, this, &WindowScriptingInterface::svoImportRequested);
|
||||||
}
|
}
|
||||||
|
|
||||||
WebWindowClass* WindowScriptingInterface::doCreateWebWindow(const QString& title, const QString& url, int width, int height) {
|
WebWindowClass* WindowScriptingInterface::doCreateWebWindow(const QString& title, const QString& url, int width, int height, bool isToolWindow) {
|
||||||
return new WebWindowClass(title, url, width, height);
|
return new WebWindowClass(title, url, width, height, isToolWindow);
|
||||||
}
|
}
|
||||||
|
|
||||||
QScriptValue WindowScriptingInterface::hasFocus() {
|
QScriptValue WindowScriptingInterface::hasFocus() {
|
||||||
|
|
|
@ -83,7 +83,7 @@ private slots:
|
||||||
void nonBlockingFormAccepted() { _nonBlockingFormActive = false; _formResult = QDialog::Accepted; emit nonBlockingFormClosed(); }
|
void nonBlockingFormAccepted() { _nonBlockingFormActive = false; _formResult = QDialog::Accepted; emit nonBlockingFormClosed(); }
|
||||||
void nonBlockingFormRejected() { _nonBlockingFormActive = false; _formResult = QDialog::Rejected; 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:
|
private:
|
||||||
QString jsRegExp2QtRegExp(QString string);
|
QString jsRegExp2QtRegExp(QString string);
|
||||||
|
|
Loading…
Reference in a new issue