aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags/list.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/tags/list.py')
-rw-r--r--src/gui/tags/list.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/gui/tags/list.py b/src/gui/tags/list.py
new file mode 100644
index 0000000..ad70dd0
--- /dev/null
+++ b/src/gui/tags/list.py
@@ -0,0 +1,47 @@
+from PyQt5 import QtWidgets, QtCore
+from typing import List, Tuple
+
+from model.tag import Tag
+import db.tags
+import database
+
+class SelectionSignal(QtCore.QObject):
+ _signal = QtCore.pyqtSignal(list, name = 'selection')
+
+ def __init__(self):
+ QtCore.QObject.__init__(self)
+
+ def emit(self, tag_ids):
+ self._signal.emit(tag_ids)
+
+ def connect(self, f):
+ self._signal.connect(f)
+
+def widget(parent, init_tags: List[int]) -> Tuple[QtWidgets.QWidget, SelectionSignal]:
+ widget = QtWidgets.QWidget(parent)
+ signal = SelectionSignal()
+
+ layout = QtWidgets.QVBoxLayout(widget)
+ widget.setLayout(layout)
+
+ layout.addWidget(QtWidgets.QLabel('Tags'))
+
+ list_widget = QtWidgets.QListWidget()
+ list_widget.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
+ layout.addWidget(list_widget)
+
+ tags = db.tags.get(database.cursor())
+
+ for tag in tags:
+ item = QtWidgets.QListWidgetItem(tag.name)
+ list_widget.addItem(item)
+ if tag.id in init_tags:
+ item.setSelected(True)
+
+ def on_item_selection_changed():
+ tag_texts = [item.text() for item in list_widget.selectedItems()]
+ signal.emit([tag.id for tag in tags if tag.name in tag_texts])
+
+ list_widget.itemSelectionChanged.connect(on_item_selection_changed)
+
+ return (widget, signal)