Make a setting for filtering to the most recent sets. (#5865)

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2025-04-20 16:39:20 +02:00 committed by GitHub
parent 44ac782978
commit 873e0d346e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 150 additions and 15 deletions

View file

@ -3,12 +3,44 @@
#include "../../../../game/cards/card_database_manager.h" #include "../../../../game/cards/card_database_manager.h"
#include "../../../../game/filters/filter_tree.h" #include "../../../../game/filters/filter_tree.h"
#include "../../../../game/filters/filter_tree_model.h" #include "../../../../game/filters/filter_tree_model.h"
#include "../../../../settings/cache_settings.h"
#include <QLineEdit> #include <QLineEdit>
#include <QPushButton> #include <QPushButton>
#include <QTimer> #include <QTimer>
#include <algorithm> #include <algorithm>
VisualDatabaseDisplayRecentSetFilterSettingsWidget::VisualDatabaseDisplayRecentSetFilterSettingsWidget(QWidget *parent)
: QWidget(parent)
{
layout = new QHBoxLayout(this);
setLayout(layout);
filterToMostRecentSetsCheckBox = new QCheckBox(this);
filterToMostRecentSetsCheckBox->setChecked(
SettingsCache::instance().getVisualDatabaseDisplayFilterToMostRecentSetsEnabled());
connect(filterToMostRecentSetsCheckBox, &QCheckBox::QT_STATE_CHANGED, &SettingsCache::instance(),
&SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsEnabled);
filterToMostRecentSetsAmount = new QSpinBox(this);
filterToMostRecentSetsAmount->setMinimum(1);
filterToMostRecentSetsAmount->setMaximum(100);
filterToMostRecentSetsAmount->setValue(
SettingsCache::instance().getVisualDatabaseDisplayFilterToMostRecentSetsAmount());
connect(filterToMostRecentSetsAmount, QOverload<int>::of(&QSpinBox::valueChanged), &SettingsCache::instance(),
&SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsAmount);
layout->addWidget(filterToMostRecentSetsCheckBox);
layout->addWidget(filterToMostRecentSetsAmount);
retranslateUi();
}
void VisualDatabaseDisplayRecentSetFilterSettingsWidget::retranslateUi()
{
filterToMostRecentSetsCheckBox->setText(tr("Filter to most recent sets"));
}
VisualDatabaseDisplaySetFilterWidget::VisualDatabaseDisplaySetFilterWidget(QWidget *parent, VisualDatabaseDisplaySetFilterWidget::VisualDatabaseDisplaySetFilterWidget(QWidget *parent,
FilterTreeModel *_filterModel) FilterTreeModel *_filterModel)
: QWidget(parent), filterModel(_filterModel) : QWidget(parent), filterModel(_filterModel)
@ -19,6 +51,14 @@ VisualDatabaseDisplaySetFilterWidget::VisualDatabaseDisplaySetFilterWidget(QWidg
layout = new QVBoxLayout(this); layout = new QVBoxLayout(this);
setLayout(layout); setLayout(layout);
recentSetsSettingsWidget = new VisualDatabaseDisplayRecentSetFilterSettingsWidget(this);
layout->addWidget(recentSetsSettingsWidget);
connect(&SettingsCache::instance(), &SettingsCache::visualDatabaseDisplayFilterToMostRecentSetsEnabledChanged, this,
&VisualDatabaseDisplaySetFilterWidget::filterToRecentSets);
connect(&SettingsCache::instance(), &SettingsCache::visualDatabaseDisplayFilterToMostRecentSetsAmountChanged, this,
&VisualDatabaseDisplaySetFilterWidget::filterToRecentSets);
searchBox = new QLineEdit(this); searchBox = new QLineEdit(this);
searchBox->setPlaceholderText(tr("Search sets...")); searchBox->setPlaceholderText(tr("Search sets..."));
layout->addWidget(searchBox); layout->addWidget(searchBox);
@ -47,18 +87,15 @@ void VisualDatabaseDisplaySetFilterWidget::retranslateUi()
void VisualDatabaseDisplaySetFilterWidget::createSetButtons() void VisualDatabaseDisplaySetFilterWidget::createSetButtons()
{ {
SetList shared_pointerses = CardDatabaseManager::getInstance()->getSetList(); SetList allSets = CardDatabaseManager::getInstance()->getSetList();
// Sort by release date // Sort by release date
std::sort(shared_pointerses.begin(), shared_pointerses.end(), std::sort(allSets.begin(), allSets.end(),
[](const auto &a, const auto &b) { return a->getReleaseDate() > b->getReleaseDate(); }); [](const auto &a, const auto &b) { return a->getReleaseDate() > b->getReleaseDate(); });
int setsToPreactivate = 10; for (const auto &set : allSets) {
int setsActivated = 0; QString shortName = set->getShortName();
QString longName = set->getLongName();
for (const auto &shared_pointer : shared_pointerses) {
QString shortName = shared_pointer->getShortName();
QString longName = shared_pointer->getLongName();
auto *button = new QPushButton(longName + " (" + shortName + ")", flowWidget); auto *button = new QPushButton(longName + " (" + shortName + ")", flowWidget);
button->setCheckable(true); button->setCheckable(true);
@ -69,16 +106,49 @@ void VisualDatabaseDisplaySetFilterWidget::createSetButtons()
setButtons[shortName] = button; setButtons[shortName] = button;
// Connect toggle signal // Connect toggle signal
if (setsActivated < setsToPreactivate) {
setsActivated++;
activeSets[shortName] = true;
button->setChecked(true);
}
connect(button, &QPushButton::toggled, this, connect(button, &QPushButton::toggled, this,
[this, shortName](bool checked) { handleSetToggled(shortName, checked); }); [this, shortName](bool checked) { handleSetToggled(shortName, checked); });
} }
updateSetFilter();
updateSetButtonsVisibility(); // Ensure visibility is updated initially filterToRecentSets();
}
void VisualDatabaseDisplaySetFilterWidget::filterToRecentSets()
{
if (SettingsCache::instance().getVisualDatabaseDisplayFilterToMostRecentSetsEnabled()) {
for (auto set : activeSets.keys()) {
activeSets[set] = false;
}
SetList allSets = CardDatabaseManager::getInstance()->getSetList();
// Sort by release date
std::sort(allSets.begin(), allSets.end(),
[](const auto &a, const auto &b) { return a->getReleaseDate() > b->getReleaseDate(); });
int setsToPreactivate = SettingsCache::instance().getVisualDatabaseDisplayFilterToMostRecentSetsAmount();
int setsActivated = 0;
for (const auto &set : allSets) {
QString shortName = set->getShortName();
QString longName = set->getLongName();
auto button = setButtons[shortName];
if (setsActivated < setsToPreactivate) {
setsActivated++;
activeSets[shortName] = true;
button->blockSignals(true);
button->setChecked(true);
button->blockSignals(false);
} else {
break;
}
}
updateSetFilter();
updateSetButtonsVisibility();
}
} }
void VisualDatabaseDisplaySetFilterWidget::updateSetButtonsVisibility() void VisualDatabaseDisplaySetFilterWidget::updateSetButtonsVisibility()
@ -188,7 +258,9 @@ void VisualDatabaseDisplaySetFilterWidget::syncWithFilterModel()
for (const auto &key : setButtons.keys()) { for (const auto &key : setButtons.keys()) {
bool active = selectedSets.contains(key); bool active = selectedSets.contains(key);
activeSets[key] = active; activeSets[key] = active;
setButtons[key]->blockSignals(true);
setButtons[key]->setChecked(active); setButtons[key]->setChecked(active);
setButtons[key]->blockSignals(false);
} }
} }

