aboutsummaryrefslogtreecommitdiff
path: root/todo/gui/tasks/form/state.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/gui/tasks/form/state.py')
-rw-r--r--todo/gui/tasks/form/state.py100
1 files changed, 100 insertions, 0 deletions
diff --git a/todo/gui/tasks/form/state.py b/todo/gui/tasks/form/state.py
new file mode 100644
index 0000000..33b0873
--- /dev/null
+++ b/todo/gui/tasks/form/state.py
@@ -0,0 +1,100 @@
+from PyQt5 import QtCore
+from typing import Optional
+
+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:
+ def __init__(
+ self,
+ name,
+ name_signal,
+ duration,
+ duration_signal,
+ difficulty,
+ difficulty_signal,
+ priority,
+ priority_signal,
+ tags_signal: todo.gui.tags.list.SelectionSignal,
+ description,
+ description_signal):
+
+ self._name = name
+ self._duration = duration
+ self._difficulty = difficulty
+ self._priority = priority
+ self._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))
+ 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
+ description = self._description.strip()
+
+ if name and duration != None:
+ return ValidTaskForm(
+ name = name,
+ duration = duration,
+ difficulty = difficulty,
+ priority = priority,
+ tags = self._tags,
+ description = description)
+ else:
+ return None
+
+ def on_name_signal(self, name: str):
+ 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)
+ self.emit()
+
+ def on_tags_signal(self, tags: [int]):
+ self._tags = tags
+ self.emit()
+
+ def on_description_signal(self, description: str):
+ self._description = description
+ self.emit()
+
+ def emit(self):
+ validForm = self.get()
+ if validForm:
+ self._signal.emit(validForm)
+
+ def signal(self):
+ return self._signal
+
+class ValidTaskFormSignal(QtCore.QObject):
+ _signal = QtCore.pyqtSignal(ValidTaskForm, name = "validTaskForm")
+
+ def __init__(self):
+ QtCore.QObject.__init__(self)
+
+ def emit(self, form: Optional[ValidTaskForm]):
+ self._signal.emit(form)
+
+ def connect(self, f):
+ self._signal.connect(f)