from PyQt5 import QtCore from typing import Optional, List 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: 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._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)) 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: List[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)