summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMikaël Capelle <capelle.mikael@gmail.com>2020-12-31 23:26:14 +0100
committerMikaël Capelle <capelle.mikael@gmail.com>2021-01-02 15:38:18 +0100
commitfff41be8455e588d181c7349678dff6fe29be76b (patch)
tree907bef5b779ba5b6983b5b3ddbef97b2350d58cb /src
parent399ff3fcf7920adec128d30f3c97a7636a6f10be (diff)
Remove selection-related stuff from plugin/mod lists.
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp26
-rw-r--r--src/mainwindow.h4
-rw-r--r--src/modlist.cpp8
-rw-r--r--src/modlist.h6
-rw-r--r--src/modlistview.cpp12
-rw-r--r--src/organizercore.cpp4
-rw-r--r--src/pluginlist.cpp14
-rw-r--r--src/pluginlist.h6
-rw-r--r--src/pluginlistview.cpp16
9 files changed, 50 insertions, 46 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 033bb0e0..55019a44 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -321,8 +321,6 @@ MainWindow::MainWindow(Settings &settings
setupModList();
ui->espList->setup(m_OrganizerCore, this, ui);
- connect(ui->espList->selectionModel(), &QItemSelectionModel::selectionChanged,
- [=](auto&& selection) { esplistSelectionsChanged(selection); });
ui->bsaList->setLocalMoveOnly(true);
ui->bsaList->setHeaderHidden(true);
@@ -514,10 +512,6 @@ void MainWindow::setupModList()
connect(&ui->modList->actions(), &ModListViewActions::overwriteCleared, [=]() { scheduleCheckForProblems(); });
connect(&ui->modList->actions(), &ModListViewActions::originModified, this, &MainWindow::originModified);
connect(m_OrganizerCore.modList(), &ModList::modPrioritiesChanged, [&]() { m_ArchiveListWriter.write(); });
-
- // keep here for now
- connect(ui->modList->selectionModel(), &QItemSelectionModel::selectionChanged,
- this, &MainWindow::modlistSelectionsChanged);
}
void MainWindow::resetActionIcons()
@@ -2186,11 +2180,6 @@ void MainWindow::directory_refreshed()
}
}
-void MainWindow::esplist_changed()
-{
- ui->espList->updatePluginCount();
-}
-
void MainWindow::modInstalled(const QString &modName)
{
unsigned int index = ModInfo::getIndex(modName);
@@ -2263,26 +2252,11 @@ void MainWindow::fileMoved(const QString &filePath, const QString &oldOriginName
void MainWindow::modlistChanged(const QModelIndex&, int)
{
m_OrganizerCore.currentProfile()->writeModlist();
- ui->modList->updateModCount();
}
void MainWindow::modlistChanged(const QModelIndexList&, int)
{
m_OrganizerCore.currentProfile()->writeModlist();
- ui->modList->updateModCount();
-}
-
-void MainWindow::modlistSelectionsChanged(const QItemSelection &selected)
-{
- 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(ui->espList->selectionModel(), *m_OrganizerCore.directoryStructure());
- ui->modList->verticalScrollBar()->repaint();
- ui->modList->repaint();
}
void MainWindow::modRemoved(const QString &fileName)
diff --git a/src/mainwindow.h b/src/mainwindow.h
index c6e94aa9..5fa61c24 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -140,7 +140,6 @@ public:
virtual MOBase::DelayedFileWriterBase &archivesWriter() override { return m_ArchiveListWriter; }
public slots:
- void esplist_changed();
void refresherProgress(const DirectoryRefreshProgress* p);
void directory_refreshed();
@@ -397,9 +396,6 @@ private slots:
void about();
- void modlistSelectionsChanged(const QItemSelection &current);
- void esplistSelectionsChanged(const QItemSelection &current);
-
void resetActionIcons();
private slots: // ui slots
diff --git a/src/modlist.cpp b/src/modlist.cpp
index 22899aaa..077f4af3 100644
--- a/src/modlist.cpp
+++ b/src/modlist.cpp
@@ -845,13 +845,15 @@ int ModList::timeElapsedSinceLastChecked() const
return m_LastCheck.elapsed();
}
-void ModList::highlightMods(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry)
+void ModList::highlightMods(
+ const std::vector<unsigned int>& pluginIndices,
+ const MOShared::DirectoryEntry &directoryEntry)
{
for (unsigned int i = 0; i < ModInfo::getNumMods(); ++i) {
ModInfo::getByIndex(i)->setPluginSelected(false);
}
- for (QModelIndex idx : selection->selectedRows(PluginList::COL_NAME)) {
- QString pluginName = idx.data().toString();
+ for (auto idx : pluginIndices) {
+ QString pluginName = m_Organizer->pluginList()->getName(idx);
const MOShared::FileEntryPtr fileEntry = directoryEntry.findFile(pluginName.toStdWString());
if (fileEntry.get() != nullptr) {
diff --git a/src/modlist.h b/src/modlist.h
index e4f4dfab..4b0e0157 100644
--- a/src/modlist.h
+++ b/src/modlist.h
@@ -129,7 +129,11 @@ public:
int timeElapsedSinceLastChecked() const;
- void highlightMods(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry);
+ // highlight mods containing the plugins at the given indices
+ //
+ void highlightMods(
+ const std::vector<unsigned int>& pluginIndices,
+ const MOShared::DirectoryEntry &directoryEntry);
public:
diff --git a/src/modlistview.cpp b/src/modlistview.cpp
index f23e84fe..42627e3f 100644
--- a/src/modlistview.cpp
+++ b/src/modlistview.cpp
@@ -594,6 +594,8 @@ void ModListView::setup(OrganizerCore& core, CategoryFactory& factory, MainWindo
connect(m_core, &OrganizerCore::modInstalled, this, &ModListView::onModInstalled);
connect(core.modList(), &ModList::modPrioritiesChanged, this, &ModListView::onModPrioritiesChanged);
connect(core.modList(), &ModList::clearOverwrite, m_actions, &ModListViewActions::clearOverwrite);
+ connect(core.modList(), qOverload<QModelIndex const&, int>(&ModList::modlistChanged), [=]() { updateModCount(); });
+ connect(core.modList(), qOverload<QModelIndexList const&, int>(&ModList::modlistChanged), [=]() { updateModCount(); });
m_byPriorityProxy = new ModListByPriorityProxy(core.currentProfile(), core, this);
m_byPriorityProxy->setSourceModel(core.modList());
@@ -672,6 +674,16 @@ void ModListView::setup(OrganizerCore& core, CategoryFactory& factory, MainWindo
header()->setSectionResizeMode(ModList::COL_NAME, QHeaderView::Stretch);
}
+ // highligth plugins
+ connect(selectionModel(), &QItemSelectionModel::selectionChanged, [=](auto&& selected) {
+ std::vector<unsigned int> modIndices;
+ for (auto& idx : selectionModel()->selectedRows()) {
+ modIndices.push_back(idx.data(ModList::IndexRole).toInt());
+ }
+ m_core->pluginList()->highlightPlugins(modIndices, *m_core->directoryStructure());
+ mwui->espList->verticalScrollBar()->repaint();
+ });
+
// prevent the name-column from being hidden
header()->setSectionHidden(ModList::COL_NAME, false);
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index a8911d4f..4113607c 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -249,10 +249,6 @@ void OrganizerCore::setUserInterface(IUserInterface* ui)
SLOT(modRemoved(QString)));
connect(&m_ModList, SIGNAL(fileMoved(QString, QString, QString)), w,
SLOT(fileMoved(QString, QString, QString)));
- connect(&m_PluginList, SIGNAL(writePluginsList()), w,
- SLOT(esplist_changed()));
- connect(&m_PluginList, SIGNAL(esplist_changed()), w,
- SLOT(esplist_changed()));
connect(&m_DownloadManager, SIGNAL(showMessage(QString)), w,
SLOT(showMessage(QString)));
}
diff --git a/src/pluginlist.cpp b/src/pluginlist.cpp
index a2e485ee..4d648a46 100644
--- a/src/pluginlist.cpp
+++ b/src/pluginlist.cpp
@@ -135,19 +135,19 @@ QString PluginList::getColumnToolTip(int column)
}
}
-void PluginList::highlightPlugins(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile)
+void PluginList::highlightPlugins(
+ const std::vector<unsigned int>& modIndices,
+ const MOShared::DirectoryEntry &directoryEntry)
{
+ auto* profile = m_Organizer.currentProfile();
+
for (auto &esp : m_ESPs) {
esp.modSelected = false;
}
- for (QModelIndex idx : selection->selectedRows(ModList::COL_PRIORITY)) {
- int modIndex = idx.data(Qt::UserRole + 1).toInt();
- if (modIndex == UINT_MAX)
- continue;
-
+ for (auto& modIndex : modIndices) {
ModInfo::Ptr selectedMod = ModInfo::getByIndex(modIndex);
- if (!selectedMod.isNull() && profile.modEnabled(modIndex)) {
+ if (!selectedMod.isNull() && profile->modEnabled(modIndex)) {
QDir dir(selectedMod->absolutePath());
QStringList plugins = dir.entryList(QStringList() << "*.esp" << "*.esm" << "*.esl");
const MOShared::FilesOrigin& origin = directoryEntry.getOriginByName(selectedMod->internalName().toStdWString());
diff --git a/src/pluginlist.h b/src/pluginlist.h
index c93ce5cb..c16bfc98 100644
--- a/src/pluginlist.h
+++ b/src/pluginlist.h
@@ -217,7 +217,11 @@ public:
static QString getColumnName(int column);
static QString getColumnToolTip(int column);
- void highlightPlugins(const QItemSelectionModel *selection, const MOShared::DirectoryEntry &directoryEntry, const Profile &profile);
+ // highlight plugins contained in the mods at the given indices
+ //
+ void highlightPlugins(
+ const std::vector<unsigned int>& modIndices,
+ const MOShared::DirectoryEntry &directoryEntry);
void refreshLoadOrder();
diff --git a/src/pluginlistview.cpp b/src/pluginlistview.cpp
index 4bf91c0a..39db7163 100644
--- a/src/pluginlistview.cpp
+++ b/src/pluginlistview.cpp
@@ -150,9 +150,25 @@ void PluginListView::setup(OrganizerCore& core, MainWindow* mw, Ui::MainWindow*
sortByColumn(PluginList::COL_PRIORITY, Qt::AscendingOrder);
setItemDelegateForColumn(PluginList::COL_FLAGS, new GenericIconDelegate(this));
+ // counter
+ connect(core.pluginList(), &PluginList::writePluginsList, [=]() { updatePluginCount(); });
+ connect(core.pluginList(), &PluginList::esplist_changed, [=]() { updatePluginCount(); });
+
+ // filter
connect(ui.filter, &QLineEdit::textChanged, m_sortProxy, &PluginListSortProxy::updateFilter);
connect(ui.filter, &QLineEdit::textChanged, this, &PluginListView::onFilterChanged);
+ // highligth mod list when selected
+ connect(selectionModel(), &QItemSelectionModel::selectionChanged, [=](auto&& selected) {
+ std::vector<unsigned int> pluginIndices;
+ for (auto& idx : indexViewToModel(selectionModel()->selectedRows())) {
+ pluginIndices.push_back(idx.row());
+ }
+ m_core->modList()->highlightMods(pluginIndices, *m_core->directoryStructure());
+ mwui->modList->verticalScrollBar()->repaint();
+ mwui->modList->repaint();
+ });
+
// using a lambda here to avoid storing the mod list actions
connect(this, &QTreeView::customContextMenuRequested, [=](auto&& pos) { onCustomContextMenuRequested(pos); });
connect(this, &QTreeView::doubleClicked, [=](auto&& index) { onDoubleClicked(index); });