dcs-retribution/qt_ui/widgets/QLiberationCalendar.py
2023-10-14 18:42:48 +02:00

43 lines
1.6 KiB
Python

from PySide6 import QtCore, QtGui
from PySide6.QtWidgets import QCalendarWidget
class QLiberationCalendar(QCalendarWidget):
def __init__(self, parent=None):
super(QLiberationCalendar, self).__init__(parent)
self.setVerticalHeaderFormat(
QCalendarWidget.VerticalHeaderFormat.NoVerticalHeader
)
self.setGridVisible(False)
# Overrride default QCalendar behaviour that is rendering week end days in red
for d in (
QtCore.Qt.DayOfWeek.Monday,
QtCore.Qt.DayOfWeek.Tuesday,
QtCore.Qt.DayOfWeek.Wednesday,
QtCore.Qt.DayOfWeek.Thursday,
QtCore.Qt.DayOfWeek.Friday,
QtCore.Qt.DayOfWeek.Saturday,
QtCore.Qt.DayOfWeek.Sunday,
):
fmt = self.weekdayTextFormat(d)
fmt.setForeground(QtCore.Qt.GlobalColor.darkGray)
self.setWeekdayTextFormat(d, fmt)
def paintCell(self, painter, rect, date):
if date == self.selectedDate():
painter.save()
painter.fillRect(rect, QtGui.QColor("#D3D3D3"))
painter.setPen(QtCore.Qt.PenStyle.NoPen)
painter.setBrush(QtGui.QColor(52, 68, 85))
r = QtCore.QRect(
QtCore.QPoint(), min(rect.width(), rect.height()) * QtCore.QSize(1, 1)
)
r.moveCenter(rect.center())
painter.drawEllipse(r)
painter.setPen(QtGui.QPen(QtGui.QColor("white")))
painter.drawText(rect, QtCore.Qt.AlignmentFlag.AlignCenter, str(date.day()))
painter.restore()
else:
super(QLiberationCalendar, self).paintCell(painter, rect, date)