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 f1c970a75..3a49ae5e1 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 @@ -3,6 +3,7 @@ #include "../cards/additional_info/mana_symbol_widget.h" #include +#include VisualDatabaseDisplayColorFilterWidget::VisualDatabaseDisplayColorFilterWidget(QWidget *parent, FilterTreeModel *_filterModel) @@ -40,6 +41,8 @@ VisualDatabaseDisplayColorFilterWidget::VisualDatabaseDisplayColorFilterWidget(Q &VisualDatabaseDisplayColorFilterWidget::updateColorFilter); connect(this, &VisualDatabaseDisplayColorFilterWidget::filterModeChanged, this, &VisualDatabaseDisplayColorFilterWidget::updateColorFilter); + connect(filterModel, &FilterTreeModel::layoutChanged, this, + [this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplayColorFilterWidget::syncWithFilterModel); }); // Call retranslateUi to set the initial text retranslateUi(); @@ -107,3 +110,52 @@ void VisualDatabaseDisplayColorFilterWidget::updateFilterMode(bool checked) retranslateUi(); // Update the button text emit filterModeChanged(exactMatchMode); } + +void VisualDatabaseDisplayColorFilterWidget::syncWithFilterModel() +{ + QSet currentFilters; + + // Get current filters of type color + for (const auto &filter : filterModel->getFiltersOfType(CardFilter::Attr::AttrColor)) { + if (filter->type() == CardFilter::Type::TypeAnd || filter->type() == CardFilter::Type::TypeAndNot) { + currentFilters.insert(filter->term()); + } + } + + QSet activeFilterList; + + // Iterate over the activeColors map and collect the active colors as strings + for (auto it = activeColors.constBegin(); it != activeColors.constEnd(); ++it) { + if (it.value()) { // Only add active colors + activeFilterList.insert(QString(it.key())); + } + } + + // Check if the filters in the model match the active filters + if (currentFilters == activeFilterList) { + return; + } + + // Remove filters that are in the UI but not in the model + for (const auto &color : activeFilterList) { + if (!currentFilters.contains(color)) { + activeColors[color[0]] = false; // Disable the color + } + } + + // Add filters that are in the model but not in the UI + for (const auto &color : currentFilters) { + if (!activeFilterList.contains(color)) { + qDebug() << "Enabling" << color; + activeColors[color[0]] = true; // Enable the color + } + } + + QList manaSymbolWidgets = findChildren(); + + for (ManaSymbolWidget *manaSymbolWidget : manaSymbolWidgets) { + manaSymbolWidget->setColorActive(activeColors[manaSymbolWidget->getSymbolChar()]); + } + + updateColorFilter(); +} \ No newline at end of file diff --git a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.h b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.h index 0bbd612ac..0eb7f05d0 100644 --- a/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_database_display/visual_database_display_color_filter_widget.h @@ -42,6 +42,7 @@ private slots: void handleColorToggled(QChar color, bool active); void updateColorFilter(); void updateFilterMode(bool checked); + void syncWithFilterModel(); private: FilterTreeModel *filterModel;