From e5b4dee1c05d0d6ebc0d7b2dd802b93cb8765e63 Mon Sep 17 00:00:00 2001
From: Jan Dalheimer <jan@dalheimer.de>
Date: Fri, 14 Mar 2014 19:51:56 +0100
Subject: Move version stuff to the model and reimplement reordering

---
 gui/dialogs/OneSixModEditDialog.cpp | 60 ++++++++++++++++++++++++-------------
 1 file changed, 40 insertions(+), 20 deletions(-)

(limited to 'gui/dialogs/OneSixModEditDialog.cpp')

diff --git a/gui/dialogs/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp
index 78585a05..b5a0d5aa 100644
--- a/gui/dialogs/OneSixModEditDialog.cpp
+++ b/gui/dialogs/OneSixModEditDialog.cpp
@@ -42,16 +42,6 @@
 #include "logic/LiteLoaderInstaller.h"
 #include "logic/OneSixVersionBuilder.h"
 
-template <typename A, typename B> QMap<A, B> invert(const QMap<B, A> &in)
-{
-	QMap<A, B> out;
-	for (auto it = in.begin(); it != in.end(); ++it)
-	{
-		out.insert(it.value(), it.key());
-	}
-	return out;
-}
-
 OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent)
 	: QDialog(parent), ui(new Ui::OneSixModEditDialog), m_inst(inst)
 {
@@ -164,25 +154,57 @@ void OneSixModEditDialog::on_removeLibraryBtn_clicked()
 
 void OneSixModEditDialog::on_resetLibraryOrderBtn_clicked()
 {
-	// FIXME: IMPLEMENT LOGIC IN MODEL. SEE LEGACY DIALOG FOR EXAMPLE(S).
+	try
+	{
+		m_version->resetOrder();
+	}
+	catch (MMCError &e)
+	{
+		QMessageBox::critical(this, tr("Error"), e.cause());
+	}
 }
 
 void OneSixModEditDialog::on_moveLibraryUpBtn_clicked()
 {
-	// FIXME: IMPLEMENT LOGIC IN MODEL. SEE LEGACY DIALOG FOR EXAMPLE(S).
+	if (ui->libraryTreeView->selectionModel()->selectedRows().isEmpty())
+	{
+		return;
+	}
+	try
+	{
+		const int row = ui->libraryTreeView->selectionModel()->selectedRows().first().row();
+		const int newRow = 0;m_version->move(row, VersionFinal::MoveUp);
+		//ui->libraryTreeView->selectionModel()->setCurrentIndex(m_version->index(newRow), QItemSelectionModel::ClearAndSelect);
+	}
+	catch (MMCError &e)
+	{
+		QMessageBox::critical(this, tr("Error"), e.cause());
+	}
 }
 
 void OneSixModEditDialog::on_moveLibraryDownBtn_clicked()
 {
-	// FIXME: IMPLEMENT LOGIC IN MODEL. SEE LEGACY DIALOG FOR EXAMPLE(S).
+	if (ui->libraryTreeView->selectionModel()->selectedRows().isEmpty())
+	{
+		return;
+	}
+	try
+	{
+		const int row = ui->libraryTreeView->selectionModel()->selectedRows().first().row();
+		const int newRow = 0;m_version->move(row, VersionFinal::MoveDown);
+		//ui->libraryTreeView->selectionModel()->setCurrentIndex(m_version->index(newRow), QItemSelectionModel::ClearAndSelect);
+	}
+	catch (MMCError &e)
+	{
+		QMessageBox::critical(this, tr("Error"), e.cause());
+	}
 }
 
 void OneSixModEditDialog::on_forgeBtn_clicked()
 {
 	// FIXME: use actual model, not reloading. Move logic to model.
 
-	// FIXME: model::isCustom();
-	if (QDir(m_inst->instanceRoot()).exists("custom.json"))
+	if (m_version->isCustom())
 	{
 		if (QMessageBox::question(this, tr("Revert?"),
 								  tr("This action will remove your custom.json. Continue?")) !=
@@ -190,8 +212,7 @@ void OneSixModEditDialog::on_forgeBtn_clicked()
 		{
 			return;
 		}
-		// FIXME: model::revertToBase();
-		QDir(m_inst->instanceRoot()).remove("custom.json");
+		m_version->revertToBase();
 		reloadInstanceVersion();
 	}
 	VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
@@ -242,8 +263,7 @@ void OneSixModEditDialog::on_forgeBtn_clicked()
 
 void OneSixModEditDialog::on_liteloaderBtn_clicked()
 {
-	// FIXME: model...
-	if (QDir(m_inst->instanceRoot()).exists("custom.json"))
+	if (m_version->isCustom())
 	{
 		if (QMessageBox::question(this, tr("Revert?"),
 								  tr("This action will remove your custom.json. Continue?")) !=
@@ -251,7 +271,7 @@ void OneSixModEditDialog::on_liteloaderBtn_clicked()
 		{
 			return;
 		}
-		QDir(m_inst->instanceRoot()).remove("custom.json");
+		m_version->revertToBase();
 		reloadInstanceVersion();
 	}
 	VersionSelectDialog vselect(MMC->liteloaderlist().get(), tr("Select LiteLoader version"),
-- 
cgit v1.2.3


From e95619fa67239b709522a66b8bb7403bb7b84098 Mon Sep 17 00:00:00 2001
From: Jan Dalheimer <jan@dalheimer.de>
Date: Fri, 14 Mar 2014 20:48:57 +0100
Subject: Pull in BaseInstaller related changes from quickmod

---
 gui/dialogs/OneSixModEditDialog.cpp | 56 +++----------------------------------
 1 file changed, 4 insertions(+), 52 deletions(-)

(limited to 'gui/dialogs/OneSixModEditDialog.cpp')

diff --git a/gui/dialogs/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp
index b5a0d5aa..7dac68e5 100644
--- a/gui/dialogs/OneSixModEditDialog.cpp
+++ b/gui/dialogs/OneSixModEditDialog.cpp
@@ -221,44 +221,9 @@ void OneSixModEditDialog::on_forgeBtn_clicked()
 						   m_inst->currentVersionId());
 	if (vselect.exec() && vselect.selectedVersion())
 	{
-		ForgeVersionPtr forgeVersion =
-			std::dynamic_pointer_cast<ForgeVersion>(vselect.selectedVersion());
-		if (!forgeVersion)
-			return;
-		auto entry = MMC->metacache()->resolveEntry("minecraftforge", forgeVersion->filename);
-		if (entry->stale)
-		{
-			NetJob *fjob = new NetJob("Forge download");
-			fjob->addNetAction(CacheDownload::make(forgeVersion->installer_url, entry));
-			ProgressDialog dlg(this);
-			dlg.exec(fjob);
-			if (dlg.result() == QDialog::Accepted)
-			{
-				// install
-				QString forgePath = entry->getFullPath();
-				ForgeInstaller forge(forgePath, forgeVersion->universal_url);
-				if (!forge.add(m_inst))
-				{
-					QLOG_ERROR() << "Failure installing forge";
-				}
-			}
-			else
-			{
-				// failed to download forge :/
-			}
-		}
-		else
-		{
-			// install
-			QString forgePath = entry->getFullPath();
-			ForgeInstaller forge(forgePath, forgeVersion->universal_url);
-			if (!forge.add(m_inst))
-			{
-				QLOG_ERROR() << "Failure installing forge";
-			}
-		}
+		ProgressDialog dialog(this);
+		dialog.exec(ForgeInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this));
 	}
-	reloadInstanceVersion();
 }
 
 void OneSixModEditDialog::on_liteloaderBtn_clicked()
@@ -281,21 +246,8 @@ void OneSixModEditDialog::on_liteloaderBtn_clicked()
 						   m_inst->currentVersionId());
 	if (vselect.exec() && vselect.selectedVersion())
 	{
-		LiteLoaderVersionPtr liteloaderVersion =
-			std::dynamic_pointer_cast<LiteLoaderVersion>(vselect.selectedVersion());
-		if (!liteloaderVersion)
-			return;
-		LiteLoaderInstaller liteloader(liteloaderVersion);
-		if (!liteloader.add(m_inst))
-		{
-			QMessageBox::critical(this, tr("LiteLoader"),
-								  tr("For reasons unknown, the LiteLoader installation failed. "
-									 "Check your MultiMC log files for details."));
-		}
-		else
-		{
-			reloadInstanceVersion();
-		}
+		ProgressDialog dialog(this);
+		dialog.exec(LiteLoaderInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this));
 	}
 }
 
-- 
cgit v1.2.3


From 42a85def60036a5788a9dd862d0c6f835b62337c Mon Sep 17 00:00:00 2001
From: Jan Dalheimer <jan@dalheimer.de>
Date: Fri, 14 Mar 2014 21:18:17 +0100
Subject: Get rid of one reloadInstanceVersion

---
 gui/dialogs/OneSixModEditDialog.cpp | 4 ----
 1 file changed, 4 deletions(-)

(limited to 'gui/dialogs/OneSixModEditDialog.cpp')

diff --git a/gui/dialogs/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp
index 7dac68e5..2d459001 100644
--- a/gui/dialogs/OneSixModEditDialog.cpp
+++ b/gui/dialogs/OneSixModEditDialog.cpp
@@ -145,10 +145,6 @@ void OneSixModEditDialog::on_removeLibraryBtn_clicked()
 		{
 			QMessageBox::critical(this, tr("Error"), tr("Couldn't remove file"));
 		}
-		else
-		{
-			reloadInstanceVersion();
-		}
 	}
 }
 
-- 
cgit v1.2.3