Files
SemesterapparatsManager/src/ui/widgets/MessageCalendar.py

80 lines
2.7 KiB
Python

from typing import Any
import darkdetect
from PySide6 import QtCore, QtWidgets
from PySide6.QtCore import QDate
from PySide6.QtGui import QColor, QPen
from src.database import Database
from src.shared.logging import log
color = "#ddfb00" if darkdetect.isDark() else "#2204ff"
pen = QPen(QColor(color))
pen.setWidth(5)
class MessageCalendar(QtWidgets.QCalendarWidget):
# Widget for MessageCalendar
def __init__(self, parent=None):
super().__init__(parent)
self.messages = {} # Dictionary to store dates with messages
self.setFirstDayOfWeek(QtCore.Qt.DayOfWeek.Monday)
self.setGridVisible(True)
self.getMessages()
def getMessages(self):
# Get the messages from the database
messages = Database().getAllMessages()
log.debug("Got {} messages", len(messages))
self.setMessages(messages)
def deleteMessage(self, id):
message = [message for message in self.messages if message["id"] == id][0]
self.messages.remove(message)
self.updateCells()
def setMessages(self, messages: list[dict[str, Any]]):
# remove all drawn circles
for message in messages:
# Convert the date string to a QDate object
date = QDate.fromString(message["remind_at"], "yyyy-MM-dd")
# Store the message for the date
self.messages[date] = message["message"]
self.updateCells()
def updateCells(self):
self.repaint()
def paintCell(self, painter, rect, date):
super().paintCell(painter, rect, date)
# Check if there is a message for the current date
if date in self.messages:
# draw a circle below the date
painter.setPen(pen)
# increase draw size
bl = rect.bottomLeft()
bl.setX(bl.x() + 8)
bl.setY(bl.y() - 8)
painter.drawEllipse(bl, 5, 5)
else:
for cell in self.messages:
if cell.month() == date.month() and cell.year() == date.year():
# draw a circle below the date
painter.setPen(QPen(QtCore.Qt.GlobalColor.transparent))
bl = rect.bottomLeft()
bl.setX(bl.x() + 8)
bl.setY(bl.y() - 8)
painter.drawEllipse(bl, 5, 5)
def reload(self, date):
qdate = QDate.fromString(date, "yyyy-MM-dd")
del self.messages[qdate]
self.updateCells()
# def change_stylesheet_cell(self, date: QDate, color: str):
# # change the stylesheet of a cell
# self.setStyleSheet(
# f"QCalendarWidget QTableView QTableCornerButton::section {{background-color: {color};}}"
# )