aboutsummaryrefslogtreecommitdiff
path: root/src/webengine/widgets/pagemenu.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/widgets/pagemenu.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/widgets/pagemenu.cpp')
-rw-r--r--src/webengine/widgets/pagemenu.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/src/webengine/widgets/pagemenu.cpp b/src/webengine/widgets/pagemenu.cpp
new file mode 100644
index 0000000..a90d223
--- /dev/null
+++ b/src/webengine/widgets/pagemenu.cpp
@@ -0,0 +1,99 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: https://neueland.iserlohn-fortress.net/smolbote.hg
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "pagemenu.h"
+#include "../webview.h"
+#include <QApplication>
+#include <QClipboard>
+#include <QFileDialog>
+#include <QLabel>
+#include <QPrintDialog>
+#include <QPrinterInfo>
+#include <QSlider>
+#include <QStyle>
+#include <QToolButton>
+#include <QVBoxLayout>
+#include <QWidgetAction>
+
+PageMenu::PageMenu(WebView *parent)
+ : QMenu(parent)
+{
+ setMinimumWidth(240);
+
+ auto *copyUrlAction = addAction(tr("Copy page URL"));
+ connect(copyUrlAction, &QAction::triggered, parent, [parent]() {
+ qApp->clipboard()->setText(parent->url().toString());
+ });
+
+ auto *bookmarkAction = addAction(tr("Bookmark page"));
+ connect(bookmarkAction, &QAction::triggered, parent, [parent]() {
+ parent->triggerViewAction(WebView::BookmarkPage);
+ });
+
+ addSeparator();
+
+ auto *zoomWidgetAction = new QWidgetAction(this);
+ {
+ auto *widget = new QWidget(this);
+ zoomWidgetAction->setDefaultWidget(widget);
+
+ auto *layout = new QVBoxLayout(widget);
+ widget->setLayout(layout);
+
+ QLabel *zoomLabel = new QLabel(tr("Zoom: 1x"));
+ layout->addWidget(zoomLabel);
+
+ auto *zoomLayout = new QHBoxLayout();
+ layout->addLayout(zoomLayout);
+
+ auto *zoomSlider = new QSlider(Qt::Horizontal);
+ zoomSlider->setMinimum(5);
+ zoomSlider->setMaximum(50);
+ zoomSlider->setValue(10);
+ zoomLayout->addWidget(zoomSlider);
+
+ auto *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, parent, [parent, zoomLabel](int value) {
+ zoomLabel->setText(tr("Zoom: %1x").arg(static_cast<qreal>(value) / 10));
+ parent->setZoomFactor(static_cast<qreal>(value) / 10);
+ });
+ }
+ addAction(zoomWidgetAction);
+
+ addSeparator();
+
+ auto *savePageAction = addAction(tr("Save Page"));
+ connect(savePageAction, &QAction::triggered, parent, [parent]() {
+ parent->triggerPageAction(QWebEnginePage::SavePage);
+ });
+
+ auto *printAction = addAction(tr("Print Page"));
+ connect(printAction, &QAction::triggered, parent, [parent]() {
+ auto *printer = new QPrinter(QPrinterInfo::defaultPrinter());
+ auto *dlg = new QPrintDialog(printer, nullptr);
+ if(dlg->exec() == QDialog::Accepted) {
+ parent->page()->print(printer, [printer](bool success) {
+ qDebug("print %s", success ? "ok" : "failed");
+ delete printer;
+ });
+ }
+ delete dlg;
+ });
+
+ auto *printPdfAction = addAction(tr("Print to PDF"));
+ connect(printPdfAction, &QAction::triggered, parent, [parent]() {
+ const QString path = QFileDialog::getSaveFileName(parent, tr("Print to PDF"), QDir::homePath(), tr("PDF files (*.pdf)"));
+ parent->page()->printToPdf(path);
+ });
+}