aboutsummaryrefslogtreecommitdiff
path: root/src/webengine/webview.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-04-01 13:19:07 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-04-01 13:19:07 +0200
commit74361f5b05dc0a255f489256bd25065ef20f5dee (patch)
tree279f45e5f2bd093cd6fbf1500fe476f91108bd1f /src/webengine/webview.cpp
parentAdd keyboard shortcuts for address bar menus (diff)
downloadsmolbote-74361f5b05dc0a255f489256bd25065ef20f5dee.tar.xz
Page menus refactoring
- Split off menus into their own classes Page tools menu - Shows injected scripts - Shows dev tools page in another dialog
Diffstat (limited to 'src/webengine/webview.cpp')
-rw-r--r--src/webengine/webview.cpp135
1 files changed, 33 insertions, 102 deletions
diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp
index 0b0a9e3..7ca3280 100644
--- a/src/webengine/webview.cpp
+++ b/src/webengine/webview.cpp
@@ -7,31 +7,12 @@
*/
#include "webview.h"
-#include <QMenu>
-
-// copy page URL
-#include <QApplication>
-#include <QClipboard>
-
-// zoom widget
-#include <QLabel>
-#include <QSlider>
-#include <QStyle>
-#include <QToolButton>
-#include <QVBoxLayout>
-#include <QWidgetAction>
-
-// printer support
-#include <QFileDialog>
-#include <QPrintDialog>
-#include <QPrinter>
-#include <QPrinterInfo>
-
#include "mainwindow/mainwindow.h"
+#include "widgets/pagemenu.h"
+#include "widgets/pagetoolsmenu.h"
+#include <QDialog>
#include <QStatusBar>
-
-// ssl errors
-#include "addressbar/urllineedit.h"
+#include <QVBoxLayout>
WebView::WebView(MainWindow *parentMainWindow, QWidget *parent)
: QWebEngineView(parent)
@@ -54,82 +35,9 @@ WebView::WebView(MainWindow *parentMainWindow, QWidget *parent)
}
});
- m_pageMenu = new QMenu();
- m_pageMenu->setMinimumWidth(240);
-
- QAction *copyUrlAction = m_pageMenu->addAction(tr("Copy page URL"));
- connect(copyUrlAction, &QAction::triggered, [this]() {
- qApp->clipboard()->setText(this->url().toString());
- });
-
- QAction *bookmarkAction = m_pageMenu->addAction(tr("Bookmark page"));
- connect(bookmarkAction, &QAction::triggered, this, [this]() {
- emit newBookmark(this->title(), this->url());
- });
-
- m_pageMenu->addSeparator();
-
- QWidgetAction *zoomWidgetAction = new QWidgetAction(m_pageMenu);
- {
- QWidget *widget = new QWidget(m_pageMenu);
- zoomWidgetAction->setDefaultWidget(widget);
-
- QVBoxLayout *layout = new QVBoxLayout(widget);
- widget->setLayout(layout);
-
- QLabel *zoomLabel = new QLabel(tr("Zoom: 1x"));
- layout->addWidget(zoomLabel);
-
- QHBoxLayout *zoomLayout = new QHBoxLayout();
- layout->addLayout(zoomLayout);
-
- QSlider *zoomSlider = new QSlider(Qt::Horizontal);
- zoomSlider->setMinimum(5);
- zoomSlider->setMaximum(50);
- zoomSlider->setValue(10);
- zoomLayout->addWidget(zoomSlider);
-
- QToolButton *zoomResetButton = new QToolButton(widget);
- zoomResetButton->setIcon(widget->style()->standardIcon(QStyle::SP_BrowserReload));
- zoomLayout->addWidget(zoomResetButton);
-
- connect(zoomResetButton, &QToolButton::clicked, [zoomSlider]() {
- zoomSlider->setValue(10);
- });
- connect(zoomSlider, &QSlider::valueChanged, this, [this, zoomLabel](int value) {
- zoomLabel->setText(tr("Zoom: %1x").arg(static_cast<qreal>(value) / 10));
- this->setZoomFactor(static_cast<qreal>(value) / 10);
- });
- }
- m_pageMenu->addAction(zoomWidgetAction);
-
- m_pageMenu->addSeparator();
-
- QAction *savePageAction = m_pageMenu->addAction(tr("Save Page"));
- connect(savePageAction, &QAction::triggered, this, [this]() {
- this->triggerPageAction(QWebEnginePage::SavePage);
- });
-
-#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
- QAction *printAction = m_pageMenu->addAction(tr("Print page"));
- connect(printAction, &QAction::triggered, [this]() {
- QPrinter *printer = new QPrinter(QPrinterInfo::defaultPrinter());
- QPrintDialog *dlg = new QPrintDialog(printer, nullptr);
- if(dlg->exec() == QDialog::Accepted) {
- this->page()->print(printer, [printer](bool success) {
- qDebug("print %s", success ? "ok" : "failed");
- delete printer;
- });
- }
- delete dlg;
- });
-#endif
-
- QAction *printPdfAction = m_pageMenu->addAction(tr("Print to PDF"));
- connect(printPdfAction, &QAction::triggered, [this]() {
- const QString path = QFileDialog::getSaveFileName(this, tr("Print to PDF"), QDir::homePath(), tr("PDF files (*.pdf)"));
- this->page()->printToPdf(path);
- });
+ m_pageMenu = new PageMenu(this);
+ m_toolsMenu = new PageToolsMenu(this);
+ m_devToolsPage = new QWebEnginePage(this);
}
WebView::~WebView()
@@ -143,15 +51,29 @@ QMenu *WebView::pageMenu()
return m_pageMenu;
}
-void WebView::setPage(WebPage *page)
+void WebView::setPage(QWebEnginePage *page)
{
Q_CHECK_PTR(page);
// make sure the page gets cleaned up if we replace it by taking ownership
page->setParent(this);
- connect(page, &WebPage::linkHovered, this, &WebView::handleLinkHovered);
+ page->setDevToolsPage(m_devToolsPage);
+ connect(page, &QWebEnginePage::linkHovered, this, &WebView::handleLinkHovered);
QWebEngineView::setPage(page);
}
+void WebView::popupPage(QWebEnginePage *page)
+{
+ Q_CHECK_PTR(page);
+ auto *popup = new QDialog(this);
+ auto *view = new QWebEngineView(popup);
+ view->setPage(page);
+
+ auto *l = new QVBoxLayout(popup);
+ l->addWidget(view);
+
+ popup->show();
+}
+
bool WebView::isLoaded() const
{
return m_loaded;
@@ -193,6 +115,15 @@ WebView *WebView::createWindow(QWebEnginePage::WebWindowType type)
void WebView::handleLinkHovered(const QString &url)
{
if(isVisible()) {
- m_parent->statusBar()->showMessage(url);
+ m_parent->statusBar()->showMessage(url, 3000);
+ }
+}
+
+void WebView::triggerViewAction(WebView::ViewAction action)
+{
+ switch(action) {
+ case BookmarkPage:
+ emit newBookmark(this->title(), this->url());
+ break;
}
}