aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags/panel/dialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/tags/panel/dialog.py')
-rw-r--r--src/gui/tags/panel/dialog.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/gui/tags/panel/dialog.py b/src/gui/tags/panel/dialog.py
new file mode 100644
index 0000000..7a6d3bc
--- /dev/null
+++ b/src/gui/tags/panel/dialog.py
@@ -0,0 +1,65 @@
+from PyQt5 import QtCore, QtWidgets
+
+from model.tag import Tag, ValidTagForm
+
+import db.tags
+import gui.tags.panel.form.widget
+import database
+
+def add(parent_widget, add_tag_signal):
+
+ def on_add(form: ValidTagForm):
+ tag = db.tags.insert(database.cursor(), form)
+ 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 = db.tags.update(database.cursor(), tag, form)
+ update_tag_signal.emit(row, updated_tag)
+ 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:
+ db.tags.delete(database.cursor(), table.model().row_ids(rows))
+ 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(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