aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2013-09-22 14:03:05 +0200
committerPetr Mrázek <peterix@gmail.com>2013-09-22 14:03:05 +0200
commit1bed5e4023f503cb95a914c1e6886e045b7f34e2 (patch)
tree6c2a2eb34b93bdd24e7db1f9378b231084c0b27a
parent930b07afd4229e952d0cd47ca62cd94235499a0c (diff)
parent9d03a9c1e3b9c24a4146adedb2971591d23b037a (diff)
downloadPrismLauncher-1bed5e4023f503cb95a914c1e6886e045b7f34e2.tar.gz
PrismLauncher-1bed5e4023f503cb95a914c1e6886e045b7f34e2.tar.bz2
PrismLauncher-1bed5e4023f503cb95a914c1e6886e045b7f34e2.zip
Merge branch 'feature_onesix_forge' into develop
-rw-r--r--.clang-format24
-rw-r--r--CMakeLists.txt144
-rw-r--r--MultiMC.cpp70
-rw-r--r--MultiMC.h39
-rw-r--r--gui/IconPickerDialog.cpp4
-rw-r--r--gui/LegacyModEditDialog.cpp3
-rw-r--r--gui/OneSixModEditDialog.cpp226
-rw-r--r--gui/OneSixModEditDialog.h6
-rw-r--r--gui/OneSixModEditDialog.ui9
-rw-r--r--gui/instancedelegate.h2
-rw-r--r--gui/lwjglselectdialog.cpp6
-rw-r--r--gui/mainwindow.cpp6
-rw-r--r--gui/mainwindow.ui2
-rw-r--r--gui/newinstancedialog.cpp2
-rw-r--r--gui/settingsdialog.cpp4
-rw-r--r--logic/BaseInstance.cpp2
-rw-r--r--logic/BaseInstance.h2
-rw-r--r--logic/ForgeInstaller.cpp135
-rw-r--r--logic/ForgeInstaller.h25
-rw-r--r--logic/LegacyUpdate.cpp4
-rw-r--r--logic/ModList.h3
-rw-r--r--logic/NostalgiaInstance.h1
-rw-r--r--logic/OneSixInstance.cpp129
-rw-r--r--logic/OneSixInstance.h4
-rw-r--r--logic/OneSixLibrary.cpp98
-rw-r--r--logic/OneSixLibrary.h26
-rw-r--r--logic/OneSixRule.cpp66
-rw-r--r--logic/OneSixRule.h6
-rw-r--r--logic/OneSixUpdate.cpp85
-rw-r--r--logic/OneSixVersion.cpp261
-rw-r--r--logic/OneSixVersion.h60
-rw-r--r--logic/OpSys.cpp11
-rw-r--r--logic/OpSys.h1
-rw-r--r--logic/VersionFactory.cpp196
-rw-r--r--logic/VersionFactory.h24
-rw-r--r--logic/lists/ForgeVersionList.cpp118
-rw-r--r--logic/lists/ForgeVersionList.h52
-rw-r--r--logic/net/CacheDownload.cpp63
-rw-r--r--logic/net/HttpMetaCache.h19
-rw-r--r--logic/tasks/LoginTask.cpp2
40 files changed, 1200 insertions, 740 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 00000000..167a8fa7
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,24 @@
+UseTab: true
+IndentWidth: 4
+TabWidth: 4
+ConstructorInitializerIndentWidth: 4
+AccessModifierOffset: -4
+IndentCaseLabels: false
+IndentFunctionDeclarationAfterType: false
+NamespaceIndentation: None
+
+BreakBeforeBraces: Allman
+AllowShortIfStatementsOnASingleLine: false
+ColumnLimit: 96
+MaxEmptyLinesToKeep: 1
+
+Standard: Cpp11
+Cpp11BracedListStyle: true
+
+SpacesInParentheses: false
+SpaceInEmptyParentheses: false
+SpacesInCStyleCastParentheses: false
+SpaceAfterControlStatementKeyword: true
+
+AlignTrailingComments: true
+SpacesBeforeTrailingComments: 1
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f09e324..aa7a91f6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -147,165 +147,143 @@ ADD_DEFINITIONS(-DLIBGROUPVIEW_STATIC)
################################ FILES ################################
-######## Headers ########
-SET(MULTIMC_HEADERS
+######## Sources and headers ########
+SET(MULTIMC_SOURCES
+# Application base
MultiMC.h
+MultiMC.cpp
MultiMCVersion.h
+# GUI
gui/mainwindow.h
+gui/mainwindow.cpp
gui/settingsdialog.h
+gui/settingsdialog.cpp
gui/newinstancedialog.h
+gui/newinstancedialog.cpp
gui/logindialog.h
+gui/logindialog.cpp
gui/ProgressDialog.h
+gui/ProgressDialog.cpp
gui/aboutdialog.h
+gui/aboutdialog.cpp
gui/consolewindow.h
+gui/consolewindow.cpp
gui/instancedelegate.h
+gui/instancedelegate.cpp
gui/versionselectdialog.h
+gui/versionselectdialog.cpp
gui/lwjglselectdialog.h
+gui/lwjglselectdialog.cpp
gui/instancesettings.h
+gui/instancesettings.cpp
gui/IconPickerDialog.h
+gui/IconPickerDialog.cpp
gui/LegacyModEditDialog.h
+gui/LegacyModEditDialog.cpp
gui/OneSixModEditDialog.h
+gui/OneSixModEditDialog.cpp
gui/ModEditDialogCommon.h
+gui/ModEditDialogCommon.cpp
gui/ModListView.h
+gui/ModListView.cpp
gui/LabeledToolButton.h
+gui/LabeledToolButton.cpp
gui/EditNotesDialog.h
+gui/EditNotesDialog.cpp
# Base classes and infrastructure
logic/BaseVersion.h
logic/MinecraftVersion.h
logic/InstanceFactory.h
+logic/InstanceFactory.cpp
logic/BaseUpdate.h
+logic/BaseUpdate.cpp
logic/BaseInstance.h
+logic/BaseInstance.cpp
logic/BaseInstance_p.h
+
logic/MinecraftProcess.h
+logic/MinecraftProcess.cpp
logic/Mod.h
+logic/Mod.cpp
logic/ModList.h
+logic/ModList.cpp
# Basic instance launcher for starting from terminal
logic/InstanceLauncher.h
+logic/InstanceLauncher.cpp
# network stuffs
logic/net/Download.h
logic/net/FileDownload.h
+logic/net/FileDownload.cpp
logic/net/ByteArrayDownload.h
+logic/net/ByteArrayDownload.cpp
logic/net/CacheDownload.h
+logic/net/CacheDownload.cpp
logic/net/DownloadJob.h
+logic/net/DownloadJob.cpp
logic/net/HttpMetaCache.h
+logic/net/HttpMetaCache.cpp
# legacy instances
logic/LegacyInstance.h
+logic/LegacyInstance.cpp
logic/LegacyInstance_p.h
logic/LegacyUpdate.h
+logic/LegacyUpdate.cpp
logic/LegacyForge.h
+logic/LegacyForge.cpp
# 1.6 instances
logic/OneSixAssets.h
+logic/OneSixAssets.cpp
logic/OneSixInstance.h
+logic/OneSixInstance.cpp
logic/OneSixInstance_p.h
logic/OneSixUpdate.h
-logic/OneSixVersion.h
-logic/OneSixLibrary.h
-logic/OneSixRule.h
-logic/VersionFactory.h
-logic/OpSys.h
-
-
-# Nostalgia
-logic/NostalgiaInstance.h
-
-# Lists
-logic/lists/InstanceList.h
-logic/lists/IconList.h
-logic/lists/BaseVersionList.h
-logic/lists/MinecraftVersionList.h
-logic/lists/LwjglVersionList.h
-logic/lists/ForgeVersionList.h
-
-# misc model/view
-logic/EnabledItemFilter.h
-
-# Tasks
-logic/tasks/Task.h
-logic/tasks/LoginTask.h
-logic/tasks/ProgressProvider.h
-)
-
-
-######## Sources ########
-SET(MULTIMC_SOURCES
-MultiMC.cpp
-
-gui/mainwindow.cpp
-gui/settingsdialog.cpp
-gui/newinstancedialog.cpp
-gui/logindialog.cpp
-gui/aboutdialog.cpp
-gui/consolewindow.cpp
-gui/instancedelegate.cpp
-gui/versionselectdialog.cpp
-gui/lwjglselectdialog.cpp
-gui/instancesettings.cpp
-
-gui/ProgressDialog.cpp
-gui/IconPickerDialog.cpp
-gui/LegacyModEditDialog.cpp
-gui/OneSixModEditDialog.cpp
-gui/ModEditDialogCommon.cpp
-gui/ModListView.cpp
-gui/LabeledToolButton.cpp
-gui/EditNotesDialog.cpp
-
-# Base classes and infrastructure
-logic/InstanceFactory.cpp
-logic/BaseUpdate.cpp
-logic/BaseInstance.cpp
-logic/MinecraftProcess.cpp
-logic/Mod.cpp
-logic/ModList.cpp
-
-# Basic instance launcher for starting from terminal
-logic/InstanceLauncher.cpp
-
-# network stuffs - to be moved into a depend lib ~_~
-logic/net/FileDownload.cpp
-logic/net/ByteArrayDownload.cpp
-logic/net/CacheDownload.cpp
-logic/net/DownloadJob.cpp
-logic/net/HttpMetaCache.cpp
-
-# legacy instances
-logic/LegacyInstance.cpp
-logic/LegacyUpdate.cpp
-logic/LegacyForge.cpp
-
-# 1.6 instances
-logic/OneSixAssets.cpp
-logic/OneSixInstance.cpp
logic/OneSixUpdate.cpp
+logic/OneSixVersion.h
logic/OneSixVersion.cpp
+logic/OneSixLibrary.h
logic/OneSixLibrary.cpp
+logic/OneSixRule.h
logic/OneSixRule.cpp
-logic/VersionFactory.cpp
+logic/OpSys.h
logic/OpSys.cpp
+logic/ForgeInstaller.h
+logic/ForgeInstaller.cpp
# Nostalgia
+logic/NostalgiaInstance.h
logic/NostalgiaInstance.cpp
# Lists
+logic/lists/InstanceList.h
logic/lists/InstanceList.cpp
+logic/lists/IconList.h
logic/lists/IconList.cpp
+logic/lists/BaseVersionList.h
logic/lists/BaseVersionList.cpp
+logic/lists/MinecraftVersionList.h
logic/lists/MinecraftVersionList.cpp
+logic/lists/LwjglVersionList.h
logic/lists/LwjglVersionList.cpp
+logic/lists/ForgeVersionList.h
logic/lists/ForgeVersionList.cpp
# misc model/view
+logic/EnabledItemFilter.h
logic/EnabledItemFilter.cpp
# Tasks
+logic/tasks/ProgressProvider.h
+logic/tasks/Task.h
logic/tasks/Task.cpp
+logic/tasks/LoginTask.h
logic/tasks/LoginTask.cpp
+
)
@@ -328,7 +306,7 @@ gui/OneSixModEditDialog.ui
gui/EditNotesDialog.ui
)
-set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${MULTIMC_SOURCES} ${MULTIMC_UIS} ${MULTIMC_HEADERS})
+set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${MULTIMC_SOURCES} ${MULTIMC_UIS})
######## Windows resource files ########
@@ -362,7 +340,7 @@ QT5_ADD_RESOURCES(MULTIMC_QRC multimc.qrc)
# Add executable
ADD_EXECUTABLE(MultiMC MACOSX_BUNDLE WIN32
- ${MULTIMC_SOURCES} ${MULTIMC_HEADERS} ${MULTIMC_UI} ${MULTIMC_QRC} ${MULTIMC_RCS})
+ ${MULTIMC_SOURCES} ${MULTIMC_UI} ${MULTIMC_QRC} ${MULTIMC_RCS})
# Link
QT5_USE_MODULES(MultiMC Widgets Network Xml)
diff --git a/MultiMC.cpp b/MultiMC.cpp
index 4b5b40b2..decc22bf 100644
--- a/MultiMC.cpp
+++ b/MultiMC.cpp
@@ -123,7 +123,7 @@ MultiMC::MultiMC ( int& argc, char** argv )
initGlobalSettings();
// and instances
- m_instances = new InstanceList(m_settings->get("InstanceDir").toString(),this);
+ m_instances.reset(new InstanceList(m_settings->get("InstanceDir").toString(),this));
std::cout << "Loading Instances..." << std::endl;
m_instances->loadList();
@@ -131,7 +131,7 @@ MultiMC::MultiMC ( int& argc, char** argv )
initHttpMetaCache();
// create the global network manager
- m_qnam = new QNetworkAccessManager(this);
+ m_qnam.reset(new QNetworkAccessManager(this));
// Register meta types.
qRegisterMetaType<LoginResponse>("LoginResponse");
@@ -152,80 +152,59 @@ MultiMC::~MultiMC()
{
if(m_mmc_translator)
{
- removeTranslator(m_mmc_translator);
- delete m_mmc_translator;
- m_mmc_translator = nullptr;
+ removeTranslator(m_mmc_translator.data());
}
if(m_qt_translator)
{
- removeTranslator(m_qt_translator);
- delete m_qt_translator;
- m_qt_translator = nullptr;
+ removeTranslator(m_qt_translator.data());
}
- if(m_icons)
- {
- delete m_icons;
- m_icons = nullptr;
- }
- if(m_lwjgllist)
- {
- delete m_lwjgllist;
- m_lwjgllist = nullptr;
- }
- if(m_minecraftlist)
- {
- delete m_minecraftlist;
- m_minecraftlist = nullptr;
- }
- delete m_settings;
- delete m_metacache;
}
void MultiMC::initTranslations()
{
- m_qt_translator = new QTranslator();
+ m_qt_translator.reset(new QTranslator());
if(m_qt_translator->load("qt_" + QLocale::system().name(), QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
{
std::cout
<< "Loading Qt Language File for "
<< QLocale::system().name().toLocal8Bit().constData()
<< "...";
- if(!installTranslator(m_qt_translator))
+ if(!installTranslator(m_qt_translator.data()))
{
std::cout << " failed.";
+ m_qt_translator.reset();
}
std::cout << std::endl;
}
else
{
- delete m_qt_translator;
- m_qt_translator = nullptr;
+ m_qt_translator.reset();
}
- m_mmc_translator = new QTranslator();
+ m_mmc_translator.reset(new QTranslator());
if(m_mmc_translator->load("mmc_" + QLocale::system().name(), QDir("translations").absolutePath()))
{
std::cout
<< "Loading MMC Language File for "
<< QLocale::system().name().toLocal8Bit().constData()
<< "...";
- if(!installTranslator(m_mmc_translator))
+ if(!installTranslator(m_mmc_translator.data()))
{
std::cout << " failed.";
+ m_mmc_translator.reset();
}
std::cout << std::endl;
}
else
{
- delete m_mmc_translator;
- m_mmc_translator = nullptr;
+ m_mmc_translator.reset();
}
}
void MultiMC::initGlobalSettings()
{
- m_settings = new INISettingsObject("multimc.cfg", this);
+ m_settings.reset(new INISettingsObject("multimc.cfg", this));
// Updates
m_settings->registerSetting(new Setting("UseDevBuilds", false));
m_settings->registerSetting(new Setting("AutoUpdate", true));
@@ -278,7 +257,7 @@ void MultiMC::initGlobalSettings()
void MultiMC::initHttpMetaCache()
{
- m_metacache = new HttpMetaCache("metacache");
+ m_metacache.reset(new HttpMetaCache("metacache"));
m_metacache->addBase("assets", QDir("assets").absolutePath());
m_metacache->addBase("versions", QDir("versions").absolutePath());
m_metacache->addBase("libraries", QDir("libraries").absolutePath());
@@ -287,37 +266,38 @@ void MultiMC::initHttpMetaCache()
}
-IconList* MultiMC::icons()
+QSharedPointer<IconList> MultiMC::icons()
{
if ( !m_icons )
{
- m_icons = new IconList;
+ m_icons.reset(new IconList);
}
return m_icons;
}
-LWJGLVersionList* MultiMC::lwjgllist()
+QSharedPointer<LWJGLVersionList> MultiMC::lwjgllist()
{
if ( !m_lwjgllist )
{
- m_lwjgllist = new LWJGLVersionList();
+ m_lwjgllist.reset(new LWJGLVersionList());
}
return m_lwjgllist;
}
-ForgeVersionList* MultiMC::forgelist()
+
+QSharedPointer<ForgeVersionList> MultiMC::forgelist()
{
if ( !m_forgelist )
{
- m_forgelist = new ForgeVersionList();
+ m_forgelist.reset(new ForgeVersionList());
}
return m_forgelist;
}
-MinecraftVersionList* MultiMC::minecraftlist()
+QSharedPointer<MinecraftVersionList> MultiMC::minecraftlist()
{
if ( !m_minecraftlist )
{
- m_minecraftlist = new MinecraftVersionList();
+ m_minecraftlist.reset(new MinecraftVersionList());
}
return m_minecraftlist;
}
@@ -345,4 +325,6 @@ int main(int argc, char *argv[])
}
}
-#include "MultiMC.moc" \ No newline at end of file
+#include "MultiMC.moc"
+
+
diff --git a/MultiMC.h b/MultiMC.h
index d3e92584..1c1298e2 100644
--- a/MultiMC.h
+++ b/MultiMC.h
@@ -1,6 +1,7 @@
#pragma once
#include <QApplication>
+#include <QSharedPointer>
#include "MultiMCVersion.h"
#include "config.h"
@@ -33,17 +34,17 @@ public:
MultiMC ( int& argc, char** argv );
virtual ~MultiMC();
- SettingsObject * settings()
+ QSharedPointer<SettingsObject> settings()
{
return m_settings;
};
- InstanceList * instances()
+ QSharedPointer<InstanceList> instances()
{
return m_instances;
};
- IconList * icons();
+ QSharedPointer<IconList> icons();
Status status()
{
@@ -55,21 +56,21 @@ public:
return m_version;
}
- QNetworkAccessManager * qnam()
+ QSharedPointer<QNetworkAccessManager> qnam()
{
return m_qnam;
}
- HttpMetaCache * metacache()
+ QSharedPointer<HttpMetaCache> metacache()
{
return m_metacache;
}
- LWJGLVersionList * lwjgllist();
+ QSharedPointer<LWJGLVersionList> lwjgllist();
- ForgeVersionList * forgelist();
+ QSharedPointer<ForgeVersionList> forgelist();
- MinecraftVersionList * minecraftlist();
+ QSharedPointer<MinecraftVersionList> minecraftlist();
private:
void initGlobalSettings();
@@ -77,17 +78,17 @@ private:
void initTranslations();
private:
- QTranslator * m_qt_translator = nullptr;
- QTranslator * m_mmc_translator = nullptr;
- SettingsObject * m_settings = nullptr;
- InstanceList * m_instances = nullptr;
- IconList * m_icons = nullptr;
- QNetworkAccessManager * m_qnam = nullptr;
- HttpMetaCache * m_metacache = nullptr;
- Status m_status = MultiMC::Failed;
- LWJGLVersionList * m_lwjgllist = nullptr;
- ForgeVersionList * m_forgelist = nullptr;
- MinecraftVersionList * m_minecraftlist = nullptr;
+ QSharedPointer<QTranslator> m_qt_translator;
+ QSharedPointer<QTranslator> m_mmc_translator;
+ QSharedPointer<SettingsObject> m_settings;
+ QSharedPointer<InstanceList> m_instances;
+ QSharedPointer<IconList> m_icons;
+ QSharedPointer<QNetworkAccessManager> m_qnam;
+ QSharedPointer<HttpMetaCache> m_metacache;
+ QSharedPointer<LWJGLVersionList> m_lwjgllist;
+ QSharedPointer<ForgeVersionList> m_forgelist;
+ QSharedPointer<MinecraftVersionList> m_minecraftlist;
+ Status m_status = MultiMC::Failed;
MultiMCVersion m_version = {VERSION_MAJOR, VERSION_MINOR, VERSION_REVISION, VERSION_BUILD};
}; \ No newline at end of file
diff --git a/gui/IconPickerDialog.cpp b/gui/IconPickerDialog.cpp
index f3947d21..8f5d8256 100644
--- a/gui/IconPickerDialog.cpp
+++ b/gui/IconPickerDialog.cpp
@@ -39,7 +39,7 @@ IconPickerDialog::IconPickerDialog(QWidget *parent) :
contentsWidget->installEventFilter(this);
- contentsWidget->setModel(MMC->icons());
+ contentsWidget->setModel(MMC->icons().data());
auto buttonAdd = ui->buttonBox->addButton(tr("Add Icon"),QDialogButtonBox::ResetRole);
auto buttonRemove = ui->buttonBox->addButton(tr("Remove Icon"),QDialogButtonBox::ResetRole);
@@ -119,7 +119,7 @@ void IconPickerDialog::selectionChanged ( QItemSelection selected, QItemSelectio
int IconPickerDialog::exec ( QString selection )
{
- IconList * list = MMC->icons();
+ auto list = MMC->icons();
auto contentsWidget = ui->iconView;
selectedIconKey = selection;
diff --git a/gui/LegacyModEditDialog.cpp b/gui/LegacyModEditDialog.cpp
index ac7f7f25..20296769 100644
--- a/gui/LegacyModEditDialog.cpp
+++ b/gui/LegacyModEditDialog.cpp
@@ -199,7 +199,7 @@ void LegacyModEditDialog::on_addCoreBtn_clicked()
}
void LegacyModEditDialog::on_addForgeBtn_clicked()
{
- VersionSelectDialog vselect(MMC->forgelist(), this);
+ VersionSelectDialog vselect(MMC->forgelist().data(), this);
vselect.setFilter(1, m_inst->intendedVersionId());
if (vselect.exec() && vselect.selectedVersion())
{
@@ -230,7 +230,6 @@ void LegacyModEditDialog::on_addForgeBtn_clicked()
m_jarmods->installMod(QFileInfo(entry->getFullPath()));
m_jarmods->startWatching();
}
- //m_selectedInstance->setIntendedVersionId(->descriptor());
}
}
void LegacyModEditDialog::on_addJarBtn_clicked()
diff --git a/gui/OneSixModEditDialog.cpp b/gui/OneSixModEditDialog.cpp
index fad9d2e2..94fea933 100644
--- a/gui/OneSixModEditDialog.cpp
+++ b/gui/OneSixModEditDialog.cpp
@@ -1,9 +1,9 @@
/* 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
@@ -20,36 +20,44 @@
#include "logic/OneSixVersion.h"
#include "logic/EnabledItemFilter.h"
#include "logic/lists/ForgeVersionList.h"
+#include <logic/ForgeInstaller.h>
#include "gui/versionselectdialog.h"
+#include "ProgressDialog.h"
#include <pathutils.h>
#include <QFileDialog>
+#include <QMessageBox>
#include <QDebug>
#include <QEvent>
#include <QKeyEvent>
-OneSixModEditDialog::OneSixModEditDialog(OneSixInstance * inst, QWidget *parent):
- m_inst(inst),
- QDialog(parent),
- ui(new Ui::OneSixModEditDialog)
+OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent)
+ : m_inst(inst), QDialog(parent), ui(new Ui::OneSixModEditDialog)
{
ui->setupUi(this);
- //libraries!
+ // libraries!
+
+ m_version = m_inst->getFullVersion();
+ if (m_version)
{
- m_version = m_inst->getFullVersion();
-
- auto filter = new EnabledItemFilter(this);
- filter->setActive(true);
- filter->setSourceModel(m_version.data());
- ui->libraryTreeView->setModel(filter);
- ui->libraryTreeView->installEventFilter( this );
+ main_model = new EnabledItemFilter(this);
+ main_model->setActive(true);
+ main_model->setSourceModel(m_version.data());
+ ui->libraryTreeView->setModel(main_model);
+ ui->libraryTreeView->installEventFilter(this);
+ ui->mainClassEdit->setText(m_version->mainClass);
+ updateVersionControls();
+ }
+ else
+ {
+ disableVersionControls();
}
// Loader mods
{
ensureFolderPathExists(m_inst->loaderModsDir());
m_mods = m_inst->loaderModList();
ui->loaderModTreeView->setModel(m_mods.data());
- ui->loaderModTreeView->installEventFilter( this );
+ ui->loaderModTreeView->installEventFilter(this);
m_mods->startWatching();
}
// resource packs
@@ -57,7 +65,7 @@ OneSixModEditDialog::OneSixModEditDialog(OneSixInstance * inst, QWidget *parent)
ensureFolderPathExists(m_inst->resourcePacksDir());
m_resourcepacks = m_inst->resourcePackList();
ui->resPackTreeView->setModel(m_resourcepacks.data());
- ui->resPackTreeView->installEventFilter( this );
+ ui->resPackTreeView->installEventFilter(this);
m_resourcepacks->startWatching();
}
}
@@ -69,62 +77,164 @@ OneSixModEditDialog::~OneSixModEditDialog()
delete ui;
}
+void OneSixModEditDialog::updateVersionControls()
+{
+ bool customVersion = m_inst->versionIsCustom();
+ ui->customizeBtn->setEnabled(!customVersion);
+ ui->revertBtn->setEnabled(customVersion);
+ ui->forgeBtn->setEnabled(true);
+}
+
+void OneSixModEditDialog::disableVersionControls()
+{
+ ui->customizeBtn->setEnabled(false);
+ ui->revertBtn->setEnabled(false);
+ ui->forgeBtn->setEnabled(false);
+}
+
+void OneSixModEditDialog::on_customizeBtn_clicked()
+{
+ if (m_inst->customizeVersion())
+ {
+ m_version = m_inst->getFullVersion();
+ main_model->setSourceModel(m_version.data());
+ updateVersionControls();
+ }
+}
+
+void OneSixModEditDialog::on_revertBtn_clicked()
+{
+ auto reply = QMessageBox::question(
+ this, tr("Revert?"), tr("Do you want to revert the "
+ "version of this instance to its original configuration?"),
+ QMessageBox::Yes | QMessageBox::No);
+ if (reply == QMessageBox::Yes)
+ {
+ if (m_inst->revertCustomVersion())
+ {
+ m_version = m_inst->getFullVersion();
+ main_model->setSourceModel(m_version.data());
+ updateVersionControls();
+ }
+ }
+}
+
void OneSixModEditDialog::on_forgeBtn_clicked()
{
- VersionSelectDialog vselect(MMC->forgelist(), this);
+ VersionSelectDialog vselect(MMC->forgelist().data(), this);
vselect.setFilter(1, m_inst->currentVersionId());
if (vselect.exec() && vselect.selectedVersion())
{
- //m_selectedInstance->setIntendedVersionId(vselect.selectedVersion()->descriptor());
+ if (m_inst->versionIsCustom())
+ {
+ auto reply = QMessageBox::question(
+ this, tr("Revert?"),
+ tr("This will revert any "
+ "changes you did to the version up to this point. Is that "
+ "OK?"),
+ QMessageBox::Yes | QMessageBox::No);
+ if (reply == QMessageBox::Yes)
+ {
+ m_inst->revertCustomVersion();
+ m_inst->customizeVersion();
+ {
+ m_version = m_inst->getFullVersion();
+ main_model->setSourceModel(m_version.data());
+ updateVersionControls();
+ }
+ }
+ else
+ return;
+ }
+ else
+ {
+ m_inst->customizeVersion();
+ m_version = m_inst->getFullVersion();
+ main_model->setSourceModel(m_version.data());
+ updateVersionControls();
+ }
+ ForgeVersionPtr forgeVersion = vselect.selectedVersion().dynamicCast<ForgeVersion>();
+ if (!forgeVersion)
+ return;
+ auto entry = MMC->metacache()->resolveEntry("minecraftforge", forgeVersion->filename);
+ if (entry->stale)
+ {
+ DownloadJob *fjob = new DownloadJob("Forge download");
+ fjob->add(forgeVersion->installer_url, entry);
+ ProgressDialog dlg(this);
+ dlg.exec(fjob);
+ if (dlg.result() == QDialog::Accepted)
+ {
+ // install
+ QString forgePath = entry->getFullPath();
+ ForgeInstaller forge(forgePath, forgeVersion->universal_url);
+ if (!forge.apply(m_version))
+ {
+ // failure notice
+ }
+ }
+ else
+ {
+ // failed to download forge :/
+ }
+ }
+ else
+ {
+ // install
+ QString forgePath = entry->getFullPath();
+ ForgeInstaller forge(forgePath, forgeVersion->universal_url);
+ if (!forge.apply(m_version))
+ {
+ // failure notice
+ }
+ }
}
}
-
-bool OneSixModEditDialog::loaderListFilter ( QKeyEvent* keyEvent )
+bool OneSixModEditDialog::loaderListFilter(QKeyEvent *keyEvent)
{
- switch(keyEvent->key())
+ switch (keyEvent->key())
{
- case Qt::Key_Delete:
- on_rmModBtn_clicked();
- return true;
- case Qt::Key_Plus:
- on_addModBtn_clicked();
- return true;
- default:
- break;
+ 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 );
+ return QDialog::eventFilter(ui->loaderModTreeView, keyEvent);
}
-bool OneSixModEditDialog::resourcePackListFilter ( QKeyEvent* keyEvent )
+bool OneSixModEditDialog::resourcePackListFilter(QKeyEvent *keyEvent)
{
- switch(keyEvent->key())
+ switch (keyEvent->key())
{
- case Qt::Key_Delete:
- on_rmResPackBtn_clicked();
- return true;
- case Qt::Key_Plus:
- on_addResPackBtn_clicked();
- return true;
- default:
- break;
+ 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 );
+ return QDialog