[VisualDatabase] Debounce filter refreshes with QtUtils::Debouncer (#7624)

Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
BruebachL 2026-10-24 22:48:11 +02:00 • committed by GitHub
parent 28c8474f03
commit 77a3875c25
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 22 additions and 18 deletions

View file

@ -11,7 +11,6 @@
#include <QPersistentModelIndex>
#include <QSharedPointer>
#include <QString>
#include <QTimer>
#include <QVariant>
#include <QtGlobal>
#include <libcockatrice/filters/filter_tree.h>
@ -49,7 +48,7 @@ VisualDatabaseDisplayColorFilterWidget::VisualDatabaseDisplayColorFilterWidget(Q
&VisualDatabaseDisplayColorFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplayColorFilterWidget::syncWithFilterModel); });
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
// Call retranslateUi to set the initial text
retranslateUi();

View file

@ -12,6 +12,7 @@
#include <QList>
#include <QMetaType>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class FilterTreeModel;
@ -71,6 +72,7 @@ private:
QHBoxLayout *layout;
QComboBox *modeComboBox;
FilterMode currentMode = FilterMode::Includes; // Default mode
QtUtils::Debouncer syncDebouncer{100};
};
#endif // VISUAL_DATABASE_DISPLAY_COLOR_FILTER_WIDGET_H

View file

@ -16,7 +16,6 @@
#include <QSet>
#include <QSharedPointer>
#include <QSpinBox>
#include <QTimer>
#include <QVBoxLayout>
#include <QtGlobal>
#include <algorithm>
@ -72,9 +71,8 @@ VisualDatabaseDisplayFormatLegalityFilterWidget::VisualDatabaseDisplayFormatLega
layout->addWidget(toggleButton);
connect(toggleButton, &QPushButton::clicked, this,
&VisualDatabaseDisplayFormatLegalityFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this, [this]() {
QTimer::singleShot(100, this, &VisualDatabaseDisplayFormatLegalityFilterWidget::syncWithFilterModel);
});
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
createFormatButtons(); // Populate buttons initially
updateFilterMode(); // Initialize toggle button text

View file

@ -4,6 +4,7 @@
#include <QMap>
#include <QString>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class FilterTreeModel;
@ -42,6 +43,7 @@ private:
QMap<QString, QPushButton *> formatButtons; // Store toggle buttons
bool exactMatchMode = true; // Toggle between "Exact Match" and "Includes"
QtUtils::Debouncer syncDebouncer{100};
};
#endif // COCKATRICE_VISUAL_DATABASE_DISPLAY_FORMAT_LEGALITY_FILTER_WIDGET_H

View file

@ -16,7 +16,6 @@
#include <QSet>
#include <QSharedPointer>
#include <QSpinBox>
#include <QTimer>
#include <QVBoxLayout>
#include <QtGlobal>
#include <libcockatrice/card/database/card_database_manager.h>
@ -65,9 +64,8 @@ VisualDatabaseDisplayMainTypeFilterWidget::VisualDatabaseDisplayMainTypeFilterWi
toggleButton = new QPushButton(this);
layout->addWidget(toggleButton);
connect(toggleButton, &QPushButton::clicked, this, &VisualDatabaseDisplayMainTypeFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this, [this]() {
QTimer::singleShot(100, this, &VisualDatabaseDisplayMainTypeFilterWidget::syncWithFilterModel);
});
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
createMainTypeButtons(); // Populate buttons initially
updateFilterMode(); // Initialize toggle button text

View file

@ -10,6 +10,7 @@
#include <QMap>
#include <QString>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class FilterTreeModel;
@ -48,6 +49,7 @@ private:
QMap<QString, QPushButton *> typeButtons; // Store toggle buttons
bool exactMatchMode = true; // Toggle between "Exact Match" and "Includes"
QtUtils::Debouncer syncDebouncer{100};
};
#endif // VISUAL_DATABASE_DISPLAY_MAIN_TYPE_FILTER_WIDGET_H

