From 992ba0c3f8ae65d25503b74c62c3cdf4668635d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sat, 8 Nov 2014 21:17:28 +0100 Subject: Implement #545 * Instance group can be selected when creating and copying instances * Original group is pre-selected when copying * Last used group is pre-selected when creating new instances --- MultiMC.cpp | 3 +++ gui/MainWindow.cpp | 7 ++++++ gui/dialogs/CopyInstanceDialog.cpp | 19 +++++++++++++++ gui/dialogs/CopyInstanceDialog.h | 1 + gui/dialogs/CopyInstanceDialog.ui | 31 +++++++++++++++++++++-- gui/dialogs/NewInstanceDialog.cpp | 22 +++++++++++++++++ gui/dialogs/NewInstanceDialog.h | 1 + gui/dialogs/NewInstanceDialog.ui | 50 +++++++++++++++++++++++++++++--------- 8 files changed, 120 insertions(+), 14 deletions(-) diff --git a/MultiMC.cpp b/MultiMC.cpp index 258d7103..a75ccb13 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -376,6 +376,9 @@ void MultiMC::initGlobalSettings() // Notifications m_settings->registerSetting("ShownNotifications", QString()); + // Remembered state + m_settings->registerSetting("LastUsedGroupForNewInstance", QString()); + // FTB m_settings->registerSetting("TrackFTBInstances", false); QString ftbDataDefault; diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index c2c49967..a0c8388d 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -751,6 +751,8 @@ void MainWindow::on_actionAddInstance_triggered() if (!newInstDlg.exec()) return; + MMC->settings()->set("LastUsedGroupForNewInstance", newInstDlg.instGroup()); + InstancePtr newInstance; QString instancesDir = MMC->settings()->get("InstanceDir").toString(); @@ -764,10 +766,14 @@ void MainWindow::on_actionAddInstance_triggered() switch (error) { case InstanceFactory::NoCreateError: + { newInstance->setName(newInstDlg.instName()); newInstance->setIconKey(newInstDlg.iconKey()); + newInstance->setGroupInitial(newInstDlg.instGroup()); MMC->instances()->add(InstancePtr(newInstance)); + stringToIntList(MMC->settings()->get("ShownNotifications").toString()); break; + } case InstanceFactory::InstExists: { @@ -836,6 +842,7 @@ void MainWindow::on_actionCopyInstance_triggered() { case InstanceFactory::NoCreateError: newInstance->setName(copyInstDlg.instName()); + newInstance->setGroupInitial(copyInstDlg.instGroup()); newInstance->setIconKey(copyInstDlg.iconKey()); MMC->instances()->add(newInstance); return; diff --git a/gui/dialogs/CopyInstanceDialog.cpp b/gui/dialogs/CopyInstanceDialog.cpp index de8cf3ce..6625460b 100644 --- a/gui/dialogs/CopyInstanceDialog.cpp +++ b/gui/dialogs/CopyInstanceDialog.cpp @@ -30,6 +30,7 @@ #include "logic/icons/IconList.h" #include "logic/tasks/Task.h" #include "logic/BaseInstance.h" +#include CopyInstanceDialog::CopyInstanceDialog(InstancePtr original, QWidget *parent) :QDialog(parent), ui(new Ui::CopyInstanceDialog), m_original(original) @@ -43,6 +44,19 @@ CopyInstanceDialog::CopyInstanceDialog(InstancePtr original, QWidget *parent) ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); ui->instNameTextBox->setText(original->name()); ui->instNameTextBox->setFocus(); + auto groups = MMC->instances()->getGroups().toSet(); + auto groupList = QStringList(groups.toList()); + groupList.sort(Qt::CaseInsensitive); + groupList.removeOne(""); + groupList.push_front(""); + ui->groupBox->addItems(groupList); + int index = groupList.indexOf(m_original->group()); + if(index == -1) + { + index = 0; + } + ui->groupBox->setCurrentIndex(index); + ui->groupBox->lineEdit()->setPlaceholderText(tr("No group")); } CopyInstanceDialog::~CopyInstanceDialog() @@ -65,6 +79,11 @@ QString CopyInstanceDialog::iconKey() const return InstIconKey; } +QString CopyInstanceDialog::instGroup() const +{ + return ui->groupBox->currentText(); +} + void CopyInstanceDialog::on_iconButton_clicked() { IconPickerDialog dlg(this); diff --git a/gui/dialogs/CopyInstanceDialog.h b/gui/dialogs/CopyInstanceDialog.h index a8a4c3e4..0f3a2d48 100644 --- a/gui/dialogs/CopyInstanceDialog.h +++ b/gui/dialogs/CopyInstanceDialog.h @@ -37,6 +37,7 @@ public: void updateDialogState(); QString instName() const; + QString instGroup() const; QString iconKey() const; private diff --git a/gui/dialogs/CopyInstanceDialog.ui b/gui/dialogs/CopyInstanceDialog.ui index 4aa1cb27..2615168c 100644 --- a/gui/dialogs/CopyInstanceDialog.ui +++ b/gui/dialogs/CopyInstanceDialog.ui @@ -17,7 +17,7 @@ Copy Instance - + :/icons/toolbar/copy:/icons/toolbar/copy @@ -42,7 +42,7 @@ - + :/icons/instances/infinity:/icons/instances/infinity @@ -82,6 +82,33 @@ + + + + + + Group + + + groupBox + + + + + + + + 0 + 0 + + + + true + + + + + diff --git a/gui/dialogs/NewInstanceDialog.cpp b/gui/dialogs/NewInstanceDialog.cpp index 721d7931..aeaa7e4a 100644 --- a/gui/dialogs/NewInstanceDialog.cpp +++ b/gui/dialogs/NewInstanceDialog.cpp @@ -22,6 +22,7 @@ #include "logic/icons/IconList.h" #include "logic/minecraft/MinecraftVersionList.h" #include "logic/tasks/Task.h" +#include #include "gui/Platform.h" #include "VersionSelectDialog.h" @@ -41,6 +42,21 @@ NewInstanceDialog::NewInstanceDialog(QWidget *parent) setSelectedVersion(MMC->minecraftlist()->getLatestStable(), true); InstIconKey = "infinity"; ui->iconButton->setIcon(MMC->icons()->getIcon(InstIconKey)); + auto groups = MMC->instances()->getGroups().toSet(); + auto groupList = QStringList(groups.toList()); + groupList.sort(Qt::CaseInsensitive); + groupList.removeOne(""); + QString oldValue = MMC->settings()->get("LastUsedGroupForNewInstance").toString(); + groupList.push_front(oldValue); + groupList.push_front(""); + ui->groupBox->addItems(groupList); + int index = groupList.indexOf(oldValue); + if(index == -1) + { + index = 0; + } + ui->groupBox->setCurrentIndex(index); + ui->groupBox->lineEdit()->setPlaceholderText(tr("No group")); } NewInstanceDialog::~NewInstanceDialog() @@ -79,6 +95,11 @@ QString NewInstanceDialog::instName() const return ui->instNameTextBox->text(); } +QString NewInstanceDialog::instGroup() const +{ + return ui->groupBox->currentText(); +} + QString NewInstanceDialog::iconKey() const { return InstIconKey; @@ -118,3 +139,4 @@ void NewInstanceDialog::on_instNameTextBox_textChanged(const QString &arg1) { updateDialogState(); } + diff --git a/gui/dialogs/NewInstanceDialog.h b/gui/dialogs/NewInstanceDialog.h index 90c85144..83cd78b3 100644 --- a/gui/dialogs/NewInstanceDialog.h +++ b/gui/dialogs/NewInstanceDialog.h @@ -39,6 +39,7 @@ public: void loadVersionList(); QString instName() const; + QString instGroup() const; QString iconKey() const; BaseVersionPtr selectedVersion() const; diff --git a/gui/dialogs/NewInstanceDialog.ui b/gui/dialogs/NewInstanceDialog.ui index 00544463..be4642aa 100644 --- a/gui/dialogs/NewInstanceDialog.ui +++ b/gui/dialogs/NewInstanceDialog.ui @@ -9,15 +9,15 @@ 0 0 - 220 - 234 + 345 + 261 New Instance - + :/icons/toolbar/new:/icons/toolbar/new @@ -42,7 +42,7 @@ - + :/icons/instances/infinity:/icons/instances/infinity @@ -83,25 +83,51 @@ - - - + + + - Version: + ... - + true - - + + - ... + Version: + + + versionTextBox + + + + + + + Group: + + + groupBox + + + + + + + + 0 + 0 + + + + true -- cgit v1.2.3