From 6e7aa5c53ef0de1190856fb74d2739755fe80476 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Tue, 24 Dec 2024 11:26:12 +0100 Subject: [PATCH] Add an option to sort by filename or last modified. --- .../visual_deck_storage_widget.cpp | 49 ++++++++++++++++--- .../visual_deck_storage_widget.h | 18 ++++--- 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp index bdc9906a8..65522740e 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.cpp @@ -5,18 +5,36 @@ #include "../../../../settings/cache_settings.h" #include +#include +#include -VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) : QWidget(parent) +VisualDeckStorageWidget::VisualDeckStorageWidget(QWidget *parent) + : QWidget(parent), sortOrder(Alphabetical) { deckListModel = new DeckListModel(this); deckListModel->setObjectName("visualDeckModel"); - layout = new QHBoxLayout(this); + layout = new QVBoxLayout(); + setLayout(layout); - flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarPolicy::ScrollBarAsNeeded); + // ComboBox for sorting options + auto *sortComboBox = new QComboBox(this); + sortComboBox->addItem("Sort Alphabetically (Filename)", Alphabetical); + sortComboBox->addItem("Sort by Last Modified", ByLastModified); + + // Add combo box to the main layout + layout->addWidget(sortComboBox); + + flowWidget = new FlowWidget(this, Qt::ScrollBarAlwaysOff, Qt::ScrollBarAsNeeded); layout->addWidget(flowWidget); - getBannerCardsForDecks(); + // Connect sorting change signal to refresh the file list + connect(sortComboBox, &QComboBox::currentIndexChanged, this, [this, sortComboBox]() { + sortOrder = static_cast(sortComboBox->currentData().toInt()); + refreshBannerCards(); // Refresh the banner cards with the new sort order + }); + + refreshBannerCards(); } void VisualDeckStorageWidget::imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance) @@ -29,7 +47,7 @@ void VisualDeckStorageWidget::imageDoubleClickedEvent(QMouseEvent *event, DeckPr emit imageDoubleClicked(event, instance); } -QStringList VisualDeckStorageWidget::getBannerCardsForDecks() +void VisualDeckStorageWidget::refreshBannerCards() { QStringList allFiles; @@ -41,6 +59,23 @@ QStringList VisualDeckStorageWidget::getBannerCardsForDecks() allFiles << it.next(); // Add each file path to the list } + // Sort files based on the current sort order + std::sort(allFiles.begin(), allFiles.end(), [this](const QString &file1, const QString &file2) { + QFileInfo info1(file1); + QFileInfo info2(file2); + + switch (sortOrder) { + case Alphabetical: + return info1.fileName().toLower() < info2.fileName().toLower(); + case ByLastModified: + return info1.lastModified() < info2.lastModified(); + } + + return false; // Default case + }); + + flowWidget->clearLayout(); // Clear existing widgets in the flow layout + foreach (const QString &file, allFiles) { qDebug() << file; auto deckLoader = new DeckLoader(); @@ -64,6 +99,4 @@ QStringList VisualDeckStorageWidget::getBannerCardsForDecks() &VisualDeckStorageWidget::imageDoubleClickedEvent); flowWidget->addWidget(display); } - - return QStringList("lol"); -} \ No newline at end of file +} diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h index c3529dd0c..4505b514d 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/visual_deck_storage_widget.h @@ -15,21 +15,27 @@ public: explicit VisualDeckStorageWidget(QWidget *parent); void retranslateUi(); -public slots: - void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); + public slots: + void imageClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void imageDoubleClickedEvent(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); -signals: - void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); + signals: + void imageClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); void imageDoubleClicked(QMouseEvent *event, DeckPreviewCardPictureWidget *instance); private: - QHBoxLayout *layout; + enum SortOrder { + Alphabetical, + ByLastModified + }; + + QVBoxLayout *layout; FlowWidget *flowWidget; DeckListModel *deckListModel; QMap cardContainers; - QStringList getBannerCardsForDecks(); + SortOrder sortOrder; // Current sorting option + void refreshBannerCards(); // Refresh the display of cards based on the current sorting option }; #endif // VISUAL_DECK_STORAGE_WIDGET_H