From 45b611fe83df280305ad909e010f2fdc73dfd10b Mon Sep 17 00:00:00 2001 From: WorldTeacher <41587052+WorldTeacher@users.noreply.github.com> Date: Thu, 13 Jun 2024 09:34:23 +0200 Subject: [PATCH] update calendar to auto remove notification dot upon deletion --- src/ui/widgets/MessageCalendar.py | 23 +++++++++++++++++++++++ src/ui/widgets/calendar_entry.py | 15 +++++++-------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/ui/widgets/MessageCalendar.py b/src/ui/widgets/MessageCalendar.py index d0433bc..d1cd6b0 100644 --- a/src/ui/widgets/MessageCalendar.py +++ b/src/ui/widgets/MessageCalendar.py @@ -3,6 +3,7 @@ from src.backend.database import Database from PyQt6.QtCore import QDate from PyQt6.QtGui import QColor, QPen import darkdetect +from icecream import ic color = "#ddfb00" if darkdetect.isDark() else "#2204ff" pen = QPen(QColor(color)) @@ -21,9 +22,17 @@ class MessageCalendar(QtWidgets.QCalendarWidget): def getMessages(self): # Get the messages from the database messages = Database().getAllMessages() + ic(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 @@ -47,6 +56,20 @@ class MessageCalendar(QtWidgets.QCalendarWidget): 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 diff --git a/src/ui/widgets/calendar_entry.py b/src/ui/widgets/calendar_entry.py index 6a3e514..070f69e 100644 --- a/src/ui/widgets/calendar_entry.py +++ b/src/ui/widgets/calendar_entry.py @@ -1,6 +1,6 @@ from .widget_sources.Ui_calendar_entry import Ui_Dialog from PyQt6 import QtWidgets, QtCore -from PyQt6.QtCore import pyqtSignal +from PyQt6.QtCore import pyqtSignal, QDate from src.backend.database import Database from src import Icon @@ -9,16 +9,17 @@ class CalendarEntry(QtWidgets.QDialog, Ui_Dialog): deleteSignal = pyqtSignal( int ) # when emit, send the id of the message to be deleted - repaintSignal = pyqtSignal() + repaintSignal = pyqtSignal(str) - def __init__(self, parent=None, messages=None): + def __init__(self, parent=None, messages=None, date=None): super().__init__(parent) self.setupUi(self) self.messages = messages self.spin_select_message.setMaximum(len(self.messages)) self.spin_select_message.setMinimum(1) self.spin_select_message.setValue(1) - print(self.messages) + self.spin_select_message.setWrapping(True) + self.date = date self.set_message() self.spin_select_message.valueChanged.connect(self.set_message) Icon("close", self.btn_close) @@ -36,13 +37,11 @@ class CalendarEntry(QtWidgets.QDialog, Ui_Dialog): return i def delete_message(self): - print(self.spin_select_message.value()) value = self.spin_select_message.value() print(value) if value > 0: value = value - 1 message = self.messages[value] - print(message) id = self.__get_id(message) print("id", id) # del self.messages[value - 1] @@ -50,10 +49,10 @@ class CalendarEntry(QtWidgets.QDialog, Ui_Dialog): self.message_box.clear() self.set_message() - self.deleteSignal.emit(id) + Database().deleteMessage(id) self.messages.pop(self.__message_index(id)) if len(self.messages) == 0: - self.repaintSignal.emit() + self.repaintSignal.emit(self.date) self.close() else: #