diff options
Diffstat (limited to 'src/gui/tags')
-rw-r--r-- | src/gui/tags/list.py | 47 | ||||
-rw-r--r-- | src/gui/tags/panel/dialog.py (renamed from src/gui/tags/dialog.py) | 11 | ||||
-rw-r--r-- | src/gui/tags/panel/form/state.py (renamed from src/gui/tags/form/state.py) | 0 | ||||
-rw-r--r-- | src/gui/tags/panel/form/widget.py (renamed from src/gui/tags/form/widget.py) | 8 | ||||
-rw-r--r-- | src/gui/tags/panel/signal.py (renamed from src/gui/tags/signal.py) | 8 | ||||
-rw-r--r-- | src/gui/tags/panel/table/menu.py (renamed from src/gui/tags/table/menu.py) | 8 | ||||
-rw-r--r-- | src/gui/tags/panel/table/model.py (renamed from src/gui/tags/table/model.py) | 0 | ||||
-rw-r--r-- | src/gui/tags/panel/table/widget.py (renamed from src/gui/tags/table/widget.py) | 37 | ||||
-rw-r--r-- | src/gui/tags/panel/widget.py (renamed from src/gui/tags/widget.py) | 15 |
9 files changed, 91 insertions, 43 deletions
diff --git a/src/gui/tags/list.py b/src/gui/tags/list.py new file mode 100644 index 0000000..ad70dd0 --- /dev/null +++ b/src/gui/tags/list.py @@ -0,0 +1,47 @@ +from PyQt5 import QtWidgets, QtCore +from typing import List, Tuple + +from model.tag import Tag +import db.tags +import database + +class SelectionSignal(QtCore.QObject): + _signal = QtCore.pyqtSignal(list, name = 'selection') + + def __init__(self): + QtCore.QObject.__init__(self) + + def emit(self, tag_ids): + self._signal.emit(tag_ids) + + def connect(self, f): + self._signal.connect(f) + +def widget(parent, init_tags: List[int]) -> Tuple[QtWidgets.QWidget, SelectionSignal]: + widget = QtWidgets.QWidget(parent) + signal = SelectionSignal() + + layout = QtWidgets.QVBoxLayout(widget) + widget.setLayout(layout) + + layout.addWidget(QtWidgets.QLabel('Tags')) + + list_widget = QtWidgets.QListWidget() + list_widget.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection) + layout.addWidget(list_widget) + + tags = db.tags.get(database.cursor()) + + for tag in tags: + item = QtWidgets.QListWidgetItem(tag.name) + list_widget.addItem(item) + if tag.id in init_tags: + item.setSelected(True) + + def on_item_selection_changed(): + tag_texts = [item.text() for item in list_widget.selectedItems()] + signal.emit([tag.id for tag in tags if tag.name in tag_texts]) + + list_widget.itemSelectionChanged.connect(on_item_selection_changed) + + return (widget, signal) diff --git a/src/gui/tags/dialog.py b/src/gui/tags/panel/dialog.py index 1dd99fa..7a6d3bc 100644 --- a/src/gui/tags/dialog.py +++ b/src/gui/tags/panel/dialog.py @@ -3,9 +3,10 @@ from PyQt5 import QtCore, QtWidgets from model.tag import Tag, ValidTagForm import db.tags -import gui.tags.form.widget +import gui.tags.panel.form.widget +import database -def add(database, parent_widget, add_tag_signal): +def add(parent_widget, add_tag_signal): def on_add(form: ValidTagForm): tag = db.tags.insert(database.cursor(), form) @@ -14,7 +15,7 @@ def add(database, parent_widget, add_tag_signal): return widget(parent_widget, 'Add a tag', 'add', None, on_add) -def update(database, parent_widget, update_tag_signal, row, tag): +def update(parent_widget, update_tag_signal, row, tag): def on_update(form: ValidTagForm): updated_tag = db.tags.update(database.cursor(), tag, form) @@ -23,7 +24,7 @@ def update(database, parent_widget, update_tag_signal, row, tag): return widget(parent_widget, 'Modify a tag', 'modify', tag, on_update) -def show_delete(database, table, rows): +def show_delete(table, rows): confirm = QtWidgets.QMessageBox.question( table, 'Tag deletion', @@ -54,7 +55,7 @@ def widget( dialog.accept() on_validated(form) - layout.addWidget(gui.tags.form.widget.widget( + layout.addWidget(gui.tags.panel.form.widget.widget( parent = dialog, action_title = action_title, tag = tag, diff --git a/src/gui/tags/form/state.py b/src/gui/tags/panel/form/state.py index 931e67a..931e67a 100644 --- a/src/gui/tags/form/state.py +++ b/src/gui/tags/panel/form/state.py diff --git a/src/gui/tags/form/widget.py b/src/gui/tags/panel/form/widget.py index 92a5db2..5627e3b 100644 --- a/src/gui/tags/form/widget.py +++ b/src/gui/tags/panel/form/widget.py @@ -4,7 +4,7 @@ from typing import Optional, Tuple, List, Any from model.tag import Tag, ValidTagForm from model import difficulty, priority import gui.icon -import gui.tags.form.state +import gui.tags.panel.form.state import gui.color def widget( @@ -29,7 +29,7 @@ def widget( init_color = tag.color if tag is not None else '#FFFFFF' color_input = color_edit(grid, grid_layout, 1, 'Color', QtGui.QColor(init_color)) - tag_form_edition = gui.tags.form.state.TagFormEdition( + tag_form_edition = gui.tags.panel.form.state.TagFormEdition( init_name, name_input.textChanged, init_color, @@ -96,13 +96,15 @@ class ColorInput(QtWidgets.QLineEdit): if not self._is_editing: self._is_editing = True color = QtWidgets.QColorDialog.getColor(self._color, self) - self.update(color) + if color.isValid(): + self.update(color) else: self._is_editing = False self.clearFocus() return super(ColorInput, self).eventFilter(source, event) def update(self, color: QtGui.QColor): + self._color = color self.setText(color.name().upper()) palette = QtGui.QPalette() palette.setColor(QtGui.QPalette.Base, color) diff --git a/src/gui/tags/signal.py b/src/gui/tags/panel/signal.py index 57ec696..9417530 100644 --- a/src/gui/tags/signal.py +++ b/src/gui/tags/panel/signal.py @@ -11,8 +11,8 @@ class AddTag(QtCore.QObject): def emit(self, tag): self._signal.emit(tag) - def get(self): - return self._signal + def connect(self, f): + self._signal.connect(f) class UpdateTag(QtCore.QObject): _signal = QtCore.pyqtSignal(int, Tag, name = 'updateTag') @@ -23,5 +23,5 @@ class UpdateTag(QtCore.QObject): def emit(self, row, tag): self._signal.emit(row, tag) - def get(self): - return self._signal + def connect(self, f): + self._signal.connect(f) diff --git a/src/gui/tags/table/menu.py b/src/gui/tags/panel/table/menu.py index 7acdda1..f95c097 100644 --- a/src/gui/tags/table/menu.py +++ b/src/gui/tags/panel/table/menu.py @@ -1,10 +1,10 @@ from PyQt5 import QtWidgets import db.tags -import gui.tags.dialog +import gui.tags.panel.dialog from model.tag import Tag, ValidTagForm -def open(database, table, update_tag_signal, position): +def open(table, update_tag_signal, position): rows = set([index.row() for index in table.selectedIndexes()]) menu = QtWidgets.QMenu(table) @@ -20,6 +20,6 @@ def open(database, table, update_tag_signal, position): if action == modify_action and len(rows) == 1: row = list(rows)[0] tag = table.model().get_at(row) - gui.tags.dialog.update(database, table, update_tag_signal, row, tag).exec_() + gui.tags.panel.dialog.update(table, update_tag_signal, row, tag).exec_() elif action == delete_action: - gui.tags.dialog.show_delete(database, table, rows) + gui.tags.panel.dialog.show_delete(table, rows) diff --git a/src/gui/tags/table/model.py b/src/gui/tags/panel/table/model.py index 7c66b5d..7c66b5d 100644 --- a/src/gui/tags/table/model.py +++ b/src/gui/tags/panel/table/model.py diff --git a/src/gui/tags/table/widget.py b/src/gui/tags/panel/table/widget.py index 89c9990..f0bf82c 100644 --- a/src/gui/tags/table/widget.py +++ b/src/gui/tags/panel/table/widget.py @@ -2,27 +2,27 @@ from PyQt5 import QtWidgets from PyQt5.QtCore import Qt import db.tags -import gui.tags.signal -import gui.tags.table.menu -import gui.tags.table.model -import gui.tags.dialog +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, database, parent, add_tag_signal): + def __init__(self, parent, add_tag_signal): super().__init__(parent) - self._database = database - self._update_tag_signal = gui.tags.signal.UpdateTag() + self._update_tag_signal = gui.tags.panel.signal.UpdateTag() - tags = db.tags.get(self._database.cursor()) - table_model = gui.tags.table.model.TableModel(tags) + tags = db.tags.get(database.cursor()) + table_model = gui.tags.panel.table.model.TableModel(tags) self.setModel(table_model) self.sortByColumn( - gui.tags.table.model.default_sort[0], - gui.tags.table.model.default_sort[1]) + 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) @@ -32,10 +32,10 @@ class Widget(QtWidgets.QTableView): # # Menu self.setContextMenuPolicy(Qt.CustomContextMenu) - self.customContextMenuRequested.connect(lambda position: gui.tags.table.menu.open(self._database, self, self._update_tag_signal, position)) + self.customContextMenuRequested.connect(lambda position: gui.tags.panel.table.menu.open(self, self._update_tag_signal, position)) - add_tag_signal.get().connect(lambda tag: self.insert(tag)) - self._update_tag_signal.get().connect(lambda row, tag: self.update(row, tag)) + 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) @@ -47,7 +47,7 @@ class Widget(QtWidgets.QTableView): self.resizeColumns() def resizeColumns(self): - for column in range(gui.tags.table.model.columns): + for column in range(gui.tags.panel.table.model.columns): self.resizeColumnToContents(column) def keyPressEvent(self, event): @@ -57,15 +57,14 @@ class Widget(QtWidgets.QTableView): if len(rows) == 1: row = rows[0] tag = self.model().get_at(row) - gui.tags.dialog.update( - self._database, self, self._update_tag_signal, row, tag).exec_() + 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.dialog.show_delete(self._database, self, 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.dialog.update(self._database, self, self._update_tag_signal, row, tag).exec_() + gui.tags.panel.dialog.update(self, self._update_tag_signal, row, tag).exec_() diff --git a/src/gui/tags/widget.py b/src/gui/tags/panel/widget.py index a9d870e..3da55c9 100644 --- a/src/gui/tags/widget.py +++ b/src/gui/tags/panel/widget.py @@ -1,26 +1,25 @@ from PyQt5 import QtWidgets -import gui.tags.dialog -import gui.tags.signal -import gui.tags.table.widget +import gui.tags.panel.dialog +import gui.tags.panel.signal +import gui.tags.panel.table.widget import gui.icon -def widget(database, parent): +def widget(parent): widget = QtWidgets.QWidget(parent) layout = QtWidgets.QVBoxLayout(widget) widget.setLayout(layout) - add_tag_signal = gui.tags.signal.AddTag() + add_tag_signal = gui.tags.panel.signal.AddTag() add_tag_button = QtWidgets.QPushButton('Add a tag', widget) add_tag_button.setIcon(gui.icon.new_folder(widget.style())) - add_tag_button.clicked.connect(lambda: gui.tags.dialog.add( - database, widget, add_tag_signal).exec_()) + add_tag_button.clicked.connect(lambda: gui.tags.panel.dialog.add(widget, add_tag_signal).exec_()) layout.addWidget(add_tag_button) - table = gui.tags.table.widget.Widget(database, widget, add_tag_signal) + table = gui.tags.panel.table.widget.Widget(widget, add_tag_signal) layout.addWidget(table) return widget |