From 678ca19b3248806146509ae35e955d604d9d89fe Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Mon, 19 Dec 2022 19:13:12 +0100 Subject: [PATCH] added DictListItem encapsulating the alarm logic --- grum/dictlist.py | 42 +++++-------------------------------- grum/dictlistitem.py | 49 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 37 deletions(-) create mode 100644 grum/dictlistitem.py diff --git a/grum/dictlist.py b/grum/dictlist.py index 1e880d2..8186a37 100644 --- a/grum/dictlist.py +++ b/grum/dictlist.py @@ -1,9 +1,8 @@ from collections import defaultdict from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QListWidget, QListWidgetItem -from PyQt5.QtGui import QIcon, QPixmap, QPainter +from PyQt5.QtWidgets import QListWidget -from .theme import VIOLET, GREY4 +from .dictlistitem import DictListItem class DictList(QListWidget): @@ -27,8 +26,7 @@ class DictList(QListWidget): def prepend_item_if_missing(self, key): if key not in self.data: - itm = QListWidgetItem(key) - set_alarm(itm, False) + itm = DictListItem(key) self.prependItem(itm) def prependItem(self, itm): @@ -53,42 +51,12 @@ class DictList(QListWidget): def set_alarm_by_key(self, key, state): itm = self.findItems(key, Qt.MatchExactly)[0] - set_alarm(itm, state) + itm.set_alarm(state) def set_alarm_by_index(self, index, state): row = index.row() itm = self.item(row) - set_alarm(itm, state) - - - -def set_alarm(*args, **kwargs): - set_bold(*args, **kwargs) - set_dot(*args, **kwargs) - - -def set_bold(itm, state): - fnt = itm.font() - fnt.setBold(state) - itm.setFont(fnt) - - -def set_dot(itm, state): - pixmap = QPixmap(8, 8) - pixmap.fill(Qt.transparent) - - if state: - painter = QPainter() - painter.begin(pixmap) - painter.setRenderHint(QPainter.Antialiasing) - painter.setPen(GREY4) - painter.setBrush(VIOLET) - rect = pixmap.rect() - painter.drawEllipse(rect) - painter.end() - - icon = QIcon(pixmap) - itm.setIcon(icon) + itm.set_alarm(state) diff --git a/grum/dictlistitem.py b/grum/dictlistitem.py new file mode 100644 index 0000000..c1cf668 --- /dev/null +++ b/grum/dictlistitem.py @@ -0,0 +1,49 @@ +from PyQt5.QtCore import Qt +from PyQt5.QtWidgets import QListWidgetItem +from PyQt5.QtGui import QIcon, QPixmap, QPainter + +from .theme import VIOLET, GREY4 + + +class DictListItem(QListWidgetItem): + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.set_alarm(False) + + + def set_alarm(self, state): + self.set_bold(state) + self.set_dot(state) + + + def set_bold(self, state): + fnt = self.font() + fnt.setBold(state) + self.setFont(fnt) + + + def set_dot(self, state): + pixmap = QPixmap(8, 8) + pixmap.fill(Qt.transparent) + + if state: + draw_dot(pixmap, GREY4, VIOLET) + + icon = QIcon(pixmap) + self.setIcon(icon) + + + +def draw_dot(pixmap, pen, brush): + painter = QPainter() + painter.begin(pixmap) + painter.setRenderHint(QPainter.Antialiasing) + painter.setPen(pen) + painter.setBrush(brush) + rect = pixmap.rect() + painter.drawEllipse(rect) + painter.end() + + +