From a54b7776320ef5aa02e6ef7378c2a011dc454885 Mon Sep 17 00:00:00 2001 From: Joris Date: Sat, 16 Oct 2021 20:09:55 +0200 Subject: Introduce due date Also: - Remove duration, difficulty and priority, - Translate to french. --- todo/util/gui/date_input.py | 79 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 todo/util/gui/date_input.py (limited to 'todo/util/gui/date_input.py') diff --git a/todo/util/gui/date_input.py b/todo/util/gui/date_input.py new file mode 100644 index 0000000..06536c7 --- /dev/null +++ b/todo/util/gui/date_input.py @@ -0,0 +1,79 @@ +from PyQt5 import QtWidgets, QtCore, QtGui + +import todo.gui.icon + +class DateInput(QtWidgets.QLineEdit): + + def __init__(self, init_date: str, parent): + super().__init__(parent) + self.setReadOnly(True) + self.installEventFilter(self) + self._date = init_date + self.update(init_date) + self._is_editing = False + + def eventFilter(self, source, event): + if source is self and event.type() == QtCore.QEvent.FocusIn: + if not self._is_editing: + self._is_editing = True + Calendar(self, self._date, self.update).exec_() + else: + self._is_editing = False + self.clearFocus() + return super(DateInput, self).eventFilter(source, event) + + def update(self, date: str): + self._date = date + self.setText(date) + +class Calendar(QtWidgets.QDialog): + + def __init__(self, parent: QtWidgets.QWidget, init_date: str, update_date): + super().__init__(parent) + + self._update_date = update_date + self._calendar = QtWidgets.QCalendarWidget(self) + + self.setWindowTitle("Sélectionnez une date") + self.setMinimumSize(QtCore.QSize(300, 400)) + + layout = QtWidgets.QVBoxLayout(self) + self.setLayout(layout) + + self._calendar.setMinimumDate(QtCore.QDate.currentDate()) + self._calendar.activated.connect(self.select) + if init_date: + self._calendar.setSelectedDate(QtCore.QDate.fromString(init_date, "dd/MM/yyyy")) + layout.addWidget(self._calendar) + + buttons = QtWidgets.QWidget(self) + buttons_layout = QtWidgets.QHBoxLayout(buttons) + layout.addWidget(buttons) + + accept_button = QtWidgets.QPushButton("Sélectionner", self) + accept_button.setIcon(todo.gui.icon.dialog_ok(accept_button.style())) + accept_button.clicked.connect(self.select) + buttons_layout.addWidget(accept_button) + + reset_button = QtWidgets.QPushButton("Effacer", self) + reset_button.setIcon(todo.gui.icon.dialog_reset(reset_button.style())) + reset_button.clicked.connect(self.reset) + buttons_layout.addWidget(reset_button) + + cancel_button = QtWidgets.QPushButton("Annuler", self) + cancel_button.setIcon(todo.gui.icon.dialog_cancel(cancel_button.style())) + cancel_button.clicked.connect(lambda: self.reject()) + buttons_layout.addWidget(cancel_button) + + def select(self): + self.accept() + self._update_date(self._calendar.selectedDate().toString("dd/MM/yyyy")) + + def reset(self): + self.accept() + self._update_date("") + + def keyPressEvent(self, event): + super().keyPressEvent(event) + if event.key() in (QtCore.Qt.Key_Delete, QtCore.Qt.Key_Backspace): + self.reset() -- cgit v1.2.3