diff --git a/src/ui/widgets/MessageCalendar.py b/src/ui/widgets/MessageCalendar.py new file mode 100644 index 0000000..d0433bc --- /dev/null +++ b/src/ui/widgets/MessageCalendar.py @@ -0,0 +1,55 @@ +from PyQt6 import QtWidgets, QtCore +from src.backend.database import Database +from PyQt6.QtCore import QDate +from PyQt6.QtGui import QColor, QPen +import darkdetect + +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() + self.setMessages(messages) + + def setMessages(self, messages): + 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) + + # 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};}}" + # ) diff --git a/src/ui/widgets/calendar_entry.py b/src/ui/widgets/calendar_entry.py new file mode 100644 index 0000000..fb9bde2 --- /dev/null +++ b/src/ui/widgets/calendar_entry.py @@ -0,0 +1,76 @@ +from .widget_sources.Ui_calendar_entry import Ui_Dialog +from PyQt6 import QtWidgets, QtCore +from PyQt6.QtCore import pyqtSignal +from src.backend.database import Database +from src import Icon + + +class CalendarEntry(QtWidgets.QDialog, Ui_Dialog): + deleteSignal = pyqtSignal( + int + ) # when emit, send the id of the message to be deleted + repaintSignal = pyqtSignal() + + def __init__(self, parent=None, messages=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.set_message() + self.spin_select_message.valueChanged.connect(self.set_message) + Icon("close", self.btn_close) + self.btn_delete_message.clicked.connect(self.delete_message) + self.btn_close.clicked.connect(self.close) + + def __get_id(self, message): + for i in range(len(self.messages)): + if self.messages[i] == message: + return self.messages[i]["id"] + + def delete_message(self): + value = self.spin_select_message.value() + if value > 0: + value = value - 1 + message = self.messages[value] + + id = self.__get_id(message) + print("id", id) + del self.messages[value - 1] + self.spin_select_message.setMaximum(len(self.messages)) + self.message_box.clear() + if value > 0: + self.set_message() + self.deleteSignal.emit(id) + else: + return + else: + # + self.repaintSignal.emit() + self.close() + + def set_message(self): + value = self.spin_select_message.value() + if value < 1: + return + message = self.messages[value - 1] + appnr = message["appnr"] + text = message["message"] + if appnr is not None: + self.line_app_info.setText(str(appnr)) + else: + self.line_app_info.setText("/") + self.message_box.setText(text) + self.message_box.repaint() + + +def launch_calendar_entry(): + + messages = Database().getMessages("2024-06-10") + + app = QtWidgets.QApplication([]) + dialog = CalendarEntry(messages=messages) + dialog.show() + app.exec() diff --git a/src/ui/widgets/widget_sources/Ui_calendar_entry.py b/src/ui/widgets/widget_sources/Ui_calendar_entry.py new file mode 100644 index 0000000..dfe417d --- /dev/null +++ b/src/ui/widgets/widget_sources/Ui_calendar_entry.py @@ -0,0 +1,70 @@ +# Form implementation generated from reading ui file 'c:\Users\aky547\GitHub\SemesterapparatsManager\src\ui\dialogs\dialog_sources\calendar_entry.ui' +# +# Created by: PyQt6 UI code generator 6.6.1 +# +# WARNING: Any manual changes made to this file will be lost when pyuic6 is +# run again. Do not edit this file unless you know what you are doing. + + +from PyQt6 import QtCore, QtGui, QtWidgets + + +class Ui_Dialog(object): + def setupUi(self, Dialog): + Dialog.setObjectName("Dialog") + Dialog.resize(400, 300) + self.verticalLayout = QtWidgets.QVBoxLayout(Dialog) + self.verticalLayout.setObjectName("verticalLayout") + self.horizontalLayout = QtWidgets.QHBoxLayout() + self.horizontalLayout.setObjectName("horizontalLayout") + self.label_14 = QtWidgets.QLabel(parent=Dialog) + self.label_14.setObjectName("label_14") + self.horizontalLayout.addWidget(self.label_14) + self.line_app_info = QtWidgets.QLineEdit(parent=Dialog) + self.line_app_info.setEnabled(True) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.line_app_info.sizePolicy().hasHeightForWidth()) + self.line_app_info.setSizePolicy(sizePolicy) + self.line_app_info.setMaximumSize(QtCore.QSize(30, 16777215)) + self.line_app_info.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) + self.line_app_info.setInputMask("") + self.line_app_info.setMaxLength(3) + self.line_app_info.setObjectName("line_app_info") + self.horizontalLayout.addWidget(self.line_app_info) + self.btn_delete_message = QtWidgets.QPushButton(parent=Dialog) + self.btn_delete_message.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) + self.btn_delete_message.setObjectName("btn_delete_message") + self.horizontalLayout.addWidget(self.btn_delete_message) + self.spin_select_message = QtWidgets.QSpinBox(parent=Dialog) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Fixed) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.spin_select_message.sizePolicy().hasHeightForWidth()) + self.spin_select_message.setSizePolicy(sizePolicy) + self.spin_select_message.setMaximumSize(QtCore.QSize(500, 16777215)) + self.spin_select_message.setMinimum(1) + self.spin_select_message.setObjectName("spin_select_message") + self.horizontalLayout.addWidget(self.spin_select_message) + self.btn_close = QtWidgets.QToolButton(parent=Dialog) + self.btn_close.setText("") + self.btn_close.setIconSize(QtCore.QSize(20, 20)) + self.btn_close.setAutoRaise(False) + self.btn_close.setObjectName("btn_close") + self.horizontalLayout.addWidget(self.btn_close) + self.verticalLayout.addLayout(self.horizontalLayout) + self.message_box = QtWidgets.QTextEdit(parent=Dialog) + self.message_box.setFocusPolicy(QtCore.Qt.FocusPolicy.NoFocus) + self.message_box.setObjectName("message_box") + self.verticalLayout.addWidget(self.message_box) + + self.retranslateUi(Dialog) + QtCore.QMetaObject.connectSlotsByName(Dialog) + + def retranslateUi(self, Dialog): + _translate = QtCore.QCoreApplication.translate + Dialog.setWindowTitle(_translate("Dialog", "Dialog")) + self.label_14.setText(_translate("Dialog", "Apparat")) + self.line_app_info.setText(_translate("Dialog", "200")) + self.btn_delete_message.setText(_translate("Dialog", "Löschen")) diff --git a/src/ui/widgets/widget_sources/calendar_entry.ui b/src/ui/widgets/widget_sources/calendar_entry.ui new file mode 100644 index 0000000..c363626 --- /dev/null +++ b/src/ui/widgets/widget_sources/calendar_entry.ui @@ -0,0 +1,115 @@ + + + Dialog + + + + 0 + 0 + 400 + 300 + + + + Dialog + + + + + + + + Apparat + + + + + + + true + + + + 0 + 0 + + + + + 30 + 16777215 + + + + Qt::NoFocus + + + + + + 200 + + + 3 + + + + + + + Qt::NoFocus + + + Löschen + + + + + + + + 0 + 0 + + + + + 500 + 16777215 + + + + 1 + + + + + + + + + + + 20 + 20 + + + + false + + + + + + + + + Qt::NoFocus + + + + + + + +