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 | |
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')
-rw-r--r-- | gui/newinstancedialog.cpp | 99 | ||||
-rw-r--r-- | gui/newinstancedialog.h | 19 | ||||
-rw-r--r-- | gui/newinstancedialog.ui | 21 | ||||
-rw-r--r-- | gui/versionselectdialog.cpp | 10 | ||||
-rw-r--r-- | gui/versionselectdialog.h | 3 |
5 files changed, 152 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(); +} diff --git a/gui/newinstancedialog.h b/gui/newinstancedialog.h index 263136f1..da689c41 100644 --- a/gui/newinstancedialog.h +++ b/gui/newinstancedialog.h @@ -18,6 +18,9 @@ #include <QDialog> +class InstanceTypeInterface; +class InstVersion; + namespace Ui { class NewInstanceDialog; } @@ -30,8 +33,24 @@ public: explicit NewInstanceDialog(QWidget *parent = 0); ~NewInstanceDialog(); + void loadTypeList(); + void updateSelectedType(); + void updateDialogState(); + + void setSelectedVersion(const InstVersion *version); + + void loadVersionList(); + +private slots: + void on_btnChangeVersion_clicked(); + + void on_instTypeComboBox_activated(int index); + private: Ui::NewInstanceDialog *ui; + + const InstVersion *m_selectedVersion; + const InstanceTypeInterface *m_selectedType; }; #endif // NEWINSTANCEDIALOG_H diff --git a/gui/newinstancedialog.ui b/gui/newinstancedialog.ui index 865f6301..6f96f167 100644 --- a/gui/newinstancedialog.ui +++ b/gui/newinstancedialog.ui @@ -76,6 +76,27 @@ </widget> </item> <item> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QLabel" name="typeLabel"> + <property name="text"> + <string>Type:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="instTypeComboBox"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </item> + <item> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Horizontal</enum> diff --git a/gui/versionselectdialog.cpp b/gui/versionselectdialog.cpp index b55c106c..6ead83c0 100644 --- a/gui/versionselectdialog.cpp +++ b/gui/versionselectdialog.cpp @@ -21,6 +21,7 @@ #include <gui/taskdialog.h> #include <instversionlist.h> +#include <instversion.h> #include <task.h> VersionSelectDialog::VersionSelectDialog(InstVersionList *vlist, QWidget *parent) : @@ -56,6 +57,15 @@ void VersionSelectDialog::loadList() taskDlg->exec(loadTask); } +const InstVersion *VersionSelectDialog::selectedVersion() const +{ + const InstVersion *versionPtr = (const InstVersion *) + m_vlist->data(ui->listView->selectionModel()->currentIndex(), + InstVersionList::VersionPointerRole).value<void *>(); + + return versionPtr; +} + void VersionSelectDialog::on_refreshButton_clicked() { loadList(); diff --git a/gui/versionselectdialog.h b/gui/versionselectdialog.h index ad28b720..097be93f 100644 --- a/gui/versionselectdialog.h +++ b/gui/versionselectdialog.h @@ -19,6 +19,7 @@ #include <QDialog> class InstVersionList; +class InstVersion; namespace Ui { @@ -38,6 +39,8 @@ public: //! Starts a task that loads the list. void loadList(); + const InstVersion *selectedVersion() const; + private slots: void on_refreshButton_clicked(); |