Make filtering consider search bar and color identity again.

This commit is contained in:
Lukas Brübach 2025-02-02 07:46:06 +01:00
parent 8a809299d3
commit a69dfdc135
7 changed files with 43 additions and 28 deletions

View file

@ -112,9 +112,9 @@ DeckPreviewColorIdentityFilterWidget::DeckPreviewColorIdentityFilterWidget(Visua
// Connect the button's toggled signal
connect(toggleButton, &QPushButton::toggled, this, &DeckPreviewColorIdentityFilterWidget::updateFilterMode);
connect(this, &DeckPreviewColorIdentityFilterWidget::activeColorsChanged, parent,
&VisualDeckStorageWidget::refreshBannerCards);
&VisualDeckStorageWidget::updateColorFilter);
connect(this, &DeckPreviewColorIdentityFilterWidget::filterModeChanged, parent,
&VisualDeckStorageWidget::refreshBannerCards);
&VisualDeckStorageWidget::updateColorFilter);
// Call retranslateUi to set the initial text
retranslateUi();
@ -139,10 +139,8 @@ void DeckPreviewColorIdentityFilterWidget::updateFilterMode(bool checked)
emit filterModeChanged(exactMatchMode);
}
QList<DeckPreviewWidget *> DeckPreviewColorIdentityFilterWidget::filterWidgets(QList<DeckPreviewWidget *> &widgets)
void DeckPreviewColorIdentityFilterWidget::filterWidgets(QList<DeckPreviewWidget *> widgets)
{
QList<DeckPreviewWidget *> filteredWidgets;
// Check if no colors are active
bool noColorsActive = true;
for (auto it = activeColors.constBegin(); it != activeColors.constEnd(); ++it) {
@ -154,7 +152,9 @@ QList<DeckPreviewWidget *> DeckPreviewColorIdentityFilterWidget::filterWidgets(Q
// If no colors are active, return the unfiltered list of widgets
if (noColorsActive) {
return widgets;
for (DeckPreviewWidget *previewWidget : widgets) {
previewWidget->filteredByColor = false;
}
}
for (const auto &widget : widgets) {
@ -192,10 +192,6 @@ QList<DeckPreviewWidget *> DeckPreviewColorIdentityFilterWidget::filterWidgets(Q
}
}
if (matchesFilter) {
filteredWidgets << widget;
}
widget->filteredByColor = !matchesFilter;
}
return filteredWidgets;
}

View file

@ -42,7 +42,7 @@ class DeckPreviewColorIdentityFilterWidget : public QWidget
public:
explicit DeckPreviewColorIdentityFilterWidget(VisualDeckStorageWidget *parent);
void retranslateUi();
QList<DeckPreviewWidget *> filterWidgets(QList<DeckPreviewWidget *> &widgets);
void filterWidgets(QList<DeckPreviewWidget *> widgets);
signals:
void filterModeChanged(bool exactMatchMode);

View file

@ -46,6 +46,10 @@ VisualDeckStorageFolderDisplayWidget::VisualDeckStorageFolderDisplayWidget(
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::tagFilterUpdated, this,
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::colorFilterUpdated, this,
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
connect(visualDeckStorageWidget, &VisualDeckStorageWidget::searchFilterUpdated, this,
&VisualDeckStorageFolderDisplayWidget::updateVisibility);
createWidgetsForFiles();
createWidgetsForFolders();

View file

@ -25,7 +25,7 @@ VisualDeckStorageSearchWidget::VisualDeckStorageSearchWidget(VisualDeckStorageWi
searchDebounceTimer->start(300); // 300ms debounce
});
connect(searchDebounceTimer, &QTimer::timeout, parent, &VisualDeckStorageWidget::refreshBannerCards);
connect(searchDebounceTimer, &QTimer::timeout, parent, &VisualDeckStorageWidget::updateSearchFilter);
}
/**
@ -38,23 +38,18 @@ QString VisualDeckStorageSearchWidget::getSearchText()
return searchBar->text();
}
QList<DeckPreviewWidget *> VisualDeckStorageSearchWidget::filterFiles(QList<DeckPreviewWidget *> &widgets,
const QString &searchText)
void VisualDeckStorageSearchWidget::filterWidgets(QList<DeckPreviewWidget *> widgets, const QString &searchText)
{
if (searchText.isEmpty() || searchText.isNull()) {
return widgets;
}
QList<DeckPreviewWidget *> filteredWidgets;
for (const auto &file : widgets) {
QFileInfo fileInfo(file->filePath);
QString fileName = fileInfo.fileName().toLower();
if (fileName.contains(searchText.toLower())) {
filteredWidgets << file;
for (auto widget : widgets) {
widget->filteredBySearch = false;
}
}
return filteredWidgets;
for (auto file : widgets) {
QFileInfo fileInfo(file->filePath);
QString fileName = fileInfo.fileName().toLower();
file->filteredBySearch = !fileName.contains(searchText.toLower());
}
}

View file

@ -16,7 +16,7 @@ class VisualDeckStorageSearchWidget : public QWidget
public:
explicit VisualDeckStorageSearchWidget(VisualDeckStorageWidget *parent);
QString getSearchText();
QList<DeckPreviewWidget *> filterFiles(QList<DeckPreviewWidget *> &widgets, const QString &searchText);
void filterWidgets(QList<DeckPreviewWidget *> widgets, const QString &searchText);
private:
QHBoxLayout *layout;

View file

@ -103,3 +103,19 @@ void VisualDeckStorageWidget::updateTagFilter()
}
emit tagFilterUpdated();
}
void VisualDeckStorageWidget::updateColorFilter()
{
if (folderWidget) {
deckPreviewColorIdentityFilterWidget->filterWidgets(folderWidget->findChildren<DeckPreviewWidget *>());
}
emit colorFilterUpdated();
}
void VisualDeckStorageWidget::updateSearchFilter()
{
if (folderWidget) {
searchWidget->filterWidgets(folderWidget->findChildren<DeckPreviewWidget *>(), searchWidget->getSearchText());
}
emit searchFilterUpdated();
}

View file

@ -32,6 +32,8 @@ public slots:
void deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance);
void refreshBannerCards(); // Refresh the display of cards based on the current sorting option
void updateTagFilter();
void updateColorFilter();
void updateSearchFilter();
void updateSortOrder();
signals:
@ -40,6 +42,8 @@ signals:
void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void deckLoadRequested(QString &filePath);
void tagFilterUpdated();
void colorFilterUpdated();
void searchFilterUpdated();
private:
QVBoxLayout *layout;