From 4eedf60d76a047f63b0991eee0b623e9be854c76 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 13 Dec 2018 12:49:28 +0100 Subject: MainWindow: rework menu bar Split off menu bar into its own class out of MainWindow Menu bar now has a 'Find in menus' function --- src/mainwindow/mainwindow.cpp | 130 ++++-------------------------------------- 1 file changed, 11 insertions(+), 119 deletions(-) (limited to 'src/mainwindow/mainwindow.cpp') diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index 1544e79..ea024c5 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -11,11 +11,11 @@ #include "browser.h" #include "config.h" #include "configuration.h" +#include "menubar.h" #include "profilemanager.h" #include "session/session.h" #include "session/sessiondialog.h" #include "subwindow/subwindow.h" -#include "ui_mainwindow.h" #include "webengine/webview.h" #include "webprofile.h" #include "widgets/dockwidget.h" @@ -31,9 +31,6 @@ #include #include #include -#include -#include -#include #include #include #include @@ -71,12 +68,13 @@ inline QDialog *createDevToolsDialog(QWebEnginePage *page) MainWindow::MainWindow(const std::unique_ptr &config, QWidget *parent) : QMainWindow(parent) - , ui(new Ui::MainWindow) + , configuration(config.get()) , mdiArea(new QMdiArea(this)) { Q_ASSERT(config); - ui->setupUi(this); + m_menuBar = new MenuBar(config.get(), this); + this->setMenuBar(m_menuBar); #ifdef CONFIG_PLASMA_BLUR setAttribute(Qt::WA_TranslucentBackground, true); @@ -91,98 +89,6 @@ MainWindow::MainWindow(const std::unique_ptr &config, QWidget *pa } show(); - // connect smolbote menu - { - connect(ui->actionNewSubwindow, &QAction::triggered, this, [this, &config]() { - auto *profile = WebProfile::defaultProfile(); - auto *window = createSubWindow(config.get(), profile); - window->addTab(profile->newtab(), profile); - }); - config->setShortcut(ui->actionNewSubwindow, "mainwindow.shortcuts.newGroup"); - - connect(ui->actionNewWindow, &QAction::triggered, this, []() { - auto *browser = qobject_cast(qApp); - if(browser) - browser->createWindow(); - }); - config->setShortcut(ui->actionNewWindow, "mainwindow.shortcuts.newWindow"); - - connect(ui->actionAbout, &QAction::triggered, qobject_cast(qApp), &Browser::about); - config->setShortcut(ui->actionAbout, "mainwindow.shortcuts.about"); - - connect(ui->actionAboutQt, &QAction::triggered, qApp, &QApplication::aboutQt); - - connect(ui->actionQuit, &QAction::triggered, qApp, &QApplication::quit); - config->setShortcut(ui->actionQuit, "mainwindow.shortcuts.quit"); - } - - // connect session menu - { - const QString sessionPath = config->value("browser.session.path").value(); - connect(ui->actionSaveSession, &QAction::triggered, this, [this, sessionPath]() { - const QString filename = QFileDialog::getSaveFileName(this, tr("Save Session"), sessionPath, tr("JSON (*.json)")); - QFile output(filename); - if(output.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { - auto *browser = qobject_cast(qApp); - auto data = Session::_session(browser->windows()); - output.write(QJsonDocument(data).toJson()); - output.close(); - } - }); - - connect(ui->actionLoadSession, &QAction::triggered, this, [this]() { - auto *sessionDialog = new SessionDialog(this); - sessionDialog->exec(); - }); - } - - // connect window menu - { - connect(ui->actionTileSubwindows, &QAction::triggered, mdiArea, &QMdiArea::tileSubWindows); - config->setShortcut(ui->actionTileSubwindows, "mainwindow.shortcuts.tileWindows"); - - connect(ui->actionCascadeSubwindows, &QAction::triggered, mdiArea, &QMdiArea::cascadeSubWindows); - config->setShortcut(ui->actionCascadeSubwindows, "mainwindow.shortcuts.cascadeWindows"); - } - - // 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) { - Q_UNUSED(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); - } - }); - - connect(ui->actionDeveloperTools, &QAction::triggered, this, [this]() { - if(currentView != nullptr) - createDevToolsDialog(currentView->page())->show(); - }); - - pageLoadProfileMenu = ui->menuPage->addMenu(tr("Load Profile")); - connect(pageLoadProfileMenu, &QMenu::aboutToShow, this, &MainWindow::updatePageLoadProfileMenu); - } - // current subwindow shortcut { QAction *subwindowMenuAction = new QAction(this); @@ -221,16 +127,13 @@ MainWindow::MainWindow(const std::unique_ptr &config, QWidget *pa disconnect(viewChangedConnection); disconnect(searchBoxConnection); disconnect(statusBarConnection); - ui->actionCurrentSubwindow->setMenu(nullptr); auto *w = qobject_cast(window); if(w == nullptr) { // no current subwindow, clear everything setView(nullptr); - ui->actionCurrentSubwindow->setMenu(nullptr); } else { setView(w->currentView()); - ui->actionCurrentSubwindow->setMenu(w->systemMenu()); viewChangedConnection = connect(w, &SubWindow::currentViewChanged, this, &MainWindow::setView); statusBarConnection = connect(w, &SubWindow::showStatusMessage, statusBar(), &QStatusBar::showMessage); } @@ -340,7 +243,7 @@ SubWindow *MainWindow::currentSubWindow() const return qobject_cast(mdiArea->currentSubWindow()); } -SubWindow *MainWindow::createSubWindow(const Configuration *config, WebProfile *profile) +SubWindow *MainWindow::createSubWindow(WebProfile *profile, bool openProfileNewtab) { bool shouldMaximize = true; // if there is a current window, use its maximize state @@ -348,7 +251,8 @@ SubWindow *MainWindow::createSubWindow(const Configuration *config, WebProfile * shouldMaximize = currentWindow->isMaximized(); } - auto *w = new SubWindow(config, this); + auto *w = new SubWindow(configuration, this); + w->setProfile(profile); mdiArea->addSubWindow(w); if(shouldMaximize) @@ -357,6 +261,10 @@ SubWindow *MainWindow::createSubWindow(const Configuration *config, WebProfile * w->show(); w->setFocus(); + + if(openProfileNewtab) + w->addTab(w->profile()->newtab()); + return w; } @@ -384,22 +292,6 @@ void MainWindow::setView(WebView *view) searchBox->setView(view); } -void MainWindow::updatePageLoadProfileMenu() -{ - Q_CHECK_PTR(pageLoadProfileMenu); - pageLoadProfileMenu->clear(); - - if(currentView == nullptr) - return; - - auto *profileManager = dynamic_cast(qApp)->getProfileManager(); - pageLoadProfileMenu->addActions(profileManager->createProfileMenu([this](WebProfile *profile) { - this->currentView->setProfile(profile); - }, - this) - ->actions()); -} - void MainWindow::closeEvent(QCloseEvent *event) { if(mdiArea->subWindowList().count() > 1) { -- cgit v1.2.1