aboutsummaryrefslogtreecommitdiff
path: root/src/mainwindow/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainwindow/mainwindow.cpp')
-rw-r--r--src/mainwindow/mainwindow.cpp130
1 files changed, 11 insertions, 119 deletions
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 <QMdiSubWindow>
#include <QMenuBar>
#include <QMessageBox>
-#include <QPrintDialog>
-#include <QPrinter>
-#include <QPrinterInfo>
#include <QShortcut>
#include <QStatusBar>
#include <QToolBar>
@@ -71,12 +68,13 @@ inline QDialog *createDevToolsDialog(QWebEnginePage *page)
MainWindow::MainWindow(const std::unique_ptr<Configuration> &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<Configuration> &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<Browser *>(qApp);
- if(browser)
- browser->createWindow();
- });
- config->setShortcut(ui->actionNewWindow, "mainwindow.shortcuts.newWindow");
-
- connect(ui->actionAbout, &QAction::triggered, qobject_cast<Browser *>(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<QString>("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<Browser *>(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<Configuration> &config, QWidget *pa
disconnect(viewChangedConnection);
disconnect(searchBoxConnection);
disconnect(statusBarConnection);
- ui->actionCurrentSubwindow->setMenu(nullptr);
auto *w = qobject_cast<SubWindow *>(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<SubWindow *>(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<Browser *>(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) {