/* * 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 "webengine/webprofile.h" #include #include #include #include #include #include #include #include #include PageMenu::PageMenu(WebView *parent) : QMenu(tr("Page"), parent) { setMinimumWidth(240); auto *bookmarkAction = addAction(tr("Bookmark page")); connect(bookmarkAction, &QAction::triggered, parent, [parent]() { parent->profile()->addBookmark(parent->title(), parent->url().toString()); }); 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); }); 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(value) / 10)); parent->setZoomFactor(static_cast(value) / 10); }); } addAction(zoomWidgetAction); }