aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags/panel/table/widget.py
diff options
context:
space:
mode:
authorJoris2020-05-31 13:59:35 +0200
committerJoris2020-05-31 13:59:35 +0200
commit0f1610333324d58acafee8c0fa9d9c9bc293b219 (patch)
tree302c37dd3751e9fe2e50ab656d56253bfd2d55fc /src/gui/tags/panel/table/widget.py
parent8a6e10d401eea8db0947f8c4b309b8a6256f9748 (diff)
downloadtodo-0f1610333324d58acafee8c0fa9d9c9bc293b219.tar.gz
todo-0f1610333324d58acafee8c0fa9d9c9bc293b219.tar.bz2
todo-0f1610333324d58acafee8c0fa9d9c9bc293b219.zip
Use defined tags for tasks
Diffstat (limited to 'src/gui/tags/panel/table/widget.py')
-rw-r--r--src/gui/tags/panel/table/widget.py70
1 files changed, 70 insertions, 0 deletions
diff --git a/src/gui/tags/panel/table/widget.py b/src/gui/tags/panel/table/widget.py
new file mode 100644
index 0000000..f0bf82c
--- /dev/null
+++ b/src/gui/tags/panel/table/widget.py
@@ -0,0 +1,70 @@
+from PyQt5 import QtWidgets
+from PyQt5.QtCore import Qt
+
+import db.tags
+import gui.tags.panel.signal
+import gui.tags.panel.table.menu
+import gui.tags.panel.table.model
+import gui.tags.panel.dialog
+from model.tag import Tag, ValidTagForm
+import database
+
+class Widget(QtWidgets.QTableView):
+
+ def __init__(self, parent, add_tag_signal):
+ super().__init__(parent)
+
+ self._update_tag_signal = gui.tags.panel.signal.UpdateTag()
+
+ tags = db.tags.get(database.cursor())
+ table_model = gui.tags.panel.table.model.TableModel(tags)
+
+ self.setModel(table_model)
+ self.sortByColumn(
+ gui.tags.panel.table.model.default_sort[0],
+ gui.tags.panel.table.model.default_sort[1])
+ 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.tags.panel.table.menu.open(self, self._update_tag_signal, position))
+
+ add_tag_signal.connect(lambda tag: self.insert(tag))
+ self._update_tag_signal.connect(lambda row, tag: self.update(row, tag))
+
+ def insert(self, tag):
+ self.model().insert_tag(self.horizontalHeader(), tag)
+ self.resizeColumns()
+
+ def update(self, row, tag):
+ row = self.model().update_tag(self.horizontalHeader(), row, tag)
+ self.selectRow(row)
+ self.resizeColumns()
+
+ def resizeColumns(self):
+ for column in range(gui.tags.panel.table.model.columns):
+ self.resizeColumnToContents(column)
+
+ 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]
+ tag = self.model().get_at(row)
+ gui.tags.panel.dialog.update(self, self._update_tag_signal, row, tag).exec_()
+ elif event.key() == Qt.Key_Delete:
+ rows = self.get_selected_rows()
+ gui.tags.panel.dialog.show_delete(self, rows)
+
+ def get_selected_rows(self):
+ return list(set([index.row() for index in self.selectedIndexes()]))
+
+ def on_double_click(self, row: int):
+ tag = self.model().get_at(row)
+ gui.tags.panel.dialog.update(self, self._update_tag_signal, row, tag).exec_()