from PyQt5 import QtCore from typing import Optional, List from datetime import date, datetime from todo.model.task import ValidTaskForm import todo.gui.tags.list class TaskFormEdition: def __init__( self, name, name_signal, due_date, due_date_signal, tags: List[int], tags_signal: todo.gui.tags.list.SelectionSignal, description, description_signal): self._name = name 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)) 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() due_date = self._due_date description = self._description.strip() if name: return ValidTaskForm( name = name, due_date = due_date, tags = self._tags, description = description) else: return None def on_name_signal(self, name: str): self._name = name self.emit() 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]): 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) def parse_date(d: str) -> date: return datetime.strptime(d, "%d/%m/%Y").date() if d else None