From a97638249de0a9a4c17dc28805c35df489a64e26 Mon Sep 17 00:00:00 2001
From: isanae <14251494+isanae@users.noreply.github.com>
Date: Sun, 26 Jul 2020 21:07:13 -0400
Subject: moved switch to instance to InstanceManager double-click an instance
to switch to it (disabled for now, not sure I want that)
---
src/createinstancedialog.cpp | 3 +--
src/instancemanager.cpp | 7 +++++++
src/instancemanager.h | 4 ++++
src/instancemanagerdialog.cpp | 27 ++++++++++++++++++++++++---
src/instancemanagerdialog.h | 4 ++++
5 files changed, 40 insertions(+), 5 deletions(-)
diff --git a/src/createinstancedialog.cpp b/src/createinstancedialog.cpp
index 2edfee88..75ccc774 100644
--- a/src/createinstancedialog.cpp
+++ b/src/createinstancedialog.cpp
@@ -300,8 +300,7 @@ void CreateInstanceDialog::finish()
}
if (ui->launch->isChecked()) {
- InstanceManager::instance().setCurrentInstance(ci.instanceName);
- ExitModOrganizer(Exit::Restart);
+ InstanceManager::instance().switchToInstance(ci.instanceName);
} else {
close();
}
diff --git a/src/instancemanager.cpp b/src/instancemanager.cpp
index bd35cb47..2c8d8fb3 100644
--- a/src/instancemanager.cpp
+++ b/src/instancemanager.cpp
@@ -23,6 +23,7 @@ along with Mod Organizer. If not, see .
#include "settings.h"
#include "shared/appconfig.h"
#include "plugincontainer.h"
+#include "shared/util.h"
#include
#include
#include
@@ -75,6 +76,12 @@ void InstanceManager::clearCurrentInstance()
m_overrideInstance = false;
}
+void InstanceManager::switchToInstance(const QString& instanceName)
+{
+ setCurrentInstance(instanceName);
+ ExitModOrganizer(Exit::Restart);
+}
+
void InstanceManager::setCurrentInstance(const QString &name)
{
GlobalSettings::setCurrentInstance(name);
diff --git a/src/instancemanager.h b/src/instancemanager.h
index f53543df..f038678a 100644
--- a/src/instancemanager.h
+++ b/src/instancemanager.h
@@ -34,6 +34,10 @@ class InstanceManager
public:
static InstanceManager &instance();
+ // restarts MO
+ //
+ void switchToInstance(const QString& instanceName);
+
void overrideInstance(const QString& instanceName);
void overrideProfile(const QString& profileName);
diff --git a/src/instancemanagerdialog.cpp b/src/instancemanagerdialog.cpp
index 26e8eae1..a038d3c2 100644
--- a/src/instancemanagerdialog.cpp
+++ b/src/instancemanagerdialog.cpp
@@ -92,6 +92,7 @@ InstanceManagerDialog::InstanceManagerDialog(
connect(ui->createNew, &QPushButton::clicked, [&]{ createNew(); });
connect(ui->list, &QListWidget::itemSelectionChanged, [&]{ onSelection(); });
+ //connect(ui->list, &QListWidget::itemActivated, [&]{ openSelectedInstance(); });
}
InstanceManagerDialog::~InstanceManagerDialog() = default;
@@ -106,14 +107,24 @@ void InstanceManagerDialog::select(std::size_t i)
fill(*ii);
}
+void InstanceManagerDialog::openSelectedInstance()
+{
+ const auto i = singleSelection();
+ if (i == NoSelection) {
+ return;
+ }
+
+ InstanceManager::instance().switchToInstance(m_instances[i]->name());
+}
+
void InstanceManagerDialog::onSelection()
{
- const auto sel = ui->list->selectionModel()->selectedIndexes();
- if (sel.size() != 1) {
+ const auto i = singleSelection();
+ if (i == NoSelection) {
return;
}
- select(static_cast(sel[0].row()));
+ select(i);
}
void InstanceManagerDialog::createNew()
@@ -122,6 +133,16 @@ void InstanceManagerDialog::createNew()
dlg.exec();
}
+std::size_t InstanceManagerDialog::singleSelection() const
+{
+ const auto sel = ui->list->selectionModel()->selectedIndexes();
+ if (sel.size() != 1) {
+ return NoSelection;
+ }
+
+ return static_cast(sel[0].row());
+}
+
void InstanceManagerDialog::fill(const InstanceInfo& ii)
{
ui->name->setText(ii.name());
diff --git a/src/instancemanagerdialog.h b/src/instancemanagerdialog.h
index c3e947dd..6dbf015f 100644
--- a/src/instancemanagerdialog.h
+++ b/src/instancemanagerdialog.h
@@ -19,8 +19,11 @@ public:
~InstanceManagerDialog();
void select(std::size_t i);
+ void openSelectedInstance();
private:
+ static const std::size_t NoSelection = -1;
+
std::unique_ptr ui;
const PluginContainer& m_pc;
std::vector> m_instances;
@@ -28,6 +31,7 @@ private:
void onSelection();
void createNew();
+ std::size_t singleSelection() const;
void fill(const InstanceInfo& ii);
};
--
cgit v1.3.1