Fix performance issues.

This commit is contained in:
Lukas Brübach 2025-02-02 07:15:33 +01:00
parent bab0f343de
commit 8a809299d3
6 changed files with 49 additions and 16 deletions

View file

@ -28,8 +28,6 @@ DeckPreviewWidget::DeckPreviewWidget(VisualDeckStorageWidget *_parent, const QSt
connect(bannerCardDisplayWidget, &DeckPreviewCardPictureWidget::imageDoubleClicked, this,
&DeckPreviewWidget::imageDoubleClickedEvent);
connect(parent, &VisualDeckStorageWidget::tagFilterUpdated, this, &DeckPreviewWidget::checkVisibility);
layout->addWidget(bannerCardDisplayWidget);
}
@ -56,14 +54,20 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess)
layout->addWidget(deckTagsDisplayWidget);
}
void DeckPreviewWidget::checkVisibility()
void DeckPreviewWidget::updateVisibility()
{
if (isVisible() != checkVisibility()) {
setVisible(checkVisibility());
emit visibilityUpdated();
}
}
bool DeckPreviewWidget::checkVisibility() const
{
if (filteredBySearch || filteredByColor || filteredByTags) {
setVisible(false);
} else {
setVisible(true);
return false;
}
emit visibilityUpdated();
return true;
}
QString DeckPreviewWidget::getColorIdentity()

View file

@ -29,6 +29,7 @@ public:
bool filteredBySearch = false;
bool filteredByColor = false;
bool filteredByTags = false;
bool checkVisibility() const;
signals:
void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
@ -41,7 +42,7 @@ public slots:
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
void initializeUi(bool deckLoadSuccess);
void checkVisibility();
void updateVisibility();
};
#endif // DECK_PREVIEW_WIDGET_H

View file

@ -4,6 +4,7 @@
#include "deck_preview/deck_preview_widget.h"
#include <QDirIterator>
#include <QMouseEvent>
VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
QWidget *parent,
@ -43,6 +44,9 @@ VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
containerLayout->addWidget(flowWidget);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::tagFilterUpdated, this,
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
createWidgetsForFiles();
createWidgetsForFolders();
}
@ -59,8 +63,6 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles()
&VisualDeckStorageWidget::deckPreviewDoubleClickedEvent);
connect(visualDeckStorageWidget->cardSizeWidget->getSlider(), &QSlider::valueChanged,
display->bannerCardDisplayWidget, &CardInfoPictureWidget::setScaleFactor);
connect(display, &DeckPreviewWidget::visibilityUpdated, this,
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
display->bannerCardDisplayWidget->setScaleFactor(visualDeckStorageWidget->cardSizeWidget->getSlider()->value());
allDecks.append(display);
}
@ -81,23 +83,40 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles()
}
void VisualDeckStorageFolderDisplayWidget::updateVisibility()
{
bool atLeastOneWidgetVisible = checkVisibility();
if (atLeastOneWidgetVisible) {
setVisible(true);
for (DeckPreviewWidget *display : flowWidget->findChildren<DeckPreviewWidget *>()) {
display->updateVisibility();
}
for (VisualDeckStorageFolderDisplayWidget *subFolder : findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
subFolder->updateVisibility();
}
} else {
setVisible(false);
}
}
bool VisualDeckStorageFolderDisplayWidget::checkVisibility()
{
bool atLeastOneWidgetVisible = false;
if (flowWidget) {
// Iterate through all DeckPreviewWidgets
for (DeckPreviewWidget *display : flowWidget->findChildren<DeckPreviewWidget *>()) {
// Get tags from each DeckPreviewWidget
if (display->isVisible()) {
if (display->checkVisibility()) {
atLeastOneWidgetVisible = true;
}
}
}
if (atLeastOneWidgetVisible) {
// setVisible(true);
} else {
// setVisible(false);
for (VisualDeckStorageFolderDisplayWidget *subFolder : findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
if (subFolder->checkVisibility()) {
atLeastOneWidgetVisible = true;
}
}
return atLeastOneWidgetVisible;
}
void VisualDeckStorageFolderDisplayWidget::createWidgetsForFolders()
{

View file

@ -23,6 +23,7 @@ public:
public slots:
void updateVisibility();
bool checkVisibility();
private:
QVBoxLayout *layout;

View file

@ -25,6 +25,12 @@ VisualDeckStorageTagFilterWidget::VisualDeckStorageTagFilterWidget(VisualDeckSto
layout->addWidget(flowWidget);
}
void VisualDeckStorageTagFilterWidget::showEvent(QShowEvent *event)
{
QWidget::showEvent(event);
refreshTags();
}
void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList<DeckPreviewWidget *> &deckPreviews) const
{
// Collect selected tags from DeckPreviewTagDisplayWidget
@ -59,6 +65,7 @@ void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList<Dec
void VisualDeckStorageTagFilterWidget::refreshTags()
{
QStringList allTags = gatherAllTags();
qDebug() << "Refreshed tags: " << allTags;
removeTagsNotInList(gatherAllTags());
addTagsIfNotPresent(gatherAllTags());
}
@ -112,7 +119,7 @@ QStringList VisualDeckStorageTagFilterWidget::gatherAllTags()
QList<DeckPreviewWidget *> deckWidgets = parent->findChildren<DeckPreviewWidget *>();
for (DeckPreviewWidget *widget : deckWidgets) {
if (widget->isVisible()) {
if (widget->checkVisibility()) {
allTags << widget->deckLoader->getTags();
}
}

View file

@ -22,6 +22,7 @@ public:
public slots:
void refreshTags();
void showEvent(QShowEvent *event) override;
};
#endif // VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H