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

88 lines
2.9 KiB
Python

from PyQt6 import QtWidgets, QtCore
from PyQt6.QtCore import QDate
from PyQt6.QtGui import QColor, QPen
from src.backend import Database
import darkdetect
import sys
from loguru import logger as log
logger = log
logger.remove()
logger.add("logs/application.log", rotation="1 week", retention="1 month", enqueue=True)
# logger.add(sys.stderr, format="{time} {level} {message}", level="INFO")
logger.add(sys.stdout)
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()
logger.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):
# remove all drawn circles
for message in messages:
# print(message)
# 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};}}"
# )