View file

@ -4,13 +4,28 @@
#include "../../../../game/filters/filter_tree_model.h" #include "../../../../game/filters/filter_tree_model.h"
#include "../general/layout_containers/flow_widget.h" #include "../general/layout_containers/flow_widget.h"
#include <QCheckBox>
#include <QLineEdit> #include <QLineEdit>
#include <QMap> #include <QMap>
#include <QPushButton> #include <QPushButton>
#include <QSpinBox>
#include <QToolButton> #include <QToolButton>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QWidget> #include <QWidget>
class VisualDatabaseDisplayRecentSetFilterSettingsWidget : public QWidget
{
Q_OBJECT
public:
VisualDatabaseDisplayRecentSetFilterSettingsWidget(QWidget *parent);
void retranslateUi();
private:
QHBoxLayout *layout;
QCheckBox *filterToMostRecentSetsCheckBox;
QSpinBox *filterToMostRecentSetsAmount;
};
class VisualDatabaseDisplaySetFilterWidget : public QWidget class VisualDatabaseDisplaySetFilterWidget : public QWidget
{ {
Q_OBJECT Q_OBJECT
@ -18,6 +33,7 @@ public:
explicit VisualDatabaseDisplaySetFilterWidget(QWidget *parent, FilterTreeModel *filterModel); explicit VisualDatabaseDisplaySetFilterWidget(QWidget *parent, FilterTreeModel *filterModel);
void retranslateUi(); void retranslateUi();
void createSetButtons(); void createSetButtons();
void filterToRecentSets();
void updateSetButtonsVisibility(); void updateSetButtonsVisibility();
void handleSetToggled(const QString &setShortName, bool active); void handleSetToggled(const QString &setShortName, bool active);
@ -29,6 +45,7 @@ private:
FilterTreeModel *filterModel; FilterTreeModel *filterModel;
QMap<QString, int> allMainCardTypesWithCount; QMap<QString, int> allMainCardTypesWithCount;
QVBoxLayout *layout; QVBoxLayout *layout;
VisualDatabaseDisplayRecentSetFilterSettingsWidget *recentSetsSettingsWidget;
QLineEdit *searchBox; QLineEdit *searchBox;
FlowWidget *flowWidget; FlowWidget *flowWidget;
QPushButton *toggleButton; // Mode switch button QPushButton *toggleButton; // Mode switch button

View file

@ -285,6 +285,10 @@ SettingsCache::SettingsCache()
visualDeckStorageInGame = settings->value("interface/visualdeckstorageingame", true).toBool(); visualDeckStorageInGame = settings->value("interface/visualdeckstorageingame", true).toBool();
visualDeckStorageSelectionAnimation = visualDeckStorageSelectionAnimation =
settings->value("interface/visualdeckstorageselectionanimation", true).toBool(); settings->value("interface/visualdeckstorageselectionanimation", true).toBool();
visualDatabaseDisplayFilterToMostRecentSetsEnabled =
settings->value("interface/visualdatabasedisplayfiltertomostrecentsetsenabled", true).toBool();
visualDatabaseDisplayFilterToMostRecentSetsAmount =
settings->value("interface/visualdatabasedisplayfiltertomostrecentsetsamount", 10).toInt();
horizontalHand = settings->value("hand/horizontal", true).toBool(); horizontalHand = settings->value("hand/horizontal", true).toBool();
invertVerticalCoordinate = settings->value("table/invert_vertical", false).toBool(); invertVerticalCoordinate = settings->value("table/invert_vertical", false).toBool();
minPlayersForMultiColumnLayout = settings->value("interface/min_players_multicolumn", 4).toInt(); minPlayersForMultiColumnLayout = settings->value("interface/min_players_multicolumn", 4).toInt();
@ -787,6 +791,22 @@ void SettingsCache::setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T va
emit visualDeckStorageSelectionAnimationChanged(visualDeckStorageSelectionAnimation); emit visualDeckStorageSelectionAnimationChanged(visualDeckStorageSelectionAnimation);
} }
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(QT_STATE_CHANGED_T _enabled)
{
visualDatabaseDisplayFilterToMostRecentSetsEnabled = _enabled;
settings->setValue("interface/visualdatabasedisplayfiltertomostrecentsetsenabled",
visualDatabaseDisplayFilterToMostRecentSetsEnabled);
emit visualDatabaseDisplayFilterToMostRecentSetsEnabledChanged(visualDatabaseDisplayFilterToMostRecentSetsEnabled);
}
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int _amount)
{
visualDatabaseDisplayFilterToMostRecentSetsAmount = _amount;
settings->setValue("interface/visualdatabasedisplayfiltertomostrecentsetsamount",
visualDatabaseDisplayFilterToMostRecentSetsAmount);
emit visualDatabaseDisplayFilterToMostRecentSetsAmountChanged(visualDatabaseDisplayFilterToMostRecentSetsAmount);
}
void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand) void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand)
{ {
horizontalHand = static_cast<bool>(_horizontalHand); horizontalHand = static_cast<bool>(_horizontalHand);

View file

@ -71,6 +71,8 @@ signals:
void visualDeckStorageUnusedColorIdentitiesOpacityChanged(bool value); void visualDeckStorageUnusedColorIdentitiesOpacityChanged(bool value);
void visualDeckStorageInGameChanged(bool enabled); void visualDeckStorageInGameChanged(bool enabled);
void visualDeckStorageSelectionAnimationChanged(bool enabled); void visualDeckStorageSelectionAnimationChanged(bool enabled);
void visualDatabaseDisplayFilterToMostRecentSetsEnabledChanged(bool enabled);
void visualDatabaseDisplayFilterToMostRecentSetsAmountChanged(int amount);
void horizontalHandChanged(); void horizontalHandChanged();
void handJustificationChanged(); void handJustificationChanged();
void invertVerticalCoordinateChanged(); void invertVerticalCoordinateChanged();
@ -151,6 +153,8 @@ private:
bool visualDeckStorageAlwaysConvert; bool visualDeckStorageAlwaysConvert;
bool visualDeckStorageInGame; bool visualDeckStorageInGame;
bool visualDeckStorageSelectionAnimation; bool visualDeckStorageSelectionAnimation;
bool visualDatabaseDisplayFilterToMostRecentSetsEnabled;
int visualDatabaseDisplayFilterToMostRecentSetsAmount;
bool horizontalHand; bool horizontalHand;
bool invertVerticalCoordinate; bool invertVerticalCoordinate;
int minPlayersForMultiColumnLayout; int minPlayersForMultiColumnLayout;
@ -484,6 +488,14 @@ public:
{ {
return visualDeckStorageSelectionAnimation; return visualDeckStorageSelectionAnimation;
} }
bool getVisualDatabaseDisplayFilterToMostRecentSetsEnabled() const
{
return visualDatabaseDisplayFilterToMostRecentSetsEnabled;
}
int getVisualDatabaseDisplayFilterToMostRecentSetsAmount() const
{
return visualDatabaseDisplayFilterToMostRecentSetsAmount;
}
bool getHorizontalHand() const bool getHorizontalHand() const
{ {
return horizontalHand; return horizontalHand;
@ -827,6 +839,8 @@ public slots:
void setVisualDeckStorageAlwaysConvert(bool _visualDeckStorageAlwaysConvert); void setVisualDeckStorageAlwaysConvert(bool _visualDeckStorageAlwaysConvert);
void setVisualDeckStorageInGame(QT_STATE_CHANGED_T value); void setVisualDeckStorageInGame(QT_STATE_CHANGED_T value);
void setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T value); void setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T value);
void setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(QT_STATE_CHANGED_T _enabled);
void setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int _amount);
void setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand); void setHorizontalHand(QT_STATE_CHANGED_T _horizontalHand);
void setInvertVerticalCoordinate(QT_STATE_CHANGED_T _invertVerticalCoordinate); void setInvertVerticalCoordinate(QT_STATE_CHANGED_T _invertVerticalCoordinate);
void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout); void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout);

View file

@ -256,6 +256,12 @@ void SettingsCache::setVisualDeckStorageInGame(QT_STATE_CHANGED_T /* value */)
void SettingsCache::setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T /* value */) void SettingsCache::setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T /* value */)
{ {
} }
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(QT_STATE_CHANGED_T /* _enabled */)
{
}
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int /* _amount */)
{
}
void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */) void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */)
{ {
} }

View file

@ -260,6 +260,12 @@ void SettingsCache::setVisualDeckStorageInGame(QT_STATE_CHANGED_T /* value */)
void SettingsCache::setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T /* value */) void SettingsCache::setVisualDeckStorageSelectionAnimation(QT_STATE_CHANGED_T /* value */)
{ {
} }
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsEnabled(QT_STATE_CHANGED_T /* _enabled */)
{
}
void SettingsCache::setVisualDatabaseDisplayFilterToMostRecentSetsAmount(int /* _amount */)
{
}
void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */) void SettingsCache::setHorizontalHand(QT_STATE_CHANGED_T /* _horizontalHand */)
{ {
} }