from PyQt5 import QtCore, QtWidgets from typing import List from todo.model.tag import Tag from todo.model.task import Task, ValidTaskForm from todo.model.status import Status import todo.database import todo.gui.tasks.form.widget import todo.service.tasks def add(parent_widget, status: Status, add_task_signal): def on_add(task_form: ValidTaskForm): task = todo.service.tasks.create(todo.database.cursor(), status, task_form) add_task_signal.emit(task, task_form.tags) return widget(parent_widget, "Ajouter une tâche", "ajouter", None, [], on_add) def update(parent_widget, update_task_signal, row: int, task: Task, tags: List[int]): def on_update(task_form: ValidTaskForm): updated_task = todo.service.tasks.update(todo.database.cursor(), task, tags, task_form) update_task_signal.emit(row, updated_task, task_form.tags) return widget(parent_widget, "Modifier une tâche", "modifier", task, tags, on_update) def confirm_delete(parent, rows: List[int], on_confirm): confirm = QtWidgets.QMessageBox.question( parent, "Suppression des tâches", "Voulez-vous vraiment supprimer les tâches selectionnées ?", QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.Yes) if confirm == QtWidgets.QMessageBox.Yes: on_confirm() def widget( parent: QtWidgets.QWidget, title: str, action_title: str, task: Task, tags: List[int], on_validated): dialog = QtWidgets.QDialog(parent) dialog.setWindowTitle(title) dialog.setMinimumSize(QtCore.QSize(600, 240)) layout = QtWidgets.QVBoxLayout(dialog) dialog.setLayout(layout) def on_dialog_validated(form): dialog.accept() on_validated(form) layout.addWidget(todo.gui.tasks.form.widget.widget( parent = dialog, action_title = action_title, task = task, tags = tags, on_validated = on_dialog_validated, on_cancel = lambda: dialog.reject())) return dialog