summaryrefslogtreecommitdiffstats
path: root/gui
diff options
context:
space:
mode:
Diffstat (limited to 'gui')
-rw-r--r--gui/mainwindow.cpp45
-rw-r--r--gui/newinstancedialog.cpp23
-rw-r--r--gui/newinstancedialog.h5
3 files changed, 72 insertions, 1 deletions
diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index 7761afe8..7f05c745 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -147,7 +147,50 @@ void MainWindow::instanceActivated ( QModelIndex index )
void MainWindow::on_actionAddInstance_triggered()
{
NewInstanceDialog *newInstDlg = new NewInstanceDialog ( this );
- newInstDlg->exec();
+ if (newInstDlg->exec())
+ {
+ Instance *newInstance = NULL;
+
+ QString instDirName = DirNameFromString(newInstDlg->instName());
+ QString instDir = PathCombine(globalSettings->get("InstanceDir").toString(),
+ instDirName);
+
+ InstanceLoader::InstTypeError error = InstanceLoader::get().
+ createInstance(newInstance, newInstDlg->selectedType(), instDir);
+
+ if (error == InstanceLoader::NoError)
+ {
+ newInstance->setName(newInstDlg->instName());
+ instList.add(InstancePtr(newInstance));
+ }
+ else
+ {
+ QString errorMsg = QString("Failed to create instance %1: ").
+ arg(instDirName);
+
+ switch (error)
+ {
+ case InstanceLoader::TypeNotRegistered:
+ errorMsg += "Instance type not found.";
+ break;
+
+ case InstanceLoader::InstExists:
+ errorMsg += "An instance with the given directory name already exists.";
+ break;
+
+ case InstanceLoader::CantCreateDir:
+ errorMsg += "Failed to create the instance directory.";
+ break;
+
+ default:
+ errorMsg += QString("Unknown instance loader error %1").
+ arg(error);
+ break;
+ }
+
+ QMessageBox::warning(this, "Error", errorMsg);
+ }
+ }
}
void MainWindow::on_actionChangeInstGroup_triggered()
diff --git a/gui/newinstancedialog.cpp b/gui/newinstancedialog.cpp
index f4d57367..3cbfabb0 100644
--- a/gui/newinstancedialog.cpp
+++ b/gui/newinstancedialog.cpp
@@ -74,6 +74,8 @@ void NewInstanceDialog::updateSelectedType()
{
if (!m_selectedType->versionList()->isLoaded())
loadVersionList();
+
+ setSelectedVersion(m_selectedType->versionList()->getLatestStable());
}
}
@@ -112,6 +114,27 @@ void NewInstanceDialog::loadVersionList()
setSelectedVersion(m_selectedType->versionList()->getLatestStable());
}
+QString NewInstanceDialog::instName() const
+{
+ return ui->instNameTextBox->text();
+}
+
+QString NewInstanceDialog::iconKey() const
+{
+ // TODO: Implement icon stuff.
+ return "default";
+}
+
+const InstanceTypeInterface *NewInstanceDialog::selectedType() const
+{
+ return m_selectedType;
+}
+
+const InstVersion *NewInstanceDialog::selectedVersion() const
+{
+ return m_selectedVersion;
+}
+
void NewInstanceDialog::on_btnChangeVersion_clicked()
{
if (m_selectedType)
diff --git a/gui/newinstancedialog.h b/gui/newinstancedialog.h
index da689c41..93d94575 100644
--- a/gui/newinstancedialog.h
+++ b/gui/newinstancedialog.h
@@ -41,6 +41,11 @@ public:
void loadVersionList();
+ QString instName() const;
+ QString iconKey() const;
+ const InstanceTypeInterface *selectedType() const;
+ const InstVersion *selectedVersion() const;
+
private slots:
void on_btnChangeVersion_clicked();