Sort correctly.

This commit is contained in:
Lukas Brübach 2025-02-02 09:45:21 +01:00
parent bbfdbe78d5
commit 08e743470d
8 changed files with 47 additions and 15 deletions

View file

@ -39,7 +39,7 @@ void DeckPreviewTagAdditionWidget::mousePressEvent(QMouseEvent *event)
emit tagClicked();
}
QWidget::mousePressEvent(event);
QStringList knownTags = parent->parent->parent->tagFilterWidget->getAllKnownTags();
QStringList knownTags = parent->parent->visualDeckStorageWidget->tagFilterWidget->getAllKnownTags();
QStringList activeTags = parent->deckLoader->getTags();
bool canAddTags = true;

View file

@ -9,15 +9,17 @@
#include <QSet>
#include <QVBoxLayout>
DeckPreviewWidget::DeckPreviewWidget(VisualDeckStorageWidget *_parent, const QString &_filePath)
: QWidget(_parent), parent(_parent), filePath(_filePath)
DeckPreviewWidget::DeckPreviewWidget(QWidget *_parent,
VisualDeckStorageWidget *_visualDeckStorageWidget,
const QString &_filePath)
: QWidget(_parent), visualDeckStorageWidget(_visualDeckStorageWidget), filePath(_filePath)
{
layout = new QVBoxLayout(this);
setLayout(layout);
deckLoader = new DeckLoader();
connect(deckLoader, &DeckLoader::loadFinished, this, &DeckPreviewWidget::initializeUi);
connect(deckLoader, &DeckLoader::loadFinished, parent->tagFilterWidget,
connect(deckLoader, &DeckLoader::loadFinished, visualDeckStorageWidget->tagFilterWidget,
&VisualDeckStorageTagFilterWidget::refreshTags);
deckLoader->loadFromFileAsync(filePath, DeckLoader::getFormatFromName(filePath), false);

View file

@ -16,10 +16,12 @@ class DeckPreviewWidget final : public QWidget
{
Q_OBJECT
public:
explicit DeckPreviewWidget(VisualDeckStorageWidget *_parent, const QString &_filePath);
explicit DeckPreviewWidget(QWidget *_parent,
VisualDeckStorageWidget *_visualDeckStorageWidget,
const QString &_filePath);
QString getColorIdentity();
VisualDeckStorageWidget *parent;
VisualDeckStorageWidget *visualDeckStorageWidget;
QVBoxLayout *layout;
QString filePath;
DeckLoader *deckLoader;

View file

@ -67,7 +67,7 @@ void VisualDeckStorageFolderDisplayWidget::createWidgetsForFiles()
{
QList<DeckPreviewWidget *> allDecks;
for (const QString &file : getAllFiles()) {
auto *display = new DeckPreviewWidget(visualDeckStorageWidget, file);
auto *display = new DeckPreviewWidget(flowWidget, visualDeckStorageWidget, file);
connect(display, &DeckPreviewWidget::deckPreviewClicked, visualDeckStorageWidget,
&VisualDeckStorageWidget::deckPreviewClickedEvent);
@ -108,7 +108,6 @@ bool VisualDeckStorageFolderDisplayWidget::checkVisibility()
if (flowWidget) {
// Iterate through all DeckPreviewWidgets
for (DeckPreviewWidget *display : flowWidget->findChildren<DeckPreviewWidget *>()) {
// Get tags from each DeckPreviewWidget
if (display->checkVisibility()) {
atLeastOneWidgetVisible = true;
}

View file

@ -22,6 +22,10 @@ public:
QStringList gatherAllTagsFromFlowWidget() const;
[[nodiscard]] QStringList getAllFiles() const;
[[nodiscard]] QStringList getAllSubFolders() const;
FlowWidget *getFlowWidget() const
{
return flowWidget;
};
public slots:
void updateVisibility();

View file

@ -63,7 +63,23 @@ void VisualDeckStorageSortWidget::updateSortOrder()
emit sortOrderChanged();
}
QList<DeckPreviewWidget *> &VisualDeckStorageSortWidget::filterFiles(QList<DeckPreviewWidget *> &widgets)
void VisualDeckStorageSortWidget::sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget)
{
auto children = folderWidget->getFlowWidget()->findChildren<QWidget *>(Qt::FindChildOption::FindDirectChildrenOnly);
for (auto widget : children) {
auto deckPreviewWidgets =
widget->findChildren<DeckPreviewWidget *>(Qt::FindChildOption::FindDirectChildrenOnly);
auto newOrder = filterFiles(deckPreviewWidgets);
for (DeckPreviewWidget *previewWidget : newOrder) {
folderWidget->getFlowWidget()->removeWidget(previewWidget);
}
for (DeckPreviewWidget *previewWidget : newOrder) {
folderWidget->getFlowWidget()->addWidget(previewWidget);
}
}
}
QList<DeckPreviewWidget *> VisualDeckStorageSortWidget::filterFiles(QList<DeckPreviewWidget *> widgets)
{
// Sort the widgets list based on the current sort order
std::sort(widgets.begin(), widgets.end(), [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) {

View file

@ -8,6 +8,7 @@
#include <QWidget>
class VisualDeckStorageWidget;
class VisualDeckStorageFolderDisplayWidget;
class VisualDeckStorageSortWidget : public QWidget
{
Q_OBJECT
@ -16,8 +17,9 @@ public:
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
void retranslateUi();
void updateSortOrder();
void sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget);
QString getSearchText();
QList<DeckPreviewWidget *> &filterFiles(QList<DeckPreviewWidget *> &widgets);
QList<DeckPreviewWidget *> filterFiles(QList<DeckPreviewWidget *> widgets);
signals:
void sortOrderChanged();

View file

@ -74,11 +74,6 @@ void VisualDeckStorageWidget::retranslateUi()
databaseLoadIndicator->setText(tr("Loading database ..."));
}
void VisualDeckStorageWidget::updateSortOrder()
{
refreshBannerCards(); // Refresh the banner cards with the new sort order
}
void VisualDeckStorageWidget::deckPreviewClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance)
{
emit deckPreviewClicked(event, instance);
@ -96,6 +91,18 @@ void VisualDeckStorageWidget::refreshBannerCards()
scrollArea->setWidget(folderWidget);
}
void VisualDeckStorageWidget::updateSortOrder()
{
if (folderWidget) {
qDebug() << "Updating sort order";
sortWidget->sortFolder(folderWidget);
for (VisualDeckStorageFolderDisplayWidget *subFolderWidget :
folderWidget->findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
sortWidget->sortFolder(subFolderWidget);
}
}
}
void VisualDeckStorageWidget::updateTagFilter()
{
if (folderWidget) {