summaryrefslogtreecommitdiff
path: root/src/modlistviewactions.cpp
diff options
context:
space:
mode:
authorAl <26797547+Al12rs@users.noreply.github.com>2021-01-16 23:06:04 +0100
committerGitHub <noreply@github.com>2021-01-16 23:06:04 +0100
commit2b1f01cba2a50a17db69187a1b4cbecf5a0fb65d (patch)
tree4853e003773aea7abe9ebbe9d893ec0758bdc190 /src/modlistviewactions.cpp
parent19556bc968334d8b5526ed300e537c5f6a9a5117 (diff)
parentf46962686a0648abe06bea699365740546107a70 (diff)
Merge pull request #1363 from Holt59/modlist-improvements
Send to last conflict
Diffstat (limited to 'src/modlistviewactions.cpp')
-rw-r--r--src/modlistviewactions.cpp71
1 files changed, 61 insertions, 10 deletions
diff --git a/src/modlistviewactions.cpp b/src/modlistviewactions.cpp
index 857afbdc..5af79b3b 100644
--- a/src/modlistviewactions.cpp
+++ b/src/modlistviewactions.cpp
@@ -530,17 +530,24 @@ void ModListViewActions::displayModInformation(ModInfo::Ptr modInfo, unsigned in
}
}
-void ModListViewActions::sendModsToTop(const QModelIndexList& index) const
+void ModListViewActions::setModsPriority(const QModelIndexList& indexes, int priority) const
{
- m_core.modList()->changeModsPriority(index, 0);
+ auto [current, selected] = m_view->selected();
+ m_core.modList()->changeModsPriority(indexes, priority);
+ m_view->setSelected(current, selected);
}
-void ModListViewActions::sendModsToBottom(const QModelIndexList& index) const
+void ModListViewActions::sendModsToTop(const QModelIndexList& indexes) const
{
- m_core.modList()->changeModsPriority(index, std::numeric_limits<int>::max());
+ setModsPriority(indexes, 0);
}
-void ModListViewActions::sendModsToPriority(const QModelIndexList& index) const
+void ModListViewActions::sendModsToBottom(const QModelIndexList& indexes) const
+{
+ setModsPriority(indexes, std::numeric_limits<int>::max());
+}
+
+void ModListViewActions::sendModsToPriority(const QModelIndexList& indexes) const
{
bool ok;
int priority = QInputDialog::getInt(m_parent,
@@ -548,10 +555,10 @@ void ModListViewActions::sendModsToPriority(const QModelIndexList& index) const
0, 0, std::numeric_limits<int>::max(), 1, &ok);
if (!ok) return;
- m_core.modList()->changeModsPriority(index, priority);
+ setModsPriority(indexes, priority);
}
-void ModListViewActions::sendModsToSeparator(const QModelIndexList& index) const
+void ModListViewActions::sendModsToSeparator(const QModelIndexList& indexes) const
{
QStringList separators;
auto indexesByPriority = m_core.currentProfile()->getAllIndexesByPriority();
@@ -587,16 +594,60 @@ void ModListViewActions::sendModsToSeparator(const QModelIndexList& index) const
}
}
- if (index.size() == 1
- && m_core.currentProfile()->getModPriority(index[0].data(ModList::IndexRole).toInt()) < newPriority) {
+ if (indexes.size() == 1
+ && m_core.currentProfile()->getModPriority(indexes[0].data(ModList::IndexRole).toInt()) < newPriority) {
--newPriority;
}
- m_core.modList()->changeModsPriority(index, newPriority);
+ setModsPriority(indexes, newPriority);
}
}
}
+void ModListViewActions::sendModsToFirstConflict(const QModelIndexList& indexes) const
+{
+ std::set<unsigned int> conflicts;
+
+ for (auto& idx : indexes) {
+ if (!idx.data(ModList::IndexRole).isValid()) {
+ continue;
+ }
+ auto info = ModInfo::getByIndex(idx.data(ModList::IndexRole).toInt());
+ conflicts.insert(info->getModOverwrite().begin(), info->getModOverwrite().end());
+ }
+
+ std::set<int> priorities;
+ std::transform(conflicts.begin(), conflicts.end(), std::inserter(priorities, priorities.end()), [=](auto index) {
+ return m_core.currentProfile()->getModPriority(index);
+ });
+
+ if (!priorities.empty()) {
+ setModsPriority(indexes, *priorities.begin());
+ }
+}
+
+void ModListViewActions::sendModsToLastConflict(const QModelIndexList& indexes) const
+{
+ std::set<unsigned int> conflicts;
+
+ for (auto& idx : indexes) {
+ if (!idx.data(ModList::IndexRole).isValid()) {
+ continue;
+ }
+ auto info = ModInfo::getByIndex(idx.data(ModList::IndexRole).toInt());
+ conflicts.insert(info->getModOverwritten().begin(), info->getModOverwritten().end());
+ }
+
+ std::set<int> priorities;
+ std::transform(conflicts.begin(), conflicts.end(), std::inserter(priorities, priorities.end()), [=](auto index) {
+ return m_core.currentProfile()->getModPriority(index);
+ });
+
+ if (!priorities.empty()) {
+ setModsPriority(indexes, *priorities.rbegin());
+ }
+}
+
void ModListViewActions::renameMod(const QModelIndex& index) const
{
try {