diff options
| author | Silarn <jrim@rimpo.org> | 2018-04-27 01:57:59 -0500 |
|---|---|---|
| committer | Silarn <jrim@rimpo.org> | 2018-04-27 01:57:59 -0500 |
| commit | e02614ee1455f0ae9fb9ec9df3b928381ae98079 (patch) | |
| tree | 8c07023d52b834872af32a8d81244a45f9d079fe | |
| parent | cfbe399bbaa6c244359682b71a949bf6cf4d3b4e (diff) | |
Add alternative game flag and check
| -rw-r--r-- | src/modflagicondelegate.cpp | 1 | ||||
| -rw-r--r-- | src/modinfo.cpp | 8 | ||||
| -rw-r--r-- | src/modinfo.h | 5 | ||||
| -rw-r--r-- | src/modinfobackup.cpp | 4 | ||||
| -rw-r--r-- | src/modinfobackup.h | 2 | ||||
| -rw-r--r-- | src/modinforegular.cpp | 13 | ||||
| -rw-r--r-- | src/modinforegular.h | 6 | ||||
| -rw-r--r-- | src/modlist.cpp | 7 | ||||
| -rw-r--r-- | src/organizercore.cpp | 2 |
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();
}
|
