mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Viewer: Search panel: Add a button to return to the position the book was at before doing a search. Fixes #1879889 [[Enhancement - Viewer] Go back to last reading position after going through search results](https://bugs.launchpad.net/calibre/+bug/1879889)
This commit is contained in:
parent
4d69c20fac
commit
d56014655f
@ -315,6 +315,7 @@ class SearchInput(QWidget): # {{{
|
||||
|
||||
do_search = pyqtSignal(object)
|
||||
cleared = pyqtSignal()
|
||||
go_back = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None, panel_name='search'):
|
||||
QWidget.__init__(self, parent)
|
||||
@ -376,6 +377,12 @@ class SearchInput(QWidget): # {{{
|
||||
cs.stateChanged.connect(self.save_search_type)
|
||||
h.addWidget(cs)
|
||||
|
||||
self.return_button = rb = QToolButton(self)
|
||||
rb.setIcon(QIcon(I('back.png')))
|
||||
rb.setToolTip(_('Go back to where you were before searching'))
|
||||
rb.clicked.connect(self.go_back)
|
||||
h.addWidget(rb)
|
||||
|
||||
def history_saved(self, new_text, history):
|
||||
if new_text:
|
||||
sss = vprefs.get('saved-{}-settings'.format(self.panel_name)) or {}
|
||||
@ -646,11 +653,13 @@ class SearchPanel(QWidget): # {{{
|
||||
show_search_result = pyqtSignal(object)
|
||||
count_changed = pyqtSignal(object)
|
||||
hide_search_panel = pyqtSignal()
|
||||
goto_cfi = pyqtSignal(object)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
QWidget.__init__(self, parent)
|
||||
self.last_hidden_text_warning = None
|
||||
self.current_search = None
|
||||
self.anchor_cfi = None
|
||||
self.l = l = QVBoxLayout(self)
|
||||
l.setContentsMargins(0, 0, 0, 0)
|
||||
self.search_input = si = SearchInput(self)
|
||||
@ -659,6 +668,7 @@ class SearchPanel(QWidget): # {{{
|
||||
self.results_found.connect(self.on_result_found, type=Qt.QueuedConnection)
|
||||
si.do_search.connect(self.search_requested)
|
||||
si.cleared.connect(self.search_cleared)
|
||||
si.go_back.connect(self.go_back)
|
||||
l.addWidget(si)
|
||||
self.results = r = Results(self)
|
||||
r.count_changed.connect(self.count_changed)
|
||||
@ -674,6 +684,10 @@ class SearchPanel(QWidget): # {{{
|
||||
la.setVisible(False)
|
||||
l.addWidget(la)
|
||||
|
||||
def go_back(self):
|
||||
if self.anchor_cfi:
|
||||
self.goto_cfi.emit(self.anchor_cfi)
|
||||
|
||||
def update_hidden_message(self):
|
||||
self.hidden_message.setVisible(self.results.current_result_is_hidden)
|
||||
|
||||
@ -699,6 +713,9 @@ class SearchPanel(QWidget): # {{{
|
||||
self.last_hidden_text_warning = None
|
||||
self.search_tasks.put((search_query, current_name))
|
||||
|
||||
def set_anchor_cfi(self, pos_data):
|
||||
self.anchor_cfi = pos_data['cfi']
|
||||
|
||||
def run_searches(self):
|
||||
while True:
|
||||
x = self.search_tasks.get()
|
||||
|
@ -141,6 +141,7 @@ class EbookViewer(MainWindow):
|
||||
w.search_requested.connect(self.start_search)
|
||||
w.hide_search_panel.connect(self.search_dock.close)
|
||||
w.count_changed.connect(self.search_results_count_changed)
|
||||
w.goto_cfi.connect(self.goto_cfi)
|
||||
self.search_dock.setWidget(w)
|
||||
self.search_dock.visibilityChanged.connect(self.search_widget.visibility_changed)
|
||||
|
||||
@ -315,6 +316,7 @@ class EbookViewer(MainWindow):
|
||||
def start_search(self, search_query):
|
||||
name = self.web_view.current_content_file
|
||||
if name:
|
||||
self.web_view.get_current_cfi(self.search_widget.set_anchor_cfi)
|
||||
self.search_widget.start_search(search_query, name)
|
||||
self.web_view.setFocus(Qt.OtherFocusReason)
|
||||
|
||||
@ -350,9 +352,12 @@ class EbookViewer(MainWindow):
|
||||
# annotations will be saved in book file on exit
|
||||
self.save_annotations(in_book_file=False)
|
||||
|
||||
def bookmark_activated(self, cfi):
|
||||
def goto_cfi(self, cfi):
|
||||
self.web_view.goto_cfi(cfi)
|
||||
|
||||
def bookmark_activated(self, cfi):
|
||||
self.goto_cfi(cfi)
|
||||
|
||||
def view_image(self, name):
|
||||
path = get_path_for_name(name)
|
||||
if path:
|
||||
|
Loading…
x
Reference in New Issue
Block a user