From acdea8854140b329c13765abb9ea322dacd95ba6 Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Thu, 31 Dec 2020 13:35:56 +0100 Subject: Maintain selection while filtering (again). --- src/modlistsortproxy.cpp | 3 +++ src/modlistsortproxy.h | 1 + src/modlistview.cpp | 12 ++++++------ 3 files changed, 10 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 0dc2be83..455daa76 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -71,6 +71,7 @@ void ModListSortProxy::setCriteria(const std::vector& criteria) m_Criteria = criteria; updateFilterActive(); invalidateFilter(); + emit filterInvalidated(); } } @@ -238,6 +239,7 @@ void ModListSortProxy::updateFilter(const QString& filter) m_Filter = filter; updateFilterActive(); invalidateFilter(); + emit filterInvalidated(); } bool ModListSortProxy::hasConflictFlag(const std::vector &flags) const @@ -557,6 +559,7 @@ void ModListSortProxy::setOptions( m_FilterMode = mode; m_FilterSeparators = separators; invalidateFilter(); + emit filterInvalidated(); } } diff --git a/src/modlistsortproxy.h b/src/modlistsortproxy.h index fed05188..448ee38d 100644 --- a/src/modlistsortproxy.h +++ b/src/modlistsortproxy.h @@ -121,6 +121,7 @@ public slots: signals: void filterActive(bool active); + void filterInvalidated(); protected: diff --git a/src/modlistview.cpp b/src/modlistview.cpp index fe2517c2..7e9a0438 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -747,15 +747,10 @@ void ModListView::setup(OrganizerCore& core, CategoryFactory& factory, MainWindo }); connect(m_core->modList(), &ModList::externalFolderDropped, this, &ModListView::onExternalFolderDropped); - connect(m_sortProxy, &ModListSortProxy::filterActive, this, &ModListView::onModFilterActive); - connect(m_sortProxy, &QAbstractItemModel::layoutChanged, this, [&]() { - if (hasCollapsibleSeparators()) { - m_byPriorityProxy->refreshExpandedItems(); - } - }); connect(selectionModel(), &QItemSelectionModel::selectionChanged, this, &ModListView::onSelectionChanged); // filters + connect(m_sortProxy, &ModListSortProxy::filterActive, this, &ModListView::onModFilterActive); connect(m_filters.get(), &FilterList::criteriaChanged, [=](auto&& v) { onFiltersCriteria(v); }); connect(m_filters.get(), &FilterList::optionsChanged, [=](auto&& mode, auto&& sep) { setFilterOptions(mode, sep); }); connect(ui.filter, &QLineEdit::textChanged, m_sortProxy, &ModListSortProxy::updateFilter); @@ -763,6 +758,11 @@ void ModListView::setup(OrganizerCore& core, CategoryFactory& factory, MainWindo ui.filter->clear(); m_filters->clearSelection(); }); + connect(m_sortProxy, &ModListSortProxy::filterInvalidated, [=]() { + if (hasCollapsibleSeparators()) { + m_byPriorityProxy->refreshExpandedItems(); + } + }); } void ModListView::restoreState(const Settings& s) -- cgit v1.3.1