8
8
import typing
9
9
10
10
from PySide6 .QtCore import Signal , Qt
11
- from PySide6 .QtWidgets import QPushButton
11
+ from PySide6 .QtWidgets import QPushButton , QMessageBox , QApplication
12
12
13
13
from src .core .library import Library , Tag
14
14
from src .qt .flowlayout import FlowLayout
@@ -71,36 +71,42 @@ def __init__(self, item, title, field_index, library:Library, tags:list[int], dr
71
71
72
72
def set_item (self , item ):
73
73
self .item = item
74
-
75
- def set_tags (self , tags :list [int ]):
76
- logging .info (f'[TAG BOX WIDGET] SET TAGS: T:{ tags } for E:{ self .item .id } ' )
74
+
75
+ def update_tags (self ):
77
76
is_recycled = False
77
+
78
78
if self .base_layout .itemAt (0 ):
79
79
# logging.info(type(self.base_layout.itemAt(0).widget()))
80
+ is_recycled = True
80
81
while self .base_layout .itemAt (0 ) and self .base_layout .itemAt (1 ):
81
82
# logging.info(f"I'm deleting { self.base_layout.itemAt(0).widget()}")
82
83
self .base_layout .takeAt (0 ).widget ().deleteLater ()
83
- is_recycled = True
84
- for tag in tags :
84
+
85
+ for tag_id in self . tags :
85
86
# TODO: Remove space from the special search here (tag_id:x) once that system is finalized.
86
87
# tw = TagWidget(self.lib, self.lib.get_tag(tag), True, True,
87
88
# on_remove_callback=lambda checked=False, t=tag: (self.lib.get_entry(self.item.id).remove_tag(self.lib, t, self.field_index), self.updated.emit()),
88
89
# on_click_callback=lambda checked=False, q=f'tag_id: {tag}': (self.driver.main_window.searchField.setText(q), self.driver.filter_items(q)),
89
90
# on_edit_callback=lambda checked=False, t=tag: (self.edit_tag(t))
90
91
# )
91
- tw = TagWidget (self .lib , self .lib .get_tag (tag ), True , True )
92
- tw .on_click .connect (lambda checked = False , q = f'tag_id: { tag } ' : (self .driver .main_window .searchField .setText (q ), self .driver .filter_items (q )))
93
- tw .on_remove .connect (lambda checked = False , t = tag : (self .remove_tag (t )))
94
- tw .on_edit .connect (lambda checked = False , t = tag : (self .edit_tag (t )))
92
+ tw = TagWidget (self .lib , self .lib .get_tag (tag_id ), True , True , True )
93
+ tw .on_click .connect (lambda checked = False , q = f'tag_id: { tag_id } ' : (self .driver .main_window .searchField .setText (q ), self .driver .filter_items (q )))
94
+ tw .on_remove .connect (lambda checked = False , t = tag_id : (self .remove_tag (t )))
95
+ tw .on_edit .connect (lambda checked = False , t = tag_id : (self .edit_tag (t )))
96
+ tw .on_delete .connect (lambda checked = False , t = tag_id : (self .delete_tag (t )))
95
97
self .base_layout .addWidget (tw )
96
- self .tags = tags
97
-
98
+
98
99
# Move or add the '+' button.
99
100
if is_recycled :
100
101
self .base_layout .addWidget (self .base_layout .takeAt (0 ).widget ())
101
102
else :
102
103
self .base_layout .addWidget (self .add_button )
103
104
105
+ def set_tags (self , tags :list [int ]):
106
+ logging .info (f'[TAG BOX WIDGET] SET TAGS: T:{ tags } for E:{ self .item .id } ' )
107
+ self .tags = tags
108
+ self .update_tags ()
109
+
104
110
# Handles an edge case where there are no more tags and the '+' button
105
111
# doesn't move all the way to the left.
106
112
if self .base_layout .itemAt (0 ) and not self .base_layout .itemAt (1 ):
@@ -120,6 +126,24 @@ def edit_tag(self, tag_id:int):
120
126
self .edit_modal .saved .connect (lambda : self .lib .update_tag (btp .build_tag ()))
121
127
# panel.tag_updated.connect(lambda tag: self.lib.update_tag(tag))
122
128
self .edit_modal .show ()
129
+
130
+
131
+ def delete_tag (self , tag_id :int ):
132
+ def show_delete_prompt () -> bool :
133
+ result = QMessageBox .question (self , "Delete Tag" , f"Are you sure you want to delete Tag { tag .name } ?" ,
134
+ QMessageBox .Yes | QMessageBox .No )
135
+
136
+ return result == QMessageBox .Yes
137
+
138
+ tag = self .lib .get_tag (tag_id )
139
+ shift_held = Qt .KeyboardModifier .ShiftModifier in QApplication .keyboardModifiers ()
140
+
141
+ if shift_held or show_delete_prompt ():
142
+ self .lib .remove_tag (tag_id )
143
+ self .update_tags ()
144
+
145
+ if not shift_held :
146
+ QMessageBox .information (self , "Delete Tag" , "Tag deleted." )
123
147
124
148
125
149
def add_tag_callback (self , tag_id ):
0 commit comments