mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 08:22:15 -07:00
More sort options, sort widgets directly.
This commit is contained in:
parent
11f92bf101
commit
30bafe6348
5 changed files with 41 additions and 23 deletions
|
|
@ -38,22 +38,23 @@ QString VisualDeckStorageSearchWidget::getSearchText()
|
|||
return searchBar->text();
|
||||
}
|
||||
|
||||
QStringList VisualDeckStorageSearchWidget::filterFiles(const QStringList &files, const QString &searchText)
|
||||
QList<DeckPreviewWidget *> VisualDeckStorageSearchWidget::filterFiles(QList<DeckPreviewWidget *> &widgets,
|
||||
const QString &searchText)
|
||||
{
|
||||
if (searchText.isEmpty() || searchText.isNull()) {
|
||||
return files;
|
||||
return widgets;
|
||||
}
|
||||
|
||||
QStringList filteredFiles;
|
||||
QList<DeckPreviewWidget *> filteredWidgets;
|
||||
|
||||
for (const auto &file : files) {
|
||||
QFileInfo fileInfo(file);
|
||||
for (const auto &file : widgets) {
|
||||
QFileInfo fileInfo(file->filePath);
|
||||
QString fileName = fileInfo.fileName().toLower();
|
||||
|
||||
if (fileName.contains(searchText.toLower())) {
|
||||
filteredFiles << file;
|
||||
filteredWidgets << file;
|
||||
}
|
||||
}
|
||||
|
||||
return filteredFiles;
|
||||
return filteredWidgets;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ class VisualDeckStorageSearchWidget : public QWidget
|
|||
public:
|
||||
explicit VisualDeckStorageSearchWidget(VisualDeckStorageWidget *parent);
|
||||
QString getSearchText();
|
||||
QStringList filterFiles(const QStringList &files, const QString &searchText);
|
||||
QList<DeckPreviewWidget *> filterFiles(QList<DeckPreviewWidget *> &widgets, const QString &searchText);
|
||||
|
||||
private:
|
||||
QHBoxLayout *layout;
|
||||
|
|
|
|||
|
|
@ -18,8 +18,10 @@ VisualDeckStorageSortWidget::VisualDeckStorageSortWidget(VisualDeckStorageWidget
|
|||
|
||||
// ComboBox for sorting options
|
||||
sortComboBox = new QComboBox(this);
|
||||
sortComboBox->addItem("Sort Alphabetically (Deck Name)", ByName);
|
||||
sortComboBox->addItem("Sort Alphabetically (Filename)", Alphabetical);
|
||||
sortComboBox->addItem("Sort by Last Modified", ByLastModified);
|
||||
sortComboBox->addItem("Sort by Last Loaded", ByLastLoaded);
|
||||
|
||||
// Connect sorting change signal to refresh the file list
|
||||
connect(sortComboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this,
|
||||
|
|
@ -42,22 +44,30 @@ void VisualDeckStorageSortWidget::updateSortOrder()
|
|||
emit sortOrderChanged();
|
||||
}
|
||||
|
||||
QStringList VisualDeckStorageSortWidget::filterFiles(QStringList &files)
|
||||
QList<DeckPreviewWidget *> &VisualDeckStorageSortWidget::filterFiles(QList<DeckPreviewWidget *> &widgets)
|
||||
{
|
||||
// Sort files based on the current sort order
|
||||
std::sort(files.begin(), files.end(), [this](const QString &file1, const QString &file2) {
|
||||
QFileInfo info1(file1);
|
||||
QFileInfo info2(file2);
|
||||
// Sort the widgets list based on the current sort order
|
||||
std::sort(widgets.begin(), widgets.end(), [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) {
|
||||
if (!widget1 || !widget2) {
|
||||
return false; // Handle null pointers gracefully
|
||||
}
|
||||
|
||||
QFileInfo info1(widget1->filePath);
|
||||
QFileInfo info2(widget2->filePath);
|
||||
|
||||
switch (sortOrder) {
|
||||
case ByName:
|
||||
return widget1->deckLoader->getName() < widget2->deckLoader->getName();
|
||||
case Alphabetical:
|
||||
return info1.fileName().toLower() < info2.fileName().toLower();
|
||||
case ByLastModified:
|
||||
return info1.lastModified() > info2.lastModified();
|
||||
case ByLastLoaded:
|
||||
return widget1->deckLoader->getLastLoadedTimestamp() > widget2->deckLoader->getLastLoadedTimestamp();
|
||||
}
|
||||
|
||||
return false; // Default case
|
||||
return false; // Default case, no sorting applied
|
||||
});
|
||||
|
||||
return files;
|
||||
return widgets;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ public:
|
|||
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
|
||||
void updateSortOrder();
|
||||
QString getSearchText();
|
||||
QStringList filterFiles(QStringList &files);
|
||||
QList<DeckPreviewWidget *> &filterFiles(QList<DeckPreviewWidget *> &widgets);
|
||||
|
||||
public slots:
|
||||
void showEvent(QShowEvent *event) override;
|
||||
|
|
@ -28,7 +28,9 @@ private:
|
|||
enum SortOrder
|
||||
{
|
||||
Alphabetical,
|
||||
ByLastModified
|
||||
ByLastModified,
|
||||
ByLastLoaded,
|
||||
ByName,
|
||||
};
|
||||
QHBoxLayout *layout;
|
||||
VisualDeckStorageWidget *parent;
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@ void VisualDeckStorageWidget::deckPreviewDoubleClickedEvent(QMouseEvent *event,
|
|||
void VisualDeckStorageWidget::refreshBannerCards()
|
||||
{
|
||||
QStringList allFiles;
|
||||
QList<DeckPreviewWidget *> allDecks;
|
||||
|
||||
// QDirIterator with QDir::Files and QDir::NoSymLinks ensures only files are listed (no directories or symlinks)
|
||||
QDirIterator it(SettingsCache::instance().getDeckPath(), QDir::Files | QDir::NoSymLinks,
|
||||
|
|
@ -67,11 +68,7 @@ void VisualDeckStorageWidget::refreshBannerCards()
|
|||
allFiles << it.next(); // Add each file path to the list
|
||||
}
|
||||
|
||||
auto filteredFiles = searchWidget->filterFiles(sortWidget->filterFiles(allFiles), searchWidget->getSearchText());
|
||||
|
||||
flowWidget->clearLayout(); // Clear existing widgets in the flow layout
|
||||
|
||||
foreach (const QString &file, filteredFiles) {
|
||||
foreach (const QString &file, allFiles) {
|
||||
auto *display = new DeckPreviewWidget(flowWidget, file);
|
||||
|
||||
connect(display, &DeckPreviewWidget::deckPreviewClicked, this,
|
||||
|
|
@ -81,6 +78,14 @@ void VisualDeckStorageWidget::refreshBannerCards()
|
|||
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display->bannerCardDisplayWidget,
|
||||
&CardInfoPictureWidget::setScaleFactor);
|
||||
display->bannerCardDisplayWidget->setScaleFactor(cardSizeWidget->getSlider()->value());
|
||||
flowWidget->addWidget(display);
|
||||
allDecks.append(display);
|
||||
}
|
||||
|
||||
auto filteredFiles = searchWidget->filterFiles(sortWidget->filterFiles(allDecks), searchWidget->getSearchText());
|
||||
|
||||
flowWidget->clearLayout(); // Clear existing widgets in the flow layout
|
||||
|
||||
foreach (DeckPreviewWidget *deck, filteredFiles) {
|
||||
flowWidget->addWidget(deck);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue