From b148095243140a730c7f126d3a678a200aa2e4a2 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Thu, 28 Jan 2021 18:58:51 +1000 Subject: [PATCH] basic match highlighting --- qt/aqt/sidebar.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/qt/aqt/sidebar.py b/qt/aqt/sidebar.py index 3a33b5a19..2126536e2 100644 --- a/qt/aqt/sidebar.py +++ b/qt/aqt/sidebar.py @@ -195,7 +195,7 @@ class SidebarTreeView(QTreeView): self.browser = browser self.mw = browser.mw self.col = self.mw.col - self.searching = False + self.current_search = False self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.onContextMenu) # type: ignore @@ -238,7 +238,7 @@ class SidebarTreeView(QTreeView): # from PyQt5.QtTest import QAbstractItemModelTester # tester = QAbstractItemModelTester(model) - self.searching = False + self.current_search = None self.setModel(model) expand_where_necessary(model, self) @@ -257,13 +257,23 @@ class SidebarTreeView(QTreeView): else: filter_model = self.model() - self.searching = True + self.current_search = text # Without collapsing first, can be very slow. Surely there's # a better way than this? self.collapseAll() filter_model.setFilterFixedString(text) self.expandAll() + def drawRow(self, painter: QPainter, options: QStyleOptionViewItem, idx: QModelIndex): + if not self.current_search: + return super().drawRow(painter, options, idx) + if self.current_search.lower() in self.model().mapToSource(idx).internalPointer().name.lower(): + brush = QBrush(QColor("lightyellow")) + painter.save() + painter.fillRect(options.rect, brush) + painter.restore() + return super().drawRow(painter, options, idx) + def onClickCurrent(self) -> None: idx = self.currentIndex() if idx.isValid(): @@ -283,12 +293,12 @@ class SidebarTreeView(QTreeView): super().keyPressEvent(event) def onExpansion(self, idx: QModelIndex) -> None: - if self.searching: + if self.current_search: return self._onExpansionChange(idx, True) def onCollapse(self, idx: QModelIndex) -> None: - if self.searching: + if self.current_search: return self._onExpansionChange(idx, False)