summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLostDragonist <lost.dragonist@gmail.com>2018-11-01 17:58:49 -0500
committerLostDragonist <lost.dragonist@gmail.com>2018-11-01 17:58:49 -0500
commit2c57899cf611056a8c5bae1f7f27c9a157df6f41 (patch)
tree09e657e479ecbd042803de90dee5b89625cc521b
parent3dbfba91e1618e6cdf3ed5ce7ff7955376df03eb (diff)
Fix matching highlights for mod and plugin selections
The selectionChanged event used before requires subtractive/additive logic to work correctly. A separate event is fired for each row and each column for each row that is selected or deselected. The previous logic assumed all of the selection was passed in at once. The logic has been changed to recalculate all highlights each time the event is fired. This is poorly optimized in regards to performance but makes the function work.
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/modlist.cpp5
-rw-r--r--src/modlist.h2
-rw-r--r--src/pluginlist.cpp11
-rw-r--r--src/pluginlist.h2
5 files changed, 14 insertions, 10 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 5b257977..752c5c76 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -2341,13 +2341,13 @@ void MainWindow::modlistSelectionChanged(const QModelIndex &current, const QMode
void MainWindow::modlistSelectionsChanged(const QItemSelection &selected)
{
- m_OrganizerCore.pluginList()->highlightPlugins(selected, *m_OrganizerCore.directoryStructure(), *m_OrganizerCore.currentProfile());
+ m_OrganizerCore.pluginList()->highlightPlugins(ui->modList->selectionModel(), *m_OrganizerCore.directoryStructure(), *m_OrganizerCore.currentProfile());
ui->espList->verticalScrollBar()->repaint();
}
void MainWindow::esplistSelectionsChanged(const QItemSelection &selected)
{
- m_OrganizerCore.modList()->highlightMods(selected, *m_OrganizerCore.directoryStructure());
+ m_OrganizerCore.modList()->highlightMods(ui->espList->selectionModel(), *m_OrganizerCore.directoryStructure());
ui->modList->verticalScrollBar()->repaint();
}
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 3f8fa0c0..539ba6fc 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -24,6 +24,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "qtgroupingproxy.h"
#include "viewmarkingscrollbar.h"
#include "modlistsortproxy.h"
+#include "pluginlist.h"
#include "settings.h"
#include "modinforegular.h"
#include <appconfig.h>
@@ -768,12 +769,12 @@ int ModList::timeElapsedSinceLastChecked() const
return m_LastCheck.elapsed();
}
-void ModList::highlightMods(const QItemSelection &selected, const MOShared::DirectoryEntry &directoryEntry)
+void ModList::highlightMods(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry)
{
for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
ModInfo::getByIndex(i)->setPluginSelected(false);
}
- for (QModelIndex idx : selected.indexes()) {
+ for (QModelIndex idx : selection->selectedRows(PluginList::COL_NAME)) {
QString modName = idx.data().toString();
const MOShared::FileEntry::Ptr fileEntry = directoryEntry.findFile(modName.toStdWString());
diff --git a/src/modlist.h b/src/modlist.h
index caad8c61..8de08da3 100644
--- a/src/modlist.h
+++ b/src/modlist.h
@@ -118,7 +118,7 @@ public:
int timeElapsedSinceLastChecked() const;
- void highlightMods(const QItemSelection &selected, const MOShared::DirectoryEntry &directoryEntry);
+ void highlightMods(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry);
public:
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index d56a4bde..21e716d3 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include "settings.h"
#include "scopeguard.h"
#include "modinfo.h"
+#include "modlist.h"
#include "viewmarkingscrollbar.h"
#include <utility.h>
#include <iplugingame.h>
@@ -119,14 +120,16 @@ QString PluginList::getColumnToolTip(int column)
}
}
-void PluginList::highlightPlugins(const QItemSelection &selected, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile)
+void PluginList::highlightPlugins(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile)
{
for (auto &esp : m_ESPs) {
esp.m_ModSelected = false;
}
- for (QModelIndex idx : selected.indexes()) {
- ModInfo::Ptr selectedMod = ModInfo::getByIndex(idx.data(Qt::UserRole + 1).toInt());
- if (!selectedMod.isNull() && profile.modEnabled(idx.data(Qt::UserRole + 1).toInt())) {
+ for (QModelIndex idx : selection->selectedRows(ModList::COL_PRIORITY)) {
+ int modPriority = idx.data().toInt();
+ int modIndex = profile.modIndexByPriority(modPriority);
+ ModInfo::Ptr selectedMod = ModInfo::getByIndex(modIndex);
+ if (!selectedMod.isNull() && profile.modEnabled(modIndex)) {
QDir dir(selectedMod->absolutePath());
QStringList plugins = dir.entryList(QStringList() << "*.esp" << "*.esm" << "*.esl");
MOShared::FilesOrigin origin = directoryEntry.getOriginByName(selectedMod->internalName().toStdWString());
diff --git a/src/pluginlist.h b/src/pluginlist.h
index 009c9153..f7817c37 100644
--- a/src/pluginlist.h
+++ b/src/pluginlist.h
@@ -206,7 +206,7 @@ public:
static QString getColumnName(int column);
static QString getColumnToolTip(int column);
- void highlightPlugins(const QItemSelection &selected, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile);
+ void highlightPlugins(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile);
void refreshLoadOrder();