summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2018-04-27 01:57:59 -0500
committerSilarn <jrim@rimpo.org>2018-04-27 01:57:59 -0500
commite02614ee1455f0ae9fb9ec9df3b928381ae98079 (patch)
tree8c07023d52b834872af32a8d81244a45f9d079fe
parentcfbe399bbaa6c244359682b71a949bf6cf4d3b4e (diff)
Add alternative game flag and check
-rw-r--r--src/modflagicondelegate.cpp1
-rw-r--r--src/modinfo.cpp8
-rw-r--r--src/modinfo.h5
-rw-r--r--src/modinfobackup.cpp4
-rw-r--r--src/modinfobackup.h2
-rw-r--r--src/modinforegular.cpp13
-rw-r--r--src/modinforegular.h6
-rw-r--r--src/modlist.cpp7
-rw-r--r--src/organizercore.cpp2
9 files changed, 32 insertions, 16 deletions
diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp
index 61df0a0d..8b54ab00 100644
--- a/src/modflagicondelegate.cpp
+++ b/src/modflagicondelegate.cpp
@@ -48,6 +48,7 @@ QString ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag) const
case ModInfo::FLAG_CONFLICT_OVERWRITTEN: return ":/MO/gui/emblem_conflict_overwritten";
case ModInfo::FLAG_CONFLICT_MIXED: return ":/MO/gui/emblem_conflict_mixed";
case ModInfo::FLAG_CONFLICT_REDUNDANT: return ":MO/gui/emblem_conflict_redundant";
+ case ModInfo::FLAG_ALTERNATE_GAME: return ":MO/gui/problem";
default: return QString();
}
}
diff --git a/src/modinfo.cpp b/src/modinfo.cpp
index 2cd3aec7..d916d982 100644
--- a/src/modinfo.cpp
+++ b/src/modinfo.cpp
@@ -61,16 +61,16 @@ bool ModInfo::ByName(const ModInfo::Ptr &LHS, const ModInfo::Ptr &RHS)
}
-ModInfo::Ptr ModInfo::createFrom(PluginContainer *pluginContainer, QString gameName, const QDir &dir, DirectoryEntry **directoryStructure)
+ModInfo::Ptr ModInfo::createFrom(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &dir, DirectoryEntry **directoryStructure)
{
QMutexLocker locker(&s_Mutex);
// int id = s_NextID++;
static QRegExp backupExp(".*backup[0-9]*");
ModInfo::Ptr result;
if (backupExp.exactMatch(dir.dirName())) {
- result = ModInfo::Ptr(new ModInfoBackup(pluginContainer, gameName, dir, directoryStructure));
+ result = ModInfo::Ptr(new ModInfoBackup(pluginContainer, game, dir, directoryStructure));
} else {
- result = ModInfo::Ptr(new ModInfoRegular(pluginContainer, gameName, dir, directoryStructure));
+ result = ModInfo::Ptr(new ModInfoRegular(pluginContainer, game, dir, directoryStructure));
}
s_Collection.push_back(result);
return result;
@@ -221,7 +221,7 @@ void ModInfo::updateFromDisc(const QString &modDirectory,
mods.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
QDirIterator modIter(mods);
while (modIter.hasNext()) {
- createFrom(pluginContainer, game->gameShortName(), QDir(modIter.next()), directoryStructure);
+ createFrom(pluginContainer, game, QDir(modIter.next()), directoryStructure);
}
}
diff --git a/src/modinfo.h b/src/modinfo.h
index 9e9f8971..19be2ca2 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -70,7 +70,8 @@ public:
FLAG_CONFLICT_OVERWRITTEN,
FLAG_CONFLICT_MIXED,
FLAG_CONFLICT_REDUNDANT,
- FLAG_PLUGIN_SELECTED
+ FLAG_PLUGIN_SELECTED,
+ FLAG_ALTERNATE_GAME
};
enum EContent {
@@ -191,7 +192,7 @@ public:
* @param dir directory to create from
* @return pointer to the info-structure of the newly created/added mod
*/
- static ModInfo::Ptr createFrom(PluginContainer *pluginContainer, QString gameName, const QDir &dir, MOShared::DirectoryEntry **directoryStructure);
+ static ModInfo::Ptr createFrom(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &dir, MOShared::DirectoryEntry **directoryStructure);
/**
* @brief create a new "foreign-managed" mod from a tuple of plugin and archives
diff --git a/src/modinfobackup.cpp b/src/modinfobackup.cpp
index b779dca1..6e307103 100644
--- a/src/modinfobackup.cpp
+++ b/src/modinfobackup.cpp
@@ -14,7 +14,7 @@ QString ModInfoBackup::getDescription() const
}
-ModInfoBackup::ModInfoBackup(PluginContainer *pluginContainer, QString gameName, const QDir &path, MOShared::DirectoryEntry **directoryStructure)
- : ModInfoRegular(pluginContainer, gameName, path, directoryStructure)
+ModInfoBackup::ModInfoBackup(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure)
+ : ModInfoRegular(pluginContainer, game, path, directoryStructure)
{
}
diff --git a/src/modinfobackup.h b/src/modinfobackup.h
index 0a59691b..da1fcd4a 100644
--- a/src/modinfobackup.h
+++ b/src/modinfobackup.h
@@ -33,7 +33,7 @@ public:
private:
- ModInfoBackup(PluginContainer *pluginContainer, QString gameName, const QDir &path, MOShared::DirectoryEntry **directoryStructure);
+ ModInfoBackup(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure);
};
diff --git a/src/modinforegular.cpp b/src/modinforegular.cpp
index 045366ba..49fc3aa2 100644
--- a/src/modinforegular.cpp
+++ b/src/modinforegular.cpp
@@ -1,7 +1,6 @@
#include "modinforegular.h"
#include "categories.h"
-#include "iplugingame.h"
#include "messagedialog.h"
#include "report.h"
#include "scriptextender.h"
@@ -24,12 +23,13 @@ namespace {
}
}
-ModInfoRegular::ModInfoRegular(PluginContainer *pluginContainer, QString gameName, const QDir &path, DirectoryEntry **directoryStructure)
+ModInfoRegular::ModInfoRegular(PluginContainer *pluginContainer, const IPluginGame *game, const QDir &path, DirectoryEntry **directoryStructure)
: ModInfoWithConflictInfo(pluginContainer, directoryStructure)
- , m_GameName(gameName)
, m_Name(path.dirName())
, m_Path(path.absolutePath())
, m_Repository()
+ , m_GameName(game->gameShortName())
+ , m_IsAlternate(false)
, m_MetaInfoChanged(false)
, m_EndorsedState(ENDORSED_UNKNOWN)
, m_NexusBridge(pluginContainer)
@@ -38,6 +38,8 @@ ModInfoRegular::ModInfoRegular(PluginContainer *pluginContainer, QString gameNam
m_CreationTime = QFileInfo(path.absolutePath()).created();
// read out the meta-file for information
readMeta();
+ if (m_GameName.compare(game->gameShortName(), Qt::CaseInsensitive) != 0)
+ m_IsAlternate = true;
connect(&m_NexusBridge, SIGNAL(descriptionAvailable(QString,int,QVariant,QVariant))
, this, SLOT(nxmDescriptionAvailable(QString,int,QVariant,QVariant)));
@@ -73,7 +75,7 @@ void ModInfoRegular::readMeta()
QSettings metaFile(m_Path + "/meta.ini", QSettings::IniFormat);
m_Notes = metaFile.value("notes", "").toString();
QString tempGameName = metaFile.value("gameName", m_GameName).toString();
- if (tempGameName != "") m_GameName = tempGameName;
+ if (tempGameName.size()) m_GameName = tempGameName;
m_NexusID = metaFile.value("modid", -1).toInt();
m_Version.parse(metaFile.value("version", "").toString());
m_NewestVersion = metaFile.value("newestVersion", "").toString();
@@ -433,6 +435,9 @@ std::vector<ModInfo::EFlag> ModInfoRegular::getFlags() const
if (m_PluginSelected) {
result.push_back(ModInfo::FLAG_PLUGIN_SELECTED);
}
+ if (m_IsAlternate) {
+ result.push_back(ModInfo::FLAG_ALTERNATE_GAME);
+ }
return result;
}
diff --git a/src/modinforegular.h b/src/modinforegular.h
index cf13872c..c47f10c8 100644
--- a/src/modinforegular.h
+++ b/src/modinforegular.h
@@ -2,7 +2,6 @@
#define MODINFOREGULAR_H
#include "modinfowithconflictinfo.h"
-
#include "nexusinterface.h"
/**
@@ -27,6 +26,8 @@ public:
virtual bool isEmpty() const;
+ bool isAlternate() { return m_IsAlternate; }
+
/**
* @brief test if there is a newer version of the mod
*
@@ -329,7 +330,7 @@ private slots:
protected:
- ModInfoRegular(PluginContainer *pluginContainer, QString gameName, const QDir &path, MOShared::DirectoryEntry **directoryStructure);
+ ModInfoRegular(PluginContainer *pluginContainer, const MOBase::IPluginGame *game, const QDir &path, MOShared::DirectoryEntry **directoryStructure);
private:
@@ -349,6 +350,7 @@ private:
std::set<std::pair<int, int>> m_InstalledFileIDs;
bool m_MetaInfoChanged;
+ bool m_IsAlternate;
MOBase::VersionInfo m_NewestVersion;
MOBase::VersionInfo m_IgnoredVersion;
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 8c906822..aad88d1f 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -25,6 +25,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "viewmarkingscrollbar.h"
#include "modlistsortproxy.h"
#include "settings.h"
+#include "modinforegular.h"
#include <appconfig.h>
#include <utility.h>
#include <report.h>
@@ -149,6 +150,7 @@ QString ModList::getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const
case ModInfo::FLAG_CONFLICT_OVERWRITTEN: return tr("Overwritten files");
case ModInfo::FLAG_CONFLICT_MIXED: return tr("Overwrites & Overwritten");
case ModInfo::FLAG_CONFLICT_REDUNDANT: return tr("Redundant");
+ case ModInfo::FLAG_ALTERNATE_GAME: return tr("Alternate game source");
default: return "";
}
}
@@ -759,6 +761,11 @@ IModList::ModStates ModList::state(unsigned int modIndex) const
if (modInfo->isValid()) {
result |= IModList::STATE_VALID;
}
+ if (modInfo->isRegular()) {
+ QSharedPointer<ModInfoRegular> modInfoRegular = modInfo.staticCast<ModInfoRegular>();
+ if (modInfoRegular->isAlternate())
+ result |= IModList::STATE_ALTERNATE;
+ }
if (modInfo->canBeEnabled()) {
if (m_Profile->modEnabled(modIndex)) {
result |= IModList::STATE_ACTIVE;
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index 15596f75..69c28c5c 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -819,7 +819,7 @@ MOBase::IModInterface *OrganizerCore::createMod(GuessedValue<QString> &name)
settingsFile.endArray();
}
- return ModInfo::createFrom(m_PluginContainer, m_GamePlugin->gameShortName(), QDir(targetDirectory), &m_DirectoryStructure)
+ return ModInfo::createFrom(m_PluginContainer, m_GamePlugin, QDir(targetDirectory), &m_DirectoryStructure)
.data();
}