diff options
Diffstat (limited to 'todo/gui/tasks/form')
-rw-r--r-- | todo/gui/tasks/form/state.py | 45 | ||||
-rw-r--r-- | todo/gui/tasks/form/widget.py | 82 |
2 files changed, 41 insertions, 86 deletions
diff --git a/todo/gui/tasks/form/state.py b/todo/gui/tasks/form/state.py index c073214..ed64747 100644 --- a/todo/gui/tasks/form/state.py +++ b/todo/gui/tasks/form/state.py @@ -1,10 +1,8 @@ from PyQt5 import QtCore from typing import Optional, List +from datetime import date, datetime from todo.model.task import ValidTaskForm -from todo.model.difficulty import Difficulty -from todo.model.priority import Priority -import todo.gui.tasks.duration import todo.gui.tags.list class TaskFormEdition: @@ -12,45 +10,33 @@ class TaskFormEdition: self, name, name_signal, - duration, - duration_signal, - difficulty, - difficulty_signal, - priority, - priority_signal, + due_date, + due_date_signal, tags: List[int], tags_signal: todo.gui.tags.list.SelectionSignal, description, description_signal): self._name = name - self._duration = duration - self._difficulty = difficulty - self._priority = priority + self._due_date = parse_date(due_date) self._tags = tags self._description = description self._signal = ValidTaskFormSignal() name_signal.connect(lambda n: self.on_name_signal(n)) - duration_signal.connect(lambda d: self.on_duration_signal(d)) - difficulty_signal.connect(lambda d: self.on_difficulty_signal(d)) - priority_signal.connect(lambda p: self.on_priority_signal(p)) + due_date_signal.connect(lambda d: self.on_due_date_signal(d)) tags_signal.connect(lambda ts: self.on_tags_signal(ts)) description_signal.connect(lambda d: self.on_description_signal(d)) def get(self) -> Optional[ValidTaskForm]: name = self._name.strip() - duration = todo.gui.tasks.duration.parse(self._duration) - difficulty = self._difficulty - priority = self._priority + due_date = self._due_date description = self._description.strip() - if name and duration != None: + if name: return ValidTaskForm( name = name, - duration = duration, - difficulty = difficulty, - priority = priority, + due_date = due_date, tags = self._tags, description = description) else: @@ -60,16 +46,8 @@ class TaskFormEdition: self._name = name self.emit() - def on_duration_signal(self, duration: str): - self._duration = duration - self.emit() - - def on_difficulty_signal(self, index: int): - self._difficulty = Difficulty(index) - self.emit() - - def on_priority_signal(self, index: int): - self._priority = Priority(index) + def on_due_date_signal(self, due_date: str): + self._due_date = parse_date(due_date) self.emit() def on_tags_signal(self, tags: List[int]): @@ -99,3 +77,6 @@ class ValidTaskFormSignal(QtCore.QObject): def connect(self, f): self._signal.connect(f) + +def parse_date(d: str) -> date: + return datetime.strptime(d, "%d/%m/%Y").date() if d else None diff --git a/todo/gui/tasks/form/widget.py b/todo/gui/tasks/form/widget.py index a6ce488..a401eaa 100644 --- a/todo/gui/tasks/form/widget.py +++ b/todo/gui/tasks/form/widget.py @@ -3,11 +3,10 @@ from typing import Optional, Tuple, List, Any from todo.model.task import Task, ValidTaskForm from todo.model.tag import Tag -from todo.model import difficulty, priority import todo.gui.icon import todo.gui.tasks.form.state -import todo.gui.tasks.duration import todo.gui.tags.list +from todo.util.gui.date_input import DateInput class TextEditSignal(QtCore.QObject): _signal = QtCore.pyqtSignal(str, name = "textEdit") @@ -34,33 +33,11 @@ def widget( widget.setLayout(layout) init_name = task.name if task is not None else "" - name_input = name_edit(widget, layout, "Name", init_name) - - grid = QtWidgets.QWidget(widget) - layout.addWidget(grid) - grid_layout = QtWidgets.QGridLayout(grid) - grid.setLayout(grid_layout) - - init_duration = todo.gui.tasks.duration.format(task.duration) if task is not None else "" - duration_input = line_edit(grid, grid_layout, 1, "Duration", init_duration) - - init_difficulty = task.difficulty if task is not None else difficulty.Difficulty.NORMAL - difficulty_input = combo_box( - grid, - grid_layout, - 3, - "Difficulty", - [difficulty.format(d) for d in difficulty.values], - int(init_difficulty)) - - init_priority = task.priority if task is not None else priority.Priority.MIDDLE - priority_input = combo_box( - grid, - grid_layout, - 4, - "Priority", - [priority.format(d) for d in priority.values], - int(init_priority)) + name_input = name_edit(widget, layout, "Nom", init_name) + + init_due_date = (task.due_date.strftime("%d/%m/%Y") if task.due_date else None) if task else None + (due_date_input, due_date_signal) = date_edit(widget, "Échéance", init_due_date) + layout.addWidget(due_date_input) (tags_list_widget, tags_signal) = tags_selection(widget, tags) layout.addWidget(tags_list_widget) @@ -72,12 +49,8 @@ def widget( task_form_edition = todo.gui.tasks.form.state.TaskFormEdition( init_name, name_input.textChanged, - init_duration, - duration_input.textChanged, - init_difficulty, - difficulty_input.currentIndexChanged, - init_priority, - priority_input.currentIndexChanged, + init_due_date, + due_date_signal, tags, tags_signal, init_description, @@ -119,23 +92,6 @@ def name_edit( return edit -def line_edit( - parent, - layout: QtWidgets.QGridLayout, - n: int, - label: str, - default_value: str) -> QtWidgets.QLineEdit: - - label = QtWidgets.QLabel(label, parent) - layout.addWidget(label, n, 0) - - edit = QtWidgets.QLineEdit(parent) - if default_value != None: - edit.setText(default_value) - layout.addWidget(edit, n, 1) - - return edit - def combo_box( parent, layout: QtWidgets.QGridLayout, @@ -162,7 +118,8 @@ def tags_selection(parent, init_tags: List[int]) -> QtWidgets.QWidget: def text_edit( parent, label: str, - default_value: str) -> Tuple[QtWidgets.QWidget, TextEditSignal]: + default_value: str + ) -> Tuple[QtWidgets.QWidget, TextEditSignal]: widget = QtWidgets.QWidget(parent) layout = QtWidgets.QVBoxLayout(widget) @@ -181,6 +138,23 @@ def text_edit( return (widget, signal) +def date_edit( + parent, + label: str, + init_date: str + ) -> QtWidgets.QLineEdit: + + widget = QtWidgets.QWidget(parent) + layout = QtWidgets.QVBoxLayout(widget) + + label = QtWidgets.QLabel(label, parent) + layout.addWidget(label) + + date_input = DateInput(init_date, parent) + layout.addWidget(date_input) + + return (widget, date_input.textChanged) + def buttons(parent, action_title, task_form_signal, on_validate, on_cancel): widget = QtWidgets.QWidget(parent) layout = QtWidgets.QHBoxLayout(widget) @@ -199,7 +173,7 @@ def buttons(parent, action_title, task_form_signal, on_validate, on_cancel): task_form_signal.connect(on_task_form_signal) - cancel = QtWidgets.QPushButton("cancel", widget) + cancel = QtWidgets.QPushButton("Annuler", widget) cancel.setIcon(todo.gui.icon.dialog_cancel(cancel.style())) cancel.clicked.connect(on_cancel) layout.addWidget(cancel) |