refactor: move leftover controller logic on TagDataView to TagData

This commit is contained in:
Travis Abendshien
2026-09-14 16:57:10 -07:00
parent 1cef25f357
commit a164a5e657
2 changed files with 23 additions and 46 deletions
+22 -13
View File
@@ -16,6 +16,7 @@ from tagstudio.core.utils.types import unwrap
from tagstudio.qt.controllers.modal import Modal
from tagstudio.qt.controllers.tiles.tile_data import TileData
from tagstudio.qt.mixed.build_tag import BuildTagPanel
from tagstudio.qt.mixed.tag_widget import TagWidget
from tagstudio.qt.views.tiles.tag_data_view import TagDataView
if TYPE_CHECKING:
@@ -31,25 +32,36 @@ class TagData(TileData):
def __init__(self, title: str, driver: QtDriver):
self._driver = driver
self._lib = driver.lib
self._entries: list[int] = []
super().__init__(title, TagDataView(driver.lib))
self._connect_callbacks()
super().__init__(title, TagDataView())
self.setObjectName("tag_data")
@override
def layout(self) -> TagDataView:
return super().layout() # pyright: ignore[reportReturnType]
def _connect_callbacks(self) -> None:
self.layout().tag_clicked.connect(self._on_click)
self.layout().tag_removed.connect(self._on_remove)
self.layout().tag_edited.connect(self._on_edit)
self.layout().tag_searched.connect(self._on_search)
def set_entries(self, entries: list[int]) -> None:
self._entries = entries
def set_tags(self, tags: Iterable[Tag]) -> None:
self.layout().set_tags(tags)
tags_ = sorted(list(tags), key=lambda tag: self._lib.tag_display_name(tag))
logger.info("[TagData] Tags:", tags=tags)
layout = self.layout()
while item := layout.takeAt(0):
if widget := item.widget():
widget.deleteLater()
for tag in tags_:
tag_widget = TagWidget(tag, library=self._lib, has_edit=True, has_remove=True)
tag_widget.on_click.connect(lambda t=tag: self._on_click(t))
tag_widget.on_remove.connect(lambda t=tag: self._on_remove(t))
tag_widget.on_edit.connect(lambda t=tag: self._on_edit(t))
tag_widget.search_for_tag_action.triggered.connect(
lambda checked=False, t=tag: self._on_search(t)
)
layout.addWidget(tag_widget)
def _on_click(self, tag: Tag) -> None:
match self._driver.settings.tag_click_action:
@@ -75,10 +87,7 @@ class TagData(TileData):
)
def _on_remove(self, tag: Tag) -> None:
logger.info(
"[TagData] remove_tag",
selected=self._entries,
)
logger.info("[TagData] remove_tag", selected=self._entries)
for entry_id in self._entries:
self._driver.lib.remove_tags_from_entries(entry_id, tag.id)
+1 -33
View File
@@ -2,45 +2,13 @@
# SPDX-License-Identifier: GPL-3.0-only
from collections.abc import Iterable
import structlog
from PySide6.QtCore import Signal
from tagstudio.core.library.alchemy.library import Library
from tagstudio.core.library.alchemy.models import Tag
from tagstudio.qt.mixed.tag_widget import TagWidget
from tagstudio.qt.views.layouts.flow_layout import FlowLayout
logger = structlog.get_logger(__name__)
class TagDataView(FlowLayout):
"""The layout used for a TagData widget."""
tag_clicked = Signal(Tag)
tag_removed = Signal(Tag)
tag_edited = Signal(Tag)
tag_searched = Signal(Tag)
def __init__(self, library: Library) -> None:
def __init__(self) -> None:
super().__init__()
self._lib = library
self.enable_grid_optimizations(value=False)
self.setContentsMargins(0, 0, 0, 0)
def set_tags(self, tags: Iterable[Tag]) -> None:
tags_ = sorted(list(tags), key=lambda tag: self._lib.tag_display_name(tag))
logger.info("[TagData] Tags:", tags=tags)
while self.itemAt(0):
self.takeAt(0).widget().deleteLater() # pyright: ignore[reportOptionalMemberAccess]
for tag in tags_:
tag_widget = TagWidget(tag, library=self._lib, has_edit=True, has_remove=True)
tag_widget.on_click.connect(lambda t=tag: self.tag_clicked.emit(t))
tag_widget.on_remove.connect(lambda t=tag: self.tag_removed.emit(t))
tag_widget.on_edit.connect(lambda t=tag: self.tag_edited.emit(t))
tag_widget.search_for_tag_action.triggered.connect(
lambda checked=False, t=tag: self.tag_searched.emit(t)
)
self.addWidget(tag_widget)