from PyQt5 import QtCore, QtWidgets from todo.model.tag import Tag, ValidTagForm import todo.db.tags import todo.gui.tags.panel.form.widget import todo.database def add(parent_widget, add_tag_signal): def on_add(form: ValidTagForm): tag = todo.db.tags.insert(todo.database.cursor(), form) todo.database.commit() add_tag_signal.emit(tag) return widget(parent_widget, "Ajouter une étiquette", "Ajouter", None, on_add) def update(parent_widget, update_tag_signal, row, tag): def on_update(form: ValidTagForm): updated_tag = todo.db.tags.update(todo.database.cursor(), tag, form) update_tag_signal.emit(row, updated_tag) todo.database.commit() return widget(parent_widget, "Modifier une étiquette", "Modifier", tag, on_update) def confirm_delete(table, rows): confirm = QtWidgets.QMessageBox.question( table, "Suppression des étiquettes", "Voulez-vous vraiment supprimer les étiquettes sélectionnées ?", QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.Yes) if confirm == QtWidgets.QMessageBox.Yes: todo.db.tags.delete(todo.database.cursor(), table.model().row_ids(rows)) todo.database.commit() table.model().delete_tags(rows) def widget( parent: QtWidgets.QWidget, title: str, action_title: str, tag: Tag, on_validated): dialog = QtWidgets.QDialog(parent) dialog.setWindowTitle(title) dialog.setMinimumSize(QtCore.QSize(320, 240)) layout = QtWidgets.QVBoxLayout(dialog) dialog.setLayout(layout) def on_dialog_validated(form): dialog.accept() on_validated(form) layout.addWidget(todo.gui.tags.panel.form.widget.widget( parent = dialog, action_title = action_title, tag = tag, on_validated = on_dialog_validated, on_cancel = lambda: dialog.reject())) return dialog