From 281ff268f8e3a4c7bd56f2555e1baf476da0e24e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 25 Apr 2021 20:15:39 +0530 Subject: [PATCH] E-book viewer: When searching the Table of Contents allow holding the Shift key to search backwards. Fixes #1925038 [[Enhancement] E-book viewer: keyboard shortcut and mouse action modifier for searching ToC backwards](https://bugs.launchpad.net/calibre/+bug/1925038) --- src/calibre/gui2/viewer/toc.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/calibre/gui2/viewer/toc.py b/src/calibre/gui2/viewer/toc.py index 10481370fb..633ad0105a 100644 --- a/src/calibre/gui2/viewer/toc.py +++ b/src/calibre/gui2/viewer/toc.py @@ -148,7 +148,8 @@ class TOCSearch(QWidget): def do_search(self, text): if not text or not text.strip(): return - index = self.toc_view.model().search(text) + delta = -1 if QApplication.instance().keyboardModifiers() & Qt.KeyboardModifier.ShiftModifier else 1 + index = self.toc_view.model().search(text, delta=delta) if index.isValid(): self.toc_view.scrollTo(index) self.toc_view.searched.emit(index) @@ -244,15 +245,16 @@ class TOC(QStandardItemModel): if (exact and query == href) or (not exact and query in href): return item.node_id - def search(self, query): + def search(self, query, delta=1): cq = self.current_query if cq['items'] and -1 < cq['index'] < len(cq['items']): cq['items'][cq['index']].set_current_search_result(False) if cq['text'] != query: items = tuple(self.find_items(query)) cq.update({'text':query, 'items':items, 'index':-1}) - if len(cq['items']) > 0: - cq['index'] = (cq['index'] + 1) % len(cq['items']) + num = len(cq['items']) + if num > 0: + cq['index'] = (cq['index'] + delta + num) % num item = cq['items'][cq['index']] item.set_current_search_result(True) index = self.indexFromItem(item)