diff options
Diffstat (limited to 'libs/installer_bsplugins/src/BSPluginList/ConflictIconDelegate.cpp')
| -rw-r--r-- | libs/installer_bsplugins/src/BSPluginList/ConflictIconDelegate.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libs/installer_bsplugins/src/BSPluginList/ConflictIconDelegate.cpp b/libs/installer_bsplugins/src/BSPluginList/ConflictIconDelegate.cpp new file mode 100644 index 0000000..a32471a --- /dev/null +++ b/libs/installer_bsplugins/src/BSPluginList/ConflictIconDelegate.cpp @@ -0,0 +1,48 @@ +#include "ConflictIconDelegate.h" + +namespace BSPluginList +{ + +using enum TESData::FileInfo::EConflictFlag; + +ConflictIconDelegate::ConflictIconDelegate(PluginListView* view) + : GUI::IconDelegate(view), m_View{view} +{} + +QList<QString> ConflictIconDelegate::getIcons(const QModelIndex& index) const +{ + const auto flags = m_View->conflictFlags(index); + + QList<QString> icons; + + if ((flags & CONFLICT_MIXED) == CONFLICT_MIXED) { + icons.append(":/MO/gui/emblem_conflict_mixed"); + } else if (flags & CONFLICT_OVERRIDE) { + icons.append(":/MO/gui/emblem_conflict_overwrite"); + } else if (flags & CONFLICT_OVERRIDDEN) { + icons.append(":/MO/gui/emblem_conflict_overwritten"); + } + + if ((flags & CONFLICT_ARCHIVE_MIXED) == CONFLICT_ARCHIVE_MIXED) { + icons.append(":/MO/gui/archive_conflict_mixed"); + } else if (flags & CONFLICT_ARCHIVE_OVERWRITE) { + icons.append(":/MO/gui/archive_conflict_winner"); + } else if (flags & CONFLICT_ARCHIVE_OVERWRITTEN) { + icons.append(":/MO/gui/archive_conflict_loser"); + } + + return icons; +} + +[[nodiscard]] static int numIcons(uint flags) +{ + return ((flags & CONFLICT_MIXED) ? 1 : 0) + + ((flags & CONFLICT_ARCHIVE_MIXED) ? 1 : 0); +} + +int ConflictIconDelegate::getNumIcons(const QModelIndex& index) const +{ + return numIcons(m_View->conflictFlags(index)); +} + +} // namespace BSPluginList |
