feat: search is filtered by category

This commit is contained in:
h
2026-01-28 23:35:59 +01:00
parent 8cc70d9ef0
commit e7014f3777
3 changed files with 62 additions and 10 deletions

View File

@@ -183,9 +183,32 @@ class PluginTableModel(QAbstractTableModel):
self._apply_sort() self._apply_sort()
self.endResetModel() self.endResetModel()
def filter_by_search_results(self, plugins: list[AudioComponent]) -> None: def filter_by_search_results(
self,
plugins: list[AudioComponent],
category: str | None = None,
manufacturer: str | None = None,
) -> None:
self.beginResetModel() self.beginResetModel()
self._plugins = plugins if manufacturer is not None:
self._plugins = [
p for p in plugins if p.manufacturer.lower() == manufacturer.lower()
]
elif category == "Show All" or category is ...:
self._plugins = plugins
elif category is None:
self._plugins = [p for p in plugins if not p.categories]
elif category == "Top Level":
self._plugins = [
p for p in plugins if any(c.name == "" for c in p.categories)
]
elif category is not None:
self._plugins = [
p for p in plugins if any(c.name == category for c in p.categories)
]
else:
self._plugins = plugins
self._apply_sort()
self.endResetModel() self.endResetModel()
def get_plugin(self, row: int) -> AudioComponent | None: def get_plugin(self, row: int) -> AudioComponent | None:

View File

@@ -40,6 +40,8 @@ class MainWindow(QMainWindow):
self._logic: Logic | None = None self._logic: Logic | None = None
self._glass_applied = False self._glass_applied = False
self._settings = Settings() self._settings = Settings()
self._current_category: str | None = "Show All"
self._current_manufacturer: str | None = None
self._setup_ui() self._setup_ui()
self._setup_service() self._setup_service()
@@ -139,16 +141,31 @@ class MainWindow(QMainWindow):
self._plugin_table.focus_table() self._plugin_table.focus_table()
def _on_category_selected(self, category: str | None) -> None: def _on_category_selected(self, category: str | None) -> None:
self._plugin_table.clear_search() self._current_category = category
self._plugin_table.filter_by_category(category) self._current_manufacturer = None
query = self._plugin_table.get_search_text()
if query:
self._service.search(query)
else:
self._plugin_table.filter_by_category(category)
def _on_manufacturer_selected(self, manufacturer: str) -> None: def _on_manufacturer_selected(self, manufacturer: str) -> None:
self._plugin_table.clear_search() self._current_manufacturer = manufacturer
self._plugin_table.filter_by_manufacturer(manufacturer) self._current_category = None
query = self._plugin_table.get_search_text()
if query:
self._service.search(query)
else:
self._plugin_table.filter_by_manufacturer(manufacturer)
def _on_search_changed(self, query: str) -> None: def _on_search_changed(self, query: str) -> None:
if not query: if not query:
self._plugin_table.filter_by_category("Show All") if self._current_manufacturer:
self._plugin_table.filter_by_manufacturer(self._current_manufacturer)
else:
self._plugin_table.filter_by_category(
self._current_category if self._current_category else "Show All"
)
return return
self._service.search(query) self._service.search(query)
@@ -179,7 +196,11 @@ class MainWindow(QMainWindow):
def _on_search_results(self, results: list[SearchResult]) -> None: def _on_search_results(self, results: list[SearchResult]) -> None:
plugins = [r.plugin for r in results] plugins = [r.plugin for r in results]
self._plugin_table.filter_by_search_results(plugins) self._plugin_table.filter_by_search_results(
plugins,
category=self._current_category,
manufacturer=self._current_manufacturer,
)
def _on_error(self, message: str) -> None: def _on_error(self, message: str) -> None:
self._loading_overlay.set_message(f"Error: {message}") self._loading_overlay.set_message(f"Error: {message}")

View File

@@ -148,8 +148,13 @@ class PluginTableView(QWidget):
def filter_by_manufacturer(self, manufacturer: str) -> None: def filter_by_manufacturer(self, manufacturer: str) -> None:
self._model.filter_by_manufacturer(manufacturer) self._model.filter_by_manufacturer(manufacturer)
def filter_by_search_results(self, plugins: list[AudioComponent]) -> None: def filter_by_search_results(
self._model.filter_by_search_results(plugins) self,
plugins: list[AudioComponent],
category: str | None = None,
manufacturer: str | None = None,
) -> None:
self._model.filter_by_search_results(plugins, category, manufacturer)
def update_plugin_display(self, plugin: AudioComponent, column: int) -> None: def update_plugin_display(self, plugin: AudioComponent, column: int) -> None:
self._model.update_plugin_display(plugin, column) self._model.update_plugin_display(plugin, column)
@@ -157,6 +162,9 @@ class PluginTableView(QWidget):
def clear_search(self) -> None: def clear_search(self) -> None:
self._search_bar.clear() self._search_bar.clear()
def get_search_text(self) -> str:
return self._search_bar.text()
def focus_search(self) -> None: def focus_search(self) -> None:
self._search_bar.setFocus() self._search_bar.setFocus()
self._search_bar.selectAll() self._search_bar.selectAll()