diff --git a/cockatrice/cockatrice.qrc b/cockatrice/cockatrice.qrc
index 0f7bca2f1..6e90d342d 100644
--- a/cockatrice/cockatrice.qrc
+++ b/cockatrice/cockatrice.qrc
@@ -15,18 +15,23 @@
resources/icons/arrow_top_green.svg
resources/icons/arrow_up_green.svg
resources/icons/arrow_undo.svg
+ resources/icons/circle_half_stroke.svg
resources/icons/clearsearch.svg
resources/icons/cogwheel.svg
resources/icons/conceded.svg
resources/icons/decrement.svg
resources/icons/delete.svg
+ resources/icons/dragon.svg
resources/icons/dropdown_collapsed.svg
resources/icons/dropdown_expanded.svg
+ resources/icons/floppy_disk.svg
resources/icons/forgot_password.svg
+ resources/icons/gear.svg
resources/icons/increment.svg
resources/icons/info.svg
resources/icons/lock.svg
resources/icons/not_ready_start.svg
+ resources/icons/pen_to_square.svg
resources/icons/pencil.svg
resources/icons/pin.svg
resources/icons/player.svg
@@ -34,7 +39,9 @@
resources/icons/reload.svg
resources/icons/remove_row.svg
resources/icons/rename.svg
+ resources/icons/scale_balanced.svg
resources/icons/scales.svg
+ resources/icons/scroll.svg
resources/icons/search.svg
resources/icons/settings.svg
resources/icons/share.svg
diff --git a/cockatrice/resources/icons/circle_half_stroke.svg b/cockatrice/resources/icons/circle_half_stroke.svg
new file mode 100644
index 000000000..42e4dbca2
--- /dev/null
+++ b/cockatrice/resources/icons/circle_half_stroke.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/dragon.svg b/cockatrice/resources/icons/dragon.svg
new file mode 100644
index 000000000..f45af39ef
--- /dev/null
+++ b/cockatrice/resources/icons/dragon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/floppy_disk.svg b/cockatrice/resources/icons/floppy_disk.svg
new file mode 100644
index 000000000..3c5b5054d
--- /dev/null
+++ b/cockatrice/resources/icons/floppy_disk.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/gear.svg b/cockatrice/resources/icons/gear.svg
new file mode 100644
index 000000000..fdee3a297
--- /dev/null
+++ b/cockatrice/resources/icons/gear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/pen_to_square.svg b/cockatrice/resources/icons/pen_to_square.svg
new file mode 100644
index 000000000..60ff1d9c4
--- /dev/null
+++ b/cockatrice/resources/icons/pen_to_square.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/scale_balanced.svg b/cockatrice/resources/icons/scale_balanced.svg
new file mode 100644
index 000000000..fae468d38
--- /dev/null
+++ b/cockatrice/resources/icons/scale_balanced.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/resources/icons/scroll.svg b/cockatrice/resources/icons/scroll.svg
new file mode 100644
index 000000000..f4828e679
--- /dev/null
+++ b/cockatrice/resources/icons/scroll.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
index 3ca709071..57c6da762 100644
--- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
+++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.cpp
@@ -31,12 +31,12 @@ VisualDatabaseDisplayColorFilterWidget::VisualDatabaseDisplayColorFilterWidget(Q
&VisualDatabaseDisplayColorFilterWidget::handleColorToggled);
}
- toggleButton = new QPushButton(this);
- toggleButton->setCheckable(true);
- layout->addWidget(toggleButton);
+ modeComboBox = new QComboBox(this);
+ layout->addWidget(modeComboBox);
+
+ connect(modeComboBox, QOverload::of(&QComboBox::currentIndexChanged), this,
+ &VisualDatabaseDisplayColorFilterWidget::updateFilterMode);
- // Connect the button's toggled signal
- connect(toggleButton, &QPushButton::toggled, this, &VisualDatabaseDisplayColorFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplayColorFilterWidget::syncWithFilterModel); });
@@ -46,19 +46,22 @@ VisualDatabaseDisplayColorFilterWidget::VisualDatabaseDisplayColorFilterWidget(Q
void VisualDatabaseDisplayColorFilterWidget::retranslateUi()
{
- switch (currentMode) {
- case FilterMode::ExactMatch:
- toggleButton->setText(tr("Mode: Exact Match"));
- break;
- case FilterMode::Includes:
- toggleButton->setText(tr("Mode: Includes"));
- break;
- case FilterMode::IncludeExclude:
- toggleButton->setText(tr("Mode: Include/Exclude"));
- break;
+ modeComboBox->blockSignals(true);
+ modeComboBox->clear();
+
+ modeComboBox->addItem(tr("Exact match"), QVariant::fromValue(FilterMode::ExactMatch));
+ modeComboBox->addItem(tr("Includes"), QVariant::fromValue(FilterMode::Includes));
+ modeComboBox->addItem(tr("Include / Exclude"), QVariant::fromValue(FilterMode::IncludeExclude));
+
+ modeComboBox->setToolTip(tr("How selected and unselected colors are combined in the filter"));
+
+ // Restore current mode
+ const int index = modeComboBox->findData(QVariant::fromValue(currentMode));
+ if (index >= 0) {
+ modeComboBox->setCurrentIndex(index);
}
- toggleButton->setToolTip(tr("Filter mode (AND/OR/NOT conjunctions of filters)"));
+ modeComboBox->blockSignals(false);
}
void VisualDatabaseDisplayColorFilterWidget::handleColorToggled(QChar color, bool active)
@@ -145,24 +148,19 @@ void VisualDatabaseDisplayColorFilterWidget::removeFilter(QChar color)
void VisualDatabaseDisplayColorFilterWidget::updateFilterMode()
{
- switch (currentMode) {
- case FilterMode::ExactMatch:
- currentMode = FilterMode::Includes; // Switch to Includes
- break;
- case FilterMode::Includes:
- currentMode = FilterMode::IncludeExclude; // Switch to Include/Exclude
- break;
- case FilterMode::IncludeExclude:
- currentMode = FilterMode::ExactMatch; // Switch to Exact Match
- break;
+ const QVariant data = modeComboBox->currentData();
+ if (!data.isValid()) {
+ return;
}
+ currentMode = data.value();
+
filterModel->blockSignals(true);
filterModel->filterTree()->blockSignals(true);
filterModel->clearFiltersOfType(CardFilter::Attr::AttrColor);
- QList manaSymbolWidgets = findChildren();
+ const QList manaSymbolWidgets = findChildren();
for (ManaSymbolWidget *manaSymbolWidget : manaSymbolWidgets) {
handleColorToggled(manaSymbolWidget->getSymbolChar(), manaSymbolWidget->isColorActive());
@@ -173,9 +171,7 @@ void VisualDatabaseDisplayColorFilterWidget::updateFilterMode()
emit filterModel->filterTree()->changed();
emit filterModel->layoutChanged();
-
- retranslateUi(); // Update button text based on the mode
- emit filterModeChanged(currentMode); // Signal mode change
+ emit filterModeChanged(currentMode);
}
void VisualDatabaseDisplayColorFilterWidget::setManaSymbolActive(QChar color, bool active)
diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h
index 7b4c365c0..698ea9e97 100644
--- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h
+++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_color_filter_widget.h
@@ -9,8 +9,8 @@
#include "../../../filters/filter_tree_model.h"
+#include
#include
-#include
#include
class VisualDatabaseDisplayColorFilterCircleWidget : public QWidget
@@ -39,6 +39,8 @@ enum class FilterMode
IncludeExclude // Include selected colors (OR) and exclude unselected colors (AND NOT).
};
+Q_DECLARE_METATYPE(FilterMode)
+
class VisualDatabaseDisplayColorFilterWidget : public QWidget
{
Q_OBJECT
@@ -62,7 +64,7 @@ private slots:
private:
FilterTreeModel *filterModel;
QHBoxLayout *layout;
- QPushButton *toggleButton;
+ QComboBox *modeComboBox;
FilterMode currentMode = FilterMode::Includes; // Default mode
};
diff --git a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp
index 1509dbaa7..28fb46c6c 100644
--- a/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp
+++ b/cockatrice/src/interface/widgets/visual_database_display/visual_database_display_filter_toolbar_widget.cpp
@@ -53,27 +53,27 @@ VisualDatabaseDisplayFilterToolbarWidget::VisualDatabaseDisplayFilterToolbarWidg
});
quickFilterSaveLoadWidget = new SettingsButtonWidget(this);
- quickFilterSaveLoadWidget->setButtonIcon(QPixmap("theme:icons/lock"));
+ quickFilterSaveLoadWidget->setButtonIcon(QPixmap("theme:icons/floppy_disk"));
quickFilterSaveLoadWidget->setButtonText("Save/Load");
quickFilterNameWidget = new SettingsButtonWidget(this);
- quickFilterNameWidget->setButtonIcon(QPixmap("theme:icons/rename"));
+ quickFilterNameWidget->setButtonIcon(QPixmap("theme:icons/pen_to_square"));
quickFilterNameWidget->setButtonText("Name");
quickFilterMainTypeWidget = new SettingsButtonWidget(this);
- quickFilterMainTypeWidget->setButtonIcon(QPixmap("theme:icons/player"));
+ quickFilterMainTypeWidget->setButtonIcon(QPixmap("theme:icons/circle_half_stroke"));
quickFilterMainTypeWidget->setButtonText("Main Type");
quickFilterSubTypeWidget = new SettingsButtonWidget(this);
- quickFilterSubTypeWidget->setButtonIcon(QPixmap("theme:icons/player"));
+ quickFilterSubTypeWidget->setButtonIcon(QPixmap("theme:icons/dragon"));
quickFilterSubTypeWidget->setButtonText("Sub Type");
quickFilterSetWidget = new SettingsButtonWidget(this);
- quickFilterSetWidget->setButtonIcon(QPixmap("theme:icons/scales"));
+ quickFilterSetWidget->setButtonIcon(QPixmap("theme:icons/scroll"));
quickFilterSetWidget->setButtonText("Sets");
quickFilterFormatLegalityWidget = new SettingsButtonWidget(this);
- quickFilterFormatLegalityWidget->setButtonIcon(QPixmap("theme:icons/player"));
+ quickFilterFormatLegalityWidget->setButtonIcon(QPixmap("theme:icons/scale_balanced"));
quickFilterFormatLegalityWidget->setButtonText("Formats");
retranslateUi();
@@ -110,12 +110,13 @@ void VisualDatabaseDisplayFilterToolbarWidget::initialize()
filterContainerLayout->addWidget(sortColumnCombo);
filterContainerLayout->addWidget(sortOrderCombo);
filterContainerLayout->addWidget(filterByLabel);
- filterContainerLayout->addWidget(quickFilterSaveLoadWidget);
filterContainerLayout->addWidget(quickFilterNameWidget);
filterContainerLayout->addWidget(quickFilterMainTypeWidget);
filterContainerLayout->addWidget(quickFilterSubTypeWidget);
filterContainerLayout->addWidget(quickFilterSetWidget);
filterContainerLayout->addWidget(quickFilterFormatLegalityWidget);
+ filterContainerLayout->addStretch();
+ filterContainerLayout->addWidget(quickFilterSaveLoadWidget);
}
void VisualDatabaseDisplayFilterToolbarWidget::retranslateUi()