diff options
Diffstat (limited to 'src/session/savesessiondialog.cpp')
-rw-r--r-- | src/session/savesessiondialog.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/session/savesessiondialog.cpp b/src/session/savesessiondialog.cpp new file mode 100644 index 0000000..808ba45 --- /dev/null +++ b/src/session/savesessiondialog.cpp @@ -0,0 +1,78 @@ +/* + * 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/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "savesessiondialog.h" +#include "browser.h" +#include "mainwindow/mainwindow.h" +#include "profilemanager.h" +#include "subwindow/subwindow.h" +#include "ui_savesessiondialog.h" +#include "webengine/webview.h" +#include <QFileDialog> +#include <QPointer> +#include <QTreeWidgetItem> + +SaveSessionDialog::SaveSessionDialog(QWidget *parent) + : QDialog(parent) + , ui(new Ui::SaveSessionDialog) +{ + ui->setupUi(this); + + auto *browser = qobject_cast<Browser *>(qApp); + Q_CHECK_PTR(browser); + + for(MainWindow *window : browser->windows()) { + auto *windowItem = new QTreeWidgetItem(ui->treeWidget); + windowItem->setText(0, tr("Main Window")); + windowItem->setData(0, Qt::UserRole, QVariant::fromValue(static_cast<void *>(window))); + windowItem->setCheckState(0, Qt::Checked); + ui->treeWidget->expandItem(windowItem); + + for(const SubWindow *subwindow : window->subWindows()) { + auto *subwindowItem = new QTreeWidgetItem(windowItem); + subwindowItem->setText(0, tr("Subwindow")); + subwindowItem->setText(1, browser->getProfileManager()->id(subwindow->profile())); + + ui->treeWidget->expandItem(subwindowItem); + + for(int i = 0; i < subwindow->tabCount(); ++i) { + auto *tabItem = new QTreeWidgetItem(subwindowItem); + auto *view = subwindow->view(i); + tabItem->setText(0, view->title()); + tabItem->setText(1, browser->getProfileManager()->id(view->profile())); + } + } + } +} + +SaveSessionDialog::~SaveSessionDialog() +{ + delete ui; +} + +void SaveSessionDialog::save(const QString &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)) { + QVector<MainWindow *> windows; + for(int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) { + QTreeWidgetItem *item = ui->treeWidget->topLevelItem(i); + if(item->checkState(0) == Qt::Checked) { + auto *window = static_cast<MainWindow *>(item->data(0, Qt::UserRole).value<void *>()); + Q_CHECK_PTR(window); + windows.append(window); + } + } + + auto data = Session::_session(windows); + output.write(QJsonDocument(data).toJson()); + output.close(); + } +} |