From 74361f5b05dc0a255f489256bd25065ef20f5dee Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 1 Apr 2018 13:19:07 +0200 Subject: Page menus refactoring - Split off menus into their own classes Page tools menu - Shows injected scripts - Shows dev tools page in another dialog --- src/webengine/webview.cpp | 135 ++++++++++++---------------------------------- 1 file changed, 33 insertions(+), 102 deletions(-) (limited to 'src/webengine/webview.cpp') 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 - -// copy page URL -#include -#include - -// zoom widget -#include -#include -#include -#include -#include -#include - -// printer support -#include -#include -#include -#include - #include "mainwindow/mainwindow.h" +#include "widgets/pagemenu.h" +#include "widgets/pagetoolsmenu.h" +#include #include - -// ssl errors -#include "addressbar/urllineedit.h" +#include 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(value) / 10)); - this->setZoomFactor(static_cast(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; } } -- cgit v1.2.1