From fc4c7943c79243ed027f7507c458d067a14bebb2 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 8 Jul 2018 11:10:48 +0200 Subject: Remove PageMenu Move zoom widget to WebView context menu Move the other page menu actions to main window menu --- lib/addressbar/addressbar.cpp | 5 -- lib/addressbar/addressbar.h | 1 - lib/addressbar/urllineedit.cpp | 3 - lib/addressbar/urllineedit.h | 2 - src/CMakeLists.txt | 2 - src/browser.cpp | 1 + src/mainwindow/mainwindow.cpp | 61 ++++++++++++++++++- src/mainwindow/mainwindow.h | 5 ++ src/mainwindow/mainwindow.ui | 37 ++++++++++- src/webengine/webview.cpp | 41 ++++++++++--- src/webengine/webview.h | 9 +-- src/webengine/widgets/pagemenu.cpp | 122 ------------------------------------- src/webengine/widgets/pagemenu.h | 29 --------- 13 files changed, 135 insertions(+), 183 deletions(-) delete mode 100644 src/webengine/widgets/pagemenu.cpp delete mode 100644 src/webengine/widgets/pagemenu.h diff --git a/lib/addressbar/addressbar.cpp b/lib/addressbar/addressbar.cpp index 7d17462..d570507 100644 --- a/lib/addressbar/addressbar.cpp +++ b/lib/addressbar/addressbar.cpp @@ -71,11 +71,6 @@ void AddressBar::setProgress(int value) { progressBar->setValue(std::min(value, 100)); } -void AddressBar::setPageMenu(QMenu *menu) -{ - urlBar->pageMenu = menu; -} - void AddressBar::setToolsMenu(QMenu *menu) { urlBar->toolsMenu = menu; diff --git a/lib/addressbar/addressbar.h b/lib/addressbar/addressbar.h index e87f72e..f1d93c7 100644 --- a/lib/addressbar/addressbar.h +++ b/lib/addressbar/addressbar.h @@ -34,7 +34,6 @@ public slots: void setUrl(const QUrl &url); void setProgress(int value); - void setPageMenu(QMenu *menu); void setToolsMenu(QMenu *menu); private: diff --git a/lib/addressbar/urllineedit.cpp b/lib/addressbar/urllineedit.cpp index 29a14cd..c106ea4 100644 --- a/lib/addressbar/urllineedit.cpp +++ b/lib/addressbar/urllineedit.cpp @@ -60,9 +60,6 @@ UrlLineEdit::UrlLineEdit(QWidget *parent) menu->addActions(actions); menu->addSeparator(); - if(pageMenu) { - menu->addMenu(pageMenu); - } if(toolsMenu) { menu->addMenu(toolsMenu); } diff --git a/lib/addressbar/urllineedit.h b/lib/addressbar/urllineedit.h index 56914c4..d5ab33d 100644 --- a/lib/addressbar/urllineedit.h +++ b/lib/addressbar/urllineedit.h @@ -30,8 +30,6 @@ public slots: public: QAction *menuAction = nullptr; - // pageMenu action: zoom, print - QMenu *pageMenu = nullptr; // devMenu action: scripts, etc QMenu *toolsMenu = nullptr; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2f80ad1..16a21f1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -42,8 +42,6 @@ set(poi_SRC webengine/webview.h webengine/widgets/pagetoolsmenu.cpp webengine/widgets/pagetoolsmenu.h - webengine/widgets/pagemenu.cpp - webengine/widgets/pagemenu.h # plugin interfaces plugin.h diff --git a/src/browser.cpp b/src/browser.cpp index 29eaea5..46018fb 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -186,6 +186,7 @@ MainWindow *Browser::createWindow() // the window will delete itself when it closes, so we don't need to delete it MainWindow *window = new MainWindow(m_config); connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search); + connect(window, &MainWindow::createBookmark, m_bookmarks.get(), &BookmarksWidget::addBookmark); auto *bookmarksAction = new QAction(tr("Bookmarks"), window); m_config->setShortcut(bookmarksAction, "bookmarks.shortcut"); diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index 741b544..ff8c911 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -32,6 +32,10 @@ #include #include "session.h" #include +#include +#include +#include +#include "profilemanager.h" #ifdef PLASMA_BLUR #include @@ -116,6 +120,38 @@ MainWindow::MainWindow(const std::unique_ptr &config, QWidget *pa subWindowAction = ui->actionCurrentWindow; } + // connect page menu + { + connect(ui->actionBookmarkPage, &QAction::triggered, this, [this]() { + if(currentView != nullptr) + emit createBookmark(currentView->title(), currentView->url().toString()); + }); + connect(ui->actionSavePage, &QAction::triggered, this, [this]() { + if(currentView != nullptr) + currentView->triggerPageAction(QWebEnginePage::SavePage); + }); + connect(ui->actionPrintPage, &QAction::triggered, this, [this]() { + if(currentView != nullptr) { + auto *printer = new QPrinter(QPrinterInfo::defaultPrinter()); + QPrintDialog dlg(printer, this); + if(dlg.exec() == QDialog::Accepted) { + currentView->page()->print(printer, [printer](bool success) { + delete printer; + }); + } + } + }); + connect(ui->actionPrintPageToPdf, &QAction::triggered, this, [this]() { + if(currentView != nullptr) { + const QString path = QFileDialog::getSaveFileName(this, tr("Print to PDF"), QDir::homePath(), tr("PDF files (*.pdf)")); + currentView->page()->printToPdf(path); + } + }); + + pageLoadProfileMenu = ui->menuPage->addMenu(tr("Load Profile")); + connect(pageLoadProfileMenu, &QMenu::aboutToShow, this, &MainWindow::updatePageLoadProfileMenu); + } + navigationToolBar = new NavigationBar(config->section("navigation"), this); navigationToolBar->setMovable(config->value("navigation.movable").value()); addToolBar(Qt::TopToolBarArea, navigationToolBar); @@ -290,7 +326,6 @@ void MainWindow::setView(WebView *view) currentView = view; if(view) { - addressBar->setPageMenu(view->pageMenu()); addressBar->setToolsMenu(view->toolsMenu()); connect(view, &WebView::urlChanged, addressBar, &AddressBar::setUrl); @@ -300,7 +335,6 @@ void MainWindow::setView(WebView *view) addressBar->setProgress(100); } else { - addressBar->setPageMenu(nullptr); addressBar->setToolsMenu(nullptr); addressBar->setUrl(QUrl()); @@ -311,6 +345,29 @@ void MainWindow::setView(WebView *view) searchBox->setView(view); } +void MainWindow::updatePageLoadProfileMenu() +{ + Q_CHECK_PTR(pageLoadProfileMenu); + pageLoadProfileMenu->clear(); + + if(currentView == nullptr) + return; + + auto *browser = qobject_cast(qApp); + Q_CHECK_PTR(browser); + + ProfileIterator it(ProfileManager::profileList()); + while(it.hasNext()) { + it.next(); + auto *profile = it.value(); + auto *loadAction = pageLoadProfileMenu->addAction(profile->name()); + + connect(loadAction, &QAction::triggered, this, [=]() { + currentView->setProfile(profile); + }); + } +} + void MainWindow::closeEvent(QCloseEvent *event) { if(mdiArea->subWindowList().count() > 1) { diff --git a/src/mainwindow/mainwindow.h b/src/mainwindow/mainwindow.h index d695dd8..3768348 100644 --- a/src/mainwindow/mainwindow.h +++ b/src/mainwindow/mainwindow.h @@ -49,12 +49,16 @@ public: const QVector subWindows() const; SubWindow *currentSubWindow() const; +signals: + void createBookmark(const QString &title, const QString &url); + public slots: void createTab(const QUrl &url); SubWindow *createSubWindow(const std::unique_ptr &config, WebProfile *profile); private slots: void setView(WebView *view); + void updatePageLoadProfileMenu(); protected: void closeEvent(QCloseEvent *event) override; @@ -63,6 +67,7 @@ private: Ui::MainWindow *ui; QAction *subWindowAction = nullptr; QMenu *toolsMenu = nullptr; + QMenu *pageLoadProfileMenu = nullptr; NavigationBar *navigationToolBar = nullptr; AddressBar *addressBar = nullptr; diff --git a/src/mainwindow/mainwindow.ui b/src/mainwindow/mainwindow.ui index 72e0b39..698e1c4 100644 --- a/src/mainwindow/mainwindow.ui +++ b/src/mainwindow/mainwindow.ui @@ -56,9 +56,20 @@ Too&ls + + + Pa&ge + + + + + + + + @@ -99,17 +110,37 @@ - Tile Windows + &Tile Windows - Cascade Windows + &Cascade Windows - Current Window + Current &Window + + + + + &Create Bookmark + + + + + &Save Page + + + + + &Print Page + + + + + P&rint to PDF diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp index f1b52b7..9380b13 100644 --- a/src/webengine/webview.cpp +++ b/src/webengine/webview.cpp @@ -10,11 +10,13 @@ #include "mainwindow/subwindow.h" #include "webpage.h" #include "webprofile.h" -#include "widgets/pagemenu.h" #include "widgets/pagetoolsmenu.h" #include #include #include +#include +#include +#include WebView::WebView(WebProfile *profile, QWidget *parent) : QWebEngineView(parent) @@ -41,15 +43,9 @@ WebView::WebView(WebProfile *profile, QWidget *parent) }); #endif - m_pageMenu = new PageMenu(this); m_toolsMenu = new PageToolsMenu(this); } -WebView::~WebView() -{ - delete m_pageMenu; -} - void WebView::setProfile(WebProfile *profile) { m_profile = profile; @@ -101,6 +97,37 @@ WebView *WebView::createWindow(QWebEnginePage::WebWindowType type) return view; } +void WebView::contextMenuEvent(QContextMenuEvent *event) +{ + QMenu *menu = page()->createStandardContextMenu(); + + // zoom widget + menu->addSeparator(); + { + auto *zoomSlider = new QSlider(Qt::Horizontal); + zoomSlider->setMinimum(5); + zoomSlider->setMaximum(50); + zoomSlider->setValue(10); + + auto *zoomAction = menu->addAction(tr("Zoom: %1x").arg(zoomFactor())); + connect(zoomAction, &QAction::triggered, this, [zoomSlider]() { + zoomSlider->setValue(10); + }); + + connect(zoomSlider, &QSlider::valueChanged, this, [this, zoomAction](int value) { + zoomAction->setText(tr("Zoom: %1x").arg(static_cast(value) / 10)); + setZoomFactor(static_cast(value) / 10); + }); + + auto *zoomWidgetAction = new QWidgetAction(this); + zoomWidgetAction->setDefaultWidget(zoomSlider); + + menu->addAction(zoomWidgetAction); + } + + menu->popup(event->globalPos()); +} + void WebView::triggerViewAction(WebView::ViewAction action) { switch(action) { diff --git a/src/webengine/webview.h b/src/webengine/webview.h index 0717e27..2d07244 100644 --- a/src/webengine/webview.h +++ b/src/webengine/webview.h @@ -25,13 +25,8 @@ public: }; explicit WebView(WebProfile *profile = nullptr, QWidget *parent = nullptr); - ~WebView() override; + ~WebView() = default; - QMenu *pageMenu() - { - Q_CHECK_PTR(m_pageMenu); - return m_pageMenu; - } QMenu *toolsMenu() { Q_CHECK_PTR(m_toolsMenu); @@ -56,12 +51,12 @@ signals: protected: WebView *createWindow(QWebEnginePage::WebWindowType type) override; + void contextMenuEvent(QContextMenuEvent *event) override; private: SubWindow *m_parentWindow = nullptr; WebProfile *m_profile = nullptr; - QMenu *m_pageMenu = nullptr; QMenu *m_toolsMenu = nullptr; bool m_loaded; diff --git a/src/webengine/widgets/pagemenu.cpp b/src/webengine/widgets/pagemenu.cpp deleted file mode 100644 index deff511..0000000 --- a/src/webengine/widgets/pagemenu.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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 "browser.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "profilemanager.h" - -PageMenu::PageMenu(WebView *parent) - : QMenu(tr("Page"), parent) -{ - setMinimumWidth(240); - view = parent; - - auto *bookmarkAction = addAction(tr("Bookmark page")); - connect(bookmarkAction, &QAction::triggered, parent, [parent]() { - auto *browser = qobject_cast(qApp); - Q_CHECK_PTR(browser); - browser->bookmarks()->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); - - addSeparator(); - - loadProfile_menu = addMenu(tr("Load Profile")); - connect(this, &PageMenu::aboutToShow, this, &PageMenu::updateLoadProfileMenu); -} - -void PageMenu::updateLoadProfileMenu() -{ - Q_CHECK_PTR(loadProfile_menu); - loadProfile_menu->clear(); - - auto *browser = qobject_cast(qApp); - Q_CHECK_PTR(browser); - - ProfileIterator it(ProfileManager::profileList()); - while(it.hasNext()) { - it.next(); - auto *profile =it.value(); - auto *loadAction = loadProfile_menu->addAction(profile->name()); - - connect(loadAction, &QAction::triggered, this, [=]() { - view->setProfile(profile); - }); - } -} diff --git a/src/webengine/widgets/pagemenu.h b/src/webengine/widgets/pagemenu.h deleted file mode 100644 index 23e0e20..0000000 --- a/src/webengine/widgets/pagemenu.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 - */ - -#ifndef SMOLBOTE_PAGEMENU_H -#define SMOLBOTE_PAGEMENU_H - -#include - -class WebView; -class PageMenu : public QMenu -{ - Q_OBJECT -public: - explicit PageMenu(WebView *parent = nullptr); - -private slots: - void updateLoadProfileMenu(); - -private: - QMenu *loadProfile_menu = nullptr; - WebView *view = nullptr; -}; - -#endif //SMOLBOTE_PAGEMENU_H -- cgit v1.2.1