diff options
author | Andrew <forkk@forkk.net> | 2013-04-22 15:39:41 -0500 |
---|---|---|
committer | Andrew <forkk@forkk.net> | 2013-04-22 15:39:41 -0500 |
commit | ff3078b3a652316eef760386f665d152cbeb8db9 (patch) | |
tree | 5bd745873409d6bea927762cef314ccb78fde4e2 /gui/newinstancedialog.cpp | |
parent | 7ec32d5657d433a2636f6738e162f4da6f11cde7 (diff) | |
download | MultiMC-ff3078b3a652316eef760386f665d152cbeb8db9.tar MultiMC-ff3078b3a652316eef760386f665d152cbeb8db9.tar.gz MultiMC-ff3078b3a652316eef760386f665d152cbeb8db9.tar.lz MultiMC-ff3078b3a652316eef760386f665d152cbeb8db9.tar.xz MultiMC-ff3078b3a652316eef760386f665d152cbeb8db9.zip |
Make the new instance dialog support instance types.
Diffstat (limited to 'gui/newinstancedialog.cpp')
-rw-r--r-- | gui/newinstancedialog.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/gui/newinstancedialog.cpp b/gui/newinstancedialog.cpp index 400b42d8..f4d57367 100644 --- a/gui/newinstancedialog.cpp +++ b/gui/newinstancedialog.cpp @@ -16,18 +16,117 @@ #include "newinstancedialog.h" #include "ui_newinstancedialog.h" +#include "instanceloader.h" +#include "instancetypeinterface.h" + +#include "instversionlist.h" +#include "instversion.h" + +#include "task.h" + +#include "versionselectdialog.h" +#include "taskdialog.h" + #include <QLayout> +#include <QPushButton> NewInstanceDialog::NewInstanceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::NewInstanceDialog) { + m_selectedType = NULL; + m_selectedVersion = NULL; + ui->setupUi(this); resize(minimumSizeHint()); layout()->setSizeConstraint(QLayout::SetFixedSize); + + loadTypeList(); } NewInstanceDialog::~NewInstanceDialog() { delete ui; } + +void NewInstanceDialog::loadTypeList() +{ + InstTypeList typeList = InstanceLoader::get().typeList(); + + for (int i = 0; i < typeList.length(); i++) + { + ui->instTypeComboBox->addItem(typeList.at(i)->displayName(), typeList.at(i)->typeID()); + } + + updateSelectedType(); +} + +void NewInstanceDialog::updateSelectedType() +{ + QString typeID = ui->instTypeComboBox->itemData(ui->instTypeComboBox->currentIndex()).toString(); + + const InstanceTypeInterface *type = InstanceLoader::get().findType(typeID); + m_selectedType = type; + + updateDialogState(); + + if (m_selectedType) + { + if (!m_selectedType->versionList()->isLoaded()) + loadVersionList(); + } +} + +void NewInstanceDialog::updateDialogState() +{ + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(m_selectedType && m_selectedVersion); + ui->btnChangeVersion->setEnabled(m_selectedType && m_selectedVersion); +} + +void NewInstanceDialog::setSelectedVersion(const InstVersion *version) +{ + m_selectedVersion = version; + + if (m_selectedVersion) + { + ui->versionTextBox->setText(version->name()); + } + else + { + ui->versionTextBox->setText(""); + } + + updateDialogState(); +} + +void NewInstanceDialog::loadVersionList() +{ + if (!m_selectedType) + return; + + TaskDialog *taskDlg = new TaskDialog(this); + Task *loadTask = m_selectedType->versionList()->getLoadTask(); + loadTask->setParent(taskDlg); + taskDlg->exec(loadTask); + + setSelectedVersion(m_selectedType->versionList()->getLatestStable()); +} + +void NewInstanceDialog::on_btnChangeVersion_clicked() +{ + if (m_selectedType) + { + VersionSelectDialog *vselect = new VersionSelectDialog(m_selectedType->versionList(), this); + if (vselect->exec()) + { + const InstVersion *version = vselect->selectedVersion(); + if (version) + setSelectedVersion(version); + } + } +} + +void NewInstanceDialog::on_instTypeComboBox_activated(int index) +{ + updateSelectedType(); +} |