Always debounce modelDirty() with dirty() timer.

Took 29 minutes

Took 3 minutes
This commit is contained in:
Lukas Brübach 2026-04-30 15:05:34 +02:00
parent 78a8f9104d
commit 97d3843501
3 changed files with 11 additions and 16 deletions

View file

@ -29,6 +29,11 @@ VisualDatabaseDisplayWidget::VisualDatabaseDisplayWidget(QWidget *parent,
: QWidget(parent), deckEditor(_deckEditor), databaseModel(database_model), : QWidget(parent), deckEditor(_deckEditor), databaseModel(database_model),
databaseDisplayModel(database_display_model) databaseDisplayModel(database_display_model)
{ {
debounceTimer = new QTimer(this);
debounceTimer->setSingleShot(true); // Ensure it only fires once after the timeout
connect(debounceTimer, &QTimer::timeout, this, &VisualDatabaseDisplayWidget::onSearchModelChanged);
cards = new QList<ExactCard>; cards = new QList<ExactCard>;
connect(databaseDisplayModel, &CardDatabaseDisplayModel::modelDirty, this, connect(databaseDisplayModel, &CardDatabaseDisplayModel::modelDirty, this,
&VisualDatabaseDisplayWidget::modelDirty); &VisualDatabaseDisplayWidget::modelDirty);
@ -156,11 +161,6 @@ void VisualDatabaseDisplayWidget::initialize()
mainLayout->addWidget(cardSizeWidget); mainLayout->addWidget(cardSizeWidget);
debounceTimer = new QTimer(this);
debounceTimer->setSingleShot(true); // Ensure it only fires once after the timeout
connect(debounceTimer, &QTimer::timeout, this, &VisualDatabaseDisplayWidget::onSearchModelChanged);
databaseDisplayModel->setFilterTree(filterModel->filterTree()); databaseDisplayModel->setFilterTree(filterModel->filterTree());
connect(filterModel, &FilterTreeModel::layoutChanged, this, &VisualDatabaseDisplayWidget::onSearchModelChanged); connect(filterModel, &FilterTreeModel::layoutChanged, this, &VisualDatabaseDisplayWidget::onSearchModelChanged);

View file

@ -10,7 +10,10 @@ CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent)
setSortCaseSensitivity(Qt::CaseInsensitive); setSortCaseSensitivity(Qt::CaseInsensitive);
dirtyTimer.setSingleShot(true); dirtyTimer.setSingleShot(true);
connect(&dirtyTimer, &QTimer::timeout, this, &CardDatabaseDisplayModel::invalidate); connect(&dirtyTimer, &QTimer::timeout, this, [this]() {
invalidate();
emit modelDirty();
});
loadedRowCount = 0; loadedRowCount = 0;
} }
@ -19,13 +22,9 @@ void CardDatabaseDisplayModel::setSourceModel(QAbstractItemModel *model)
{ {
QSortFilterProxyModel::setSourceModel(model); QSortFilterProxyModel::setSourceModel(model);
connect(model, &QAbstractItemModel::rowsInserted, this, [this]() { connect(model, &QAbstractItemModel::rowsInserted, this, [this]() { dirty(); });
dirty();
});
connect(model, &QAbstractItemModel::rowsRemoved, this, [this]() { connect(model, &QAbstractItemModel::rowsRemoved, this, [this]() { dirty(); });
dirty();
});
connect(model, &QAbstractItemModel::modelReset, this, [this]() { connect(model, &QAbstractItemModel::modelReset, this, [this]() {
loadedRowCount = 0; loadedRowCount = 0;

View file

@ -43,7 +43,6 @@ public:
void setIsToken(FilterBool _isToken) void setIsToken(FilterBool _isToken)
{ {
isToken = _isToken; isToken = _isToken;
emit modelDirty();
dirty(); dirty();
} }
@ -54,20 +53,17 @@ public:
filterString = nullptr; filterString = nullptr;
} }
cardName = sanitizeCardName(_cardName, characterTranslation); cardName = sanitizeCardName(_cardName, characterTranslation);
emit modelDirty();
dirty(); dirty();
} }
void setStringFilter(const QString &_src) void setStringFilter(const QString &_src)
{ {
delete filterString; delete filterString;
filterString = new FilterString(_src); filterString = new FilterString(_src);
emit modelDirty();
dirty(); dirty();
} }
void setCardNameSet(const QSet<QString> &_cardNameSet) void setCardNameSet(const QSet<QString> &_cardNameSet)
{ {
cardNameSet = _cardNameSet; cardNameSet = _cardNameSet;
emit modelDirty();
dirty(); dirty();
} }