1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from PyQt5 import QtWidgets
import db.tasks
import gui.tasks.modal
from model.task import Task, TaskForm
def open(database, table, update_task_signal, position):
rows = set([index.row() for index in table.selectedIndexes()])
menu = QtWidgets.QMenu(table)
if len(rows) == 1:
modify_action = menu.addAction(gui.icons.dialog_open(menu.style()), 'modify')
else:
modify_action = QtWidgets.QAction(menu)
delete_action = menu.addAction(gui.icons.trash(menu.style()), 'Delete')
action = menu.exec_(table.mapToGlobal(position))
if action == modify_action and len(rows) == 1:
row = list(rows)[0]
task = table.model().get_at(row)
show_update_dialog(database, table, update_task_signal, row, task)
elif action == delete_action:
confirm = QtWidgets.QMessageBox.question(table, 'Task deletion', 'Do you really want to delete the selected tasks ?', QtWidgets.QMessageBox.No | QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.Yes)
if confirm == QtWidgets.QMessageBox.Yes:
db.tasks.delete(database.cursor(), table.model().row_ids(rows))
database.commit()
table.model().delete_tasks(rows)
def show_update_dialog(database, parent_widget, update_task_signal, row, task):
dialog = gui.tasks.modal.dialog(
parent_widget,
'Modify a task',
'modify',
task,
lambda taskForm: on_update(database, update_task_signal, row, task, taskForm))
dialog.exec_()
def on_update(database, update_task_signal, row, task: Task, taskForm: TaskForm):
task = db.tasks.update(database.cursor(), task, taskForm)
update_task_signal.emit(row, task)
database.commit()
|