mirror of
https://github.com/TagStudioDev/TagStudio.git
synced 2026-09-15 06:59:34 +02:00
refactor: move leftover controller logic on TagDataView to TagData
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user