aboutsummaryrefslogtreecommitdiff
path: root/todo/gui/tasks/form
diff options
context:
space:
mode:
Diffstat (limited to 'todo/gui/tasks/form')
-rw-r--r--todo/gui/tasks/form/state.py45
-rw-r--r--todo/gui/tasks/form/widget.py82
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)