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

View file

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

View file

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

View file

@ -25,7 +25,7 @@ VisualDeckStorageSearchWidget::VisualDeckStorageSearchWidget(VisualDeckStorageWi
searchDebounceTimer->start(300); // 300ms debounce 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(); return searchBar->text();
} }
QList<DeckPreviewWidget *> VisualDeckStorageSearchWidget::filterFiles(QList<DeckPreviewWidget *> &widgets, void VisualDeckStorageSearchWidget::filterWidgets(QList<DeckPreviewWidget *> widgets, const QString &searchText)
const QString &searchText)
{ {
if (searchText.isEmpty() || searchText.isNull()) { if (searchText.isEmpty() || searchText.isNull()) {
return widgets; for (auto widget : widgets) {
} widget->filteredBySearch = false;
QList<DeckPreviewWidget *> filteredWidgets;
for (const auto &file : widgets) {
QFileInfo fileInfo(file->filePath);
QString fileName = fileInfo.fileName().toLower();
if (fileName.contains(searchText.toLower())) {
filteredWidgets << file;
} }
} }
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: public:
explicit VisualDeckStorageSearchWidget(VisualDeckStorageWidget *parent); explicit VisualDeckStorageSearchWidget(VisualDeckStorageWidget *parent);
QString getSearchText(); QString getSearchText();
QList<DeckPreviewWidget *> filterFiles(QList<DeckPreviewWidget *> &widgets, const QString &searchText); void filterWidgets(QList<DeckPreviewWidget *> widgets, const QString &searchText);
private: private:
QHBoxLayout *layout; QHBoxLayout *layout;

View file

@ -103,3 +103,19 @@ void VisualDeckStorageWidget::updateTagFilter()
} }
emit tagFilterUpdated(); 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 deckPreviewDoubleClickedEvent(QMouseEvent *event, DeckPreviewWidget *instance);
void refreshBannerCards(); // Refresh the display of cards based on the current sorting option void refreshBannerCards(); // Refresh the display of cards based on the current sorting option
void updateTagFilter(); void updateTagFilter();
void updateColorFilter();
void updateSearchFilter();
void updateSortOrder(); void updateSortOrder();
signals: signals:
@ -40,6 +42,8 @@ signals:
void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance); void deckPreviewDoubleClicked(QMouseEvent *event, DeckPreviewWidget *instance);
void deckLoadRequested(QString &filePath); void deckLoadRequested(QString &filePath);
void tagFilterUpdated(); void tagFilterUpdated();
void colorFilterUpdated();
void searchFilterUpdated();
private: private:
QVBoxLayout *layout; QVBoxLayout *layout;