From f08bd6aac420a250dc71e5c040f578c569bc6060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Mon, 7 Apr 2025 12:42:10 +0200 Subject: [PATCH] Block signals on every filter, which theoretically, should make it so that strain doesn't increase proportionally with filter amount. --- ...l_database_display_color_filter_widget.cpp | 10 ++++++++++ ...tabase_display_main_type_filter_widget.cpp | 11 +++++++++++ ...ual_database_display_set_filter_widget.cpp | 19 +++++++++++++++++++ ...atabase_display_sub_type_filter_widget.cpp | 3 +++ 4 files changed, 43 insertions(+) diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp index b3308bf3e..966f5b432 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp @@ -1,5 +1,6 @@ #include "visual_database_display_color_filter_widget.h" +#include "../../../../game/filters/filter_tree.h" #include "../cards/additional_info/mana_symbol_widget.h" #include @@ -99,6 +100,8 @@ void VisualDatabaseDisplayColorFilterWidget::updateColorFilter() blockSync = true; // Clear previous filters + filterModel->blockSignals(true); + filterModel->filterTree()->blockSignals(true); filterModel->clearFiltersOfType(CardFilter::Attr::AttrColor); QSet selectedColors; @@ -160,6 +163,13 @@ void VisualDatabaseDisplayColorFilterWidget::updateColorFilter() break; } + filterModel->blockSignals(false); + filterModel->filterTree()->blockSignals(false); + + if (filterModel->filterTree()->nodeAt(0)) { + filterModel->filterTree()->nodeAt(0)->nodeChanged(); + } + emit filterModel->layoutChanged(); blockSync = false; } diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp index 99c0def58..6c43207d3 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_main_type_filter_widget.cpp @@ -1,6 +1,7 @@ #include "visual_database_display_main_type_filter_widget.h" #include "../../../../game/cards/card_database_manager.h" +#include "../../../../game/filters/filter_tree.h" #include "../../../../game/filters/filter_tree_model.h" #include @@ -102,6 +103,8 @@ void VisualDatabaseDisplayMainTypeFilterWidget::handleMainTypeToggled(const QStr void VisualDatabaseDisplayMainTypeFilterWidget::updateMainTypeFilter() { // Clear existing filters related to main type + filterModel->blockSignals(true); + filterModel->filterTree()->blockSignals(true); filterModel->clearFiltersOfType(CardFilter::Attr::AttrMainType); if (exactMatchMode) { @@ -140,6 +143,14 @@ void VisualDatabaseDisplayMainTypeFilterWidget::updateMainTypeFilter() } } } + + filterModel->blockSignals(false); + filterModel->filterTree()->blockSignals(false); + + if (filterModel->filterTree()->nodeAt(0)) { + filterModel->filterTree()->nodeAt(0)->nodeChanged(); + } + emit filterModel->layoutChanged(); } void VisualDatabaseDisplayMainTypeFilterWidget::updateFilterMode(bool checked) diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp index 4e7e0a2c7..3a80cb73f 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_set_filter_widget.cpp @@ -1,6 +1,7 @@ #include "visual_database_display_set_filter_widget.h" #include "../../../../game/cards/card_database_manager.h" +#include "../../../../game/filters/filter_tree.h" #include "../../../../game/filters/filter_tree_model.h" #include @@ -48,6 +49,9 @@ void VisualDatabaseDisplaySetFilterWidget::createSetButtons() std::sort(shared_pointerses.begin(), shared_pointerses.end(), [](const auto &a, const auto &b) { return a->getReleaseDate() > b->getReleaseDate(); }); + int setsToPreactivate = 10; + int setsActivated = 0; + for (const auto &shared_pointer : shared_pointerses) { QString shortName = shared_pointer->getShortName(); QString longName = shared_pointer->getLongName(); @@ -63,7 +67,13 @@ void VisualDatabaseDisplaySetFilterWidget::createSetButtons() // Connect toggle signal connect(button, &QPushButton::toggled, this, [this, shortName](bool checked) { handleSetToggled(shortName, checked); }); + if (setsActivated < setsToPreactivate) { + setsActivated++; + activeSets[shortName] = true; + button->setChecked(true); + } } + updateSetFilter(); updateSetButtonsVisibility(); // Ensure visibility is updated initially } @@ -95,6 +105,8 @@ void VisualDatabaseDisplaySetFilterWidget::handleSetToggled(const QString &setSh void VisualDatabaseDisplaySetFilterWidget::updateSetFilter() { // Clear existing filters related to sets + filterModel->blockSignals(true); + filterModel->filterTree()->blockSignals(true); filterModel->clearFiltersOfType(CardFilter::Attr::AttrSet); if (exactMatchMode) { @@ -131,6 +143,13 @@ void VisualDatabaseDisplaySetFilterWidget::updateSetFilter() } } } + filterModel->blockSignals(false); + filterModel->filterTree()->blockSignals(false); + + if (filterModel->filterTree()->nodeAt(0)) { + filterModel->filterTree()->nodeAt(0)->nodeChanged(); + } + emit filterModel->layoutChanged(); } void VisualDatabaseDisplaySetFilterWidget::syncWithFilterModel() diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp index 5b7f56330..fb14bbae9 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_sub_type_filter_widget.cpp @@ -110,6 +110,7 @@ void VisualDatabaseDisplaySubTypeFilterWidget::handleSubTypeToggled(const QStrin void VisualDatabaseDisplaySubTypeFilterWidget::updateSubTypeFilter() { + filterModel->blockSignals(true); // Clear existing filters related to sub types filterModel->clearFiltersOfType(CardFilter::Attr::AttrSubType); @@ -149,6 +150,8 @@ void VisualDatabaseDisplaySubTypeFilterWidget::updateSubTypeFilter() } } } + filterModel->blockSignals(false); + emit filterModel->layoutChanged(); } void VisualDatabaseDisplaySubTypeFilterWidget::updateFilterMode(bool checked)