aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tasks/table/widget.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/tasks/table/widget.py')
-rw-r--r--src/gui/tasks/table/widget.py79
1 files changed, 52 insertions, 27 deletions
diff --git a/src/gui/tasks/table/widget.py b/src/gui/tasks/table/widget.py
index a990c0e..95ebe44 100644
--- a/src/gui/tasks/table/widget.py
+++ b/src/gui/tasks/table/widget.py
@@ -5,42 +5,67 @@ import db.tasks
import gui.tasks.signal
import gui.tasks.table.menu
import gui.tasks.table.model
+import gui.tasks.dialog
+from model.task import Task, ValidTaskForm
-def widget(database, parent, add_task_signal):
- table = QtWidgets.QTableView(parent)
+class Widget(QtWidgets.QTableView):
- tasks = db.tasks.get(database.cursor())
- table_model = gui.tasks.table.model.TableModel(tasks)
+ def __init__(self, database, parent, add_task_signal):
+ super().__init__(parent)
- table.setModel(table_model)
- table.sortByColumn(
+ self._database = database
+ self._update_task_signal = gui.tasks.signal.UpdateTask()
+
+ tasks = db.tasks.get(self._database.cursor())
+ table_model = gui.tasks.table.model.TableModel(tasks)
+
+ self.setModel(table_model)
+ self.sortByColumn(
gui.tasks.table.model.default_sort[0],
gui.tasks.table.model.default_sort[1])
- table.setSortingEnabled(True)
- table.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
- table.horizontalHeader().setStretchLastSection(True)
- resizeColumns(table)
+ self.setSortingEnabled(True)
+ self.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
+ self.horizontalHeader().setStretchLastSection(True)
+ self.resizeColumns()
+
+ self.doubleClicked.connect(lambda index: self.on_double_click(index.row()))
+
+ # Menu
+ self.setContextMenuPolicy(Qt.CustomContextMenu)
+ self.customContextMenuRequested.connect(lambda position: gui.tasks.table.menu.open(self._database, self, self._update_task_signal, position))
- update_task_signal = gui.tasks.signal.UpdateTask()
+ add_task_signal.get().connect(lambda task: self.insert(task))
+ self._update_task_signal.get().connect(lambda row, task: self.update(row, task))
- # Menu
- table.setContextMenuPolicy(Qt.CustomContextMenu)
- table.customContextMenuRequested.connect(lambda position: gui.tasks.table.menu.open(database, table, update_task_signal, position))
+ def insert(self, task):
+ self.model().insert_task(self.horizontalHeader(), task)
+ self.resizeColumns()
- add_task_signal.get().connect(lambda task: insert(table, task))
- update_task_signal.get().connect(lambda row, task: update(table, row, task))
+ def update(self, row, task):
+ row = self.model().update_task(self.horizontalHeader(), row, task)
+ self.selectRow(row)
+ self.resizeColumns()
- return table
+ def resizeColumns(self):
+ for column in range(gui.tasks.table.model.columns):
+ self.resizeColumnToContents(column)
-def insert(table, task):
- table.model().insert_task(table.horizontalHeader(), task)
- resizeColumns(table)
+ def keyPressEvent(self, event):
+ super().keyPressEvent(event)
+ if event.key() in (Qt.Key_Return, Qt.Key_Enter):
+ rows = self.get_selected_rows()
+ if len(rows) == 1:
+ row = rows[0]
+ task = self.model().get_at(row)
+ gui.tasks.dialog.update(
+ self._database, self, self._update_task_signal, row, task).exec_()
+ elif event.key() == Qt.Key_Delete:
+ rows = self.get_selected_rows()
+ gui.tasks.dialog.show_delete(self._database, self, rows)
-def update(table, row, task):
- row = table.model().update_task(table.horizontalHeader(), row, task)
- table.selectRow(row)
- resizeColumns(table)
+ def get_selected_rows(self):
+ return list(set([index.row() for index in self.selectedIndexes()]))
-def resizeColumns(table):
- for column in range(gui.tasks.table.model.columns):
- table.resizeColumnToContents(column)
+ def on_double_click(self, row: int):
+ task = self.model().get_at(row)
+ gui.tasks.dialog.update(self._database, self, self._update_task_signal, row, task).exec_()