Skip to content

Commit 7c89975

Browse files
authored
fix(ui): (mostly) fix right-click search option on tags (#756)
1 parent ca7e84d commit 7c89975

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

tagstudio/src/qt/modals/tag_search.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
# Created for TagStudio: https://github.com/CyanVoxel/TagStudio
44

55

6+
import typing
7+
68
import src.qt.modals.build_tag as build_tag
79
import structlog
810
from PySide6.QtCore import QSize, Qt, Signal
@@ -32,6 +34,10 @@
3234

3335
logger = structlog.get_logger(__name__)
3436

37+
# Only import for type checking/autocompletion, will not be imported at runtime.
38+
if typing.TYPE_CHECKING:
39+
from src.qt.modals.build_tag import BuildTagPanel
40+
3541

3642
class TagSearchPanel(PanelWidget):
3743
tag_chosen = Signal(int)
@@ -41,7 +47,12 @@ class TagSearchPanel(PanelWidget):
4147
is_tag_chooser: bool
4248
exclude: list[int]
4349

44-
def __init__(self, library: Library, exclude: list[int] = None, is_tag_chooser: bool = True):
50+
def __init__(
51+
self,
52+
library: Library,
53+
exclude: list[int] = None,
54+
is_tag_chooser: bool = True,
55+
):
4556
super().__init__()
4657
self.lib = library
4758
self.exclude = exclude or []
@@ -93,6 +104,17 @@ def __build_row_item_widget(self, tag: Tag):
93104

94105
tag_widget.on_edit.connect(lambda t=tag: self.edit_tag(t))
95106
tag_widget.on_remove.connect(lambda t=tag: self.remove_tag(t))
107+
108+
# NOTE: A solution to this would be to pass the driver to TagSearchPanel, however that
109+
# creates an exponential amount of work trying to fix the preexisting tests.
110+
111+
# tag_widget.search_for_tag_action.triggered.connect(
112+
# lambda checked=False, tag_id=tag.id: (
113+
# self.driver.main_window.searchField.setText(f"tag_id:{tag_id}"),
114+
# self.driver.filter_items(FilterState.from_tag_id(tag_id)),
115+
# )
116+
# )
117+
96118
row.addWidget(tag_widget)
97119

98120
primary_color = get_primary_color(tag)
@@ -196,7 +218,7 @@ def on_tag_modal_saved():
196218
self.search_field.setText("")
197219
self.update_tags()
198220

199-
self.build_tag_modal: build_tag.BuildTagPanel = build_tag.BuildTagPanel(self.lib)
221+
self.build_tag_modal: BuildTagPanel = build_tag.BuildTagPanel(self.lib)
200222
self.add_tag_modal: PanelModal = PanelModal(self.build_tag_modal, has_save=True)
201223
Translations.translate_with_setter(self.add_tag_modal.setTitle, "tag.new")
202224
Translations.translate_with_setter(self.add_tag_modal.setWindowTitle, "tag.add")

tagstudio/src/qt/widgets/tag.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,9 @@ def __init__(
141141

142142
# TODO: This currently doesn't work in "Add Tag" menus. Either fix this or
143143
# disable it in that context.
144-
search_for_tag_action = QAction(self)
145-
search_for_tag_action.setText(Translations.translate_formatted("tag.search_for_tag"))
146-
search_for_tag_action.triggered.connect(self.on_click.emit)
147-
self.bg_button.addAction(search_for_tag_action)
144+
self.search_for_tag_action = QAction(self)
145+
self.search_for_tag_action.setText(Translations.translate_formatted("tag.search_for_tag"))
146+
self.bg_button.addAction(self.search_for_tag_action)
148147
# add_to_search_action = QAction(self)
149148
# add_to_search_action.setText(Translations.translate_formatted("tag.add_to_search"))
150149
# self.bg_button.addAction(add_to_search_action)

tagstudio/src/qt/widgets/tag_box.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import structlog
99
from PySide6.QtCore import Signal
1010
from src.core.library import Tag
11+
from src.core.library.alchemy.enums import FilterState
1112
from src.qt.flowlayout import FlowLayout
1213
from src.qt.modals.build_tag import BuildTagPanel
1314
from src.qt.widgets.fields import FieldWidget
@@ -61,6 +62,14 @@ def set_tags(self, tags: typing.Iterable[Tag]):
6162
)
6263
)
6364
tag_widget.on_edit.connect(lambda t=tag: self.edit_tag(t))
65+
66+
tag_widget.search_for_tag_action.triggered.connect(
67+
lambda checked=False, tag_id=tag.id: (
68+
self.driver.main_window.searchField.setText(f"tag_id:{tag_id}"),
69+
self.driver.filter_items(FilterState.from_tag_id(tag_id)),
70+
)
71+
)
72+
6473
self.base_layout.addWidget(tag_widget)
6574

6675
def edit_tag(self, tag: Tag):

0 commit comments

Comments
 (0)