Version revert logic improvements, colorful icons for mod lists and resource pack list.
Icons are from Oxygen.
@ -56,7 +56,7 @@ QString LegacyJarModPage::displayName()
|
|||||||
|
|
||||||
QIcon LegacyJarModPage::icon()
|
QIcon LegacyJarModPage::icon()
|
||||||
{
|
{
|
||||||
return QIcon::fromTheme("settings");
|
return QIcon::fromTheme("plugin-red");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LegacyJarModPage::id()
|
QString LegacyJarModPage::id()
|
||||||
|
@ -8,7 +8,7 @@ QString LegacyUpgradePage::displayName()
|
|||||||
|
|
||||||
QIcon LegacyUpgradePage::icon()
|
QIcon LegacyUpgradePage::icon()
|
||||||
{
|
{
|
||||||
return QIcon::fromTheme("bug");
|
return QIcon::fromTheme("checkupdate");
|
||||||
}
|
}
|
||||||
|
|
||||||
QString LegacyUpgradePage::id()
|
QString LegacyUpgradePage::id()
|
||||||
|
23
gui/pages/ResourcePackPage.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "ModFolderPage.h"
|
||||||
|
|
||||||
|
class ResourcePackPage : public ModFolderPage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit ResourcePackPage(BaseInstance *instance, QWidget *parent = 0)
|
||||||
|
: ModFolderPage(instance->texturePackList(), "resourcepacks", "resourcepacks",
|
||||||
|
tr("Resource packs"), parent)
|
||||||
|
{
|
||||||
|
m_inst = instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~ResourcePackPage() {};
|
||||||
|
virtual bool shouldDisplay() override
|
||||||
|
{
|
||||||
|
return !m_inst->traits().contains("no-texturepacks") &&
|
||||||
|
!m_inst->traits().contains("texturepacks");
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
BaseInstance *m_inst;
|
||||||
|
};
|
20
gui/pages/TexturePackPage.h
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "ModFolderPage.h"
|
||||||
|
|
||||||
|
class TexturePackPage : public ModFolderPage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit TexturePackPage(BaseInstance *instance, QWidget *parent = 0)
|
||||||
|
: ModFolderPage(instance->texturePackList(), "texturepacks", "resourcepacks",
|
||||||
|
tr("Texture packs"), parent)
|
||||||
|
{
|
||||||
|
m_inst = instance;
|
||||||
|
}
|
||||||
|
virtual ~TexturePackPage() {};
|
||||||
|
virtual bool shouldDisplay() override
|
||||||
|
{
|
||||||
|
return m_inst->traits().contains("texturepacks");
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
BaseInstance *m_inst;
|
||||||
|
};
|
@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
#include <QAbstractItemModel>
|
#include <QAbstractItemModel>
|
||||||
#include <logic/Mod.h>
|
#include <logic/Mod.h>
|
||||||
|
#include <logic/icons/IconList.h>
|
||||||
|
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
@ -57,7 +58,7 @@ QString VersionPage::displayName()
|
|||||||
|
|
||||||
QIcon VersionPage::icon()
|
QIcon VersionPage::icon()
|
||||||
{
|
{
|
||||||
return QIcon::fromTheme("settings");
|
return MMC->icons()->getIcon(m_inst->iconKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
QString VersionPage::id()
|
QString VersionPage::id()
|
||||||
@ -157,7 +158,7 @@ void VersionPage::on_jarmodBtn_clicked()
|
|||||||
auto f = [&](QStandardPaths::StandardLocation l)
|
auto f = [&](QStandardPaths::StandardLocation l)
|
||||||
{
|
{
|
||||||
QString location = QStandardPaths::writableLocation(l);
|
QString location = QStandardPaths::writableLocation(l);
|
||||||
if(!QFileInfo::exists(location))
|
if (!QFileInfo::exists(location))
|
||||||
return;
|
return;
|
||||||
locations.insert(location);
|
locations.insert(location);
|
||||||
};
|
};
|
||||||
@ -166,7 +167,7 @@ void VersionPage::on_jarmodBtn_clicked()
|
|||||||
f(QStandardPaths::DownloadLocation);
|
f(QStandardPaths::DownloadLocation);
|
||||||
f(QStandardPaths::HomeLocation);
|
f(QStandardPaths::HomeLocation);
|
||||||
QList<QUrl> urls;
|
QList<QUrl> urls;
|
||||||
for(auto location: locations)
|
for (auto location : locations)
|
||||||
{
|
{
|
||||||
urls.append(QUrl::fromLocalFile(location));
|
urls.append(QUrl::fromLocalFile(location));
|
||||||
}
|
}
|
||||||
@ -178,8 +179,9 @@ void VersionPage::on_jarmodBtn_clicked()
|
|||||||
w.setDirectory(modsFolder);
|
w.setDirectory(modsFolder);
|
||||||
w.setSidebarUrls(urls);
|
w.setSidebarUrls(urls);
|
||||||
|
|
||||||
if(w.exec());
|
if (w.exec())
|
||||||
m_version->installJarMods(w.selectedFiles());
|
;
|
||||||
|
m_version->installJarMods(w.selectedFiles());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VersionPage::on_resetLibraryOrderBtn_clicked()
|
void VersionPage::on_resetLibraryOrderBtn_clicked()
|
||||||
@ -292,15 +294,16 @@ void VersionPage::on_forgeBtn_clicked()
|
|||||||
m_version->removeFtbPack();
|
m_version->removeFtbPack();
|
||||||
reloadInstanceVersion();
|
reloadInstanceVersion();
|
||||||
}
|
}
|
||||||
if (m_version->usesLegacyCustomJson())
|
if (m_version->hasDeprecatedVersionFiles())
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(this, tr("Revert?"),
|
if (QMessageBox::question(this, tr("Revert?"),
|
||||||
tr("This action will remove your custom.json. Continue?")) !=
|
tr("This action will remove deprecated version files "
|
||||||
|
"(custom.json and version.json). Continue?")) !=
|
||||||
QMessageBox::Yes)
|
QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_version->revertToVanilla();
|
m_version->removeDeprecatedVersionFiles();
|
||||||
reloadInstanceVersion();
|
reloadInstanceVersion();
|
||||||
}
|
}
|
||||||
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
VersionSelectDialog vselect(MMC->forgelist().get(), tr("Select Forge version"), this);
|
||||||
@ -329,15 +332,16 @@ void VersionPage::on_liteloaderBtn_clicked()
|
|||||||
m_version->removeFtbPack();
|
m_version->removeFtbPack();
|
||||||
reloadInstanceVersion();
|
reloadInstanceVersion();
|
||||||
}
|
}
|
||||||
if (m_version->usesLegacyCustomJson())
|
if (m_version->hasDeprecatedVersionFiles())
|
||||||
{
|
{
|
||||||
if (QMessageBox::question(this, tr("Revert?"),
|
if (QMessageBox::question(this, tr("Revert?"),
|
||||||
tr("This action will remove your custom.json. Continue?")) !=
|
tr("This action will remove deprecated version files "
|
||||||
|
"(custom.json and version.json). Continue?")) !=
|
||||||
QMessageBox::Yes)
|
QMessageBox::Yes)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_version->revertToVanilla();
|
m_version->removeDeprecatedVersionFiles();
|
||||||
reloadInstanceVersion();
|
reloadInstanceVersion();
|
||||||
}
|
}
|
||||||
VersionSelectDialog vselect(MMC->liteloaderlist().get(), tr("Select LiteLoader version"),
|
VersionSelectDialog vselect(MMC->liteloaderlist().get(), tr("Select LiteLoader version"),
|
||||||
@ -369,7 +373,7 @@ void VersionPage::versionCurrent(const QModelIndex ¤t, const QModelIndex &
|
|||||||
ui->moveLibraryUpBtn->setEnabled(enabled);
|
ui->moveLibraryUpBtn->setEnabled(enabled);
|
||||||
}
|
}
|
||||||
QString selectedId = m_version->versionFileId(current.row());
|
QString selectedId = m_version->versionFileId(current.row());
|
||||||
if(selectedId == "net.minecraft" || selectedId == "org.multimc.custom.json")
|
if (selectedId == "net.minecraft" || selectedId == "org.multimc.custom.json")
|
||||||
{
|
{
|
||||||
ui->changeMCVersionBtn->setEnabled(true);
|
ui->changeMCVersionBtn->setEnabled(true);
|
||||||
}
|
}
|
||||||
|
@ -49,8 +49,8 @@ QList<BasePage *> LegacyInstance::getPages()
|
|||||||
QList<BasePage *> values;
|
QList<BasePage *> values;
|
||||||
values.append(new LegacyUpgradePage(this));
|
values.append(new LegacyUpgradePage(this));
|
||||||
values.append(new LegacyJarModPage(this));
|
values.append(new LegacyJarModPage(this));
|
||||||
values.append(new ModFolderPage(loaderModList(), "mods", "centralmods", tr("Loader Mods")));
|
values.append(new ModFolderPage(loaderModList(), "mods", "plugin-blue", tr("Loader Mods")));
|
||||||
values.append(new ModFolderPage(coreModList(), "coremods", "viewfolder", tr("Core Mods")));
|
values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods")));
|
||||||
values.append(new TexturePackPage(this));
|
values.append(new TexturePackPage(this));
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,8 @@ 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("Loader Mods")));
|
values.append(new ModFolderPage(loaderModList(), "mods", "plugin-blue", tr("Loader Mods")));
|
||||||
values.append(new ModFolderPage(coreModList(), "coremods", "viewfolder", tr("Core Mods")));
|
values.append(new ModFolderPage(coreModList(), "coremods", "plugin-green", tr("Core Mods")));
|
||||||
values.append(new ResourcePackPage(this));
|
values.append(new ResourcePackPage(this));
|
||||||
values.append(new TexturePackPage(this));
|
values.append(new TexturePackPage(this));
|
||||||
return values;
|
return values;
|
||||||
|
@ -161,12 +161,35 @@ bool InstanceVersion::isVanilla()
|
|||||||
return false;
|
return false;
|
||||||
if(QFile::exists(PathCombine(m_instance->instanceRoot(), "custom.json")))
|
if(QFile::exists(PathCombine(m_instance->instanceRoot(), "custom.json")))
|
||||||
return false;
|
return false;
|
||||||
|
if(QFile::exists(PathCombine(m_instance->instanceRoot(), "version.json")))
|
||||||
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InstanceVersion::revertToVanilla()
|
bool InstanceVersion::revertToVanilla()
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
// remove custom.json, if present
|
||||||
|
QString customPath = PathCombine(m_instance->instanceRoot(), "custom.json");
|
||||||
|
if(QFile::exists(customPath))
|
||||||
|
{
|
||||||
|
if(!QFile::remove(customPath))
|
||||||
|
{
|
||||||
|
endResetModel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// remove version.json, if present
|
||||||
|
QString versionPath = PathCombine(m_instance->instanceRoot(), "version.json");
|
||||||
|
if(QFile::exists(versionPath))
|
||||||
|
{
|
||||||
|
if(!QFile::remove(versionPath))
|
||||||
|
{
|
||||||
|
endResetModel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// remove patches, if present
|
||||||
auto it = VersionPatches.begin();
|
auto it = VersionPatches.begin();
|
||||||
while (it != VersionPatches.end())
|
while (it != VersionPatches.end())
|
||||||
{
|
{
|
||||||
@ -195,9 +218,40 @@ bool InstanceVersion::revertToVanilla()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InstanceVersion::usesLegacyCustomJson()
|
bool InstanceVersion::hasDeprecatedVersionFiles()
|
||||||
{
|
{
|
||||||
return QFile::exists(PathCombine(m_instance->instanceRoot(), "custom.json"));
|
if(QFile::exists(PathCombine(m_instance->instanceRoot(), "custom.json")))
|
||||||
|
return true;
|
||||||
|
if(QFile::exists(PathCombine(m_instance->instanceRoot(), "version.json")))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool InstanceVersion::removeDeprecatedVersionFiles()
|
||||||
|
{
|
||||||
|
beginResetModel();
|
||||||
|
// remove custom.json, if present
|
||||||
|
QString customPath = PathCombine(m_instance->instanceRoot(), "custom.json");
|
||||||
|
if(QFile::exists(customPath))
|
||||||
|
{
|
||||||
|
if(!QFile::remove(customPath))
|
||||||
|
{
|
||||||
|
endResetModel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// remove version.json, if present
|
||||||
|
QString versionPath = PathCombine(m_instance->instanceRoot(), "version.json");
|
||||||
|
if(QFile::exists(versionPath))
|
||||||
|
{
|
||||||
|
if(!QFile::remove(versionPath))
|
||||||
|
{
|
||||||
|
endResetModel();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endResetModel();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<std::shared_ptr<OneSixLibrary> > InstanceVersion::getActiveNormalLibs()
|
QList<std::shared_ptr<OneSixLibrary> > InstanceVersion::getActiveNormalLibs()
|
||||||
|
@ -51,6 +51,11 @@ public:
|
|||||||
// remove any customizations on top of vanilla
|
// remove any customizations on top of vanilla
|
||||||
bool revertToVanilla();
|
bool revertToVanilla();
|
||||||
|
|
||||||
|
// does this version consist of obsolete files?
|
||||||
|
bool hasDeprecatedVersionFiles();
|
||||||
|
// remove obsolete files
|
||||||
|
bool removeDeprecatedVersionFiles();
|
||||||
|
|
||||||
// does this version have an FTB pack patch file?
|
// does this version have an FTB pack patch file?
|
||||||
bool hasFtbPack();
|
bool hasFtbPack();
|
||||||
// remove FTB pack
|
// remove FTB pack
|
||||||
@ -61,9 +66,6 @@ public:
|
|||||||
void installJarMods(QStringList selectedFiles);
|
void installJarMods(QStringList selectedFiles);
|
||||||
void installJarModByFilename(QString filepath);
|
void installJarModByFilename(QString filepath);
|
||||||
|
|
||||||
// does this version still use a legacy custom.json file?
|
|
||||||
bool usesLegacyCustomJson();
|
|
||||||
|
|
||||||
enum MoveDirection { MoveUp, MoveDown };
|
enum MoveDirection { MoveUp, MoveDown };
|
||||||
void move(const int index, const MoveDirection direction);
|
void move(const int index, const MoveDirection direction);
|
||||||
void resetOrder();
|
void resetOrder();
|
||||||
|
BIN
resources/multimc/16x16/plugin-blue.png
Normal file
After Width: | Height: | Size: 731 B |
BIN
resources/multimc/16x16/plugin-green.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
resources/multimc/16x16/plugin-red.png
Normal file
After Width: | Height: | Size: 693 B |
BIN
resources/multimc/16x16/resourcepacks.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
resources/multimc/24x24/plugin-blue.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
resources/multimc/24x24/plugin-green.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
resources/multimc/24x24/plugin-red.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
resources/multimc/24x24/resourcepacks.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
resources/multimc/32x32/plugin-blue.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
resources/multimc/32x32/plugin-green.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
resources/multimc/32x32/plugin-red.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
resources/multimc/32x32/resourcepacks.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
resources/multimc/64x64/plugin-blue.png
Normal file
After Width: | Height: | Size: 4.3 KiB |
BIN
resources/multimc/64x64/plugin-green.png
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
resources/multimc/64x64/plugin-red.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
resources/multimc/64x64/resourcepacks.png
Normal file
After Width: | Height: | Size: 6.6 KiB |
@ -102,6 +102,30 @@
|
|||||||
<file>32x32/status-good.png</file>
|
<file>32x32/status-good.png</file>
|
||||||
<file>48x48/status-good.png</file>
|
<file>48x48/status-good.png</file>
|
||||||
<file>64x64/status-good.png</file>
|
<file>64x64/status-good.png</file>
|
||||||
|
|
||||||
|
<!-- Plugin (blue recolor), CC-BY-SA 3.0, Oxygen icons. -->
|
||||||
|
<file>16x16/plugin-blue.png</file>
|
||||||
|
<file>24x24/plugin-blue.png</file>
|
||||||
|
<file>32x32/plugin-blue.png</file>
|
||||||
|
<file>64x64/plugin-blue.png</file>
|
||||||
|
|
||||||
|
<!-- Plugin (red recolor), CC-BY-SA 3.0, Oxygen icons. -->
|
||||||
|
<file>16x16/plugin-red.png</file>
|
||||||
|
<file>24x24/plugin-red.png</file>
|
||||||
|
<file>32x32/plugin-red.png</file>
|
||||||
|
<file>64x64/plugin-red.png</file>
|
||||||
|
|
||||||
|
<!-- Plugin (green original), CC-BY-SA 3.0, Oxygen icons. -->
|
||||||
|
<file>16x16/plugin-green.png</file>
|
||||||
|
<file>24x24/plugin-green.png</file>
|
||||||
|
<file>32x32/plugin-green.png</file>
|
||||||
|
<file>64x64/plugin-green.png</file>
|
||||||
|
|
||||||
|
<!-- Resource packs, CC-BY-SA 3.0, Oxygen icons. -->
|
||||||
|
<file>16x16/resourcepacks.png</file>
|
||||||
|
<file>24x24/resourcepacks.png</file>
|
||||||
|
<file>32x32/resourcepacks.png</file>
|
||||||
|
<file>64x64/resourcepacks.png</file>
|
||||||
|
|
||||||
<!-- Refresh, CC-BY-SA 3.0, Oxygen icons. -->
|
<!-- Refresh, CC-BY-SA 3.0, Oxygen icons. -->
|
||||||
<file>16x16/refresh.png</file>
|
<file>16x16/refresh.png</file>
|
||||||
|