80 lines
2.7 KiB
Python
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};}}"
|
|
# )
|