View file

@ -62,7 +62,7 @@ VisualDatabaseDisplayNameFilterWidget::VisualDatabaseDisplayNameFilterWidget(QWi
&VisualDatabaseDisplayNameFilterWidget::actLoadFromClipboard);
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplayNameFilterWidget::syncWithFilterModel); });
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
retranslateUi();
}

View file

@ -10,6 +10,7 @@
#include <QMap>
#include <QString>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class DeckListModel;
@ -46,6 +47,7 @@ private:
QPushButton *loadFromClipboardButton;
QMap<QString, QPushButton *> activeFilters; // Store active name filter buttons
QtUtils::Debouncer syncDebouncer{100};
private slots:
void actLoadFromDeck();

View file

@ -22,7 +22,6 @@
#include <QSet>
#include <QSharedPointer>
#include <QSpinBox>
#include <QTimer>
#include <QVBoxLayout>
#include <QtGlobal>
#include <algorithm>
@ -101,7 +100,7 @@ VisualDatabaseDisplaySetFilterWidget::VisualDatabaseDisplaySetFilterWidget(QWidg
layout->addWidget(toggleButton);
connect(toggleButton, &QPushButton::clicked, this, &VisualDatabaseDisplaySetFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplaySetFilterWidget::syncWithFilterModel); });
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
createSetButtons(); // Populate buttons initially
updateFilterMode();
@ -304,5 +303,5 @@ void VisualDatabaseDisplaySetFilterWidget::updateFilterMode()
// Reconnect the layoutChanged -> sync lambda
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { QTimer::singleShot(100, this, &VisualDatabaseDisplaySetFilterWidget::syncWithFilterModel); });
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
}

View file

@ -10,6 +10,7 @@
#include <QMap>
#include <QString>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class FilterTreeModel;
@ -64,6 +65,7 @@ private:
QMap<QString, bool> activeSets; // Track active set filters
bool exactMatchMode = true; // Toggle between "Exact Match" and "Includes"
QtUtils::Debouncer syncDebouncer{100};
};
#endif // VISUAL_DATABASE_DISPLAY_SET_FILTER_WIDGET_H

View file

@ -17,7 +17,6 @@
#include <QSet>
#include <QSharedPointer>
#include <QSpinBox>
#include <QTimer>
#include <QVBoxLayout>
#include <QtGlobal>
#include <libcockatrice/card/database/card_database_manager.h>
@ -70,9 +69,8 @@ VisualDatabaseDisplaySubTypeFilterWidget::VisualDatabaseDisplaySubTypeFilterWidg
toggleButton = new QPushButton(this);
layout->addWidget(toggleButton);
connect(toggleButton, &QPushButton::clicked, this, &VisualDatabaseDisplaySubTypeFilterWidget::updateFilterMode);
connect(filterModel, &FilterTreeModel::layoutChanged, this, [this]() {
QTimer::singleShot(100, this, &VisualDatabaseDisplaySubTypeFilterWidget::syncWithFilterModel);
});
connect(filterModel, &FilterTreeModel::layoutChanged, this,
[this]() { syncDebouncer.call([this] { syncWithFilterModel(); }); });
createSubTypeButtons(); // Populate buttons initially
updateFilterMode(); // Initialize the toggle button text

View file

@ -10,6 +10,7 @@
#include <QMap>
#include <QString>
#include <QWidget>
#include <libcockatrice/utility/debouncer.h>
#include <qtmetamacros.h>
class FilterTreeModel;
@ -50,6 +51,7 @@ private:
QMap<QString, QPushButton *> typeButtons; // Store toggle buttons
bool exactMatchMode = true; // Toggle between "Exact Match" and "Includes"
QtUtils::Debouncer syncDebouncer{100};
};
#endif // VISUAL_DATABASE_DISPLAY_SUB_TYPE_FILTER_WIDGET_H