summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
authorAndrew <forkk@forkk.net>2013-04-22 15:39:41 -0500
committerAndrew <forkk@forkk.net>2013-04-22 15:39:41 -0500
commitff3078b3a652316eef760386f665d152cbeb8db9 (patch)
tree5bd745873409d6bea927762cef314ccb78fde4e2 /gui
parent7ec32d5657d433a2636f6738e162f4da6f11cde7 (diff)
downloadMultiMC-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.cpp99
-rw-r--r--gui/newinstancedialog.h19
-rw-r--r--gui/newinstancedialog.ui21
-rw-r--r--gui/versionselectdialog.cpp10
-rw-r--r--gui/versionselectdialog.h3
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();