summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSilarn <jrim@rimpo.org>2018-08-02 11:54:48 -0500
committerLostDragonist <lost.dragonist@gmail.com>2018-12-12 20:16:07 -0600
commitf9f70b224e25c2d5bff017fd08d32521d39d5b08 (patch)
treeb49cd0f84795ffd4b061948a4dab8c1953b29088 /src
parent01e1232cf85f09efde780537bbbca40fd6f0c097 (diff)
Add loose file/archive conflict icons
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp9
-rw-r--r--src/modflagicondelegate.cpp6
-rw-r--r--src/modinfo.h14
-rw-r--r--src/modinfowithconflictinfo.cpp86
-rw-r--r--src/modinfowithconflictinfo.h16
-rw-r--r--src/modlist.cpp42
-rw-r--r--src/modlist.h3
-rw-r--r--src/modlistsortproxy.cpp16
-rw-r--r--src/resources.qrc10
-rw-r--r--src/resources/conflict-mixed-blue.pngbin0 -> 692 bytes
-rw-r--r--src/resources/conflict-overwritten-blue.pngbin0 -> 577 bytes
11 files changed, 151 insertions, 51 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 832f42d0..d7ae18fb 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2202,10 +2202,17 @@ void MainWindow::modorder_changed()
for (int i : modInfo->getModArchiveOverwritten()) {
ModInfo::getByIndex(i)->clearCaches();
}
+ for (int i : modInfo->getModArchiveLooseOverwrite()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
+ for (int i : modInfo->getModArchiveLooseOverwritten()) {
+ ModInfo::getByIndex(i)->clearCaches();
+ }
// update conflict check on the moved mod
modInfo->doConflictCheck();
m_OrganizerCore.modList()->setOverwriteMarkers(modInfo->getModOverwrite(), modInfo->getModOverwritten());
m_OrganizerCore.modList()->setArchiveOverwriteMarkers(modInfo->getModArchiveOverwrite(), modInfo->getModArchiveOverwritten());
+ m_OrganizerCore.modList()->setArchiveLooseOverwriteMarkers(modInfo->getModArchiveLooseOverwrite(), modInfo->getModArchiveLooseOverwritten());
if (m_ModListSortProxy != nullptr) {
m_ModListSortProxy->invalidate();
}
@@ -2442,9 +2449,11 @@ void MainWindow::modlistSelectionChanged(const QModelIndex &current, const QMode
ModInfo::Ptr selectedMod = ModInfo::getByIndex(current.data(Qt::UserRole + 1).toInt());
m_OrganizerCore.modList()->setOverwriteMarkers(selectedMod->getModOverwrite(), selectedMod->getModOverwritten());
m_OrganizerCore.modList()->setArchiveOverwriteMarkers(selectedMod->getModArchiveOverwrite(), selectedMod->getModArchiveOverwritten());
+ m_OrganizerCore.modList()->setArchiveLooseOverwriteMarkers(selectedMod->getModArchiveLooseOverwrite(), selectedMod->getModArchiveLooseOverwritten());
} else {
m_OrganizerCore.modList()->setOverwriteMarkers(std::set<unsigned int>(), std::set<unsigned int>());
m_OrganizerCore.modList()->setArchiveOverwriteMarkers(std::set<unsigned int>(), std::set<unsigned int>());
+ m_OrganizerCore.modList()->setArchiveLooseOverwriteMarkers(std::set<unsigned int>(), std::set<unsigned int>());
}
/* if ((m_ModListSortProxy != nullptr)
&& !m_ModListSortProxy->beingInvalidated()) {
diff --git a/src/modflagicondelegate.cpp b/src/modflagicondelegate.cpp
index f7f85a18..5584dea1 100644
--- a/src/modflagicondelegate.cpp
+++ b/src/modflagicondelegate.cpp
@@ -1,4 +1,4 @@
- #include "modflagicondelegate.h"
+#include "modflagicondelegate.h"
#include <QList>
@@ -44,15 +44,19 @@ QString ModFlagIconDelegate::getFlagIcon(ModInfo::EFlag flag) const
case ModInfo::FLAG_INVALID: return ":/MO/gui/problem";
case ModInfo::FLAG_NOTENDORSED: return ":/MO/gui/emblem_notendorsed";
case ModInfo::FLAG_NOTES: return ":/MO/gui/emblem_notes";
+ case ModInfo::FLAG_CONFLICT_MIXED: return ":/MO/gui/emblem_conflict_mixed";
case ModInfo::FLAG_CONFLICT_OVERWRITE: return ":/MO/gui/emblem_conflict_overwrite";
case ModInfo::FLAG_CONFLICT_LOOSE_OVERWRITE_ARCHIVE: return ":/MO/gui/emblem_conflict_loose_overwrite_archive";
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/alternate_game";
+ case ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE: return ":/MO/gui/archive_loose_conflict_overwrite";
+ case ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN: return ":/MO/gui/archive_loose_conflict_overwritten";
case ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED: return ":/MO/gui/archive_conflict_mixed";
case ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE: return ":/MO/gui/archive_conflict_winner";
case ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN: return ":/MO/gui/archive_conflict_loser";
+ case ModInfo::FLAG_ALTERNATE_GAME: return ":MO/gui/alternate_game";
default: return QString();
}
}
diff --git a/src/modinfo.h b/src/modinfo.h
index c763e69b..99ce35b5 100644
--- a/src/modinfo.h
+++ b/src/modinfo.h
@@ -69,10 +69,12 @@ public:
FLAG_NOTENDORSED,
FLAG_NOTES,
FLAG_CONFLICT_OVERWRITE,
- FLAG_CONFLICT_LOOSE_OVERWRITE_ARCHIVE,
FLAG_CONFLICT_OVERWRITTEN,
FLAG_CONFLICT_MIXED,
FLAG_CONFLICT_REDUNDANT,
+ FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE,
+ FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN,
+ FLAG_ARCHIVE_LOOSE_CONFLICT_MIXED,
FLAG_ARCHIVE_CONFLICT_OVERWRITE,
FLAG_ARCHIVE_CONFLICT_OVERWRITTEN,
FLAG_ARCHIVE_CONFLICT_MIXED,
@@ -649,6 +651,16 @@ public:
virtual std::set<unsigned int> getModArchiveOverwritten() { return std::set<unsigned int>(); }
/**
+ * @return retrieve list of mods (as mod index) with archives that are overwritten by thos mod's loose files. Updates may be delayed
+ */
+ virtual std::set<unsigned int> getModArchiveLooseOverwrite() { return std::set<unsigned int>(); }
+
+ /**
+ * @return list of mods (as mod index) with loose files that overwrite this one's archive files. Updates may be delayed
+ */
+ virtual std::set<unsigned int> getModArchiveLooseOverwritten() { return std::set<unsigned int>(); }
+
+ /**
* @brief update conflict information
*/
virtual void doConflictCheck() const {}
diff --git a/src/modinfowithconflictinfo.cpp b/src/modinfowithconflictinfo.cpp
index 67006261..68b5b265 100644
--- a/src/modinfowithconflictinfo.cpp
+++ b/src/modinfowithconflictinfo.cpp
@@ -7,7 +7,7 @@ using namespace MOBase;
using namespace MOShared;
ModInfoWithConflictInfo::ModInfoWithConflictInfo(PluginContainer *pluginContainer, DirectoryEntry **directoryStructure)
- : ModInfo(pluginContainer), m_DirectoryStructure(directoryStructure) {}
+ : ModInfo(pluginContainer), m_DirectoryStructure(directoryStructure), m_HasLooseOverwrite(false) {}
void ModInfoWithConflictInfo::clearCaches()
{
@@ -32,6 +32,18 @@ std::vector<ModInfo::EFlag> ModInfoWithConflictInfo::getFlags() const
} break;
default: { /* NOP */ }
}
+ switch (isLooseArchiveConflicted()) {
+ case CONFLICT_MIXED: {
+ result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_MIXED);
+ } break;
+ case CONFLICT_OVERWRITE: {
+ result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE);
+ } break;
+ case CONFLICT_OVERWRITTEN: {
+ result.push_back(ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN);
+ } break;
+ default: { /* NOP */ }
+ }
switch (isArchiveConflicted()) {
case CONFLICT_MIXED: {
result.push_back(ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED);
@@ -54,6 +66,8 @@ void ModInfoWithConflictInfo::doConflictCheck() const
m_OverwrittenList.clear();
m_ArchiveOverwriteList.clear();
m_ArchiveOverwrittenList.clear();
+ m_ArchiveLooseOverwriteList.clear();
+ m_ArchiveLooseOverwrittenList.clear();
bool providesAnything = false;
@@ -66,6 +80,7 @@ void ModInfoWithConflictInfo::doConflictCheck() const
m_CurrentConflictState = CONFLICT_NONE;
m_ArchiveConflictState = CONFLICT_NONE;
+ m_ArchiveConflictLooseState = CONFLICT_NONE;
if ((*m_DirectoryStructure)->originExists(name)) {
FilesOrigin &origin = (*m_DirectoryStructure)->getOriginByName(name);
@@ -77,18 +92,7 @@ void ModInfoWithConflictInfo::doConflictCheck() const
// no alternatives -> no conflict
providesAnything = true;
} else {
- if (file->getOrigin() != origin.getID()) {
- FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(file->getOrigin());
- unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
- if (file->getArchive().first.size() == 0)
- m_OverwrittenList.insert(altIndex);
- else
- m_ArchiveOverwrittenList.insert(altIndex);
- } else {
- providesAnything = true;
- }
-
- // for all non-providing alternative origins
+ // Get the archive data for the current mod
bool found = file->getOrigin() == origin.getID();
std::pair<std::wstring, int> archiveData;
if (found)
@@ -101,6 +105,23 @@ void ModInfoWithConflictInfo::doConflictCheck() const
}
}
}
+
+ // If this is not the origin then determine the correct overwrite
+ if (file->getOrigin() != origin.getID()) {
+ FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(file->getOrigin());
+ unsigned int altIndex = ModInfo::getIndex(ToQString(altOrigin.getName()));
+ if (file->getArchive().first.size() == 0)
+ if (archiveData.first.size() == 0)
+ m_OverwrittenList.insert(altIndex);
+ else
+ m_ArchiveLooseOverwrittenList.insert(altIndex);
+ else
+ m_ArchiveOverwrittenList.insert(altIndex);
+ } else {
+ providesAnything = true;
+ }
+
+ // Sort out the alternatives
for (auto altInfo : alternatives) {
if ((altInfo.first != dataID) && (altInfo.first != origin.getID())) {
FilesOrigin &altOrigin = (*m_DirectoryStructure)->getOriginByID(altInfo.first);
@@ -113,11 +134,11 @@ void ModInfoWithConflictInfo::doConflictCheck() const
m_OverwrittenList.insert(altIndex);
}
} else {
- m_ArchiveOverwrittenList.insert(altIndex);
+ m_ArchiveLooseOverwrittenList.insert(altIndex);
}
} else {
if (archiveData.first.size() == 0) {
- m_ArchiveOverwrittenList.insert(altIndex);
+ m_ArchiveLooseOverwriteList.insert(altIndex);
} else {
if (archiveData.second > altInfo.second.second) {
m_ArchiveOverwriteList.insert(altIndex);
@@ -141,14 +162,21 @@ void ModInfoWithConflictInfo::doConflictCheck() const
m_CurrentConflictState = CONFLICT_OVERWRITE;
else if (!m_OverwrittenList.empty())
m_CurrentConflictState = CONFLICT_OVERWRITTEN;
- }
- if (!m_ArchiveOverwriteList.empty() && !m_ArchiveOverwrittenList.empty())
+ if (!m_ArchiveOverwriteList.empty() && !m_ArchiveOverwrittenList.empty())
m_ArchiveConflictState = CONFLICT_MIXED;
- else if (!m_ArchiveOverwriteList.empty())
+ else if (!m_ArchiveOverwriteList.empty())
m_ArchiveConflictState = CONFLICT_OVERWRITE;
- else if (!m_ArchiveOverwrittenList.empty())
+ else if (!m_ArchiveOverwrittenList.empty())
m_ArchiveConflictState = CONFLICT_OVERWRITTEN;
+
+ if (!m_ArchiveLooseOverwrittenList.empty() && !m_ArchiveLooseOverwriteList.empty())
+ m_ArchiveConflictLooseState = CONFLICT_MIXED;
+ else if (!m_ArchiveLooseOverwrittenList.empty())
+ m_ArchiveConflictLooseState = CONFLICT_OVERWRITTEN;
+ else if (!m_ArchiveLooseOverwriteList.empty())
+ m_ArchiveConflictLooseState = CONFLICT_OVERWRITE;
+ }
}
}
@@ -165,12 +193,22 @@ ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isConflicted() c
ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isArchiveConflicted() const
{
- QTime now = QTime::currentTime();
- if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
- doConflictCheck();
- }
+ QTime now = QTime::currentTime();
+ if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
+ doConflictCheck();
+ }
+
+ return m_ArchiveConflictState;
+}
+
+ModInfoWithConflictInfo::EConflictType ModInfoWithConflictInfo::isLooseArchiveConflicted() const
+{
+ QTime now = QTime::currentTime();
+ if (m_LastConflictCheck.isNull() || (m_LastConflictCheck.secsTo(now) > 10)) {
+ doConflictCheck();
+ }
- return m_ArchiveConflictState;
+ return m_ArchiveConflictLooseState;
}
diff --git a/src/modinfowithconflictinfo.h b/src/modinfowithconflictinfo.h
index 5cf2d24e..13d87d25 100644
--- a/src/modinfowithconflictinfo.h
+++ b/src/modinfowithconflictinfo.h
@@ -27,6 +27,10 @@ public:
virtual std::set<unsigned int> getModArchiveOverwritten() { return m_ArchiveOverwrittenList; }
+ virtual std::set<unsigned int> getModArchiveLooseOverwrite() { return m_ArchiveLooseOverwriteList; }
+
+ virtual std::set<unsigned int> getModArchiveLooseOverwritten() { return m_ArchiveLooseOverwrittenList; }
+
virtual void doConflictCheck() const;
private:
@@ -36,7 +40,8 @@ private:
CONFLICT_OVERWRITE,
CONFLICT_OVERWRITTEN,
CONFLICT_MIXED,
- CONFLICT_REDUNDANT
+ CONFLICT_REDUNDANT,
+ CONFLICT_CROSS
};
private:
@@ -52,6 +57,11 @@ private:
EConflictType isArchiveConflicted() const;
/**
+ * @return true if there are archive conflicts with loose files in this mod
+ */
+ EConflictType isLooseArchiveConflicted() const;
+
+ /**
* @return true if this mod is completely replaced by others
*/
bool isRedundant() const;
@@ -62,12 +72,16 @@ private:
mutable EConflictType m_CurrentConflictState;
mutable EConflictType m_ArchiveConflictState;
+ mutable EConflictType m_ArchiveConflictLooseState;
+ mutable bool m_HasLooseOverwrite;
mutable QTime m_LastConflictCheck;
mutable std::set<unsigned int> m_OverwriteList; // indices of mods overritten by this mod
mutable std::set<unsigned int> m_OverwrittenList; // indices of mods overwriting this mod
mutable std::set<unsigned int> m_ArchiveOverwriteList; // indices of mods with archive files overritten by this mod
mutable std::set<unsigned int> m_ArchiveOverwrittenList; // indices of mods with archive files overwriting this mod
+ mutable std::set<unsigned int> m_ArchiveLooseOverwriteList; // indices of mods with archives being overwritten by this mod's loose files
+ mutable std::set<unsigned int> m_ArchiveLooseOverwrittenList; // indices of mods with loose files overwriting this mod's archive files
};
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 876e8958..fd6da43b 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -163,10 +163,13 @@ QString ModList::getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const
case ModInfo::FLAG_CONFLICT_OVERWRITTEN: return tr("Overwritten loose files");
case ModInfo::FLAG_CONFLICT_MIXED: return tr("Loose files Overwrites & Overwritten");
case ModInfo::FLAG_CONFLICT_REDUNDANT: return tr("Redundant");
- case ModInfo::FLAG_ALTERNATE_GAME: return tr("Alternate game source");
+ case ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_MIXED: return tr("Contains archive files overwritten by loose files and loose files overwriting an archive");
+ case ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE: return tr("Overwrites an archive with loose files");
+ case ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN: return tr("Archive is overwritten by loose files");
case ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE: return tr("Overwrites another archive file");
case ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN: return tr("Overwritten by another archive file");
case ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED: return tr("Archive files overwrites & overwritten");
+ case ModInfo::FLAG_ALTERNATE_GAME: return tr("Alternate game source");
default: return "";
}
}
@@ -403,20 +406,26 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const
return QVariant();
} else if ((role == Qt::BackgroundRole)
|| (role == ViewMarkingScrollBar::DEFAULT_ROLE)) {
+ bool overwrite = m_Overwrite.find(modIndex) != m_Overwrite.end();
+ bool archiveOverwrite = m_ArchiveOverwrite.find(modIndex) != m_ArchiveOverwrite.end();
+ bool archiveLooseOverwrite = m_ArchiveLooseOverwrite.find(modIndex) != m_ArchiveLooseOverwrite.end();
+ bool overwritten = m_Overwritten.find(modIndex) != m_Overwritten.end();
+ bool archiveOverwritten = m_ArchiveOverwritten.find(modIndex) != m_ArchiveOverwritten.end();
+ bool archiveLooseOverwritten = m_ArchiveLooseOverwritten.find(modIndex) != m_ArchiveLooseOverwritten.end();
if (modInfo->getHighlight() & ModInfo::HIGHLIGHT_PLUGIN) {
return Settings::instance().modlistContainsPluginColor();
- } else if (m_Overwrite.find(modIndex) != m_Overwrite.end() && m_ArchiveOverwritten.find(modIndex) != m_ArchiveOverwritten.end()) {
- return QColor(255, 0, 255, 32); //TODO: Make configurable
- } else if (m_Overwrite.find(modIndex) != m_Overwrite.end() && m_ArchiveOverwritten.find(modIndex) != m_ArchiveOverwritten.end()) {
- return QColor(255, 0, 255, 32); //TODO: Make configurable
- } else if (m_Overwritten.find(modIndex) != m_Overwritten.end() && m_ArchiveOverwrite.find(modIndex) != m_ArchiveOverwrite.end()) {
+ } else if ((overwrite && (archiveOverwritten || archiveLooseOverwritten)) ||
+ (overwritten && (archiveOverwrite || archiveLooseOverwrite)) ||
+ (archiveOverwrite && (overwritten || archiveLooseOverwritten)) ||
+ (archiveOverwritten && (overwrite || archiveLooseOverwrite)) ||
+ (archiveLooseOverwrite && (overwritten || archiveOverwritten)) ||
+ (archiveLooseOverwritten && (overwrite || archiveLooseOverwrite))
+ ) {
return QColor(255, 0, 255, 32); //TODO: Make configurable
- } else if (m_Overwritten.find(modIndex) != m_Overwritten.end() && m_ArchiveOverwrite.find(modIndex) != m_ArchiveOverwrite.end()) {
- return QColor(255, 0, 255, 32); //TODO: Make configurable
- } else if (m_Overwrite.find(modIndex) != m_Overwrite.end() || m_ArchiveOverwrite.find(modIndex) != m_ArchiveOverwrite.end()) {
+ } else if (overwrite || archiveOverwrite || archiveLooseOverwrite) {
return Settings::instance().modlistOverwrittenLooseColor();
}
- } else if (m_Overwritten.find(modIndex) != m_Overwritten.end() || m_ArchiveOverwritten.find(modIndex) != m_ArchiveOverwritten.end()) {
+ } else if (overwritten || archiveOverwritten || archiveLooseOverwritten) {
return Settings::instance().modlistOverwritingLooseColor();
} else if (modInfo->hasFlag(ModInfo::FLAG_SEPARATOR)
&& modInfo->getColor().isValid()
@@ -767,9 +776,16 @@ void ModList::setOverwriteMarkers(const std::set<unsigned int> &overwrite, const
void ModList::setArchiveOverwriteMarkers(const std::set<unsigned int> &overwrite, const std::set<unsigned int> &overwritten)
{
- m_ArchiveOverwrite = overwrite;
- m_ArchiveOverwritten = overwritten;
- notifyChange(0, rowCount() - 1);
+ m_ArchiveOverwrite = overwrite;
+ m_ArchiveOverwritten = overwritten;
+ notifyChange(0, rowCount() - 1);
+}
+
+void ModList::setArchiveLooseOverwriteMarkers(const std::set<unsigned int> &overwrite, const std::set<unsigned int> &overwritten)
+{
+ m_ArchiveLooseOverwrite = overwrite;
+ m_ArchiveLooseOverwritten = overwritten;
+ notifyChange(0, rowCount() - 1);
}
void ModList::setPluginContainer(PluginContainer *pluginContianer)
diff --git a/src/modlist.h b/src/modlist.h
index 5841b9f2..a8263a76 100644
--- a/src/modlist.h
+++ b/src/modlist.h
@@ -113,6 +113,7 @@ public:
void setPluginContainer(PluginContainer *pluginContainer);
void setArchiveOverwriteMarkers(const std::set<unsigned int> &overwrite, const std::set<unsigned int> &overwritten);
+ void setArchiveLooseOverwriteMarkers(const std::set<unsigned int> &overwrite, const std::set<unsigned int> &overwritten);
void setArchiveOverwriteMarkers(const std::set<unsigned int> &overwrite, const std::set<unsigned int> &overwritten);
@@ -337,6 +338,8 @@ private:
std::set<unsigned int> m_Overwritten;
std::set<unsigned int> m_ArchiveOverwrite;
std::set<unsigned int> m_ArchiveOverwritten;
+ std::set<unsigned int> m_ArchiveLooseOverwrite;
+ std::set<unsigned int> m_ArchiveLooseOverwritten;
TModInfoChange m_ChangeInfo;
diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp
index c34985b6..88a073e0 100644
--- a/src/modlistsortproxy.cpp
+++ b/src/modlistsortproxy.cpp
@@ -238,13 +238,15 @@ bool ModListSortProxy::hasConflictFlag(const std::vector<ModInfo::EFlag> &flags)
{
for (ModInfo::EFlag flag : flags) {
if ((flag == ModInfo::FLAG_CONFLICT_MIXED) ||
- (flag == ModInfo::FLAG_CONFLICT_OVERWRITE) ||
- (flag == ModInfo::FLAG_CONFLICT_OVERWRITTEN) ||
- (flag == ModInfo::FLAG_CONFLICT_REDUNDANT) ||
- (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE) ||
- (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN) ||
- (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED) ||
- (flag == ModInfo::FLAG_CONFLICT_LOOSE_OVERWRITE_ARCHIVE)) {
+ (flag == ModInfo::FLAG_CONFLICT_OVERWRITE) ||
+ (flag == ModInfo::FLAG_CONFLICT_OVERWRITTEN) ||
+ (flag == ModInfo::FLAG_CONFLICT_REDUNDANT) ||
+ (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITE) ||
+ (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_OVERWRITTEN) ||
+ (flag == ModInfo::FLAG_ARCHIVE_CONFLICT_MIXED) ||
+ (flag == ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_MIXED) ||
+ (flag == ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITE) ||
+ (flag == ModInfo::FLAG_ARCHIVE_LOOSE_CONFLICT_OVERWRITTEN)) {
return true;
}
}
diff --git a/src/resources.qrc b/src/resources.qrc
index dff1ad72..9e4c9192 100644
--- a/src/resources.qrc
+++ b/src/resources.qrc
@@ -47,8 +47,10 @@
<file alias="emblem_conflict_mixed">resources/conflict-mixed.png</file>
<file alias="emblem_conflict_overwrite">resources/conflict-overwrite.png</file>
<file alias="emblem_conflict_overwritten">resources/conflict-overwritten.png</file>
- <file alias="emblem_conflict_redundant">resources/conflict-redundant.png</file>
- <file alias="emblem_conflict_loose_overwrite_archive">resources/conflict-overwrite-blue.png</file>
+ <file alias="emblem_conflict_redundant">resources/conflict-redundant.png</file>
+ <file alias="archive_loose_conflict_mixed">resources/conflict-mixed-blue.png</file>
+ <file alias="archive_loose_conflict_overwrite">resources/conflict-overwrite-blue.png</file>
+ <file alias="archive_loose_conflict_overwritten">resources/conflict-overwritten-blue.png</file>
<file alias="emblem_notes">resources/accessories-text-editor.png</file>
<file alias="version_date">resources/x-office-calendar.png</file>
<file alias="warning_16">resources/dialog-warning_16.png</file>
@@ -94,8 +96,8 @@
<file alias="string">resources/contents/conversation.png</file>
<file alias="bsa">resources/contents/locked-chest.png</file>
<file alias="menu">resources/contents/config.png</file>
- <file alias="inifile">resources/contents/feather-and-scroll.png</file>
- <file alias="modgroup">resources/contents/xedit.png</file>
+ <file alias="inifile">resources/contents/feather-and-scroll.png</file>
+ <file alias="modgroup">resources/contents/xedit.png</file>
</qresource>
<qresource prefix="/qt/etc">
<file>qt.conf</file>
diff --git a/src/resources/conflict-mixed-blue.png b/src/resources/conflict-mixed-blue.png
new file mode 100644
index 00000000..2afbb304
--- /dev/null
+++ b/src/resources/conflict-mixed-blue.png
Binary files differ
diff --git a/src/resources/conflict-overwritten-blue.png b/src/resources/conflict-overwritten-blue.png
new file mode 100644
index 00000000..3a032a55
--- /dev/null
+++ b/src/resources/conflict-overwritten-blue.png
Binary files differ