aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags/panel/table/widget.py
diff options
context:
space:
mode:
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_()