aboutsummaryrefslogtreecommitdiff
path: root/src/session/sessiondialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/session/sessiondialog.cpp')
-rw-r--r--src/session/sessiondialog.cpp89
1 files changed, 36 insertions, 53 deletions
diff --git a/src/session/sessiondialog.cpp b/src/session/sessiondialog.cpp
index 301b4b6..36cf9cb 100644
--- a/src/session/sessiondialog.cpp
+++ b/src/session/sessiondialog.cpp
@@ -1,7 +1,7 @@
/*
* 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
+ * location: https://library.iserlohn-fortress.net/aqua/smolbote.git
*
* SPDX-License-Identifier: GPL-3.0
*/
@@ -9,56 +9,59 @@
#include "sessiondialog.h"
#include "../browser.h"
#include "../util.h"
-#include "sessionform.h"
+#include "configuration.h"
+#include "session_json.hpp"
#include "ui_sessiondialog.h"
-#include "ui_sessionform.h"
#include <QFile>
#include <QFileDialog>
-#include <QToolButton>
#include <QStyle>
-#include "configuration.h"
+#include <QToolButton>
SessionDialog::SessionDialog(QWidget *parent)
: QDialog(parent)
+ , create_window_str(QObject::tr("Create a new window"))
, ui(new Ui::SessionDialog)
{
ui->setupUi(this);
- ui->open->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon));
auto *browser = qobject_cast<Browser *>(qApp);
Q_CHECK_PTR(browser);
Configuration conf;
for(const QString &path : Util::files(conf.value<QString>("session.path").value(), { "*.json" })) {
- addItem(path);
+ ui->listWidget->addItem(path);
}
- ui->listWidget->addItem(tr("Create a new window"));
+ ui->listWidget->addItem(create_window_str);
- connect(ui->listWidget, &QListWidget::currentItemChanged, this, [this](QListWidgetItem *currentItem, QListWidgetItem *previousItem) {
- auto *currentWidget = qobject_cast<SessionForm *>(ui->listWidget->itemWidget(currentItem));
- if(currentWidget != nullptr)
- currentWidget->ui->delete_toolButton->show();
-
- auto *previousWidget = qobject_cast<SessionForm *>(ui->listWidget->itemWidget(previousItem));
- if(previousWidget != nullptr)
- previousWidget->ui->delete_toolButton->hide();
+ connect(ui->listWidget, &QListWidget::currentItemChanged, this, [this](QListWidgetItem *currentItem, QListWidgetItem * /*previousItem*/) {
+ ui->delete_toolButton->setEnabled(currentItem->text() != create_window_str);
});
- connect(ui->open, &QPushButton::clicked, this, [this]() {
+ connect(ui->open_toolButton, &QToolButton::clicked, this, [this]() {
const QString filename = QFileDialog::getOpenFileName(this, tr("Select Session file"), QDir::homePath(), tr("JSON (*.json)"));
if(!filename.isEmpty()) {
- ui->listWidget->setCurrentItem(addItem(filename));
+ ui->listWidget->addItem(filename);
+ ui->listWidget->setCurrentRow(ui->listWidget->count() - 1);
accept();
}
});
+ connect(ui->delete_toolButton, &QToolButton::clicked, this, [this]() {
+ const auto path = ui->listWidget->currentItem()->text();
+ if(path != create_window_str) {
+ QFile(path).remove();
+ delete ui->listWidget->currentItem();
+ }
+ });
+
accepted_connection = connect(this, &SessionDialog::accepted, this, [this, browser]() {
- auto *currentWidget = qobject_cast<SessionForm *>(ui->listWidget->itemWidget(ui->listWidget->currentItem()));
- if(currentWidget != nullptr)
- this->openSession(currentWidget->ui->label->text());
- else
- browser->createWindow();
+ const auto path = ui->listWidget->currentItem()->text();
+ if(path != create_window_str) {
+ openSession(path);
+ } else {
+ browser->open({});
+ }
});
connect(ui->search, &QLineEdit::textEdited, this, &SessionDialog::search);
@@ -69,7 +72,7 @@ SessionDialog::~SessionDialog()
delete ui;
}
-std::optional<QJsonObject> SessionDialog::pickSession()
+std::optional<QVector<Session::MainWindow>> SessionDialog::pickSession()
{
disconnect(accepted_connection);
@@ -77,52 +80,32 @@ std::optional<QJsonObject> SessionDialog::pickSession()
return std::nullopt;
}
- auto *currentWidget = qobject_cast<SessionForm *>(ui->listWidget->itemWidget(ui->listWidget->currentItem()));
- if(currentWidget != nullptr) {
- QFile json(currentWidget->ui->label->text());
+ const auto path = ui->listWidget->currentItem()->text();
+ if(path != create_window_str) {
+ QFile json(path);
if(json.open(QIODevice::ReadOnly | QIODevice::Text)) {
- auto doc = QJsonDocument::fromJson(json.readAll());
- return doc.object();
+ JsonSession session(json.readAll());
+ return session.get();
}
}
return std::nullopt;
}
-QListWidgetItem *SessionDialog::addItem(const QString &path)
-{
- auto *item = new QListWidgetItem(ui->listWidget);
- auto *widget = new SessionForm(path, this);
- connect(widget->ui->delete_toolButton, &QToolButton::clicked, this, [item, widget]() {
- delete item;
- delete widget;
- });
- ui->listWidget->setItemWidget(item, widget);
- return item;
-}
-
void SessionDialog::search(const QString &text)
{
for(int i = 0; i < ui->listWidget->count(); ++i) {
auto *item = ui->listWidget->item(i);
- auto *widget = qobject_cast<SessionForm *>(ui->listWidget->itemWidget(item));
-
- if(widget == nullptr)
- item->setHidden(!text.isEmpty());
- else
- item->setHidden(!widget->ui->label->text().contains(text));
+ item->setHidden(!item->text().contains(text));
}
}
void SessionDialog::openSession(const QString &filename)
{
auto *browser = qobject_cast<Browser *>(qApp);
- Q_CHECK_PTR(browser);
-
QFile json(filename);
- if(json.open(QIODevice::ReadOnly | QIODevice::Text)) {
- auto doc = QJsonDocument::fromJson(json.readAll());
- Session::restoreSession(doc.object());
- json.close();
+ if(json.open(QIODevice::ReadOnly | QIODevice::Text) && browser != nullptr) {
+ JsonSession session(json.readAll());
+ browser->open(session.get());
}
}