calendar widget / notification box

This commit is contained in:
WorldTeacher
2024-06-11 09:50:19 +02:00
parent e7e2b659fe
commit ceee170107
4 changed files with 316 additions and 0 deletions

View File

@@ -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};}}"
# )

View File

@@ -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()

View File

@@ -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"))

View File

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>Apparat</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="line_app_info">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="inputMask">
<string/>
</property>
<property name="text">
<string>200</string>
</property>
<property name="maxLength">
<number>3</number>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_delete_message">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>Löschen</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spin_select_message">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>500</width>
<height>16777215</height>
</size>
</property>
<property name="minimum">
<number>1</number>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="btn_close">
<property name="text">
<string/>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="autoRaise">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QTextEdit" name="message_box">
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>