From 8a809299d381b14f6db697f436f9922264eeffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 2 Feb 2025 07:15:33 +0100 Subject: [PATCH] Fix performance issues. --- .../deck_preview/deck_preview_widget.cpp | 18 ++++++---- .../deck_preview/deck_preview_widget.h | 3 +- ...ual_deck_storage_folder_display_widget.cpp | 33 +++++++++++++++---- ...isual_deck_storage_folder_display_widget.h | 1 + .../visual_deck_storage_tag_filter_widget.cpp | 9 ++++- .../visual_deck_storage_tag_filter_widget.h | 1 + 6 files changed, 49 insertions(+), 16 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index bbc4c5793..56985853a 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -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() diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h index 02634e9e2..2acb748ff 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h @@ -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 diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp index 75d2e8863..41e562fc3 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.cpp @@ -4,6 +4,7 @@ #include "deck_preview/deck_preview_widget.h" #include +#include 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,22 +83,39 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles() } void VisualDeckStorageFolderDisplayWidget::updateVisibility() +{ + bool atLeastOneWidgetVisible = checkVisibility(); + if (atLeastOneWidgetVisible) { + setVisible(true); + for (DeckPreviewWidget *display : flowWidget->findChildren()) { + display->updateVisibility(); + } + for (VisualDeckStorageFolderDisplayWidget *subFolder : findChildren()) { + subFolder->updateVisibility(); + } + } else { + setVisible(false); + } +} + +bool VisualDeckStorageFolderDisplayWidget::checkVisibility() { bool atLeastOneWidgetVisible = false; if (flowWidget) { // Iterate through all DeckPreviewWidgets for (DeckPreviewWidget *display : flowWidget->findChildren()) { // Get tags from each DeckPreviewWidget - if (display->isVisible()) { + if (display->checkVisibility()) { atLeastOneWidgetVisible = true; } } } - if (atLeastOneWidgetVisible) { - // setVisible(true); - } else { - // setVisible(false); + for (VisualDeckStorageFolderDisplayWidget *subFolder : findChildren()) { + if (subFolder->checkVisibility()) { + atLeastOneWidgetVisible = true; + } } + return atLeastOneWidgetVisible; } void VisualDeckStorageFolderDisplayWidget::createWidgetsForFolders() diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h index f9172e659..a143afe83 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_folder_display_widget.h @@ -23,6 +23,7 @@ public: public slots: void updateVisibility(); + bool checkVisibility(); private: QVBoxLayout *layout; diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp index dcf908cff..ac9fffa90 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.cpp @@ -25,6 +25,12 @@ VisualDeckStorageTagFilterWidget::VisualDeckStorageTagFilterWidget(VisualDeckSto layout->addWidget(flowWidget); } +void VisualDeckStorageTagFilterWidget::showEvent(QShowEvent *event) +{ + QWidget::showEvent(event); + refreshTags(); +} + void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList &deckPreviews) const { // Collect selected tags from DeckPreviewTagDisplayWidget @@ -59,6 +65,7 @@ void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList deckWidgets = parent->findChildren(); for (DeckPreviewWidget *widget : deckWidgets) { - if (widget->isVisible()) { + if (widget->checkVisibility()) { allTags << widget->deckLoader->getTags(); } } diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h index 13e8f7fc2..ce8ca8d14 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_tag_filter_widget.h @@ -22,6 +22,7 @@ public: public slots: void refreshTags(); + void showEvent(QShowEvent *event) override; }; #endif // VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H