summaryrefslogtreecommitdiffstats
path: root/gui/newinstancedialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/newinstancedialog.cpp')
-rw-r--r--gui/newinstancedialog.cpp99
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();
+}