summaryrefslogtreecommitdiff
path: root/assignment_list_pyqt/entry.py
blob: 27db5fdc22a4d78b3be50110278cb68f9fa4554e (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from datetime import date
from PyQt5.QtCore import QDate, Qt
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QHBoxLayout, QLabel
import assignment_list_pyqt.globals as Globals

class Entry:
    def __init__(self, id, parent_id, desc, due = "", due_alt = "", link = "", color = "", highlight = "", done = False, hidden = False):
        self.id = id
        self.parent_id = parent_id
        self.desc = desc
        self.due = due
        self.due_alt = due_alt
        self.link = link
        self.color = color
        self.highlight = highlight
        self.done = done
        self.hidden = hidden

    def buildLayout(self):
        output = QHBoxLayout()
        bullet = QLabel()
        body = QLabel()

        output.setContentsMargins(2,2,2,2)

        bullet.setFont(QFont("Arial", 11))
        bullet.setMaximumWidth(15)

        body.setTextInteractionFlags(Qt.TextSelectableByMouse | Qt.LinksAccessibleByMouse)
        body.setFont(QFont("Arial", 11))
        body.setWordWrap(True)
        body.setToolTip("Right-Click for actions")

        # Check rules
        relevant_rules = list(filter(lambda r: r.entry_id == self.id, Globals.rules))
        for r in relevant_rules:
            if (r.when.lower() == "before" and r.date > QDate.currentDate()) or (r.when.lower() == "after" and r.date <= QDate.currentDate()):
                if r.color:
                    self.color = r.color
                if r.highlight:
                    self.highlight = r.highlight

        if self.done:
            bullet.setText("\u2713 ")
            bullet.setStyleSheet("""
                QLabel{
                    color: green;
                }
            """)
        else:
            bullet.setText("- ")
        output.addWidget(bullet)

        if self.due:
            body.setText("{0}/{1}/{2}: ".format(
                self.due.month(), 
                self.due.day(), 
                self.due.year()
            ))
        elif self.due_alt:
            body.setText("{0}: ".format(
                self.due_alt
            ))
        if self.link:
            body.setOpenExternalLinks(True)
            body.setText(body.text() + "<a href=\"{0}\" style=\"color: {1};\">".format(
                self.link, 
                self.color if self.color else "default"
            ))
        body.setText(body.text() + self.desc)
        if self.link:
            body.setText(body.text() + "</a>")
            body.setToolTip("{}".format(self.link))
        output.addWidget(body)

        if self.done:
            font = body.font()
            font.setStrikeOut(True)
            body.setFont(font)
            body.setStyleSheet("""
                QLabel{
                    color: green;
                }
            """)

        else:
            body.setStyleSheet("""
                QLabel{{
                    color: {0};
                    background-color: {1};
                    font-weight: {2};
                }}""".format(
                    self.color if self.color else "default",
                    self.highlight if self.highlight else "none",
                    "bold" if self.due and self.due <= date.today() else "normal"
                ))

        return output