From 28240aab2b66efc7af3925b721ecd0cc61cec971 Mon Sep 17 00:00:00 2001 From: Andrew Rabert <6550543+andrewrabert@users.noreply.github.com> Date: Sun, 14 Dec 2025 20:34:56 -0500 Subject: [PATCH] [gui,utils,filters] Fix multiple columns (#761) --- include/utils/helpers.h | 10 +++++++--- src/gui/widgets/autoheaderview.cpp | 13 +++++++++---- src/plugins/filters/filterwidget.cpp | 7 +++++-- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/utils/helpers.h b/include/utils/helpers.h index 217e1de3..48fc9257 100755 --- a/include/utils/helpers.h +++ b/include/utils/helpers.h @@ -72,10 +72,14 @@ Cntr filter(const Cntr& container, Pred pred) template Cntr sortByIndexes(const Cntr& target, const std::vector& indexes) { - Cntr sorted(indexes.size()); + Cntr sorted; + sorted.reserve(indexes.size()); - for(size_t i{0}; i < indexes.size(); ++i) { - sorted[i] = target[indexes.at(i)]; + const auto targetSize = static_cast(target.size()); + for(const int index : indexes) { + if(index >= 0 && index < targetSize) { + sorted.push_back(target[index]); + } } return sorted; diff --git a/src/gui/widgets/autoheaderview.cpp b/src/gui/widgets/autoheaderview.cpp index e0e39f0e..90e1b0c8 100644 --- a/src/gui/widgets/autoheaderview.cpp +++ b/src/gui/widgets/autoheaderview.cpp @@ -630,12 +630,17 @@ void AutoHeaderView::restoreHeaderState(const QByteArray& state) qCDebug(AUTO_HEADER) << "Restoring state for" << sectionCount << "section(s)"; - for(int section{0}; section < sectionCount; ++section) { - setSectionHidden(section, pixelWidths[section] < MinSectionWidth); - moveSection(visualIndex(logicalIndexes[section]), section); + for(int targetVisual{0}; targetVisual < sectionCount; ++targetVisual) { + setSectionHidden(targetVisual, pixelWidths[targetVisual] < MinSectionWidth); + + const int targetLogical = logicalIndexes[targetVisual]; + const int currentVisual = visualIndex(targetLogical); + if(currentVisual != targetVisual) { + moveSection(currentVisual, targetVisual); + } if(!p->m_stretchEnabled) { - resizeSection(section, pixelWidths[section]); + resizeSection(targetVisual, pixelWidths[targetVisual]); } } } diff --git a/src/plugins/filters/filterwidget.cpp b/src/plugins/filters/filterwidget.cpp index 0f6c0f91..b5750078 100644 --- a/src/plugins/filters/filterwidget.cpp +++ b/src/plugins/filters/filterwidget.cpp @@ -560,8 +560,11 @@ void FilterWidget::setupConnections() m_model->setColumnOrder(Utils::logicalIndexOrder(m_header)); } }); - QObject::connect(m_header, &QHeaderView::sectionMoved, this, - [this]() { m_model->setColumnOrder(Utils::logicalIndexOrder(m_header)); }); + QObject::connect(m_header, &QHeaderView::sectionMoved, this, [this]() { + if(m_view->viewMode() == ExpandedTreeView::ViewMode::Icon) { + m_model->setColumnOrder(Utils::logicalIndexOrder(m_header)); + } + }); QObject::connect(m_header, &QHeaderView::sortIndicatorChanged, m_sortProxy, &QSortFilterProxyModel::sort); QObject::connect(m_header, &ExpandedTreeView::customContextMenuRequested, this, &FilterWidget::filterHeaderMenu); QObject::connect(m_view->selectionModel(), &QItemSelectionModel::selectionChanged, this,