From bb38b0886906dde14f3a7e251504a68ca835e7e4 Mon Sep 17 00:00:00 2001 From: Ewan Date: Mon, 27 Apr 2020 23:02:03 +0100 Subject: [PATCH] add searchable QListWidgets & reformat with black --- transcriber/dbf/parser.py | 6 +-- transcriber/file_selecter/view.py | 7 +++- transcriber/searchable_list/__init__.py | 0 transcriber/searchable_list/widget.py | 52 +++++++++++++++++++++++++ transcriber/tag_selecter/view.py | 10 +++-- 5 files changed, 64 insertions(+), 11 deletions(-) create mode 100644 transcriber/searchable_list/__init__.py create mode 100644 transcriber/searchable_list/widget.py diff --git a/transcriber/dbf/parser.py b/transcriber/dbf/parser.py index c4761a9..3ca5d0c 100644 --- a/transcriber/dbf/parser.py +++ b/transcriber/dbf/parser.py @@ -108,11 +108,7 @@ def __len__(self): class Parser: def __init__( - self, - required_fields, - encoding="cp437", - required_tags=[], - all_tags=[], + self, required_fields, encoding="cp437", required_tags=[], all_tags=[], ): self.required_fields = set(required_fields) self.encoding = encoding diff --git a/transcriber/file_selecter/view.py b/transcriber/file_selecter/view.py index 01b012d..c4d8349 100644 --- a/transcriber/file_selecter/view.py +++ b/transcriber/file_selecter/view.py @@ -1,5 +1,7 @@ from PyQt5 import QtWidgets, QtCore +from transcriber.searchable_list.widget import SearchableListWidget + class FileSelecterView(QtWidgets.QWidget): files_added = QtCore.pyqtSignal() @@ -10,7 +12,9 @@ def __init__(self): self._layout = QtWidgets.QVBoxLayout() - self.files = QtWidgets.QListWidget(self) + self.files = SearchableListWidget( + self, search_text="Search Loaded Files" + ) self.files.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection ) @@ -32,7 +36,6 @@ def __init__(self): self._layout.addWidget(self.add_file) self._layout.addWidget(QtWidgets.QLabel()) - self._layout.addWidget(QtWidgets.QLabel("Loaded:")) self._layout.addWidget(self.files) self._layout.addWidget(self.del_file) self.setLayout(self._layout) diff --git a/transcriber/searchable_list/__init__.py b/transcriber/searchable_list/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/transcriber/searchable_list/widget.py b/transcriber/searchable_list/widget.py new file mode 100644 index 0000000..2adebc7 --- /dev/null +++ b/transcriber/searchable_list/widget.py @@ -0,0 +1,52 @@ +from PyQt5 import QtWidgets + + +class SearchableListWidget(QtWidgets.QWidget): + def __init__(self, parent=None, search_text="Search"): + super(SearchableListWidget, self).__init__(parent) + self.search_bar = QtWidgets.QLineEdit() + self.search_bar.setPlaceholderText(search_text) + self.search_bar.textChanged.connect(self._update_list) + + self.list_widget = QtWidgets.QListWidget() + self.itemDoubleClicked = self.list_widget.itemDoubleClicked + self.currentItemChanged = self.list_widget.currentItemChanged + self.doubleClicked = self.list_widget.doubleClicked + + vertical = QtWidgets.QVBoxLayout() + vertical.addWidget(self.search_bar) + vertical.addWidget(self.list_widget) + self.setLayout(vertical) + + def setSelectionMode(self, *args, **kwargs): + self.list_widget.setSelectionMode(*args, **kwargs) + + def clear(self, *args, **kwargs): + self.list_widget.clear(*args, **kwargs) + + def count(self, *args, **kwargs): + return self.list_widget.count(*args, **kwargs) + + def addItem(self, *args, **kwargs): + self.list_widget.addItem(*args, **kwargs) + + def addItems(self, *args, **kwargs): + self.list_widget.addItems(*args, **kwargs) + + def item(self, *args, **kwargs): + return self.list_widget.item(*args, **kwargs) + + def selectedItems(self, *args, **kwargs): + return self.list_widget.selectedItems(*args, **kwargs) + + def takeItem(self, *args, **kwargs): + return self.list_widget.takeItem(*args, **kwargs) + + def row(self, *args, **kwargs): + return self.list_widget.row(*args, **kwargs) + + def _update_list(self, text): + text = text.lower() + for i in range(self.count()): + item = self.item(i) + item.setHidden(text not in item.text().lower()) diff --git a/transcriber/tag_selecter/view.py b/transcriber/tag_selecter/view.py index cdcf18b..d457aa5 100644 --- a/transcriber/tag_selecter/view.py +++ b/transcriber/tag_selecter/view.py @@ -1,5 +1,7 @@ from PyQt5 import QtWidgets, QtCore +from transcriber.searchable_list.widget import SearchableListWidget + class TagSelecterView(QtWidgets.QWidget): tag_added = QtCore.pyqtSignal() @@ -15,11 +17,13 @@ def __init__(self): "Select a tag file to parse. File names typically end in '(Tagname).DAT'." ) - self.tags = QtWidgets.QListWidget(self) + self.tags = SearchableListWidget(self, search_text="Search All Tags") self.tags.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection ) - self.used = QtWidgets.QListWidget(self) + self.used = SearchableListWidget( + self, search_text="Search Current Tags" + ) self.used.setSelectionMode( QtWidgets.QAbstractItemView.ExtendedSelection ) @@ -47,11 +51,9 @@ def __init__(self): left = QtWidgets.QVBoxLayout() right = QtWidgets.QVBoxLayout() - left.addWidget(QtWidgets.QLabel("All Tags:")) left.addWidget(self.tags) left.addWidget(self.add_tag) - right.addWidget(QtWidgets.QLabel("Current Tags:")) right.addWidget(self.used) right.addWidget(self.del_tag)