mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-25 16:13:54 -07:00
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:
parent
44ac782978
commit
873e0d346e
6 changed files with 150 additions and 15 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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 */)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 */)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue