diff options
author | Joris | 2020-05-10 20:24:24 +0200 |
---|---|---|
committer | Joris | 2020-05-10 20:24:24 +0200 |
commit | 8a6e10d401eea8db0947f8c4b309b8a6256f9748 (patch) | |
tree | 6e2dc6956ce7825f0f1b6c3ed6f0b4171fe9c274 /src/gui/tags/dialog.py | |
parent | 3e1415c738facb8b0274adb50ae65f218fd59c9b (diff) | |
download | todo-8a6e10d401eea8db0947f8c4b309b8a6256f9748.tar.gz todo-8a6e10d401eea8db0947f8c4b309b8a6256f9748.tar.bz2 todo-8a6e10d401eea8db0947f8c4b309b8a6256f9748.zip |
Add tags panel
Diffstat (limited to 'src/gui/tags/dialog.py')
-rw-r--r-- | src/gui/tags/dialog.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/gui/tags/dialog.py b/src/gui/tags/dialog.py new file mode 100644 index 0000000..1dd99fa --- /dev/null +++ b/src/gui/tags/dialog.py @@ -0,0 +1,64 @@ +from PyQt5 import QtCore, QtWidgets + +from model.tag import Tag, ValidTagForm + +import db.tags +import gui.tags.form.widget + +def add(database, 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(database, 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(database, 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.form.widget.widget( + parent = dialog, + action_title = action_title, + tag = tag, + on_validated = on_dialog_validated, + on_cancel = lambda: dialog.reject())) + + return dialog |