From a69dfdc135038a38accb0760a9a28c71b2a589ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 2 Feb 2025 07:46:06 +0100 Subject: [PATCH] Make filtering consider search bar and color identity again. --- ...k_preview_color_identity_filter_widget.cpp | 18 ++++++------- ...eck_preview_color_identity_filter_widget.h | 2 +- ...ual_deck_storage_folder_display_widget.cpp | 4 +++ .../visual_deck_storage_search_widget.cpp | 25 ++++++++----------- .../visual_deck_storage_search_widget.h | 2 +- .../visual_deck_storage_widget.cpp | 16 ++++++++++++ .../visual_deck_storage_widget.h | 4 +++ 7 files changed, 43 insertions(+), 28 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp index 9b92f8994..d854e1588 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.cpp @@ -112,9 +112,9 @@ DeckPreviewColorIdentityFilterWidget::DeckPreviewColorIdentityFilterWidget(Visua // Connect the button's toggled signal connect(toggleButton, &QPushButton::toggled, this, &DeckPreviewColorIdentityFilterWidget::updateFilterMode); connect(this, &DeckPreviewColorIdentityFilterWidget::activeColorsChanged, parent, - &VisualDeckStorageWidget::refreshBannerCards); + &VisualDeckStorageWidget::updateColorFilter); connect(this, &DeckPreviewColorIdentityFilterWidget::filterModeChanged, parent, - &VisualDeckStorageWidget::refreshBannerCards); + &VisualDeckStorageWidget::updateColorFilter); // Call retranslateUi to set the initial text retranslateUi(); @@ -139,10 +139,8 @@ void DeckPreviewColorIdentityFilterWidget::updateFilterMode(bool checked) emit filterModeChanged(exactMatchMode); } -QList DeckPreviewColorIdentityFilterWidget::filterWidgets(QList &widgets) +void DeckPreviewColorIdentityFilterWidget::filterWidgets(QList widgets) { - QList filteredWidgets; - // Check if no colors are active bool noColorsActive = true; for (auto it = activeColors.constBegin(); it != activeColors.constEnd(); ++it) { @@ -154,7 +152,9 @@ QList DeckPreviewColorIdentityFilterWidget::filterWidgets(Q // If no colors are active, return the unfiltered list of widgets if (noColorsActive) { - return widgets; + for (DeckPreviewWidget *previewWidget : widgets) { + previewWidget->filteredByColor = false; + } } for (const auto &widget : widgets) { @@ -192,10 +192,6 @@ QList DeckPreviewColorIdentityFilterWidget::filterWidgets(Q } } - if (matchesFilter) { - filteredWidgets << widget; - } + widget->filteredByColor = !matchesFilter; } - - return filteredWidgets; } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h index e18bf8860..3c9bdb70c 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_color_identity_filter_widget.h @@ -42,7 +42,7 @@ class DeckPreviewColorIdentityFilterWidget : public QWidget public: explicit DeckPreviewColorIdentityFilterWidget(VisualDeckStorageWidget *parent); void retranslateUi(); - QList filterWidgets(QList &widgets); + void filterWidgets(QList widgets); signals: void filterModeChanged(bool exactMatchMode); 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 41e562fc3..b60e8718f 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 @@ -46,6 +46,10 @@ VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget( connect(visualDeckStorageWidget, &VisualDeckStorageWidget::tagFilterUpdated, this, &VisualDeckStorageFolderDisplayWidget::updateVisibility); + connect(visualDeckStorageWidget, &VisualDeckStorageWidget::colorFilterUpdated, this, + &VisualDeckStorageFolderDisplayWidget::updateVisibility); + connect(visualDeckStorageWidget, &VisualDeckStorageWidget::searchFilterUpdated, this, + &VisualDeckStorageFolderDisplayWidget::updateVisibility); createWidgetsForFiles(); createWidgetsForFolders(); diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp index 7828a76f4..8b6006a31 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.cpp @@ -25,7 +25,7 @@ VisualDeckStorageSearchWidget::VisualDeckStorageSearchWidget(VisualDeckStorageWi searchDebounceTimer->start(300); // 300ms debounce }); - connect(searchDebounceTimer, &QTimer::timeout, parent, &VisualDeckStorageWidget::refreshBannerCards); + connect(searchDebounceTimer, &QTimer::timeout, parent, &VisualDeckStorageWidget::updateSearchFilter); } /** @@ -38,23 +38,18 @@ QString VisualDeckStorageSearchWidget::getSearchText() return searchBar->text(); } -QList VisualDeckStorageSearchWidget::filterFiles(QList &widgets, - const QString &searchText) +void VisualDeckStorageSearchWidget::filterWidgets(QList widgets, const QString &searchText) { if (searchText.isEmpty() || searchText.isNull()) { - return widgets; - } - - QList filteredWidgets; - - for (const auto &file : widgets) { - QFileInfo fileInfo(file->filePath); - QString fileName = fileInfo.fileName().toLower(); - - if (fileName.contains(searchText.toLower())) { - filteredWidgets << file; + for (auto widget : widgets) { + widget->filteredBySearch = false; } } - return filteredWidgets; + for (auto file : widgets) { + QFileInfo fileInfo(file->filePath); + QString fileName = fileInfo.fileName().toLower(); + + file->filteredBySearch = !fileName.contains(searchText.toLower()); + } } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.h index 880cc4a47..e8b91bc5b 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_search_widget.h @@ -16,7 +16,7 @@ class VisualDeckStorageSearchWidget : public QWidget public: explicit VisualDeckStorageSearchWidget(VisualDeckStorageWidget *parent); QString getSearchText(); - QList filterFiles(QList &widgets, const QString &searchText); + void filterWidgets(QList widgets, const QString &searchText); private: QHBoxLayout *layout; 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 264acb0e0..c1f00d5cd 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 @@ -103,3 +103,19 @@ void VisualDeckStorageWidget::updateTagFilter() } emit tagFilterUpdated(); } + +void VisualDeckStorageWidget::updateColorFilter() +{ + if (folderWidget) { + deckPreviewColorIdentityFilterWidget->filterWidgets(folderWidget->findChildren()); + } + emit colorFilterUpdated(); +} + +void VisualDeckStorageWidget::updateSearchFilter() +{ + if (folderWidget) { + searchWidget->filterWidgets(folderWidget->findChildren(), searchWidget->getSearchText()); + } + emit searchFilterUpdated(); +} diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h index ac8d3459f..790740cd8 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -32,6 +32,8 @@ public slots: void deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance); void refreshBannerCards(); // Refresh the display of cards based on the current sorting option void updateTagFilter(); + void updateColorFilter(); + void updateSearchFilter(); void updateSortOrder(); signals: @@ -40,6 +42,8 @@ signals: void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance); void deckLoadRequested(QString &filePath); void tagFilterUpdated(); + void colorFilterUpdated(); + void searchFilterUpdated(); private: QVBoxLayout *layout;