From e57ee8e9c9745a1ec20dfdc2439223fe3a0d5847 Mon Sep 17 00:00:00 2001 From: ebbit1q Date: Mon, 2 Mar 2026 23:06:05 +0100 Subject: [PATCH] fix set sorting (#6630) --- .../widgets/dialogs/dlg_manage_sets.cpp | 32 +++++++++---------- .../widgets/dialogs/dlg_manage_sets.h | 8 +++-- .../database/card_set/card_sets_model.cpp | 2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp index 5e6a6a62d..a4f54564f 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.cpp @@ -20,8 +20,6 @@ #include #include -#define SORT_RESET -1 - WndSets::WndSets(QWidget *parent) : QMainWindow(parent) { setOrderIsSorted = false; @@ -97,7 +95,6 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) view->setDropIndicatorShown(true); view->setDragDropMode(QAbstractItemView::InternalMove); - view->sortByColumn(SetsModel::SortKeyCol, Qt::AscendingOrder); view->setColumnHidden(SetsModel::SortKeyCol, true); view->setColumnHidden(SetsModel::IsKnownCol, true); view->setColumnHidden(SetsModel::PriorityCol, true); @@ -196,10 +193,10 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) auto headerState = SettingsCache::instance().layouts().getSetsDialogHeaderState(); if (!headerState.isEmpty()) { view->header()->restoreState(headerState); - view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); } else { view->header()->resizeSections(QHeaderView::ResizeToContents); } + resetSort(); connect(view->header(), &QHeaderView::geometriesChanged, this, &WndSets::saveHeaderState); } @@ -239,6 +236,13 @@ void WndSets::rebuildMainLayout(int actionToTake) } } +void WndSets::resetSort() +{ + view->sortByColumn(SetsModel::SortKeyCol, Qt::AscendingOrder); + sortIndex = -1; + sortWarning->setVisible(false); +} + void WndSets::includeRebalancedCardsChanged(bool _includeRebalancedCards) { includeRebalancedCards = _includeRebalancedCards; @@ -260,9 +264,9 @@ void WndSets::actRestore() void WndSets::actRestoreOriginalOrder() { - view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); model->restoreOriginalOrder(); - sortWarning->setVisible(false); + view->selectionModel()->reset(); + resetSort(); } void WndSets::actDisableResetButton(const QString &filterString) @@ -288,11 +292,12 @@ void WndSets::actSort(int index) sortIndex = index; sortWarning->setVisible(true); } else { - view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); - sortIndex = -1; - sortWarning->setVisible(false); + resetSort(); } } + if (!view->selectionModel()->selection().empty()) { + view->scrollTo(view->selectionModel()->selectedRows().first()); + } } void WndSets::actIgnoreWarning() @@ -301,23 +306,18 @@ void WndSets::actIgnoreWarning() return; } model->sort(sortIndex, sortOrder); - view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); - sortIndex = -1; - sortWarning->setVisible(false); + resetSort(); } void WndSets::actDisableSortButtons(int index) { - if (index != SORT_RESET) { + if (index != SetsModel::SortKeyCol) { view->setDragEnabled(false); setOrderIsSorted = true; } else { setOrderIsSorted = false; view->setDragEnabled(true); } - if (!view->selectionModel()->selection().empty()) { - view->scrollTo(view->selectionModel()->selectedRows().first()); - } actToggleButtons(view->selectionModel()->selection(), QItemSelection()); } diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h index d7341caff..d9b77a76e 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_manage_sets.h @@ -45,9 +45,6 @@ private: QHBoxLayout *filterBox; int sortIndex; Qt::SortOrder sortOrder; - void closeEvent(QCloseEvent *ev) override; - void saveHeaderState(); - void rebuildMainLayout(int actionToTake); bool setOrderIsSorted; bool includeRebalancedCards; enum @@ -56,6 +53,11 @@ private: SOME_SETS_SELECTED }; + void closeEvent(QCloseEvent *ev) override; + void saveHeaderState(); + void rebuildMainLayout(int actionToTake); + void resetSort(); + public: explicit WndSets(QWidget *parent = nullptr); ~WndSets() override; diff --git a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp index b678e8276..f6dc4f9cf 100644 --- a/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp +++ b/libcockatrice_models/libcockatrice/models/database/card_set/card_sets_model.cpp @@ -45,7 +45,7 @@ QVariant SetsModel::data(const QModelIndex &index, int role) const switch (index.column()) { case SortKeyCol: - return QString("%1").arg(set->getSortKey(), 8, 10, QChar('0')); + return QString("%1").arg(index.row(), 8, 10, QChar('0')); case IsKnownCol: return set->getIsKnown(); case SetTypeCol: