diff options
Diffstat (limited to 'src/mainwindow/mainwindow.cpp')
-rw-r--r-- | src/mainwindow/mainwindow.cpp | 164 |
1 files changed, 69 insertions, 95 deletions
diff --git a/src/mainwindow/mainwindow.cpp b/src/mainwindow/mainwindow.cpp index 7adc9db..741b544 100644 --- a/src/mainwindow/mainwindow.cpp +++ b/src/mainwindow/mainwindow.cpp @@ -7,6 +7,7 @@ */ #include "mainwindow.h" +#include "ui_mainwindow.h" #include "addressbar/addressbar.h" #include "browser.h" #include "subwindow.h" @@ -36,12 +37,14 @@ #include <KWindowEffects> #endif -MainWindow::MainWindow(std::shared_ptr<Configuration> &config, QWidget *parent) +MainWindow::MainWindow(const std::unique_ptr<Configuration> &config, QWidget *parent) : QMainWindow(parent) + , ui(new Ui::MainWindow) , mdiArea(new QMdiArea(this)) { Q_ASSERT(config); - m_config = config; + + ui->setupUi(this); #ifdef PLASMA_BLUR setAttribute(Qt::WA_TranslucentBackground, true); @@ -49,14 +52,69 @@ MainWindow::MainWindow(std::shared_ptr<Configuration> &config, QWidget *parent) #endif // create UI - setWindowTitle(QString::fromStdString(config->value<std::string>("mainwindow.title").value())); + setWindowTitle(config->value<QString>("mainwindow.title").value()); resize(config->value<int>("mainwindow.width").value(), config->value<int>("mainwindow.height").value()); if(config->value<bool>("mainwindow.maximized").value()) { setWindowState(Qt::WindowMaximized); } show(); - createMenuBar(); + // connect smolbote menu + { + connect(ui->actionNewSubwindow, &QAction::triggered, this, [this, &config]() { + auto *profile = WebProfile::defaultProfile(); + auto *window = createSubWindow(config, 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 + { + connect(ui->actionSaveSession, &QAction::triggered, this, [this]() { + const QString filename = QFileDialog::getSaveFileName(this, tr("Save Session"), QDir::homePath(), tr("JSON (*.json)")); + QFile output(filename); + if(output.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { + output.write(QJsonDocument(Session::toJsonObject(this)).toJson()); + output.close(); + } + }); + connect(ui->actionLoadSession, &QAction::triggered, this, [this]() { + const QString filename = QFileDialog::getOpenFileName(this, tr("Load Session"), QDir::homePath(), tr("JSON (*.json)")); + QFile json(filename); + if(json.open(QIODevice::ReadOnly | QIODevice::Text)) { + auto *browser = qobject_cast<Browser *>(qApp); + browser->sendMessage(json.readAll()); + json.close(); + } + }); + } + + // connect window menu + { + connect(ui->actionTileWindows, &QAction::triggered, mdiArea, &QMdiArea::tileSubWindows); + config->setShortcut(ui->actionTileWindows, "mainwindow.shortcuts.tileWindows"); + + connect(ui->actionCascadeWindows, &QAction::triggered, mdiArea, &QMdiArea::cascadeSubWindows); + config->setShortcut(ui->actionCascadeWindows, "mainwindow.shortcuts.cascadeWindows"); + + subWindowAction = ui->actionCurrentWindow; + } navigationToolBar = new NavigationBar(config->section("navigation"), this); navigationToolBar->setMovable(config->value<bool>("navigation.movable").value()); @@ -117,7 +175,7 @@ MainWindow::MainWindow(std::shared_ptr<Configuration> &config, QWidget *parent) // search box auto *searchAction = new QAction(this); - m_config->setShortcut(searchAction, "mainwindow.shortcuts.search"); + config->setShortcut(searchAction, "mainwindow.shortcuts.search"); connect(searchAction, &QAction::triggered, this, [=]() { /* QTBUG-18665 * When focusing out of the search box and hiding it, the first @@ -143,87 +201,11 @@ MainWindow::~MainWindow() disconnect(addressBar); } -void MainWindow::createMenuBar() -{ - Q_CHECK_PTR(mdiArea); - - // smolbote menu - auto *smolboteMenu = menuBar()->addMenu(qApp->applicationDisplayName()); - - auto *subwindowAction = smolboteMenu->addAction(tr("New subwindow"), this, [this]() { - createSubWindow(); - }); - m_config->setShortcut(subwindowAction, "mainwindow.shortcuts.newGroup"); - - auto *windowAction = smolboteMenu->addAction(tr("New window"), this, []() { - auto *browser = qobject_cast<Browser *>(qApp); - if(browser) - browser->createWindow(); - }); - m_config->setShortcut(windowAction, "mainwindow.shortcuts.newWindow"); - - smolboteMenu->addSeparator(); - - auto *aboutAction = smolboteMenu->addAction(tr("About"), qobject_cast<Browser *>(qApp), &Browser::about); - m_config->setShortcut(aboutAction, "mainwindow.shortcuts.about"); - smolboteMenu->addAction(tr("About Qt"), qApp, &QApplication::aboutQt); - - smolboteMenu->addSeparator(); - - auto *quitAction = smolboteMenu->addAction(tr("Quit"), qApp, &QApplication::quit); - m_config->setShortcut(quitAction, "mainwindow.shortcuts.quit"); - - // session menu - auto *sessionMenu = menuBar()->addMenu(tr("Session")); - - sessionMenu->addAction(tr("Save Session"), this, [this]() { - const QString filename = QFileDialog::getSaveFileName(this, tr("Save Session"), QDir::homePath(), tr("JSON (*.json)")); - QFile output(filename); - if(output.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { - output.write(QJsonDocument(Session::toJsonObject(this)).toJson()); - output.close(); - } - }); - sessionMenu->addAction(tr("Load Session"), this, [this]() { - const QString filename = QFileDialog::getOpenFileName(this, tr("Load Session"), QDir::homePath(), tr("JSON (*.json)")); - QFile json(filename); - if(json.open(QIODevice::ReadOnly | QIODevice::Text)) { - auto *browser = qobject_cast<Browser *>(qApp); - browser->sendMessage(json.readAll()); - json.close(); - } - }); - - // window menu - auto *windowMenu = menuBar()->addMenu(tr("Window")); - - auto *tileAction = windowMenu->addAction(tr("Tile windows"), mdiArea, &QMdiArea::tileSubWindows); - m_config->setShortcut(tileAction, "mainwindow.shortcuts.tileWindows"); - - auto *cascadeAction = windowMenu->addAction(tr("Cascade windows"), mdiArea, &QMdiArea::cascadeSubWindows); - m_config->setShortcut(cascadeAction, "mainwindow.shortcuts.cascadeWindows"); - - subWindowAction = windowMenu->addAction(tr("Current window")); - - // tools menu - toolsMenu = menuBar()->addMenu(tr("Tools")); - - // debug menu -#ifdef QT_DEBUG - auto *debugMenu = menuBar()->addMenu(tr("Debug")); - - debugMenu->addAction(tr("Print window session"), [this]() { - auto json = Session::toJsonObject(this); - qDebug("session data >>>\n%s\n<<<", qUtf8Printable(QJsonDocument(json).toJson())); - }); -#endif -} - void MainWindow::addAction(ActionLocation where, QAction *action) { switch(where) { case ToolsMenu: - toolsMenu->addAction(action); + ui->menuTools->addAction(action); break; default: QMainWindow::addAction(action); @@ -264,7 +246,9 @@ void MainWindow::createTab(const QUrl &url) { auto *w = qobject_cast<SubWindow *>(mdiArea->currentSubWindow()); if(w == nullptr) { - w = createSubWindow(url.toString()); + //w = createSubWindow(url.toString()); +// w = createSubWindow(WebProfile::defaultProfile()); +// w->addTab(url); } else { w->addTab(url); } @@ -287,9 +271,9 @@ SubWindow *MainWindow::currentSubWindow() const return qobject_cast<SubWindow *>(mdiArea->currentSubWindow()); } -SubWindow *MainWindow::createSubWindow(WebProfile *profile) +SubWindow *MainWindow::createSubWindow(const std::unique_ptr<Configuration> &config, WebProfile *profile) { - auto *w = new SubWindow(m_config->section("window"), this); + auto *w = new SubWindow(config, this); w->setProfile(profile); mdiArea->addSubWindow(w); w->showMaximized(); @@ -297,16 +281,6 @@ SubWindow *MainWindow::createSubWindow(WebProfile *profile) return w; } -SubWindow *MainWindow::createSubWindow(const QString &url) -{ - auto *w = new SubWindow(m_config->section("window"), this); - mdiArea->addSubWindow(w); - w->showMaximized(); - w->setFocus(); - w->addTab(url); - return w; -} - void MainWindow::setView(WebView *view) { if(currentView) { |