aboutsummaryrefslogtreecommitdiff
path: root/todo/util/gui/date_input.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/util/gui/date_input.py')
-rw-r--r--todo/util/gui/date_input.py79
1 files changed, 79 insertions, 0 deletions
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()