aboutsummaryrefslogtreecommitdiff
path: root/todo/gui/tags/panel/dialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'todo/gui/tags/panel/dialog.py')
-rw-r--r--todo/gui/tags/panel/dialog.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/todo/gui/tags/panel/dialog.py b/todo/gui/tags/panel/dialog.py
new file mode 100644
index 0000000..f1a669c
--- /dev/null
+++ b/todo/gui/tags/panel/dialog.py
@@ -0,0 +1,64 @@
+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, "Add a tag", "add", 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, "Modify a tag", "modify", tag, on_update)
+
+def show_delete(table, rows):
+ confirm = QtWidgets.QMessageBox.question(
+ table,
+ "Tag deletion",
+ "Do you really want to delete the selected tags ?",
+ 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