diff --git a/launcher/modplatform/atlauncher/ATLPackManifest.cpp b/launcher/modplatform/atlauncher/ATLPackManifest.cpp index fc6b8e3f..fdd06087 100644 --- a/launcher/modplatform/atlauncher/ATLPackManifest.cpp +++ b/launcher/modplatform/atlauncher/ATLPackManifest.cpp @@ -178,6 +178,7 @@ static void loadVersionMod(ATLauncher::VersionMod & p, QJsonObject & obj) { p.depends.append(Json::requireValueString(depends)); } } + p.warning = Json::ensureString(obj, QString("warning"), ""); p.client = Json::ensureBoolean(obj, QString("client"), false); @@ -251,6 +252,14 @@ void ATLauncher::loadVersion(PackVersion & v, QJsonObject & obj) loadVersionConfigs(v.configs, configsObj); } + if(obj.contains("warnings")) { + auto warningsObj = Json::requireObject(obj, "warnings"); + + for (const auto &key : warningsObj.keys()) { + v.warnings[key] = Json::requireValueString(warningsObj.value(key), "warning"); + } + } + if(obj.contains("messages")) { auto messages = Json::requireObject(obj, "messages"); loadVersionMessages(v.messages, messages); diff --git a/launcher/modplatform/atlauncher/ATLPackManifest.h b/launcher/modplatform/atlauncher/ATLPackManifest.h index 9f109a54..3a5d4240 100644 --- a/launcher/modplatform/atlauncher/ATLPackManifest.h +++ b/launcher/modplatform/atlauncher/ATLPackManifest.h @@ -109,6 +109,7 @@ struct VersionMod bool library; QString group; QVector depends; + QString warning; bool client; @@ -153,6 +154,7 @@ struct PackVersion QVector mods; VersionConfigs configs; + QMap warnings; VersionMessages messages; }; diff --git a/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp b/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp index b7cd0938..153097eb 100644 --- a/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp +++ b/launcher/ui/pages/modplatform/atlauncher/AtlOptionalModDialog.cpp @@ -17,6 +17,8 @@ #include "AtlOptionalModDialog.h" #include "ui_AtlOptionalModDialog.h" +#include + AtlOptionalModListModel::AtlOptionalModListModel(QWidget *parent, ATLauncher::PackVersion version, QVector mods) : QAbstractListModel(parent), m_version(version), m_mods(mods) { @@ -134,7 +136,21 @@ void AtlOptionalModListModel::clearAll() { } void AtlOptionalModListModel::toggleMod(ATLauncher::VersionMod mod, int index) { - setMod(mod, index, !m_selection[mod.name]); + auto enable = !m_selection[mod.name]; + + // If there is a warning for the mod, display that first (if we would be enabling the mod) + if (enable && !mod.warning.isEmpty() && m_version.warnings.contains(mod.warning)) { + auto message = QString("%1

%2") + .arg(m_version.warnings[mod.warning], tr("Are you sure that you want to enable this mod?")); + + // fixme: avoid casting here + auto result = QMessageBox::warning((QWidget*) this->parent(), tr("Warning"), message, QMessageBox::Yes | QMessageBox::No); + if (result != QMessageBox::Yes) { + return; + } + } + + setMod(mod, index, enable); } void AtlOptionalModListModel::setMod(ATLauncher::VersionMod mod, int index, bool enable, bool shouldEmit) {