Load widgets in batches.

This commit is contained in:
Lukas Brübach 2024-11-25 15:38:45 +01:00 committed by ZeldaZach
parent cbb72d3b6f
commit f8ce97d598
No known key found for this signature in database

View file

@ -120,7 +120,9 @@ void PrintingSelector::setCard(const CardInfoPtr &newCard, const QString &_curre
if (isVisible()) {
updateDisplay();
}
flowWidget->setMinimumSizeToMaxSizeHint();
flowWidget->scrollArea->verticalScrollBar()->setValue(0);
flowWidget->repaint();
}
void PrintingSelector::selectPreviousCard()
@ -297,9 +299,23 @@ void PrintingSelector::getAllSetsForCurrentCard()
const QList<CardInfoPerSet> filteredSets = filterSets(sortedSets);
const QList<CardInfoPerSet> prependedSets = prependPrintingsInDeck(filteredSets);
for (const auto &cardInfoPerSet : prependedSets) {
auto *cardDisplayWidget = new PrintingSelectorCardDisplayWidget(
this, deckEditor, deckModel, deckView, cardSizeSlider, selectedCard, cardInfoPerSet, currentZone);
flowWidget->addWidget(cardDisplayWidget);
}
// Defer widget creation
int batchSize = 10;
int currentIndex = 0;
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, [=]() mutable {
for (int i = 0; i < batchSize && currentIndex < prependedSets.size(); ++i, ++currentIndex) {
auto *cardDisplayWidget =
new PrintingSelectorCardDisplayWidget(this, deckEditor, deckModel, deckView, cardSizeSlider,
selectedCard, prependedSets[currentIndex], currentZone);
flowWidget->addWidget(cardDisplayWidget);
}
// Stop timer when done
if (currentIndex >= prependedSets.size()) {
timer->stop();
timer->deleteLater();
}
});
timer->start(0); // Process as soon as possible
}