diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-02 20:35:39 +0100 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2021-01-02 20:35:39 +0100 |
| commit | 94b3674d086f81479e71e265102b48c7607c3ef2 (patch) | |
| tree | 492b90aae20df3ee65865f80ba59d19a519cd3f7 /src | |
| parent | 085ccd973d77211a1c0aa20638ce8a1ea876753f (diff) | |
Move highlighting of mods containing selected plugins to mod view.
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlist.cpp | 24 | ||||
| -rw-r--r-- | src/modlist.h | 6 | ||||
| -rw-r--r-- | src/modlistview.cpp | 64 | ||||
| -rw-r--r-- | src/modlistview.h | 12 | ||||
| -rw-r--r-- | src/pluginlistview.cpp | 4 |
5 files changed, 53 insertions, 57 deletions
diff --git a/src/modlist.cpp b/src/modlist.cpp index 155a094f..c89e53d5 100644 --- a/src/modlist.cpp +++ b/src/modlist.cpp @@ -874,30 +874,6 @@ int ModList::timeElapsedSinceLastChecked() const return m_LastCheck.elapsed(); } -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 (auto idx : pluginIndices) { - QString pluginName = m_Organizer->pluginList()->getName(idx); - - const MOShared::FileEntryPtr fileEntry = directoryEntry.findFile(pluginName.toStdWString()); - if (fileEntry.get() != nullptr) { - - QString originName = QString::fromStdWString(directoryEntry.getOriginByID(fileEntry->getOrigin()).getName()); - const auto index = ModInfo::getIndex(originName); - if (index != UINT_MAX) { - auto modInfo = ModInfo::getByIndex(index); - modInfo->setPluginSelected(true); - } - } - } - notifyChange(0, rowCount() - 1); -} - IModList::ModStates ModList::state(unsigned int modIndex) const { IModList::ModStates result; diff --git a/src/modlist.h b/src/modlist.h index afbef7af..9c963119 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -151,12 +151,6 @@ public: int timeElapsedSinceLastChecked() const;
- // 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 f7db64e6..8351e429 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -22,6 +22,7 @@ #include "modlistdropinfo.h"
#include "modlistcontextmenu.h"
#include "genericicondelegate.h"
+#include "shared/fileentry.h"
#include "shared/directoryentry.h"
#include "shared/filesorigin.h"
#include "mainwindow.h"
@@ -123,7 +124,7 @@ ModListView::ModListView(QWidget* parent) , m_byPriorityProxy(nullptr)
, m_byCategoryProxy(nullptr)
, m_byNexusIdProxy(nullptr)
- , m_overwrite{ {}, {}, {}, {}, {}, {} }
+ , m_markers{ {}, {}, {}, {}, {}, {} }
, m_scrollbar(new ModListViewMarkingScrollBar(this))
{
setVerticalScrollBar(m_scrollbar);
@@ -954,30 +955,30 @@ void ModListView::onDoubleClicked(const QModelIndex& index) void ModListView::clearOverwriteMarkers()
{
- m_overwrite.overwrite.clear();
- m_overwrite.overwritten.clear();
- m_overwrite.archiveOverwrite.clear();
- m_overwrite.archiveOverwritten.clear();
- m_overwrite.archiveLooseOverwrite.clear();
- m_overwrite.archiveLooseOverwritten.clear();
+ m_markers.overwrite.clear();
+ m_markers.overwritten.clear();
+ m_markers.archiveOverwrite.clear();
+ m_markers.archiveOverwritten.clear();
+ m_markers.archiveLooseOverwrite.clear();
+ m_markers.archiveLooseOverwritten.clear();
}
void ModListView::setOverwriteMarkers(const std::set<unsigned int>& overwrite, const std::set<unsigned int>& overwritten)
{
- m_overwrite.overwrite = overwrite;
- m_overwrite.overwritten = overwritten;
+ m_markers.overwrite = overwrite;
+ m_markers.overwritten = overwritten;
}
void ModListView::setArchiveOverwriteMarkers(const std::set<unsigned int>& overwrite, const std::set<unsigned int>& overwritten)
{
- m_overwrite.archiveOverwrite = overwrite;
- m_overwrite.archiveOverwritten = overwritten;
+ m_markers.archiveOverwrite = overwrite;
+ m_markers.archiveOverwritten = overwritten;
}
void ModListView::setArchiveLooseOverwriteMarkers(const std::set<unsigned int>& overwrite, const std::set<unsigned int>& overwritten)
{
- m_overwrite.archiveLooseOverwrite = overwrite;
- m_overwrite.archiveLooseOverwritten = overwritten;
+ m_markers.archiveLooseOverwrite = overwrite;
+ m_markers.archiveLooseOverwritten = overwritten;
}
void ModListView::setOverwriteMarkers(ModInfo::Ptr mod)
@@ -996,19 +997,38 @@ void ModListView::setOverwriteMarkers(ModInfo::Ptr mod) verticalScrollBar()->repaint();
}
+void ModListView::setHighlightedMods(const std::vector<unsigned int>& pluginIndices)
+{
+ m_markers.highlight.clear();
+ auto& directoryEntry = *m_core->directoryStructure();
+ for (auto idx : pluginIndices) {
+ QString pluginName = m_core->pluginList()->getName(idx);
+
+ const MOShared::FileEntryPtr fileEntry = directoryEntry.findFile(pluginName.toStdWString());
+ if (fileEntry.get() != nullptr) {
+ QString originName = QString::fromStdWString(directoryEntry.getOriginByID(fileEntry->getOrigin()).getName());
+ const auto index = ModInfo::getIndex(originName);
+ if (index != UINT_MAX) {
+ m_markers.highlight.insert(index);
+ }
+ }
+ }
+ dataChanged(model()->index(0, 0), model()->index(model()->rowCount(), model()->columnCount()));
+ verticalScrollBar()->repaint();
+}
+
QColor ModListView::markerColor(const QModelIndex& index) const
{
unsigned int modIndex = index.data(ModList::IndexRole).toInt();
- ModInfo::Ptr modInfo = ModInfo::getByIndex(modIndex);
- bool overwrite = m_overwrite.overwrite.find(modIndex) != m_overwrite.overwrite.end();
- bool archiveOverwrite = m_overwrite.archiveOverwrite.find(modIndex) != m_overwrite.archiveOverwrite.end();
- bool archiveLooseOverwrite = m_overwrite.archiveOverwritten.find(modIndex) != m_overwrite.archiveOverwritten.end();
- bool overwritten = m_overwrite.overwritten.find(modIndex) != m_overwrite.overwritten.end();
- bool archiveOverwritten = m_overwrite.archiveOverwritten.find(modIndex) != m_overwrite.archiveOverwritten.end();
- bool archiveLooseOverwritten = m_overwrite.archiveLooseOverwritten.find(modIndex) != m_overwrite.archiveLooseOverwritten.end();
+ bool highligth = m_markers.highlight.find(modIndex) != m_markers.highlight.end();
+ bool overwrite = m_markers.overwrite.find(modIndex) != m_markers.overwrite.end();
+ bool archiveOverwrite = m_markers.archiveOverwrite.find(modIndex) != m_markers.archiveOverwrite.end();
+ bool archiveLooseOverwrite = m_markers.archiveOverwritten.find(modIndex) != m_markers.archiveOverwritten.end();
+ bool overwritten = m_markers.overwritten.find(modIndex) != m_markers.overwritten.end();
+ bool archiveOverwritten = m_markers.archiveOverwritten.find(modIndex) != m_markers.archiveOverwritten.end();
+ bool archiveLooseOverwritten = m_markers.archiveLooseOverwritten.find(modIndex) != m_markers.archiveLooseOverwritten.end();
- // TODO: Move this here
- if (modInfo->getHighlight() & ModInfo::HIGHLIGHT_PLUGIN) {
+ if (highligth) {
return Settings::instance().colors().modlistContainsPlugin();
}
else if (overwritten || archiveLooseOverwritten) {
diff --git a/src/modlistview.h b/src/modlistview.h index bf705573..c11c4fbf 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -118,6 +118,10 @@ public slots: //
void refreshFilters();
+ // set highligth markers
+ //
+ void setHighlightedMods(const std::vector<unsigned int>& pluginIndices);
+
protected:
friend class ModListContextMenu;
@@ -239,14 +243,18 @@ private: QtGroupingProxy* m_byCategoryProxy;
QtGroupingProxy* m_byNexusIdProxy;
- struct OverwriteInfo {
+ struct MarkerInfos {
+ // conflicts
std::set<unsigned int> overwrite;
std::set<unsigned int> overwritten;
std::set<unsigned int> archiveOverwrite;
std::set<unsigned int> archiveOverwritten;
std::set<unsigned int> archiveLooseOverwrite;
std::set<unsigned int> archiveLooseOverwritten;
- } m_overwrite;
+
+ // selected plugins
+ std::set<unsigned int> highlight;
+ } m_markers;
ViewMarkingScrollBar* m_scrollbar;
diff --git a/src/pluginlistview.cpp b/src/pluginlistview.cpp index d17b4a2f..7388ae40 100644 --- a/src/pluginlistview.cpp +++ b/src/pluginlistview.cpp @@ -206,9 +206,7 @@ void PluginListView::setup(OrganizerCore& core, MainWindow* mw, Ui::MainWindow* 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(); + mwui->modList->setHighlightedMods(pluginIndices); }); // using a lambda here to avoid storing the mod list actions |
