aboutsummaryrefslogtreecommitdiff
path: root/src/session/savesessiondialog.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-12-14 14:25:04 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-12-14 14:45:13 +0100
commitf15af11e4b6ad5dfa1be5107c2db0ddad6480f5b (patch)
treefb32290b6a8b2f1b86dca1b483b994a30de9206b /src/session/savesessiondialog.cpp
parentProfile picker menu: use QActionGroup instead of QRadioButton (diff)
downloadsmolbote-f15af11e4b6ad5dfa1be5107c2db0ddad6480f5b.tar.xz
Add SaveSessionDialog
Diffstat (limited to 'src/session/savesessiondialog.cpp')
-rw-r--r--src/session/savesessiondialog.cpp78
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();
+ }
+}