mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-19 00:42:14 -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,
|
connect(bannerCardDisplayWidget, &DeckPreviewCardPictureWidget::imageDoubleClicked, this,
|
||||||
&DeckPreviewWidget::imageDoubleClickedEvent);
|
&DeckPreviewWidget::imageDoubleClickedEvent);
|
||||||
|
|
||||||
connect(parent, &VisualDeckStorageWidget::tagFilterUpdated, this, &DeckPreviewWidget::checkVisibility);
|
|
||||||
|
|
||||||
layout->addWidget(bannerCardDisplayWidget);
|
layout->addWidget(bannerCardDisplayWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,14 +54,20 @@ void DeckPreviewWidget::initializeUi(const bool deckLoadSuccess)
|
||||||
layout->addWidget(deckTagsDisplayWidget);
|
layout->addWidget(deckTagsDisplayWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DeckPreviewWidget::checkVisibility()
|
void DeckPreviewWidget::updateVisibility()
|
||||||
|
{
|
||||||
|
if (isVisible() != checkVisibility()) {
|
||||||
|
setVisible(checkVisibility());
|
||||||
|
emit visibilityUpdated();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DeckPreviewWidget::checkVisibility() const
|
||||||
{
|
{
|
||||||
if (filteredBySearch || filteredByColor || filteredByTags) {
|
if (filteredBySearch || filteredByColor || filteredByTags) {
|
||||||
setVisible(false);
|
return false;
|
||||||
} else {
|
|
||||||
setVisible(true);
|
|
||||||
}
|
}
|
||||||
emit visibilityUpdated();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DeckPreviewWidget::getColorIdentity()
|
QString DeckPreviewWidget::getColorIdentity()
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ public:
|
||||||
bool filteredBySearch = false;
|
bool filteredBySearch = false;
|
||||||
bool filteredByColor = false;
|
bool filteredByColor = false;
|
||||||
bool filteredByTags = false;
|
bool filteredByTags = false;
|
||||||
|
bool checkVisibility() const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
|
void deckPreviewClicked(QMouseEvent *event, DeckPreviewWidget *instance);
|
||||||
|
|
@ -41,7 +42,7 @@ public slots:
|
||||||
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
|
void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
|
||||||
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
|
void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance);
|
||||||
void initializeUi(bool deckLoadSuccess);
|
void initializeUi(bool deckLoadSuccess);
|
||||||
void checkVisibility();
|
void updateVisibility();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DECK_PREVIEW_WIDGET_H
|
#endif // DECK_PREVIEW_WIDGET_H
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include "deck_preview/deck_preview_widget.h"
|
#include "deck_preview/deck_preview_widget.h"
|
||||||
|
|
||||||
#include <QDirIterator>
|
#include <QDirIterator>
|
||||||
|
#include <QMouseEvent>
|
||||||
|
|
||||||
VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
|
VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
|
||||||
QWidget *parent,
|
QWidget *parent,
|
||||||
|
|
@ -43,6 +44,9 @@ VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
|
||||||
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
flowWidget = new FlowWidget(this, Qt::Horizontal, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAlwaysOff);
|
||||||
containerLayout->addWidget(flowWidget);
|
containerLayout->addWidget(flowWidget);
|
||||||
|
|
||||||
|
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::tagFilterUpdated, this,
|
||||||
|
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
|
||||||
|
|
||||||
createWidgetsForFiles();
|
createWidgetsForFiles();
|
||||||
createWidgetsForFolders();
|
createWidgetsForFolders();
|
||||||
}
|
}
|
||||||
|
|
@ -59,8 +63,6 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles()
|
||||||
&VisualDeckStorageWidget::deckPreviewDoubleClickedEvent);
|
&VisualDeckStorageWidget::deckPreviewDoubleClickedEvent);
|
||||||
connect(visualDeckStorageWidget->cardSizeWidget->getSlider(), &QSlider::valueChanged,
|
connect(visualDeckStorageWidget->cardSizeWidget->getSlider(), &QSlider::valueChanged,
|
||||||
display->bannerCardDisplayWidget, &CardInfoPictureWidget::setScaleFactor);
|
display->bannerCardDisplayWidget, &CardInfoPictureWidget::setScaleFactor);
|
||||||
connect(display, &DeckPreviewWidget::visibilityUpdated, this,
|
|
||||||
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
|
|
||||||
display->bannerCardDisplayWidget->setScaleFactor(visualDeckStorageWidget->cardSizeWidget->getSlider()->value());
|
display->bannerCardDisplayWidget->setScaleFactor(visualDeckStorageWidget->cardSizeWidget->getSlider()->value());
|
||||||
allDecks.append(display);
|
allDecks.append(display);
|
||||||
}
|
}
|
||||||
|
|
@ -81,22 +83,39 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles()
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualDeckStorageFolderDisplayWidget::updateVisibility()
|
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;
|
bool atLeastOneWidgetVisible = false;
|
||||||
if (flowWidget) {
|
if (flowWidget) {
|
||||||
// Iterate through all DeckPreviewWidgets
|
// Iterate through all DeckPreviewWidgets
|
||||||
for (DeckPreviewWidget *display : flowWidget->findChildren<DeckPreviewWidget *>()) {
|
for (DeckPreviewWidget *display : flowWidget->findChildren<DeckPreviewWidget *>()) {
|
||||||
// Get tags from each DeckPreviewWidget
|
// Get tags from each DeckPreviewWidget
|
||||||
if (display->isVisible()) {
|
if (display->checkVisibility()) {
|
||||||
atLeastOneWidgetVisible = true;
|
atLeastOneWidgetVisible = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (atLeastOneWidgetVisible) {
|
for (VisualDeckStorageFolderDisplayWidget *subFolder : findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
|
||||||
// setVisible(true);
|
if (subFolder->checkVisibility()) {
|
||||||
} else {
|
atLeastOneWidgetVisible = true;
|
||||||
// setVisible(false);
|
}
|
||||||
}
|
}
|
||||||
|
return atLeastOneWidgetVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualDeckStorageFolderDisplayWidget::createWidgetsForFolders()
|
void VisualDeckStorageFolderDisplayWidget::createWidgetsForFolders()
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void updateVisibility();
|
void updateVisibility();
|
||||||
|
bool checkVisibility();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVBoxLayout *layout;
|
QVBoxLayout *layout;
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,12 @@ VisualDeckStorageTagFilterWidget::VisualDeckStorageTagFilterWidget(VisualDeckSto
|
||||||
layout->addWidget(flowWidget);
|
layout->addWidget(flowWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualDeckStorageTagFilterWidget::showEvent(QShowEvent *event)
|
||||||
|
{
|
||||||
|
QWidget::showEvent(event);
|
||||||
|
refreshTags();
|
||||||
|
}
|
||||||
|
|
||||||
void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList<DeckPreviewWidget *> &deckPreviews) const
|
void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList<DeckPreviewWidget *> &deckPreviews) const
|
||||||
{
|
{
|
||||||
// Collect selected tags from DeckPreviewTagDisplayWidget
|
// Collect selected tags from DeckPreviewTagDisplayWidget
|
||||||
|
|
@ -59,6 +65,7 @@ void VisualDeckStorageTagFilterWidget::filterDecksBySelectedTags(const QList<Dec
|
||||||
void VisualDeckStorageTagFilterWidget::refreshTags()
|
void VisualDeckStorageTagFilterWidget::refreshTags()
|
||||||
{
|
{
|
||||||
QStringList allTags = gatherAllTags();
|
QStringList allTags = gatherAllTags();
|
||||||
|
qDebug() << "Refreshed tags: " << allTags;
|
||||||
removeTagsNotInList(gatherAllTags());
|
removeTagsNotInList(gatherAllTags());
|
||||||
addTagsIfNotPresent(gatherAllTags());
|
addTagsIfNotPresent(gatherAllTags());
|
||||||
}
|
}
|
||||||
|
|
@ -112,7 +119,7 @@ QStringList VisualDeckStorageTagFilterWidget::gatherAllTags()
|
||||||
QList<DeckPreviewWidget *> deckWidgets = parent->findChildren<DeckPreviewWidget *>();
|
QList<DeckPreviewWidget *> deckWidgets = parent->findChildren<DeckPreviewWidget *>();
|
||||||
|
|
||||||
for (DeckPreviewWidget *widget : deckWidgets) {
|
for (DeckPreviewWidget *widget : deckWidgets) {
|
||||||
if (widget->isVisible()) {
|
if (widget->checkVisibility()) {
|
||||||
allTags << widget->deckLoader->getTags();
|
allTags << widget->deckLoader->getTags();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void refreshTags();
|
void refreshTags();
|
||||||
|
void showEvent(QShowEvent *event) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H
|
#endif // VISUAL_DECK_STORAGE_TAG_FILTER_WIDGET_H
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue