blob: 857b6ffd0a9da32b6c4c5ccbe2a1bfa25e853476 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
from PyQt5 import QtWidgets, QtCore
from typing import List, Tuple
from todo.model.tag import Tag
import todo.db.tags
import todo.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 = sorted(todo.db.tags.get(todo.database.cursor()), key=lambda t: t.name)
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)
|