From 08e743470d729ce683db6c2af2f97489b8886a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 2 Feb 2025 09:45:21 +0100 Subject: [PATCH] Sort correctly. --- .../deck_preview_tag_addition_widget.cpp | 2 +- .../deck_preview/deck_preview_widget.cpp | 8 +++++--- .../deck_preview/deck_preview_widget.h | 6 ++++-- ...sual_deck_storage_folder_display_widget.cpp | 3 +-- ...visual_deck_storage_folder_display_widget.h | 4 ++++ .../visual_deck_storage_sort_widget.cpp | 18 +++++++++++++++++- .../visual_deck_storage_sort_widget.h | 4 +++- .../visual_deck_storage_widget.cpp | 17 ++++++++++++----- 8 files changed, 47 insertions(+), 15 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp index 72347fd48..16a87bc8d 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_tag_addition_widget.cpp @@ -39,7 +39,7 @@ void DeckPreviewTagAdditionWidget::mousePressEvent(QMouseEvent *event) emit tagClicked(); } QWidget::mousePressEvent(event); - QStringList knownTags = parent->parent->parent->tagFilterWidget->getAllKnownTags(); + QStringList knownTags = parent->parent->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags(); QStringList activeTags = parent->deckLoader->getTags(); bool canAddTags = true; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index 782e2c768..ecd4f4a79 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -9,15 +9,17 @@ #include #include -DeckPreviewWidget::DeckPreviewWidget(VisualDeckStorageWidget *_parent, const QString &_filePath) - : QWidget(_parent), parent(_parent), filePath(_filePath) +DeckPreviewWidget::DeckPreviewWidget(QWidget *_parent, + VisualDeckStorageWidget *_visualDeckStorageWidget, + const QString &_filePath) + : QWidget(_parent), visualDeckStorageWidget(_visualDeckStorageWidget), filePath(_filePath) { layout = new QVBoxLayout(this); setLayout(layout); deckLoader = new DeckLoader(); connect(deckLoader, &DeckLoader::loadFinished, this, &DeckPreviewWidget::initializeUi); - connect(deckLoader, &DeckLoader::loadFinished, parent->tagFilterWidget, + connect(deckLoader, &DeckLoader::loadFinished, visualDeckStorageWidget->tagFilterWidget, &VisualDeckStorageTagFilterWidget::refreshTags); deckLoader->loadFromFileAsync(filePath, DeckLoader::getFormatFromName(filePath), false); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h index 2acb748ff..8be7d07ac 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h @@ -16,10 +16,12 @@ class DeckPreviewWidget final : public QWidget { Q_OBJECT public: - explicit DeckPreviewWidget(VisualDeckStorageWidget *_parent, const QString &_filePath); + explicit DeckPreviewWidget(QWidget *_parent, + VisualDeckStorageWidget *_visualDeckStorageWidget, + const QString &_filePath); QString getColorIdentity(); - VisualDeckStorageWidget *parent; + VisualDeckStorageWidget *visualDeckStorageWidget; QVBoxLayout *layout; QString filePath; DeckLoader *deckLoader; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp index e068a9286..1ac62b784 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp @@ -67,7 +67,7 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles() { QList allDecks; for (const QString &file : getAllFiles()) { - auto *display = new DeckPreviewWidget(visualDeckStorageWidget, file); + auto *display = new DeckPreviewWidget(flowWidget, visualDeckStorageWidget, file); connect(display, &DeckPreviewWidget::deckPreviewClicked, visualDeckStorageWidget, &VisualDeckStorageWidget::deckPreviewClickedEvent); @@ -108,7 +108,6 @@ bool VisualDeckStorageFolderDisplayWidget::checkVisibility() if (flowWidget) { // Iterate through all DeckPreviewWidgets for (DeckPreviewWidget *display : flowWidget->findChildren()) { - // Get tags from each DeckPreviewWidget if (display->checkVisibility()) { atLeastOneWidgetVisible = true; } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h index 32fc484d8..7e1279e6b 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h @@ -22,6 +22,10 @@ public: QStringList gatherAllTagsFromFlowWidget() const; [[nodiscard]] QStringList getAllFiles() const; [[nodiscard]] QStringList getAllSubFolders() const; + FlowWidget *getFlowWidget() const + { + return flowWidget; + }; public slots: void updateVisibility(); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp index 9dfcc0870..ee85c14b0 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.cpp @@ -63,7 +63,23 @@ void VisualDeckStorageSortWidget::updateSortOrder() emit sortOrderChanged(); } -QList &VisualDeckStorageSortWidget::filterFiles(QList &widgets) +void VisualDeckStorageSortWidget::sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget) +{ + auto children = folderWidget->getFlowWidget()->findChildren(Qt::FindChildOption::FindDirectChildrenOnly); + for (auto widget : children) { + auto deckPreviewWidgets = + widget->findChildren(Qt::FindChildOption::FindDirectChildrenOnly); + auto newOrder = filterFiles(deckPreviewWidgets); + for (DeckPreviewWidget *previewWidget : newOrder) { + folderWidget->getFlowWidget()->removeWidget(previewWidget); + } + for (DeckPreviewWidget *previewWidget : newOrder) { + folderWidget->getFlowWidget()->addWidget(previewWidget); + } + } +} + +QList VisualDeckStorageSortWidget::filterFiles(QList widgets) { // Sort the widgets list based on the current sort order std::sort(widgets.begin(), widgets.end(), [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) { diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h index 58838f3ac..1aac55d2d 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_sort_widget.h @@ -8,6 +8,7 @@ #include class VisualDeckStorageWidget; +class VisualDeckStorageFolderDisplayWidget; class VisualDeckStorageSortWidget : public QWidget { Q_OBJECT @@ -16,8 +17,9 @@ public: explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent); void retranslateUi(); void updateSortOrder(); + void sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget); QString getSearchText(); - QList &filterFiles(QList &widgets); + QList filterFiles(QList widgets); signals: void sortOrderChanged(); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index 626d2c126..4a692c963 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -74,11 +74,6 @@ void VisualDeckStorageWidget::retranslateUi() databaseLoadIndicator->setText(tr("Loading database ...")); } -void VisualDeckStorageWidget::updateSortOrder() -{ - refreshBannerCards(); // Refresh the banner cards with the new sort order -} - void VisualDeckStorageWidget::deckPreviewClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance) { emit deckPreviewClicked(event, instance); @@ -96,6 +91,18 @@ void VisualDeckStorageWidget::refreshBannerCards() scrollArea->setWidget(folderWidget); } +void VisualDeckStorageWidget::updateSortOrder() +{ + if (folderWidget) { + qDebug() << "Updating sort order"; + sortWidget->sortFolder(folderWidget); + for (VisualDeckStorageFolderDisplayWidget *subFolderWidget : + folderWidget->findChildren()) { + sortWidget->sortFolder(subFolderWidget); + } + } +} + void VisualDeckStorageWidget::updateTagFilter() { if (folderWidget) {