From 58b6e0eb48b4d4b201613f1062796a9af68fe454 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Wed, 20 Jan 2021 18:16:20 +0100 Subject: Increase robustness of mods priority in profile. --- src/modlist.cpp | 60 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 31 deletions(-) (limited to 'src/modlist.cpp') diff --git a/src/modlist.cpp b/src/modlist.cpp index ffa841ed..4518f2e9 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -223,8 +223,7 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const return version; } else if (column == COL_PRIORITY) { - int priority = modInfo->getFixedPriority(); - if (priority != INT_MIN) { + if (modInfo->isBackup() || modInfo->isOverwrite()) { return QVariant(); // hide priority for mods where it's fixed } else { @@ -337,9 +336,11 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const } } else if (column == COL_PRIORITY) { - int priority = modInfo->getFixedPriority(); - if (priority != INT_MIN) { - return priority; + if (modInfo->isBackup()) { + return ModInfo::BACKUP_PRIORITY; + } + else if (modInfo->isOverwrite()) { + return ModInfo::OVERWRITE_PRIORITY; } else { return m_Profile->getModPriority(modIndex); @@ -365,9 +366,11 @@ QVariant ModList::data(const QModelIndex &modelIndex, int role) const return modInfo->gameName(); } else if (role == PriorityRole) { - int priority = modInfo->getFixedPriority(); - if (priority != std::numeric_limits::min()) { - return priority; + if (modInfo->isBackup()) { + return ModInfo::BACKUP_PRIORITY; + } + else if (modInfo->isOverwrite()) { + return ModInfo::OVERWRITE_PRIORITY; } else { return m_Profile->getModPriority(modIndex); @@ -687,7 +690,7 @@ Qt::ItemFlags ModList::flags(const QModelIndex &modelIndex) const } if (modelIndex.isValid()) { ModInfo::Ptr modInfo = ModInfo::getByIndex(modelIndex.row()); - if (modInfo->getFixedPriority() == INT_MIN) { + if (!modInfo->isFixedPriority()) { result |= Qt::ItemIsDragEnabled; result |= Qt::ItemIsUserCheckable; if ((modelIndex.column() == COL_PRIORITY) || @@ -743,8 +746,9 @@ void ModList::changeModPriority(std::vector sourceIndices, int newPriority) iter != sourceIndices.end(); ++iter) { int oldPriority = m_Profile->getModPriority(*iter); if (oldPriority > newPriority) { - m_Profile->setModPriority(*iter, newPriority); - m_ModMoved(ModInfo::getByIndex(*iter)->name(), oldPriority, newPriority); + if (m_Profile->setModPriority(*iter, newPriority)) { + m_ModMoved(ModInfo::getByIndex(*iter)->name(), oldPriority, newPriority); + } } } @@ -770,8 +774,9 @@ void ModList::changeModPriority(std::vector sourceIndices, int newPriority) iter != sourceIndices.end(); ++iter) { int oldPriority = m_Profile->getModPriority(*iter); if (oldPriority < newPriority) { - m_Profile->setModPriority(*iter, newPriority); - m_ModMoved(ModInfo::getByIndex(*iter)->name(), oldPriority, newPriority); + if (m_Profile->setModPriority(*iter, newPriority)) { + m_ModMoved(ModInfo::getByIndex(*iter)->name(), oldPriority, newPriority); + } } } @@ -901,11 +906,8 @@ QStringList ModList::allModsByProfilePriority(MOBase::IProfile* profile) const m_Organizer->currentProfile() : static_cast(profile); QStringList res; - for (int i = mo2Profile->getPriorityMinimum(); - i < mo2Profile->getPriorityMinimum() + (int)mo2Profile->numRegularMods(); - ++i) { - int modIndex = mo2Profile->modIndexByPriority(i); - auto modInfo = ModInfo::getByIndex(modIndex); + for (auto& [priority, index] : mo2Profile->getAllIndexesByPriority()) { + auto modInfo = ModInfo::getByIndex(index); if (!modInfo->isBackup() && !modInfo->isOverwrite()) { res.push_back(modInfo->internalName()); } @@ -1008,16 +1010,13 @@ int ModList::priority(const QString &name) const bool ModList::setPriority(const QString &name, int newPriority) { - if ((newPriority < 0) || (newPriority >= static_cast(m_Profile->numRegularMods()))) { - return false; - } - - unsigned int modIndex = ModInfo::getIndex(name); - if (modIndex == UINT_MAX) { + unsigned int index = ModInfo::getIndex(name); + if (index == UINT_MAX) { return false; } else { - m_Profile->setModPriority(modIndex, newPriority); - notifyChange(modIndex); + if (m_Profile->setModPriority(index, newPriority)) { + notifyChange(index); + } return true; } } @@ -1074,14 +1073,14 @@ int ModList::dropPriority(int row, const QModelIndex& parent) const int newPriority = 0; { - if ((row < 0) || (row > static_cast(m_Profile->numRegularMods()))) { - newPriority = m_Profile->numRegularMods() + 1; + if (row < 0 || row >= rowCount()) { + newPriority = std::numeric_limits::max(); } else { newPriority = m_Profile->getModPriority(row); } if (newPriority == -1) { - newPriority = m_Profile->numRegularMods() + 1; + newPriority = std::numeric_limits::max(); } } @@ -1408,8 +1407,7 @@ void ModList::shiftModsPriority(const QModelIndexList& indices, int offset) std::vector notify; for (auto index : allIndex) { int newPriority = m_Profile->getModPriority(index) + offset; - if ((newPriority >= 0) && (newPriority < static_cast(m_Profile->numRegularMods()))) { - m_Profile->setModPriority(index, newPriority); + if (m_Profile->setModPriority(index, newPriority)) { notify.push_back(index); } } -- cgit v1.3.1