summaryrefslogtreecommitdiff
path: root/src/instancemanagerdialog.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-07-23 07:32:06 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2020-11-03 11:39:04 -0500
commit60b59ddf097fffa846a4d28e0d9256630da5149c (patch)
tree625f9efc16325f691f5e8a9931dec14a2b19d12e /src/instancemanagerdialog.cpp
parent5513b273c679b9edda951f418ef013a762ca587a (diff)
started create instance dialog
allow for multiple instances of Settings fill in information in instance manager
Diffstat (limited to 'src/instancemanagerdialog.cpp')
-rw-r--r--src/instancemanagerdialog.cpp102
1 files changed, 96 insertions, 6 deletions
diff --git a/src/instancemanagerdialog.cpp b/src/instancemanagerdialog.cpp
index 1b482099..c7042aa8 100644
--- a/src/instancemanagerdialog.cpp
+++ b/src/instancemanagerdialog.cpp
@@ -1,12 +1,19 @@
#include "instancemanagerdialog.h"
#include "ui_instancemanagerdialog.h"
#include "instancemanager.h"
+#include "createinstancedialog.h"
+#include "settings.h"
+#include "selectiondialog.h"
+#include "plugincontainer.h"
+#include "shared/appconfig.h"
+#include <iplugingame.h>
class InstanceInfo
{
public:
- InstanceInfo(QDir dir)
- : m_dir(std::move(dir))
+ InstanceInfo(QDir dir) :
+ m_dir(std::move(dir)),
+ m_settings(dir.filePath(QString::fromStdWString(AppConfig::iniFileName())))
{
}
@@ -15,22 +22,105 @@ public:
return m_dir.dirName();
}
+ QString gameName() const
+ {
+ if (auto n=m_settings.game().name()) {
+ if (auto e=m_settings.game().edition()) {
+ if (!e->isEmpty()) {
+ return *n + " (" + *e + ")";
+ }
+ }
+
+ return *n;
+ } else {
+ return {};
+ }
+ }
+
+ QString gamePath() const
+ {
+ if (auto n=m_settings.game().directory()) {
+ return *n;
+ } else {
+ return {};
+ }
+ }
+
+ QString location() const
+ {
+ return m_dir.path();
+ }
+
+ QString baseDirectory() const
+ {
+ return m_settings.paths().base();
+ }
+
private:
QDir m_dir;
+ Settings m_settings;
};
-InstanceManagerDialog::InstanceManagerDialog(QWidget *parent)
- : QDialog(parent), ui(new Ui::InstanceManagerDialog)
+InstanceManagerDialog::InstanceManagerDialog(
+ const PluginContainer& pc, QWidget *parent)
+ : QDialog(parent), ui(new Ui::InstanceManagerDialog), m_pc(pc)
{
ui->setupUi(this);
+ ui->splitter->setSizes({200, 1});
+ ui->splitter->setStretchFactor(0, 0);
+ ui->splitter->setStretchFactor(1, 1);
auto& m = InstanceManager::instance();
for (auto&& d : m.instancePaths()) {
- InstanceInfo i(d);
- ui->list->addItem(i.name());
+ auto ii = std::make_unique<InstanceInfo>(d);
+
+ ui->list->addItem(ii->name());
+ m_instances.push_back(std::move(ii));
+ }
+
+ if (!m_instances.empty()) {
+ select(0);
}
+
+ connect(ui->createNew, &QPushButton::clicked, [&]{ createNew(); });
+ connect(ui->list, &QListWidget::itemSelectionChanged, [&]{ onSelection(); });
}
InstanceManagerDialog::~InstanceManagerDialog() = default;
+
+void InstanceManagerDialog::select(std::size_t i)
+{
+ if (i >= m_instances.size()) {
+ return;
+ }
+
+ const auto& ii = m_instances[i];
+ fill(*ii);
+}
+
+void InstanceManagerDialog::onSelection()
+{
+ const auto sel = ui->list->selectionModel()->selectedIndexes();
+ if (sel.size() != 1) {
+ return;
+ }
+
+ select(static_cast<std::size_t>(sel[0].row()));
+}
+
+void InstanceManagerDialog::createNew()
+{
+ CreateInstanceDialog dlg(this);
+ dlg.exec();
+}
+
+void InstanceManagerDialog::fill(const InstanceInfo& ii)
+{
+ ui->name->setText(ii.name());
+ ui->location->setText(ii.location());
+ ui->baseDirectory->setText(ii.baseDirectory());
+ ui->gameName->setText(ii.gameName());
+ ui->gameDir->setText(ii.gamePath());
+}