diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2020-07-26 21:07:13 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2020-11-03 11:39:06 -0500 |
| commit | a97638249de0a9a4c17dc28805c35df489a64e26 (patch) | |
| tree | 3d1beec5e287b2fff45012beef3e62ec24fa08ea /src | |
| parent | b1e681e129d87cb2f8aab89a734ab7b185975bcd (diff) | |
moved switch to instance to InstanceManager
double-click an instance to switch to it (disabled for now, not sure I want that)
Diffstat (limited to 'src')
| -rw-r--r-- | src/createinstancedialog.cpp | 3 | ||||
| -rw-r--r-- | src/instancemanager.cpp | 7 | ||||
| -rw-r--r-- | src/instancemanager.h | 4 | ||||
| -rw-r--r-- | src/instancemanagerdialog.cpp | 27 | ||||
| -rw-r--r-- | 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 <http://www.gnu.org/licenses/>. #include "settings.h" #include "shared/appconfig.h" #include "plugincontainer.h" +#include "shared/util.h" #include <report.h> #include <iplugingame.h> #include <utility.h> @@ -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<std::size_t>(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<std::size_t>(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::InstanceManagerDialog> ui; const PluginContainer& m_pc; std::vector<std::unique_ptr<InstanceInfo>> m_instances; @@ -28,6 +31,7 @@ private: void onSelection(); void createNew(); + std::size_t singleSelection() const; void fill(const InstanceInfo& ii); }; |
