aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tasks/table/menu.py
blob: f89ec92d630757c7611967d3f1c33dabe0d2ac0c (plain)
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, ValidTaskForm

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 form: on_update(database, update_task_signal, row, task, form))
    dialog.exec_()

def on_update(database, update_task_signal, row, task: Task, form: ValidTaskForm):
    task = db.tasks.update(database.cursor(), task, form)
    update_task_signal.emit(row, task)
    database.commit()