Page dialog for legacy instances.
This commit is contained in:
		@@ -299,6 +299,10 @@ SET(MULTIMC_SOURCES
 | 
				
			|||||||
	gui/pages/VersionPage.h
 | 
						gui/pages/VersionPage.h
 | 
				
			||||||
	gui/pages/ModFolderPage.cpp
 | 
						gui/pages/ModFolderPage.cpp
 | 
				
			||||||
	gui/pages/ModFolderPage.h
 | 
						gui/pages/ModFolderPage.h
 | 
				
			||||||
 | 
						gui/pages/LegacyUpgradePage.cpp
 | 
				
			||||||
 | 
						gui/pages/LegacyUpgradePage.h
 | 
				
			||||||
 | 
						gui/pages/LegacyJarModPage.cpp
 | 
				
			||||||
 | 
						gui/pages/LegacyJarModPage.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# GUI - dialogs
 | 
						# GUI - dialogs
 | 
				
			||||||
	gui/dialogs/AboutDialog.cpp
 | 
						gui/dialogs/AboutDialog.cpp
 | 
				
			||||||
@@ -317,12 +321,8 @@ SET(MULTIMC_SOURCES
 | 
				
			|||||||
	gui/dialogs/EditNotesDialog.h
 | 
						gui/dialogs/EditNotesDialog.h
 | 
				
			||||||
	gui/dialogs/IconPickerDialog.cpp
 | 
						gui/dialogs/IconPickerDialog.cpp
 | 
				
			||||||
	gui/dialogs/IconPickerDialog.h
 | 
						gui/dialogs/IconPickerDialog.h
 | 
				
			||||||
	gui/dialogs/InstanceEditDialog.cpp
 | 
					 | 
				
			||||||
	gui/dialogs/InstanceEditDialog.h
 | 
					 | 
				
			||||||
	gui/dialogs/InstanceSettings.cpp
 | 
						gui/dialogs/InstanceSettings.cpp
 | 
				
			||||||
	gui/dialogs/InstanceSettings.h
 | 
						gui/dialogs/InstanceSettings.h
 | 
				
			||||||
	gui/dialogs/LegacyModEditDialog.cpp
 | 
					 | 
				
			||||||
	gui/dialogs/LegacyModEditDialog.h
 | 
					 | 
				
			||||||
	gui/dialogs/LoginDialog.cpp
 | 
						gui/dialogs/LoginDialog.cpp
 | 
				
			||||||
	gui/dialogs/LoginDialog.h
 | 
						gui/dialogs/LoginDialog.h
 | 
				
			||||||
	gui/dialogs/LwjglSelectDialog.cpp
 | 
						gui/dialogs/LwjglSelectDialog.cpp
 | 
				
			||||||
@@ -610,6 +610,8 @@ SET(MULTIMC_UIS
 | 
				
			|||||||
	# Option pages
 | 
						# Option pages
 | 
				
			||||||
	gui/pages/VersionPage.ui
 | 
						gui/pages/VersionPage.ui
 | 
				
			||||||
	gui/pages/ModFolderPage.ui
 | 
						gui/pages/ModFolderPage.ui
 | 
				
			||||||
 | 
						gui/pages/LegacyUpgradePage.ui
 | 
				
			||||||
 | 
						gui/pages/LegacyJarModPage.ui
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# Dialogs
 | 
						# Dialogs
 | 
				
			||||||
	gui/dialogs/SettingsDialog.ui
 | 
						gui/dialogs/SettingsDialog.ui
 | 
				
			||||||
@@ -618,11 +620,9 @@ SET(MULTIMC_UIS
 | 
				
			|||||||
	gui/dialogs/AboutDialog.ui
 | 
						gui/dialogs/AboutDialog.ui
 | 
				
			||||||
	gui/dialogs/VersionSelectDialog.ui
 | 
						gui/dialogs/VersionSelectDialog.ui
 | 
				
			||||||
	gui/dialogs/LwjglSelectDialog.ui
 | 
						gui/dialogs/LwjglSelectDialog.ui
 | 
				
			||||||
	gui/dialogs/LegacyModEditDialog.ui
 | 
					 | 
				
			||||||
	gui/dialogs/InstanceSettings.ui
 | 
						gui/dialogs/InstanceSettings.ui
 | 
				
			||||||
	gui/dialogs/ProgressDialog.ui
 | 
						gui/dialogs/ProgressDialog.ui
 | 
				
			||||||
	gui/dialogs/IconPickerDialog.ui
 | 
						gui/dialogs/IconPickerDialog.ui
 | 
				
			||||||
	gui/dialogs/InstanceEditDialog.ui
 | 
					 | 
				
			||||||
	gui/dialogs/EditNotesDialog.ui
 | 
						gui/dialogs/EditNotesDialog.ui
 | 
				
			||||||
	gui/dialogs/AccountListDialog.ui
 | 
						gui/dialogs/AccountListDialog.ui
 | 
				
			||||||
	gui/dialogs/AccountSelectDialog.ui
 | 
						gui/dialogs/AccountSelectDialog.ui
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,565 +0,0 @@
 | 
				
			|||||||
/* Copyright 2013 MultiMC Contributors
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "MultiMC.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <pathutils.h>
 | 
					 | 
				
			||||||
#include <QFileDialog>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					 | 
				
			||||||
#include <QEvent>
 | 
					 | 
				
			||||||
#include <QKeyEvent>
 | 
					 | 
				
			||||||
#include <QDesktopServices>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "InstanceEditDialog.h"
 | 
					 | 
				
			||||||
#include "ui_InstanceEditDialog.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "gui/Platform.h"
 | 
					 | 
				
			||||||
#include "gui/dialogs/CustomMessageBox.h"
 | 
					 | 
				
			||||||
#include "gui/dialogs/VersionSelectDialog.h"
 | 
					 | 
				
			||||||
#include "gui/dialogs/ModEditDialogCommon.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "gui/dialogs/ProgressDialog.h"
 | 
					 | 
				
			||||||
#include "InstanceSettings.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "logic/ModList.h"
 | 
					 | 
				
			||||||
#include "logic/minecraft/InstanceVersion.h"
 | 
					 | 
				
			||||||
#include "logic/EnabledItemFilter.h"
 | 
					 | 
				
			||||||
#include "logic/forge/ForgeVersionList.h"
 | 
					 | 
				
			||||||
#include "logic/forge/ForgeInstaller.h"
 | 
					 | 
				
			||||||
#include "logic/liteloader/LiteLoaderVersionList.h"
 | 
					 | 
				
			||||||
#include "logic/liteloader/LiteLoaderInstaller.h"
 | 
					 | 
				
			||||||
#include "logic/minecraft/VersionBuilder.h"
 | 
					 | 
				
			||||||
#include "logic/auth/MojangAccountList.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QAbstractItemModel>
 | 
					 | 
				
			||||||
#include <logic/Mod.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "CustomMessageBox.h"
 | 
					 | 
				
			||||||
#include <QDesktopServices>
 | 
					 | 
				
			||||||
#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QListView>
 | 
					 | 
				
			||||||
#include <QString>
 | 
					 | 
				
			||||||
#include <QUrl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
InstanceEditDialog::InstanceEditDialog(OneSixInstance *inst, QWidget *parent)
 | 
					 | 
				
			||||||
	: QDialog(parent), ui(new Ui::InstanceEditDialog), m_inst(inst)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	MultiMCPlatform::fixWM_CLASS(this);
 | 
					 | 
				
			||||||
	ui->setupUi(this);
 | 
					 | 
				
			||||||
	// libraries!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	m_version = m_inst->getFullVersion();
 | 
					 | 
				
			||||||
	if (m_version)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		main_model = new EnabledItemFilter(this);
 | 
					 | 
				
			||||||
		main_model->setActive(true);
 | 
					 | 
				
			||||||
		main_model->setSourceModel(m_version.get());
 | 
					 | 
				
			||||||
		ui->libraryTreeView->setModel(main_model);
 | 
					 | 
				
			||||||
		ui->libraryTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		connect(ui->libraryTreeView->selectionModel(), &QItemSelectionModel::currentChanged,
 | 
					 | 
				
			||||||
				this, &InstanceEditDialog::versionCurrent);
 | 
					 | 
				
			||||||
		updateVersionControls();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		disableVersionControls();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Loader mods
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->loaderModsDir());
 | 
					 | 
				
			||||||
		m_mods = m_inst->loaderModList();
 | 
					 | 
				
			||||||
		ui->loaderModTreeView->setModel(m_mods.get());
 | 
					 | 
				
			||||||
		ui->loaderModTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_mods->startWatching();
 | 
					 | 
				
			||||||
		auto smodel = ui->loaderModTreeView->selectionModel();
 | 
					 | 
				
			||||||
		connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
					 | 
				
			||||||
				SLOT(loaderCurrent(QModelIndex, QModelIndex)));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Core mods
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->coreModsDir());
 | 
					 | 
				
			||||||
		m_coremods = m_inst->coreModList();
 | 
					 | 
				
			||||||
		ui->coreModsTreeView->setModel(m_coremods.get());
 | 
					 | 
				
			||||||
		ui->coreModsTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_coremods->startWatching();
 | 
					 | 
				
			||||||
		auto smodel = ui->coreModsTreeView->selectionModel();
 | 
					 | 
				
			||||||
		connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
					 | 
				
			||||||
				SLOT(coreCurrent(QModelIndex, QModelIndex)));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// resource packs
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->resourcePacksDir());
 | 
					 | 
				
			||||||
		m_resourcepacks = m_inst->resourcePackList();
 | 
					 | 
				
			||||||
		ui->resPackTreeView->setModel(m_resourcepacks.get());
 | 
					 | 
				
			||||||
		ui->resPackTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_resourcepacks->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	connect(m_inst, &OneSixInstance::versionReloaded, this,
 | 
					 | 
				
			||||||
			&InstanceEditDialog::updateVersionControls);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
InstanceEditDialog::~InstanceEditDialog()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	m_mods->stopWatching();
 | 
					 | 
				
			||||||
	m_resourcepacks->stopWatching();
 | 
					 | 
				
			||||||
	m_coremods->stopWatching();
 | 
					 | 
				
			||||||
	delete ui;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::updateVersionControls()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	ui->forgeBtn->setEnabled(true);
 | 
					 | 
				
			||||||
	ui->liteloaderBtn->setEnabled(true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::disableVersionControls()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	ui->forgeBtn->setEnabled(false);
 | 
					 | 
				
			||||||
	ui->liteloaderBtn->setEnabled(false);
 | 
					 | 
				
			||||||
	ui->reloadLibrariesBtn->setEnabled(false);
 | 
					 | 
				
			||||||
	ui->removeLibraryBtn->setEnabled(false);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool InstanceEditDialog::reloadInstanceVersion()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	try
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_inst->reloadVersion();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	catch (MMCError &e)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QMessageBox::critical(this, tr("Error"), e.cause());
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	catch (...)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QMessageBox::critical(
 | 
					 | 
				
			||||||
			this, tr("Error"),
 | 
					 | 
				
			||||||
			tr("Failed to load the version description file for reasons unknown."));
 | 
					 | 
				
			||||||
		return false;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_reloadLibrariesBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	reloadInstanceVersion();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_removeLibraryBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (ui->libraryTreeView->currentIndex().isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		// FIXME: use actual model, not reloading.
 | 
					 | 
				
			||||||
		if (!m_version->remove(ui->libraryTreeView->currentIndex().row()))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			QMessageBox::critical(this, tr("Error"), tr("Couldn't remove file"));
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_jarmodBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	QFileDialog w;
 | 
					 | 
				
			||||||
	QSet<QString> locations;
 | 
					 | 
				
			||||||
	QString modsFolder = MMC->settings()->get("CentralModsDir").toString();
 | 
					 | 
				
			||||||
	auto f = [&](QStandardPaths::StandardLocation l)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QString location = QStandardPaths::writableLocation(l);
 | 
					 | 
				
			||||||
		if(!QFileInfo::exists(location))
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		locations.insert(location);
 | 
					 | 
				
			||||||
	};
 | 
					 | 
				
			||||||
	f(QStandardPaths::DesktopLocation);
 | 
					 | 
				
			||||||
	f(QStandardPaths::DocumentsLocation);
 | 
					 | 
				
			||||||
	f(QStandardPaths::DownloadLocation);
 | 
					 | 
				
			||||||
	f(QStandardPaths::HomeLocation);
 | 
					 | 
				
			||||||
	QList<QUrl> urls;
 | 
					 | 
				
			||||||
	for(auto location: locations)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		urls.append(QUrl::fromLocalFile(location));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	urls.append(QUrl::fromLocalFile(modsFolder));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	w.setFileMode(QFileDialog::ExistingFiles);
 | 
					 | 
				
			||||||
	w.setAcceptMode(QFileDialog::AcceptOpen);
 | 
					 | 
				
			||||||
	w.setNameFilter(tr("Minecraft jar mods (*.zip *.jar)"));
 | 
					 | 
				
			||||||
	w.setDirectory(modsFolder);
 | 
					 | 
				
			||||||
	w.setSidebarUrls(urls);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if(w.exec());
 | 
					 | 
				
			||||||
		m_version->installJarMods(w.selectedFiles());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_resetLibraryOrderBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	try
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_version->resetOrder();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	catch (MMCError &e)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QMessageBox::critical(this, tr("Error"), e.cause());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_moveLibraryUpBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	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, InstanceVersion::MoveUp);
 | 
					 | 
				
			||||||
		// ui->libraryTreeView->selectionModel()->setCurrentIndex(m_version->index(newRow),
 | 
					 | 
				
			||||||
		// QItemSelectionModel::ClearAndSelect);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	catch (MMCError &e)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QMessageBox::critical(this, tr("Error"), e.cause());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_moveLibraryDownBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	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, InstanceVersion::MoveDown);
 | 
					 | 
				
			||||||
		// ui->libraryTreeView->selectionModel()->setCurrentIndex(m_version->index(newRow),
 | 
					 | 
				
			||||||
		// QItemSelectionModel::ClearAndSelect);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	catch (MMCError &e)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		QMessageBox::critical(this, tr("Error"), e.cause());
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_changeMCVersionBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	VersionSelectDialog vselect(m_inst->versionList().get(), tr("Change Minecraft version"),
 | 
					 | 
				
			||||||
								this);
 | 
					 | 
				
			||||||
	if (!vselect.exec() || !vselect.selectedVersion())
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!MMC->accounts()->anyAccountIsValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		CustomMessageBox::selectable(
 | 
					 | 
				
			||||||
			this, tr("Error"),
 | 
					 | 
				
			||||||
			tr("MultiMC cannot download Minecraft or update instances unless you have at least "
 | 
					 | 
				
			||||||
			   "one account added.\nPlease add your Mojang or Minecraft account."),
 | 
					 | 
				
			||||||
			QMessageBox::Warning)->show();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (m_inst->versionIsCustom())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		auto result = CustomMessageBox::selectable(
 | 
					 | 
				
			||||||
			this, tr("Are you sure?"),
 | 
					 | 
				
			||||||
			tr("This will remove any library/version customization you did previously. "
 | 
					 | 
				
			||||||
			   "This includes things like Forge install and similar."),
 | 
					 | 
				
			||||||
			QMessageBox::Warning, QMessageBox::Ok | QMessageBox::Abort,
 | 
					 | 
				
			||||||
			QMessageBox::Abort)->exec();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (result != QMessageBox::Ok)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		m_version->revertToVanilla();
 | 
					 | 
				
			||||||
		reloadInstanceVersion();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	m_inst->setIntendedVersionId(vselect.selectedVersion()->descriptor());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	auto updateTask = m_inst->doUpdate();
 | 
					 | 
				
			||||||
	if (!updateTask)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	ProgressDialog tDialog(this);
 | 
					 | 
				
			||||||
	connect(updateTask.get(), SIGNAL(failed(QString)), SLOT(onGameUpdateError(QString)));
 | 
					 | 
				
			||||||
	tDialog.exec(updateTask.get());
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_forgeBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	// FIXME: use actual model, not reloading. Move logic to model.
 | 
					 | 
				
			||||||
	if (m_version->hasFtbPack())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (QMessageBox::question(
 | 
					 | 
				
			||||||
				this, tr("Revert?"),
 | 
					 | 
				
			||||||
				tr("This action will remove the FTB pack version patch. Continue?")) !=
 | 
					 | 
				
			||||||
			QMessageBox::Yes)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		m_version->removeFtbPack();
 | 
					 | 
				
			||||||
		reloadInstanceVersion();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (m_version->usesLegacyCustomJson())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (QMessageBox::question(this, tr("Revert?"),
 | 
					 | 
				
			||||||
								  tr("This action will remove your custom.json. Continue?")) !=
 | 
					 | 
				
			||||||
			QMessageBox::Yes)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		m_version->revertToVanilla();
 | 
					 | 
				
			||||||
		reloadInstanceVersion();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
 | 
					 | 
				
			||||||
	vselect.setExactFilter(1, m_inst->currentVersionId());
 | 
					 | 
				
			||||||
	vselect.setEmptyString(tr("No Forge versions are currently available for Minecraft ") +
 | 
					 | 
				
			||||||
						   m_inst->currentVersionId());
 | 
					 | 
				
			||||||
	if (vselect.exec() && vselect.selectedVersion())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ProgressDialog dialog(this);
 | 
					 | 
				
			||||||
		dialog.exec(
 | 
					 | 
				
			||||||
			ForgeInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_liteloaderBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (m_version->hasFtbPack())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (QMessageBox::question(
 | 
					 | 
				
			||||||
				this, tr("Revert?"),
 | 
					 | 
				
			||||||
				tr("This action will remove the FTB pack version patch. Continue?")) !=
 | 
					 | 
				
			||||||
			QMessageBox::Yes)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		m_version->removeFtbPack();
 | 
					 | 
				
			||||||
		reloadInstanceVersion();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (m_version->usesLegacyCustomJson())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (QMessageBox::question(this, tr("Revert?"),
 | 
					 | 
				
			||||||
								  tr("This action will remove your custom.json. Continue?")) !=
 | 
					 | 
				
			||||||
			QMessageBox::Yes)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		m_version->revertToVanilla();
 | 
					 | 
				
			||||||
		reloadInstanceVersion();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	VersionSelectDialog vselect(MMC->liteloaderlist().get(), tr("Select LiteLoader version"),
 | 
					 | 
				
			||||||
								this);
 | 
					 | 
				
			||||||
	vselect.setExactFilter(1, m_inst->currentVersionId());
 | 
					 | 
				
			||||||
	vselect.setEmptyString(tr("No LiteLoader versions are currently available for Minecraft ") +
 | 
					 | 
				
			||||||
						   m_inst->currentVersionId());
 | 
					 | 
				
			||||||
	if (vselect.exec() && vselect.selectedVersion())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ProgressDialog dialog(this);
 | 
					 | 
				
			||||||
		dialog.exec(
 | 
					 | 
				
			||||||
			LiteLoaderInstaller().createInstallTask(m_inst, vselect.selectedVersion(), this));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool InstanceEditDialog::loaderListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmModBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addModBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->loaderModTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool InstanceEditDialog::coreListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmCoreBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addCoreBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->coreModsTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool InstanceEditDialog::resourcePackListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmResPackBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addResPackBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->resPackTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool InstanceEditDialog::eventFilter(QObject *obj, QEvent *ev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (ev->type() != QEvent::KeyPress)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return QDialog::eventFilter(obj, ev);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
 | 
					 | 
				
			||||||
	if (obj == ui->loaderModTreeView)
 | 
					 | 
				
			||||||
		return loaderListFilter(keyEvent);
 | 
					 | 
				
			||||||
	if (obj == ui->coreModsTreeView)
 | 
					 | 
				
			||||||
		return coreListFilter(keyEvent);
 | 
					 | 
				
			||||||
	if (obj == ui->resPackTreeView)
 | 
					 | 
				
			||||||
		return resourcePackListFilter(keyEvent);
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(obj, ev);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_buttonBox_rejected()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_addModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(
 | 
					 | 
				
			||||||
		this, QApplication::translate("InstanceEditDialog", "Select Loader Mods"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_mods->stopWatching();
 | 
					 | 
				
			||||||
		m_mods->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_mods->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_rmModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->loaderModTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_mods->stopWatching();
 | 
					 | 
				
			||||||
	m_mods->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_mods->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_viewModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->loaderModsDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_addCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	//: Title of core mod selection dialog
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Core Mods"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_coremods->stopWatching();
 | 
					 | 
				
			||||||
		m_coremods->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_coremods->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_rmCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->coreModsTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_coremods->stopWatching();
 | 
					 | 
				
			||||||
	m_coremods->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_coremods->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_viewCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->coreModsDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_addResPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(
 | 
					 | 
				
			||||||
		this, QApplication::translate("InstanceEditDialog", "Select Resource Packs"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_resourcepacks->stopWatching();
 | 
					 | 
				
			||||||
		m_resourcepacks->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_resourcepacks->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_rmResPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->resPackTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_resourcepacks->stopWatching();
 | 
					 | 
				
			||||||
	m_resourcepacks->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_resourcepacks->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void InstanceEditDialog::on_viewResPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->resourcePacksDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::loaderCurrent(QModelIndex current, QModelIndex previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->frame->clear();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	int row = current.row();
 | 
					 | 
				
			||||||
	Mod &m = m_mods->operator[](row);
 | 
					 | 
				
			||||||
	ui->frame->updateWithMod(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::versionCurrent(const QModelIndex ¤t, const QModelIndex &previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->removeLibraryBtn->setDisabled(true);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->removeLibraryBtn->setEnabled(m_version->canRemove(current.row()));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void InstanceEditDialog::coreCurrent(QModelIndex current, QModelIndex previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->coreMIFrame->clear();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	int row = current.row();
 | 
					 | 
				
			||||||
	Mod &m = m_coremods->operator[](row);
 | 
					 | 
				
			||||||
	ui->coreMIFrame->updateWithMod(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,97 +0,0 @@
 | 
				
			|||||||
/* Copyright 2013 MultiMC Contributors
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#pragma once
 | 
					 | 
				
			||||||
#include <QDialog>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <logic/OneSixInstance.h>
 | 
					 | 
				
			||||||
#include <logic/net/NetJob.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class EnabledItemFilter;
 | 
					 | 
				
			||||||
namespace Ui
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
class InstanceEditDialog;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class InstanceEditDialog : public QDialog
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Q_OBJECT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
	explicit InstanceEditDialog(OneSixInstance *inst, QWidget *parent = 0);
 | 
					 | 
				
			||||||
	virtual ~InstanceEditDialog();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private
 | 
					 | 
				
			||||||
slots:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// version tab
 | 
					 | 
				
			||||||
	void on_forgeBtn_clicked();
 | 
					 | 
				
			||||||
	void on_liteloaderBtn_clicked();
 | 
					 | 
				
			||||||
	void on_reloadLibrariesBtn_clicked();
 | 
					 | 
				
			||||||
	void on_removeLibraryBtn_clicked();
 | 
					 | 
				
			||||||
	void on_resetLibraryOrderBtn_clicked();
 | 
					 | 
				
			||||||
	void on_moveLibraryUpBtn_clicked();
 | 
					 | 
				
			||||||
	void on_moveLibraryDownBtn_clicked();
 | 
					 | 
				
			||||||
	void on_jarmodBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// loader mod tab
 | 
					 | 
				
			||||||
	void on_addModBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmModBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewModBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// core mod tab
 | 
					 | 
				
			||||||
	void on_addCoreBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmCoreBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewCoreBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// resource pack tab
 | 
					 | 
				
			||||||
	void on_addResPackBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmResPackBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewResPackBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	// Questionable: SettingsDialog doesn't need this for some reason?
 | 
					 | 
				
			||||||
	void on_buttonBox_rejected();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	void updateVersionControls();
 | 
					 | 
				
			||||||
	void disableVersionControls();
 | 
					 | 
				
			||||||
	void on_changeMCVersionBtn_clicked();
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
	bool eventFilter(QObject *obj, QEvent *ev);
 | 
					 | 
				
			||||||
	bool jarListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool loaderListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool coreListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool resourcePackListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	/// FIXME: this shouldn't be necessary!
 | 
					 | 
				
			||||||
	bool reloadInstanceVersion();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
	Ui::InstanceEditDialog *ui;
 | 
					 | 
				
			||||||
	std::shared_ptr<InstanceVersion> m_version;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_mods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_coremods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_jarmods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_resourcepacks;
 | 
					 | 
				
			||||||
	EnabledItemFilter *main_model;
 | 
					 | 
				
			||||||
	OneSixInstance *m_inst;
 | 
					 | 
				
			||||||
	NetJobPtr forgeJob;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public
 | 
					 | 
				
			||||||
slots:
 | 
					 | 
				
			||||||
	void loaderCurrent(QModelIndex current, QModelIndex previous);
 | 
					 | 
				
			||||||
	void versionCurrent(const QModelIndex ¤t, const QModelIndex &previous);
 | 
					 | 
				
			||||||
	void coreCurrent(QModelIndex current, QModelIndex previous);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,393 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<ui version="4.0">
 | 
					 | 
				
			||||||
 <class>InstanceEditDialog</class>
 | 
					 | 
				
			||||||
 <widget class="QDialog" name="InstanceEditDialog">
 | 
					 | 
				
			||||||
  <property name="geometry">
 | 
					 | 
				
			||||||
   <rect>
 | 
					 | 
				
			||||||
    <x>0</x>
 | 
					 | 
				
			||||||
    <y>0</y>
 | 
					 | 
				
			||||||
    <width>593</width>
 | 
					 | 
				
			||||||
    <height>568</height>
 | 
					 | 
				
			||||||
   </rect>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <property name="windowTitle">
 | 
					 | 
				
			||||||
   <string>Edit Instance</string>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <layout class="QGridLayout" name="gridLayout">
 | 
					 | 
				
			||||||
   <item row="1" column="0">
 | 
					 | 
				
			||||||
    <widget class="QDialogButtonBox" name="buttonBox">
 | 
					 | 
				
			||||||
     <property name="autoFillBackground">
 | 
					 | 
				
			||||||
      <bool>false</bool>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <property name="standardButtons">
 | 
					 | 
				
			||||||
      <set>QDialogButtonBox::Close</set>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
   <item row="0" column="0">
 | 
					 | 
				
			||||||
    <widget class="QTabWidget" name="tabWidget">
 | 
					 | 
				
			||||||
     <property name="enabled">
 | 
					 | 
				
			||||||
      <bool>true</bool>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <property name="minimumSize">
 | 
					 | 
				
			||||||
      <size>
 | 
					 | 
				
			||||||
       <width>0</width>
 | 
					 | 
				
			||||||
       <height>0</height>
 | 
					 | 
				
			||||||
      </size>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <property name="currentIndex">
 | 
					 | 
				
			||||||
      <number>0</number>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="libTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Version</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QHBoxLayout" name="horizontalLayout">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QVBoxLayout" name="verticalLayout_10">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="ModListView" name="libraryTreeView">
 | 
					 | 
				
			||||||
           <property name="verticalScrollBarPolicy">
 | 
					 | 
				
			||||||
            <enum>Qt::ScrollBarAlwaysOn</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="horizontalScrollBarPolicy">
 | 
					 | 
				
			||||||
            <enum>Qt::ScrollBarAlwaysOff</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="headerHidden">
 | 
					 | 
				
			||||||
            <bool>false</bool>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <attribute name="headerVisible">
 | 
					 | 
				
			||||||
            <bool>true</bool>
 | 
					 | 
				
			||||||
           </attribute>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QVBoxLayout" name="verticalLayout_4">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="changeMCVersionBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Change version</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="forgeBtn">
 | 
					 | 
				
			||||||
           <property name="toolTip">
 | 
					 | 
				
			||||||
            <string>Replace any current custom version with Minecraft Forge</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Install Forge</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="liteloaderBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Install LiteLoader</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="jarmodBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Add jar mod</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="Line" name="line">
 | 
					 | 
				
			||||||
           <property name="orientation">
 | 
					 | 
				
			||||||
            <enum>Qt::Horizontal</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="reloadLibrariesBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Reload</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="removeLibraryBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Remove</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="Line" name="line_2">
 | 
					 | 
				
			||||||
           <property name="orientation">
 | 
					 | 
				
			||||||
            <enum>Qt::Horizontal</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="moveLibraryUpBtn">
 | 
					 | 
				
			||||||
           <property name="toolTip">
 | 
					 | 
				
			||||||
            <string>This isn't implemented yet.</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Move up</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="moveLibraryDownBtn">
 | 
					 | 
				
			||||||
           <property name="toolTip">
 | 
					 | 
				
			||||||
            <string>This isn't implemented yet.</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Move down</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="resetLibraryOrderBtn">
 | 
					 | 
				
			||||||
           <property name="toolTip">
 | 
					 | 
				
			||||||
            <string>This isn't implemented yet.</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>Reset order</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <spacer name="verticalSpacer_7">
 | 
					 | 
				
			||||||
           <property name="orientation">
 | 
					 | 
				
			||||||
            <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
            <size>
 | 
					 | 
				
			||||||
             <width>20</width>
 | 
					 | 
				
			||||||
             <height>40</height>
 | 
					 | 
				
			||||||
            </size>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </spacer>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="coreTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Core Mods</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_3">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QHBoxLayout" name="horizontalLayout_3">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="ModListView" name="coreModsTreeView">
 | 
					 | 
				
			||||||
           <property name="dragDropMode">
 | 
					 | 
				
			||||||
            <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="coreModsButtonBox">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Add</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="rmCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Remove</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <spacer name="coreModsButtonSpacer">
 | 
					 | 
				
			||||||
             <property name="orientation">
 | 
					 | 
				
			||||||
              <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
              <size>
 | 
					 | 
				
			||||||
               <width>20</width>
 | 
					 | 
				
			||||||
               <height>40</height>
 | 
					 | 
				
			||||||
              </size>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </spacer>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="viewCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&View Folder</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="MCModInfoFrame" name="coreMIFrame">
 | 
					 | 
				
			||||||
         <property name="frameShape">
 | 
					 | 
				
			||||||
          <enum>QFrame::StyledPanel</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="frameShadow">
 | 
					 | 
				
			||||||
          <enum>QFrame::Raised</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="modTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Loader Mods</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_6">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="verticalLayout">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="ModListView" name="loaderModTreeView">
 | 
					 | 
				
			||||||
             <property name="sizePolicy">
 | 
					 | 
				
			||||||
              <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 | 
					 | 
				
			||||||
               <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
               <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
              </sizepolicy>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="acceptDrops">
 | 
					 | 
				
			||||||
              <bool>true</bool>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="dragDropMode">
 | 
					 | 
				
			||||||
              <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Add</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="rmModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Remove</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <spacer name="verticalSpacer">
 | 
					 | 
				
			||||||
             <property name="orientation">
 | 
					 | 
				
			||||||
              <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
              <size>
 | 
					 | 
				
			||||||
               <width>20</width>
 | 
					 | 
				
			||||||
               <height>40</height>
 | 
					 | 
				
			||||||
              </size>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </spacer>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="viewModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&View Folder</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="MCModInfoFrame" name="frame">
 | 
					 | 
				
			||||||
         <property name="sizePolicy">
 | 
					 | 
				
			||||||
          <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
 | 
					 | 
				
			||||||
           <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
           <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
          </sizepolicy>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="resPackTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Resource Packs</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QHBoxLayout" name="horizontalLayout_3">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="ModListView" name="resPackTreeView">
 | 
					 | 
				
			||||||
         <property name="acceptDrops">
 | 
					 | 
				
			||||||
          <bool>true</bool>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="dragDropMode">
 | 
					 | 
				
			||||||
          <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QVBoxLayout" name="verticalLayout_3">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="addResPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&Add</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="rmResPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&Remove</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <spacer name="verticalSpacer_2">
 | 
					 | 
				
			||||||
           <property name="orientation">
 | 
					 | 
				
			||||||
            <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
            <size>
 | 
					 | 
				
			||||||
             <width>20</width>
 | 
					 | 
				
			||||||
             <height>40</height>
 | 
					 | 
				
			||||||
            </size>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </spacer>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="viewResPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&View Folder</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
  </layout>
 | 
					 | 
				
			||||||
 </widget>
 | 
					 | 
				
			||||||
 <customwidgets>
 | 
					 | 
				
			||||||
  <customwidget>
 | 
					 | 
				
			||||||
   <class>ModListView</class>
 | 
					 | 
				
			||||||
   <extends>QTreeView</extends>
 | 
					 | 
				
			||||||
   <header>gui/widgets/ModListView.h</header>
 | 
					 | 
				
			||||||
  </customwidget>
 | 
					 | 
				
			||||||
  <customwidget>
 | 
					 | 
				
			||||||
   <class>MCModInfoFrame</class>
 | 
					 | 
				
			||||||
   <extends>QFrame</extends>
 | 
					 | 
				
			||||||
   <header>gui/widgets/MCModInfoFrame.h</header>
 | 
					 | 
				
			||||||
   <container>1</container>
 | 
					 | 
				
			||||||
  </customwidget>
 | 
					 | 
				
			||||||
 </customwidgets>
 | 
					 | 
				
			||||||
 <resources/>
 | 
					 | 
				
			||||||
 <connections/>
 | 
					 | 
				
			||||||
</ui>
 | 
					 | 
				
			||||||
@@ -1,393 +0,0 @@
 | 
				
			|||||||
/* Copyright 2013 MultiMC Contributors
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include "MultiMC.h"
 | 
					 | 
				
			||||||
#include "LegacyModEditDialog.h"
 | 
					 | 
				
			||||||
#include "ModEditDialogCommon.h"
 | 
					 | 
				
			||||||
#include "VersionSelectDialog.h"
 | 
					 | 
				
			||||||
#include "ProgressDialog.h"
 | 
					 | 
				
			||||||
#include "ui_LegacyModEditDialog.h"
 | 
					 | 
				
			||||||
#include "logic/ModList.h"
 | 
					 | 
				
			||||||
#include "logic/forge/ForgeVersionList.h"
 | 
					 | 
				
			||||||
#include "gui/Platform.h"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <pathutils.h>
 | 
					 | 
				
			||||||
#include <QFileDialog>
 | 
					 | 
				
			||||||
//#include <QMessageBox>
 | 
					 | 
				
			||||||
#include <QDebug>
 | 
					 | 
				
			||||||
#include <QEvent>
 | 
					 | 
				
			||||||
#include <QKeyEvent>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LegacyModEditDialog::LegacyModEditDialog(LegacyInstance *inst, QWidget *parent)
 | 
					 | 
				
			||||||
	: QDialog(parent), ui(new Ui::LegacyModEditDialog), m_inst(inst)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	MultiMCPlatform::fixWM_CLASS(this);
 | 
					 | 
				
			||||||
	ui->setupUi(this);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Jar mods
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->jarModsDir());
 | 
					 | 
				
			||||||
		m_jarmods = m_inst->jarModList();
 | 
					 | 
				
			||||||
		ui->jarModsTreeView->setModel(m_jarmods.get());
 | 
					 | 
				
			||||||
#ifndef Q_OS_LINUX
 | 
					 | 
				
			||||||
		// FIXME: internal DnD causes segfaults later
 | 
					 | 
				
			||||||
		ui->jarModsTreeView->setDragDropMode(QAbstractItemView::DragDrop);
 | 
					 | 
				
			||||||
		// FIXME: DnD is glitched with contiguous (we move only first item in selection)
 | 
					 | 
				
			||||||
		ui->jarModsTreeView->setSelectionMode(QAbstractItemView::SingleSelection);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		ui->jarModsTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_jarmods->startWatching();
 | 
					 | 
				
			||||||
		auto smodel = ui->jarModsTreeView->selectionModel();
 | 
					 | 
				
			||||||
		connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
					 | 
				
			||||||
				SLOT(jarCurrent(QModelIndex, QModelIndex)));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Core mods
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->coreModsDir());
 | 
					 | 
				
			||||||
		m_coremods = m_inst->coreModList();
 | 
					 | 
				
			||||||
		ui->coreModsTreeView->setModel(m_coremods.get());
 | 
					 | 
				
			||||||
		ui->coreModsTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_coremods->startWatching();
 | 
					 | 
				
			||||||
		auto smodel = ui->coreModsTreeView->selectionModel();
 | 
					 | 
				
			||||||
		connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
					 | 
				
			||||||
				SLOT(coreCurrent(QModelIndex, QModelIndex)));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Loader mods
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->loaderModsDir());
 | 
					 | 
				
			||||||
		m_mods = m_inst->loaderModList();
 | 
					 | 
				
			||||||
		ui->loaderModTreeView->setModel(m_mods.get());
 | 
					 | 
				
			||||||
		ui->loaderModTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_mods->startWatching();
 | 
					 | 
				
			||||||
		auto smodel = ui->loaderModTreeView->selectionModel();
 | 
					 | 
				
			||||||
		connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
					 | 
				
			||||||
				SLOT(loaderCurrent(QModelIndex, QModelIndex)));
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// texture packs
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ensureFolderPathExists(m_inst->texturePacksDir());
 | 
					 | 
				
			||||||
		m_texturepacks = m_inst->texturePackList();
 | 
					 | 
				
			||||||
		ui->texPackTreeView->setModel(m_texturepacks.get());
 | 
					 | 
				
			||||||
		ui->texPackTreeView->installEventFilter(this);
 | 
					 | 
				
			||||||
		m_texturepacks->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
LegacyModEditDialog::~LegacyModEditDialog()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	m_mods->stopWatching();
 | 
					 | 
				
			||||||
	m_coremods->stopWatching();
 | 
					 | 
				
			||||||
	m_jarmods->stopWatching();
 | 
					 | 
				
			||||||
	m_texturepacks->stopWatching();
 | 
					 | 
				
			||||||
	delete ui;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool LegacyModEditDialog::coreListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmCoreBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addCoreBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->coreModsTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool LegacyModEditDialog::jarListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Up:
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (keyEvent->modifiers() & Qt::ControlModifier)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			on_moveJarUpBtn_clicked();
 | 
					 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	case Qt::Key_Down:
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		if (keyEvent->modifiers() & Qt::ControlModifier)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			on_moveJarDownBtn_clicked();
 | 
					 | 
				
			||||||
			return true;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmJarBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addJarBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->jarModsTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool LegacyModEditDialog::loaderListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmModBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addModBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->loaderModTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool LegacyModEditDialog::texturePackListFilter(QKeyEvent *keyEvent)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	switch (keyEvent->key())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
	case Qt::Key_Delete:
 | 
					 | 
				
			||||||
		on_rmTexPackBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	case Qt::Key_Plus:
 | 
					 | 
				
			||||||
		on_addTexPackBtn_clicked();
 | 
					 | 
				
			||||||
		return true;
 | 
					 | 
				
			||||||
	default:
 | 
					 | 
				
			||||||
		break;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(ui->texPackTreeView, keyEvent);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
bool LegacyModEditDialog::eventFilter(QObject *obj, QEvent *ev)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (ev->type() != QEvent::KeyPress)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		return QDialog::eventFilter(obj, ev);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
 | 
					 | 
				
			||||||
	if (obj == ui->jarModsTreeView)
 | 
					 | 
				
			||||||
		return jarListFilter(keyEvent);
 | 
					 | 
				
			||||||
	if (obj == ui->coreModsTreeView)
 | 
					 | 
				
			||||||
		return coreListFilter(keyEvent);
 | 
					 | 
				
			||||||
	if (obj == ui->loaderModTreeView)
 | 
					 | 
				
			||||||
		return loaderListFilter(keyEvent);
 | 
					 | 
				
			||||||
	if (obj == ui->texPackTreeView)
 | 
					 | 
				
			||||||
		return texturePackListFilter(keyEvent);
 | 
					 | 
				
			||||||
	return QDialog::eventFilter(obj, ev);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_addCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	//: Title of core mod selection dialog
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Core Mods"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_coremods->stopWatching();
 | 
					 | 
				
			||||||
		m_coremods->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_coremods->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_addForgeBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
 | 
					 | 
				
			||||||
	vselect.setExactFilter(1, m_inst->intendedVersionId());
 | 
					 | 
				
			||||||
	if (vselect.exec() && vselect.selectedVersion())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ForgeVersionPtr forge =
 | 
					 | 
				
			||||||
			std::dynamic_pointer_cast<ForgeVersion>(vselect.selectedVersion());
 | 
					 | 
				
			||||||
		if (!forge)
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		auto entry = MMC->metacache()->resolveEntry("minecraftforge", forge->filename());
 | 
					 | 
				
			||||||
		if (entry->stale)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			NetJob *fjob = new NetJob("Forge download");
 | 
					 | 
				
			||||||
			fjob->addNetAction(CacheDownload::make(forge->universal_url, entry));
 | 
					 | 
				
			||||||
			ProgressDialog dlg(this);
 | 
					 | 
				
			||||||
			dlg.exec(fjob);
 | 
					 | 
				
			||||||
			if (dlg.result() == QDialog::Accepted)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				m_jarmods->stopWatching();
 | 
					 | 
				
			||||||
				m_jarmods->installMod(QFileInfo(entry->getFullPath()));
 | 
					 | 
				
			||||||
				m_jarmods->startWatching();
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
			else
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				// failed to download forge :/
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			m_jarmods->stopWatching();
 | 
					 | 
				
			||||||
			m_jarmods->installMod(QFileInfo(entry->getFullPath()));
 | 
					 | 
				
			||||||
			m_jarmods->startWatching();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_addJarBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	//: Title of jar mod selection dialog
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Jar Mods"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_jarmods->stopWatching();
 | 
					 | 
				
			||||||
		m_jarmods->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_jarmods->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_addModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	//: Title of regular mod selection dialog
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Loader Mods"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_mods->stopWatching();
 | 
					 | 
				
			||||||
		m_mods->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_mods->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_addTexPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	//: Title of texture pack selection dialog
 | 
					 | 
				
			||||||
	QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Texture Packs"));
 | 
					 | 
				
			||||||
	for (auto filename : fileNames)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		m_texturepacks->stopWatching();
 | 
					 | 
				
			||||||
		m_texturepacks->installMod(QFileInfo(filename));
 | 
					 | 
				
			||||||
		m_texturepacks->startWatching();
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_moveJarDownBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	m_jarmods->moveModsDown(first, last);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_moveJarUpBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_jarmods->moveModsUp(first, last);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_rmCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->coreModsTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_coremods->stopWatching();
 | 
					 | 
				
			||||||
	m_coremods->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_coremods->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_rmJarBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_jarmods->stopWatching();
 | 
					 | 
				
			||||||
	m_jarmods->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_jarmods->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_rmModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->loaderModTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_mods->stopWatching();
 | 
					 | 
				
			||||||
	m_mods->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_mods->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_rmTexPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	int first, last;
 | 
					 | 
				
			||||||
	auto list = ui->texPackTreeView->selectionModel()->selectedRows();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (!lastfirst(list, first, last))
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	m_texturepacks->stopWatching();
 | 
					 | 
				
			||||||
	m_texturepacks->deleteMods(first, last);
 | 
					 | 
				
			||||||
	m_texturepacks->startWatching();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_viewCoreBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->coreModsDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_viewModBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->loaderModsDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_viewTexPackBtn_clicked()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	openDirInDefaultProgram(m_inst->texturePacksDir(), true);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::on_buttonBox_rejected()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	close();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::jarCurrent(QModelIndex current, QModelIndex previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->jarMIFrame->clear();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	int row = current.row();
 | 
					 | 
				
			||||||
	Mod &m = m_jarmods->operator[](row);
 | 
					 | 
				
			||||||
	ui->jarMIFrame->updateWithMod(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::coreCurrent(QModelIndex current, QModelIndex previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->coreMIFrame->clear();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	int row = current.row();
 | 
					 | 
				
			||||||
	Mod &m = m_coremods->operator[](row);
 | 
					 | 
				
			||||||
	ui->coreMIFrame->updateWithMod(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void LegacyModEditDialog::loaderCurrent(QModelIndex current, QModelIndex previous)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	if (!current.isValid())
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		ui->loaderMIFrame->clear();
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	int row = current.row();
 | 
					 | 
				
			||||||
	Mod &m = m_mods->operator[](row);
 | 
					 | 
				
			||||||
	ui->loaderMIFrame->updateWithMod(m);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,78 +0,0 @@
 | 
				
			|||||||
/* Copyright 2013 MultiMC Contributors
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
 * You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
 * See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
 * limitations under the License.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#pragma once
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <QDialog>
 | 
					 | 
				
			||||||
#include "logic/LegacyInstance.h"
 | 
					 | 
				
			||||||
#include <logic/net/NetJob.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Ui
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
class LegacyModEditDialog;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class LegacyModEditDialog : public QDialog
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	Q_OBJECT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
	explicit LegacyModEditDialog(LegacyInstance *inst, QWidget *parent = 0);
 | 
					 | 
				
			||||||
	~LegacyModEditDialog();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private
 | 
					 | 
				
			||||||
slots:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void on_addJarBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmJarBtn_clicked();
 | 
					 | 
				
			||||||
	void on_addForgeBtn_clicked();
 | 
					 | 
				
			||||||
	void on_moveJarUpBtn_clicked();
 | 
					 | 
				
			||||||
	void on_moveJarDownBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void on_addCoreBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmCoreBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewCoreBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void on_addModBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmModBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewModBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void on_addTexPackBtn_clicked();
 | 
					 | 
				
			||||||
	void on_rmTexPackBtn_clicked();
 | 
					 | 
				
			||||||
	void on_viewTexPackBtn_clicked();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Questionable: SettingsDialog doesn't need this for some reason?
 | 
					 | 
				
			||||||
	void on_buttonBox_rejected();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	void jarCurrent(QModelIndex current, QModelIndex previous);
 | 
					 | 
				
			||||||
	void coreCurrent(QModelIndex current, QModelIndex previous);
 | 
					 | 
				
			||||||
	void loaderCurrent(QModelIndex current, QModelIndex previous);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
	bool eventFilter(QObject *obj, QEvent *ev);
 | 
					 | 
				
			||||||
	bool jarListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool coreListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool loaderListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
	bool texturePackListFilter(QKeyEvent *ev);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
	Ui::LegacyModEditDialog *ui;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_mods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_coremods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_jarmods;
 | 
					 | 
				
			||||||
	std::shared_ptr<ModList> m_texturepacks;
 | 
					 | 
				
			||||||
	LegacyInstance *m_inst;
 | 
					 | 
				
			||||||
	NetJobPtr forgeJob;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,354 +0,0 @@
 | 
				
			|||||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
					 | 
				
			||||||
<ui version="4.0">
 | 
					 | 
				
			||||||
 <class>LegacyModEditDialog</class>
 | 
					 | 
				
			||||||
 <widget class="QDialog" name="LegacyModEditDialog">
 | 
					 | 
				
			||||||
  <property name="geometry">
 | 
					 | 
				
			||||||
   <rect>
 | 
					 | 
				
			||||||
    <x>0</x>
 | 
					 | 
				
			||||||
    <y>0</y>
 | 
					 | 
				
			||||||
    <width>542</width>
 | 
					 | 
				
			||||||
    <height>431</height>
 | 
					 | 
				
			||||||
   </rect>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <property name="windowTitle">
 | 
					 | 
				
			||||||
   <string>Edit Mods</string>
 | 
					 | 
				
			||||||
  </property>
 | 
					 | 
				
			||||||
  <layout class="QVBoxLayout" name="verticalLayout">
 | 
					 | 
				
			||||||
   <item>
 | 
					 | 
				
			||||||
    <widget class="QTabWidget" name="tabWidget">
 | 
					 | 
				
			||||||
     <property name="currentIndex">
 | 
					 | 
				
			||||||
      <number>0</number>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="convertTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Upgrade</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_5">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="QTextBrowser" name="textBrowser">
 | 
					 | 
				
			||||||
         <property name="html">
 | 
					 | 
				
			||||||
          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
					 | 
				
			||||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
					 | 
				
			||||||
p, li { white-space: pre-wrap; }
 | 
					 | 
				
			||||||
</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;">
 | 
					 | 
				
			||||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:18pt; font-weight:600;">New format is available</span></p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MultiMC now supports old Minecraft versions in the new (OneSix) instance format. The old format won't be getting any new features and only the most critical bugfixes.  As a consequence, you should upgrade this instance.</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The upgrade will create a new instance with the same contents as the current one, in the new format. The original instance will remain untouched, in case anything goes wrong in the process.</p>
 | 
					 | 
				
			||||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please report any issues on our <a href="https://github.com/MultiMC/MultiMC5/issues"><img src=":/icons/multimc/22x22/bug.png" /></a><a href="https://github.com/MultiMC/MultiMC5/issues"><span style=" text-decoration: underline; color:#68a0df;">github issues page</span></a>.</p></body></html></string>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="openExternalLinks">
 | 
					 | 
				
			||||||
          <bool>true</bool>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="QCommandLinkButton" name="upgradeButton">
 | 
					 | 
				
			||||||
         <property name="text">
 | 
					 | 
				
			||||||
          <string>Start the upgrade!</string>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="jarTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Jar Mods</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QHBoxLayout" name="horizontalLayout">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="ModListView" name="jarModsTreeView">
 | 
					 | 
				
			||||||
           <property name="verticalScrollBarPolicy">
 | 
					 | 
				
			||||||
            <enum>Qt::ScrollBarAlwaysOn</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="horizontalScrollBarPolicy">
 | 
					 | 
				
			||||||
            <enum>Qt::ScrollBarAlwaysOff</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="jarModsButtonBox">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addJarBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Add</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="rmJarBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Remove</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addForgeBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>MCForge</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <spacer name="jarModsButtonSpacer">
 | 
					 | 
				
			||||||
             <property name="orientation">
 | 
					 | 
				
			||||||
              <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
              <size>
 | 
					 | 
				
			||||||
               <width>20</width>
 | 
					 | 
				
			||||||
               <height>40</height>
 | 
					 | 
				
			||||||
              </size>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </spacer>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="moveJarUpBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>Move &Up</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="moveJarDownBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>Move &Down</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="MCModInfoFrame" name="jarMIFrame">
 | 
					 | 
				
			||||||
         <property name="frameShadow">
 | 
					 | 
				
			||||||
          <enum>QFrame::Plain</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="coreTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Core Mods</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_3">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QHBoxLayout" name="horizontalLayout_3">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="ModListView" name="coreModsTreeView">
 | 
					 | 
				
			||||||
           <property name="dragDropMode">
 | 
					 | 
				
			||||||
            <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="coreModsButtonBox">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Add</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="rmCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Remove</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <spacer name="coreModsButtonSpacer">
 | 
					 | 
				
			||||||
             <property name="orientation">
 | 
					 | 
				
			||||||
              <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
              <size>
 | 
					 | 
				
			||||||
               <width>20</width>
 | 
					 | 
				
			||||||
               <height>40</height>
 | 
					 | 
				
			||||||
              </size>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </spacer>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="viewCoreBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&View Folder</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="MCModInfoFrame" name="coreMIFrame">
 | 
					 | 
				
			||||||
         <property name="frameShape">
 | 
					 | 
				
			||||||
          <enum>QFrame::StyledPanel</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="frameShadow">
 | 
					 | 
				
			||||||
          <enum>QFrame::Raised</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="modTab">
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Loader Mods</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout_4">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QHBoxLayout" name="horizontalLayout_2">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="ModListView" name="loaderModTreeView">
 | 
					 | 
				
			||||||
           <property name="acceptDrops">
 | 
					 | 
				
			||||||
            <bool>true</bool>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="dragDropMode">
 | 
					 | 
				
			||||||
            <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <layout class="QVBoxLayout" name="mlModsButtonBox">
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="addModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Add</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="rmModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&Remove</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <spacer name="mlModsButtonSpacer">
 | 
					 | 
				
			||||||
             <property name="orientation">
 | 
					 | 
				
			||||||
              <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
             <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
              <size>
 | 
					 | 
				
			||||||
               <width>20</width>
 | 
					 | 
				
			||||||
               <height>40</height>
 | 
					 | 
				
			||||||
              </size>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </spacer>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
           <item>
 | 
					 | 
				
			||||||
            <widget class="QPushButton" name="viewModBtn">
 | 
					 | 
				
			||||||
             <property name="text">
 | 
					 | 
				
			||||||
              <string>&View Folder</string>
 | 
					 | 
				
			||||||
             </property>
 | 
					 | 
				
			||||||
            </widget>
 | 
					 | 
				
			||||||
           </item>
 | 
					 | 
				
			||||||
          </layout>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="MCModInfoFrame" name="loaderMIFrame">
 | 
					 | 
				
			||||||
         <property name="frameShape">
 | 
					 | 
				
			||||||
          <enum>QFrame::StyledPanel</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="frameShadow">
 | 
					 | 
				
			||||||
          <enum>QFrame::Raised</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
     <widget class="QWidget" name="texPackTab">
 | 
					 | 
				
			||||||
      <property name="acceptDrops">
 | 
					 | 
				
			||||||
       <bool>false</bool>
 | 
					 | 
				
			||||||
      </property>
 | 
					 | 
				
			||||||
      <attribute name="title">
 | 
					 | 
				
			||||||
       <string>Texture Packs</string>
 | 
					 | 
				
			||||||
      </attribute>
 | 
					 | 
				
			||||||
      <layout class="QHBoxLayout" name="horizontalLayout_4">
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <widget class="ModListView" name="texPackTreeView">
 | 
					 | 
				
			||||||
         <property name="acceptDrops">
 | 
					 | 
				
			||||||
          <bool>true</bool>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
         <property name="dragDropMode">
 | 
					 | 
				
			||||||
          <enum>QAbstractItemView::DropOnly</enum>
 | 
					 | 
				
			||||||
         </property>
 | 
					 | 
				
			||||||
        </widget>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
       <item>
 | 
					 | 
				
			||||||
        <layout class="QVBoxLayout" name="texturePacksButtonBox">
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="addTexPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&Add</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="rmTexPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&Remove</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <spacer name="texturePacksButtonSpacer">
 | 
					 | 
				
			||||||
           <property name="orientation">
 | 
					 | 
				
			||||||
            <enum>Qt::Vertical</enum>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
           <property name="sizeHint" stdset="0">
 | 
					 | 
				
			||||||
            <size>
 | 
					 | 
				
			||||||
             <width>20</width>
 | 
					 | 
				
			||||||
             <height>40</height>
 | 
					 | 
				
			||||||
            </size>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </spacer>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
         <item>
 | 
					 | 
				
			||||||
          <widget class="QPushButton" name="viewTexPackBtn">
 | 
					 | 
				
			||||||
           <property name="text">
 | 
					 | 
				
			||||||
            <string>&View Folder</string>
 | 
					 | 
				
			||||||
           </property>
 | 
					 | 
				
			||||||
          </widget>
 | 
					 | 
				
			||||||
         </item>
 | 
					 | 
				
			||||||
        </layout>
 | 
					 | 
				
			||||||
       </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					 | 
				
			||||||
     </widget>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
   <item>
 | 
					 | 
				
			||||||
    <widget class="QDialogButtonBox" name="buttonBox">
 | 
					 | 
				
			||||||
     <property name="standardButtons">
 | 
					 | 
				
			||||||
      <set>QDialogButtonBox::Close</set>
 | 
					 | 
				
			||||||
     </property>
 | 
					 | 
				
			||||||
    </widget>
 | 
					 | 
				
			||||||
   </item>
 | 
					 | 
				
			||||||
  </layout>
 | 
					 | 
				
			||||||
 </widget>
 | 
					 | 
				
			||||||
 <customwidgets>
 | 
					 | 
				
			||||||
  <customwidget>
 | 
					 | 
				
			||||||
   <class>ModListView</class>
 | 
					 | 
				
			||||||
   <extends>QTreeView</extends>
 | 
					 | 
				
			||||||
   <header>gui/widgets/ModListView.h</header>
 | 
					 | 
				
			||||||
  </customwidget>
 | 
					 | 
				
			||||||
  <customwidget>
 | 
					 | 
				
			||||||
   <class>MCModInfoFrame</class>
 | 
					 | 
				
			||||||
   <extends>QFrame</extends>
 | 
					 | 
				
			||||||
   <header>gui/widgets/MCModInfoFrame.h</header>
 | 
					 | 
				
			||||||
   <container>1</container>
 | 
					 | 
				
			||||||
  </customwidget>
 | 
					 | 
				
			||||||
 </customwidgets>
 | 
					 | 
				
			||||||
 <resources>
 | 
					 | 
				
			||||||
  <include location="../../resources/multimc/multimc.qrc"/>
 | 
					 | 
				
			||||||
 </resources>
 | 
					 | 
				
			||||||
 <connections/>
 | 
					 | 
				
			||||||
</ui>
 | 
					 | 
				
			||||||
							
								
								
									
										203
									
								
								gui/pages/LegacyJarModPage.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										203
									
								
								gui/pages/LegacyJarModPage.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,203 @@
 | 
				
			|||||||
 | 
					/* Copyright 2013 MultiMC Contributors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "LegacyJarModPage.h"
 | 
				
			||||||
 | 
					#include "ui_LegacyJarModPage.h"
 | 
				
			||||||
 | 
					#include "gui/dialogs/VersionSelectDialog.h"
 | 
				
			||||||
 | 
					#include "gui/dialogs/ProgressDialog.h"
 | 
				
			||||||
 | 
					#include "gui/dialogs/ModEditDialogCommon.h"
 | 
				
			||||||
 | 
					#include "logic/ModList.h"
 | 
				
			||||||
 | 
					#include "logic/LegacyInstance.h"
 | 
				
			||||||
 | 
					#include "logic/forge/ForgeVersion.h"
 | 
				
			||||||
 | 
					#include "logic/forge/ForgeVersionList.h"
 | 
				
			||||||
 | 
					#include "MultiMC.h"
 | 
				
			||||||
 | 
					#include <pathutils.h>
 | 
				
			||||||
 | 
					#include <QtGui/QKeyEvent>
 | 
				
			||||||
 | 
					#include <QFileDialog>
 | 
				
			||||||
 | 
					#include <QKeyEvent>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LegacyJarModPage::LegacyJarModPage(LegacyInstance *inst, QWidget *parent)
 | 
				
			||||||
 | 
						: QWidget(parent), ui(new Ui::LegacyJarModPage), m_inst(inst)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ui->setupUi(this);
 | 
				
			||||||
 | 
						m_jarmods = m_inst->jarModList();
 | 
				
			||||||
 | 
						ui->jarModsTreeView->setModel(m_jarmods.get());
 | 
				
			||||||
 | 
						ui->jarModsTreeView->setDragDropMode(QAbstractItemView::DragDrop);
 | 
				
			||||||
 | 
						ui->jarModsTreeView->setSelectionMode(QAbstractItemView::SingleSelection);
 | 
				
			||||||
 | 
						ui->jarModsTreeView->installEventFilter(this);
 | 
				
			||||||
 | 
						m_jarmods->startWatching();
 | 
				
			||||||
 | 
						auto smodel = ui->jarModsTreeView->selectionModel();
 | 
				
			||||||
 | 
						connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)),
 | 
				
			||||||
 | 
								SLOT(jarCurrent(QModelIndex, QModelIndex)));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LegacyJarModPage::~LegacyJarModPage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						m_jarmods->stopWatching();
 | 
				
			||||||
 | 
						delete ui;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString LegacyJarModPage::displayName()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return tr("Jar Mods");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QIcon LegacyJarModPage::icon()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return QIcon::fromTheme("settings");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString LegacyJarModPage::id()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return "jarmods";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bool LegacyJarModPage::eventFilter(QObject *obj, QEvent *ev)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (ev->type() != QEvent::KeyPress || obj != ui->jarModsTreeView)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return QWidget::eventFilter(obj, ev);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						QKeyEvent *keyEvent = static_cast<QKeyEvent *>(ev);
 | 
				
			||||||
 | 
						switch (keyEvent->key())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case Qt::Key_Up:
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (keyEvent->modifiers() & Qt::ControlModifier)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								on_moveJarUpBtn_clicked();
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						case Qt::Key_Down:
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (keyEvent->modifiers() & Qt::ControlModifier)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								on_moveJarDownBtn_clicked();
 | 
				
			||||||
 | 
								return true;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						case Qt::Key_Delete:
 | 
				
			||||||
 | 
							on_rmJarBtn_clicked();
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						case Qt::Key_Plus:
 | 
				
			||||||
 | 
							on_addJarBtn_clicked();
 | 
				
			||||||
 | 
							return true;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return QWidget::eventFilter(obj, ev);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_addForgeBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
 | 
				
			||||||
 | 
						vselect.setExactFilter(1, m_inst->intendedVersionId());
 | 
				
			||||||
 | 
						if (vselect.exec() && vselect.selectedVersion())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							ForgeVersionPtr forge =
 | 
				
			||||||
 | 
								std::dynamic_pointer_cast<ForgeVersion>(vselect.selectedVersion());
 | 
				
			||||||
 | 
							if (!forge)
 | 
				
			||||||
 | 
								return;
 | 
				
			||||||
 | 
							auto entry = MMC->metacache()->resolveEntry("minecraftforge", forge->filename());
 | 
				
			||||||
 | 
							if (entry->stale)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								NetJob *fjob = new NetJob("Forge download");
 | 
				
			||||||
 | 
								fjob->addNetAction(CacheDownload::make(forge->universal_url, entry));
 | 
				
			||||||
 | 
								ProgressDialog dlg(this);
 | 
				
			||||||
 | 
								dlg.exec(fjob);
 | 
				
			||||||
 | 
								if (dlg.result() == QDialog::Accepted)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									m_jarmods->stopWatching();
 | 
				
			||||||
 | 
									m_jarmods->installMod(QFileInfo(entry->getFullPath()));
 | 
				
			||||||
 | 
									m_jarmods->startWatching();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									// failed to download forge :/
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								m_jarmods->stopWatching();
 | 
				
			||||||
 | 
								m_jarmods->installMod(QFileInfo(entry->getFullPath()));
 | 
				
			||||||
 | 
								m_jarmods->startWatching();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_addJarBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						//: Title of jar mod selection dialog
 | 
				
			||||||
 | 
						QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Select Jar Mods"));
 | 
				
			||||||
 | 
						for (auto filename : fileNames)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							m_jarmods->stopWatching();
 | 
				
			||||||
 | 
							m_jarmods->installMod(QFileInfo(filename));
 | 
				
			||||||
 | 
							m_jarmods->startWatching();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_moveJarDownBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int first, last;
 | 
				
			||||||
 | 
						auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!lastfirst(list, first, last))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						m_jarmods->moveModsDown(first, last);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_moveJarUpBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int first, last;
 | 
				
			||||||
 | 
						auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!lastfirst(list, first, last))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						m_jarmods->moveModsUp(first, last);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_rmJarBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int first, last;
 | 
				
			||||||
 | 
						auto list = ui->jarModsTreeView->selectionModel()->selectedRows();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!lastfirst(list, first, last))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						m_jarmods->stopWatching();
 | 
				
			||||||
 | 
						m_jarmods->deleteMods(first, last);
 | 
				
			||||||
 | 
						m_jarmods->startWatching();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::on_viewJarBtn_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						openDirInDefaultProgram(m_inst->jarModsDir(), true);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyJarModPage::jarCurrent(QModelIndex current, QModelIndex previous)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if (!current.isValid())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							ui->jarMIFrame->clear();
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						int row = current.row();
 | 
				
			||||||
 | 
						Mod &m = m_jarmods->operator[](row);
 | 
				
			||||||
 | 
						ui->jarMIFrame->updateWithMod(m);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										61
									
								
								gui/pages/LegacyJarModPage.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								gui/pages/LegacyJarModPage.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
				
			|||||||
 | 
					/* Copyright 2013 MultiMC Contributors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <QDialog>
 | 
				
			||||||
 | 
					#include <logic/net/NetJob.h>
 | 
				
			||||||
 | 
					#include "BasePage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ModList;
 | 
				
			||||||
 | 
					class LegacyInstance;
 | 
				
			||||||
 | 
					namespace Ui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					class LegacyJarModPage;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LegacyJarModPage : public QWidget, public BasePage
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						explicit LegacyJarModPage(LegacyInstance *inst, QWidget *parent = 0);
 | 
				
			||||||
 | 
						virtual ~LegacyJarModPage();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual QString displayName();
 | 
				
			||||||
 | 
						virtual QIcon icon();
 | 
				
			||||||
 | 
						virtual QString id();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private
 | 
				
			||||||
 | 
					slots:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void on_addJarBtn_clicked();
 | 
				
			||||||
 | 
						void on_rmJarBtn_clicked();
 | 
				
			||||||
 | 
						void on_addForgeBtn_clicked();
 | 
				
			||||||
 | 
						void on_moveJarUpBtn_clicked();
 | 
				
			||||||
 | 
						void on_moveJarDownBtn_clicked();
 | 
				
			||||||
 | 
						void on_viewJarBtn_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						void jarCurrent(QModelIndex current, QModelIndex previous);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
						virtual bool eventFilter(QObject *obj, QEvent *ev) override;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						Ui::LegacyJarModPage *ui;
 | 
				
			||||||
 | 
						std::shared_ptr<ModList> m_jarmods;
 | 
				
			||||||
 | 
						LegacyInstance *m_inst;
 | 
				
			||||||
 | 
						NetJobPtr forgeJob;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										158
									
								
								gui/pages/LegacyJarModPage.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								gui/pages/LegacyJarModPage.ui
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,158 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<ui version="4.0">
 | 
				
			||||||
 | 
					 <class>LegacyJarModPage</class>
 | 
				
			||||||
 | 
					 <widget class="QWidget" name="LegacyJarModPage">
 | 
				
			||||||
 | 
					  <property name="geometry">
 | 
				
			||||||
 | 
					   <rect>
 | 
				
			||||||
 | 
					    <x>0</x>
 | 
				
			||||||
 | 
					    <y>0</y>
 | 
				
			||||||
 | 
					    <width>378</width>
 | 
				
			||||||
 | 
					    <height>324</height>
 | 
				
			||||||
 | 
					   </rect>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <property name="windowTitle">
 | 
				
			||||||
 | 
					   <string>LegacyJarModPage</string>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <layout class="QVBoxLayout" name="verticalLayout_2">
 | 
				
			||||||
 | 
					   <property name="leftMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="topMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="rightMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="bottomMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <layout class="QHBoxLayout" name="horizontalLayout">
 | 
				
			||||||
 | 
					     <item>
 | 
				
			||||||
 | 
					      <widget class="ModListView" name="jarModsTreeView">
 | 
				
			||||||
 | 
					       <property name="verticalScrollBarPolicy">
 | 
				
			||||||
 | 
					        <enum>Qt::ScrollBarAlwaysOn</enum>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					       <property name="horizontalScrollBarPolicy">
 | 
				
			||||||
 | 
					        <enum>Qt::ScrollBarAlwaysOff</enum>
 | 
				
			||||||
 | 
					       </property>
 | 
				
			||||||
 | 
					      </widget>
 | 
				
			||||||
 | 
					     </item>
 | 
				
			||||||
 | 
					     <item>
 | 
				
			||||||
 | 
					      <layout class="QVBoxLayout" name="jarModsButtonBox">
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QLabel" name="label">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Selection</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="alignment">
 | 
				
			||||||
 | 
					          <set>Qt::AlignCenter</set>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="rmJarBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>&Remove</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="moveJarUpBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Move &Up</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="moveJarDownBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Move &Down</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="LineSeparator" name="separator" native="true"/>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QLabel" name="label_2">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Install</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="alignment">
 | 
				
			||||||
 | 
					          <set>Qt::AlignCenter</set>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="addJarBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>&Add jar mod</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="addForgeBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>Install Forge</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <spacer name="verticalSpacer">
 | 
				
			||||||
 | 
					         <property name="orientation">
 | 
				
			||||||
 | 
					          <enum>Qt::Vertical</enum>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					         <property name="sizeHint" stdset="0">
 | 
				
			||||||
 | 
					          <size>
 | 
				
			||||||
 | 
					           <width>20</width>
 | 
				
			||||||
 | 
					           <height>40</height>
 | 
				
			||||||
 | 
					          </size>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </spacer>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					       <item>
 | 
				
			||||||
 | 
					        <widget class="QPushButton" name="viewJarBtn">
 | 
				
			||||||
 | 
					         <property name="text">
 | 
				
			||||||
 | 
					          <string>&View Folder</string>
 | 
				
			||||||
 | 
					         </property>
 | 
				
			||||||
 | 
					        </widget>
 | 
				
			||||||
 | 
					       </item>
 | 
				
			||||||
 | 
					      </layout>
 | 
				
			||||||
 | 
					     </item>
 | 
				
			||||||
 | 
					    </layout>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="MCModInfoFrame" name="jarMIFrame">
 | 
				
			||||||
 | 
					     <property name="sizePolicy">
 | 
				
			||||||
 | 
					      <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
 | 
				
			||||||
 | 
					       <horstretch>0</horstretch>
 | 
				
			||||||
 | 
					       <verstretch>0</verstretch>
 | 
				
			||||||
 | 
					      </sizepolicy>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					  </layout>
 | 
				
			||||||
 | 
					 </widget>
 | 
				
			||||||
 | 
					 <customwidgets>
 | 
				
			||||||
 | 
					  <customwidget>
 | 
				
			||||||
 | 
					   <class>ModListView</class>
 | 
				
			||||||
 | 
					   <extends>QTreeView</extends>
 | 
				
			||||||
 | 
					   <header>gui/widgets/ModListView.h</header>
 | 
				
			||||||
 | 
					  </customwidget>
 | 
				
			||||||
 | 
					  <customwidget>
 | 
				
			||||||
 | 
					   <class>MCModInfoFrame</class>
 | 
				
			||||||
 | 
					   <extends>QFrame</extends>
 | 
				
			||||||
 | 
					   <header>gui/widgets/MCModInfoFrame.h</header>
 | 
				
			||||||
 | 
					   <container>1</container>
 | 
				
			||||||
 | 
					  </customwidget>
 | 
				
			||||||
 | 
					  <customwidget>
 | 
				
			||||||
 | 
					   <class>LineSeparator</class>
 | 
				
			||||||
 | 
					   <extends>QWidget</extends>
 | 
				
			||||||
 | 
					   <header>gui/widgets/LineSeparator.h</header>
 | 
				
			||||||
 | 
					   <container>1</container>
 | 
				
			||||||
 | 
					  </customwidget>
 | 
				
			||||||
 | 
					 </customwidgets>
 | 
				
			||||||
 | 
					 <resources/>
 | 
				
			||||||
 | 
					 <connections/>
 | 
				
			||||||
 | 
					</ui>
 | 
				
			||||||
							
								
								
									
										33
									
								
								gui/pages/LegacyUpgradePage.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								gui/pages/LegacyUpgradePage.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
				
			|||||||
 | 
					#include "LegacyUpgradePage.h"
 | 
				
			||||||
 | 
					#include "ui_LegacyUpgradePage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString LegacyUpgradePage::displayName()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return tr("Upgrade");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QIcon LegacyUpgradePage::icon()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return QIcon::fromTheme("bug");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString LegacyUpgradePage::id()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return "upgrade";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LegacyUpgradePage::LegacyUpgradePage(LegacyInstance *inst, QWidget *parent)
 | 
				
			||||||
 | 
						: QWidget(parent), ui(new Ui::LegacyUpgradePage), m_inst(inst)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ui->setupUi(this);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LegacyUpgradePage::~LegacyUpgradePage()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						delete ui;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void LegacyUpgradePage::on_upgradeButton_clicked()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// now what?
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										46
									
								
								gui/pages/LegacyUpgradePage.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								gui/pages/LegacyUpgradePage.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
				
			|||||||
 | 
					/* Copyright 2014 MultiMC Contributors
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					 * You may obtain a copy of the License at
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					 * See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					 * limitations under the License.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include <QWidget>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <logic/OneSixInstance.h>
 | 
				
			||||||
 | 
					#include <logic/net/NetJob.h>
 | 
				
			||||||
 | 
					#include "BasePage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EnabledItemFilter;
 | 
				
			||||||
 | 
					namespace Ui
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					class LegacyUpgradePage;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class LegacyUpgradePage : public QWidget, public BasePage
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						Q_OBJECT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						explicit LegacyUpgradePage(LegacyInstance *inst, QWidget *parent = 0);
 | 
				
			||||||
 | 
						virtual ~LegacyUpgradePage();
 | 
				
			||||||
 | 
						virtual QString displayName() override;
 | 
				
			||||||
 | 
						virtual QIcon icon() override;
 | 
				
			||||||
 | 
						virtual QString id() override;
 | 
				
			||||||
 | 
					private
 | 
				
			||||||
 | 
					slots:
 | 
				
			||||||
 | 
						void on_upgradeButton_clicked();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						Ui::LegacyUpgradePage *ui;
 | 
				
			||||||
 | 
						LegacyInstance *m_inst;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										58
									
								
								gui/pages/LegacyUpgradePage.ui
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								gui/pages/LegacyUpgradePage.ui
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,58 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="UTF-8"?>
 | 
				
			||||||
 | 
					<ui version="4.0">
 | 
				
			||||||
 | 
					 <class>LegacyUpgradePage</class>
 | 
				
			||||||
 | 
					 <widget class="QWidget" name="LegacyUpgradePage">
 | 
				
			||||||
 | 
					  <property name="geometry">
 | 
				
			||||||
 | 
					   <rect>
 | 
				
			||||||
 | 
					    <x>0</x>
 | 
				
			||||||
 | 
					    <y>0</y>
 | 
				
			||||||
 | 
					    <width>546</width>
 | 
				
			||||||
 | 
					    <height>405</height>
 | 
				
			||||||
 | 
					   </rect>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <property name="windowTitle">
 | 
				
			||||||
 | 
					   <string>Upgrade</string>
 | 
				
			||||||
 | 
					  </property>
 | 
				
			||||||
 | 
					  <layout class="QVBoxLayout" name="verticalLayout_5">
 | 
				
			||||||
 | 
					   <property name="leftMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="topMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="rightMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <property name="bottomMargin">
 | 
				
			||||||
 | 
					    <number>0</number>
 | 
				
			||||||
 | 
					   </property>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QTextBrowser" name="textBrowser">
 | 
				
			||||||
 | 
					     <property name="html">
 | 
				
			||||||
 | 
					      <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
 | 
				
			||||||
 | 
					<html><head><meta name="qrichtext" content="1" /><style type="text/css">
 | 
				
			||||||
 | 
					p, li { white-space: pre-wrap; }
 | 
				
			||||||
 | 
					</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;">
 | 
				
			||||||
 | 
					<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">							</p>
 | 
				
			||||||
 | 
					<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:18pt; font-weight:600;">New format is available</span>							</p>
 | 
				
			||||||
 | 
					<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">MultiMC now supports old Minecraft versions in the new (OneSix) instance format. The old format won't be getting any new features and only the most critical bugfixes.  As a consequence, you should upgrade this instance.							</p>
 | 
				
			||||||
 | 
					<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">The upgrade will create a new instance with the same contents as the current one, in the new format. The original instance will remain untouched, in case anything goes wrong in the process.							</p>
 | 
				
			||||||
 | 
					<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Please report any issues on our <a href="https://github.com/MultiMC/MultiMC5/issues"><img src=":/icons/multimc/22x22/bug.png" /></a><a href="https://github.com/MultiMC/MultiMC5/issues"><span style=" text-decoration: underline; color:#68a0df;">github issues page</span></a>.</p></body></html></string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					     <property name="openExternalLinks">
 | 
				
			||||||
 | 
					      <bool>true</bool>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="QCommandLinkButton" name="upgradeButton">
 | 
				
			||||||
 | 
					     <property name="text">
 | 
				
			||||||
 | 
					      <string>Start the upgrade!</string>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					  </layout>
 | 
				
			||||||
 | 
					 </widget>
 | 
				
			||||||
 | 
					 <resources/>
 | 
				
			||||||
 | 
					 <connections/>
 | 
				
			||||||
 | 
					</ui>
 | 
				
			||||||
@@ -6,14 +6,14 @@
 | 
				
			|||||||
   <rect>
 | 
					   <rect>
 | 
				
			||||||
    <x>0</x>
 | 
					    <x>0</x>
 | 
				
			||||||
    <y>0</y>
 | 
					    <y>0</y>
 | 
				
			||||||
    <width>540</width>
 | 
					    <width>723</width>
 | 
				
			||||||
    <height>350</height>
 | 
					    <height>532</height>
 | 
				
			||||||
   </rect>
 | 
					   </rect>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <property name="windowTitle">
 | 
					  <property name="windowTitle">
 | 
				
			||||||
   <string>Mods</string>
 | 
					   <string>Mods</string>
 | 
				
			||||||
  </property>
 | 
					  </property>
 | 
				
			||||||
  <layout class="QHBoxLayout" name="horizontalLayout">
 | 
					  <layout class="QVBoxLayout" name="verticalLayout_3">
 | 
				
			||||||
   <property name="leftMargin">
 | 
					   <property name="leftMargin">
 | 
				
			||||||
    <number>0</number>
 | 
					    <number>0</number>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
@@ -26,6 +26,8 @@
 | 
				
			|||||||
   <property name="bottomMargin">
 | 
					   <property name="bottomMargin">
 | 
				
			||||||
    <number>0</number>
 | 
					    <number>0</number>
 | 
				
			||||||
   </property>
 | 
					   </property>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <layout class="QHBoxLayout" name="horizontalLayout">
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
      <layout class="QVBoxLayout" name="verticalLayout">
 | 
					      <layout class="QVBoxLayout" name="verticalLayout">
 | 
				
			||||||
       <item>
 | 
					       <item>
 | 
				
			||||||
@@ -44,16 +46,6 @@
 | 
				
			|||||||
         </property>
 | 
					         </property>
 | 
				
			||||||
        </widget>
 | 
					        </widget>
 | 
				
			||||||
       </item>
 | 
					       </item>
 | 
				
			||||||
     <item>
 | 
					 | 
				
			||||||
      <widget class="MCModInfoFrame" name="frame">
 | 
					 | 
				
			||||||
       <property name="sizePolicy">
 | 
					 | 
				
			||||||
        <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
 | 
					 | 
				
			||||||
         <horstretch>0</horstretch>
 | 
					 | 
				
			||||||
         <verstretch>0</verstretch>
 | 
					 | 
				
			||||||
        </sizepolicy>
 | 
					 | 
				
			||||||
       </property>
 | 
					 | 
				
			||||||
      </widget>
 | 
					 | 
				
			||||||
     </item>
 | 
					 | 
				
			||||||
      </layout>
 | 
					      </layout>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
     <item>
 | 
					     <item>
 | 
				
			||||||
@@ -95,6 +87,18 @@
 | 
				
			|||||||
      </layout>
 | 
					      </layout>
 | 
				
			||||||
     </item>
 | 
					     </item>
 | 
				
			||||||
    </layout>
 | 
					    </layout>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					   <item>
 | 
				
			||||||
 | 
					    <widget class="MCModInfoFrame" name="frame">
 | 
				
			||||||
 | 
					     <property name="sizePolicy">
 | 
				
			||||||
 | 
					      <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
 | 
				
			||||||
 | 
					       <horstretch>0</horstretch>
 | 
				
			||||||
 | 
					       <verstretch>0</verstretch>
 | 
				
			||||||
 | 
					      </sizepolicy>
 | 
				
			||||||
 | 
					     </property>
 | 
				
			||||||
 | 
					    </widget>
 | 
				
			||||||
 | 
					   </item>
 | 
				
			||||||
 | 
					  </layout>
 | 
				
			||||||
 </widget>
 | 
					 </widget>
 | 
				
			||||||
 <customwidgets>
 | 
					 <customwidgets>
 | 
				
			||||||
  <customwidget>
 | 
					  <customwidget>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,9 @@
 | 
				
			|||||||
#include "logic/MinecraftProcess.h"
 | 
					#include "logic/MinecraftProcess.h"
 | 
				
			||||||
#include "logic/LegacyUpdate.h"
 | 
					#include "logic/LegacyUpdate.h"
 | 
				
			||||||
#include "logic/icons/IconList.h"
 | 
					#include "logic/icons/IconList.h"
 | 
				
			||||||
#include <gui/dialogs/LegacyModEditDialog.h>
 | 
					#include "gui/pages/LegacyUpgradePage.h"
 | 
				
			||||||
 | 
					#include "gui/pages/ModFolderPage.h"
 | 
				
			||||||
 | 
					#include "gui/pages/LegacyJarModPage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings,
 | 
					LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings,
 | 
				
			||||||
							   QObject *parent)
 | 
												   QObject *parent)
 | 
				
			||||||
@@ -41,6 +43,22 @@ LegacyInstance::LegacyInstance(const QString &rootDir, SettingsObject *settings,
 | 
				
			|||||||
	settings->registerSetting("IntendedJarVersion", "");
 | 
						settings->registerSetting("IntendedJarVersion", "");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QList<BasePage *> LegacyInstance::getPages()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						QList<BasePage *> values;
 | 
				
			||||||
 | 
						values.append(new LegacyUpgradePage(this));
 | 
				
			||||||
 | 
						values.append(new LegacyJarModPage(this));
 | 
				
			||||||
 | 
						values.append(new ModFolderPage(loaderModList(), "mods", "centralmods", tr("Loader Mods")));
 | 
				
			||||||
 | 
						values.append(new ModFolderPage(coreModList(), "coremods", "viewfolder", tr("Core Mods")));
 | 
				
			||||||
 | 
						values.append(new ModFolderPage(texturePackList(), "texturepacks", "viewfolder", tr("Texture Packs")));
 | 
				
			||||||
 | 
						return values;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					QString LegacyInstance::dialogTitle()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return tr("Edit Instance (%1)").arg(name());
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
std::shared_ptr<Task> LegacyInstance::doUpdate()
 | 
					std::shared_ptr<Task> LegacyInstance::doUpdate()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// make sure the jar mods list is initialized by asking for it.
 | 
						// make sure the jar mods list is initialized by asking for it.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,11 +16,12 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "BaseInstance.h"
 | 
					#include "BaseInstance.h"
 | 
				
			||||||
 | 
					#include "gui/pages/BasePageProvider.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ModList;
 | 
					class ModList;
 | 
				
			||||||
class Task;
 | 
					class Task;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class LegacyInstance : public BaseInstance
 | 
					class LegacyInstance : public BaseInstance, public BasePageProvider
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Q_OBJECT
 | 
						Q_OBJECT
 | 
				
			||||||
public:
 | 
					public:
 | 
				
			||||||
@@ -34,6 +35,10 @@ public:
 | 
				
			|||||||
	//! Path to the instance's modlist file.
 | 
						//! Path to the instance's modlist file.
 | 
				
			||||||
	QString modListFile() const;
 | 
						QString modListFile() const;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						////// Edit Instance Dialog stuff //////
 | 
				
			||||||
 | 
						virtual QList<BasePage *> getPages();
 | 
				
			||||||
 | 
						virtual QString dialogTitle();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//////  Mod Lists  //////
 | 
						//////  Mod Lists  //////
 | 
				
			||||||
	std::shared_ptr<ModList> jarModList();
 | 
						std::shared_ptr<ModList> jarModList();
 | 
				
			||||||
	std::shared_ptr<ModList> coreModList();
 | 
						std::shared_ptr<ModList> coreModList();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,6 @@
 | 
				
			|||||||
#include "logic/assets/AssetsUtils.h"
 | 
					#include "logic/assets/AssetsUtils.h"
 | 
				
			||||||
#include "icons/IconList.h"
 | 
					#include "icons/IconList.h"
 | 
				
			||||||
#include "logic/MinecraftProcess.h"
 | 
					#include "logic/MinecraftProcess.h"
 | 
				
			||||||
#include "gui/dialogs/InstanceEditDialog.h"
 | 
					 | 
				
			||||||
#include "gui/pagedialog/PageDialog.h"
 | 
					#include "gui/pagedialog/PageDialog.h"
 | 
				
			||||||
#include "gui/pages/VersionPage.h"
 | 
					#include "gui/pages/VersionPage.h"
 | 
				
			||||||
#include <gui/pages/ModFolderPage.h>
 | 
					#include <gui/pages/ModFolderPage.h>
 | 
				
			||||||
@@ -59,7 +58,7 @@ QList<BasePage *> OneSixInstance::getPages()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	QList<BasePage *> values;
 | 
						QList<BasePage *> values;
 | 
				
			||||||
	values.append(new VersionPage(this));
 | 
						values.append(new VersionPage(this));
 | 
				
			||||||
	values.append(new ModFolderPage(loaderModList(), "mods", "centralmods", tr("Mods")));
 | 
						values.append(new ModFolderPage(loaderModList(), "mods", "centralmods", tr("Loader Mods")));
 | 
				
			||||||
	values.append(new ModFolderPage(coreModList(), "coremods", "viewfolder", tr("Core Mods")));
 | 
						values.append(new ModFolderPage(coreModList(), "coremods", "viewfolder", tr("Core Mods")));
 | 
				
			||||||
	values.append(new ModFolderPage(resourcePackList(), "resourcepacks", "viewfolder", tr("Resource Packs")));
 | 
						values.append(new ModFolderPage(resourcePackList(), "resourcepacks", "viewfolder", tr("Resource Packs")));
 | 
				
			||||||
	values.append(new ModFolderPage(texturePackList(), "texturepacks", "viewfolder", tr("Texture Packs")));
 | 
						values.append(new ModFolderPage(texturePackList(), "texturepacks", "viewfolder", tr("Texture Packs")));
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user