mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 16:32:16 -07:00
Fix performance issues.
This commit is contained in:
parent
bab0f343de
commit
8a809299d3
6 changed files with 49 additions and 16 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,22 +83,39 @@ 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()
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ public:
|
|||
|
||||
public slots:
|
||||
void updateVisibility();
|
||||
bool checkVisibility();
|
||||
|
||||
private:
|
||||
QVBoxLayout *layout;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ public:
|
|||
|
||||
public slots:
|
||||
void refreshTags();
|
||||
void showEvent(QShowEvent *event) override;
|
||||
};
|
||||
|
||||
#endif // VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue