aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags/list.py
blob: ad70dd0dd3ef5ad07bedb07c76bee0a8b1468a64 (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 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)