added DictListItem encapsulating the alarm logic

This commit is contained in:
2022-12-19 19:13:12 +01:00
parent e343471ea1
commit 678ca19b32
2 changed files with 54 additions and 37 deletions

View File

@ -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)

49
grum/dictlistitem.py Normal file
View File

@ -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()