aboutsummaryrefslogtreecommitdiff
path: root/src/gui/tags
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/tags')
-rw-r--r--src/gui/tags/list.py47
-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