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)
|
do_search = pyqtSignal(object)
|
||||||
cleared = pyqtSignal()
|
cleared = pyqtSignal()
|
||||||
|
go_back = pyqtSignal()
|
||||||
|
|
||||||
def __init__(self, parent=None, panel_name='search'):
|
def __init__(self, parent=None, panel_name='search'):
|
||||||
QWidget.__init__(self, parent)
|
QWidget.__init__(self, parent)
|
||||||
@ -376,6 +377,12 @@ class SearchInput(QWidget): # {{{
|
|||||||
cs.stateChanged.connect(self.save_search_type)
|
cs.stateChanged.connect(self.save_search_type)
|
||||||
h.addWidget(cs)
|
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):
|
def history_saved(self, new_text, history):
|
||||||
if new_text:
|
if new_text:
|
||||||
sss = vprefs.get('saved-{}-settings'.format(self.panel_name)) or {}
|
sss = vprefs.get('saved-{}-settings'.format(self.panel_name)) or {}
|
||||||
@ -646,11 +653,13 @@ class SearchPanel(QWidget): # {{{
|
|||||||
show_search_result = pyqtSignal(object)
|
show_search_result = pyqtSignal(object)
|
||||||
count_changed = pyqtSignal(object)
|
count_changed = pyqtSignal(object)
|
||||||
hide_search_panel = pyqtSignal()
|
hide_search_panel = pyqtSignal()
|
||||||
|
goto_cfi = pyqtSignal(object)
|
||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QWidget.__init__(self, parent)
|
QWidget.__init__(self, parent)
|
||||||
self.last_hidden_text_warning = None
|
self.last_hidden_text_warning = None
|
||||||
self.current_search = None
|
self.current_search = None
|
||||||
|
self.anchor_cfi = None
|
||||||
self.l = l = QVBoxLayout(self)
|
self.l = l = QVBoxLayout(self)
|
||||||
l.setContentsMargins(0, 0, 0, 0)
|
l.setContentsMargins(0, 0, 0, 0)
|
||||||
self.search_input = si = SearchInput(self)
|
self.search_input = si = SearchInput(self)
|
||||||
@ -659,6 +668,7 @@ class SearchPanel(QWidget): # {{{
|
|||||||
self.results_found.connect(self.on_result_found, type=Qt.QueuedConnection)
|
self.results_found.connect(self.on_result_found, type=Qt.QueuedConnection)
|
||||||
si.do_search.connect(self.search_requested)
|
si.do_search.connect(self.search_requested)
|
||||||
si.cleared.connect(self.search_cleared)
|
si.cleared.connect(self.search_cleared)
|
||||||
|
si.go_back.connect(self.go_back)
|
||||||
l.addWidget(si)
|
l.addWidget(si)
|
||||||
self.results = r = Results(self)
|
self.results = r = Results(self)
|
||||||
r.count_changed.connect(self.count_changed)
|
r.count_changed.connect(self.count_changed)
|
||||||
@ -674,6 +684,10 @@ class SearchPanel(QWidget): # {{{
|
|||||||
la.setVisible(False)
|
la.setVisible(False)
|
||||||
l.addWidget(la)
|
l.addWidget(la)
|
||||||
|
|
||||||
|
def go_back(self):
|
||||||
|
if self.anchor_cfi:
|
||||||
|
self.goto_cfi.emit(self.anchor_cfi)
|
||||||
|
|
||||||
def update_hidden_message(self):
|
def update_hidden_message(self):
|
||||||
self.hidden_message.setVisible(self.results.current_result_is_hidden)
|
self.hidden_message.setVisible(self.results.current_result_is_hidden)
|
||||||
|
|
||||||
@ -699,6 +713,9 @@ class SearchPanel(QWidget): # {{{
|
|||||||
self.last_hidden_text_warning = None
|
self.last_hidden_text_warning = None
|
||||||
self.search_tasks.put((search_query, current_name))
|
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):
|
def run_searches(self):
|
||||||
while True:
|
while True:
|
||||||
x = self.search_tasks.get()
|
x = self.search_tasks.get()
|
||||||
|
@ -141,6 +141,7 @@ class EbookViewer(MainWindow):
|
|||||||
w.search_requested.connect(self.start_search)
|
w.search_requested.connect(self.start_search)
|
||||||
w.hide_search_panel.connect(self.search_dock.close)
|
w.hide_search_panel.connect(self.search_dock.close)
|
||||||
w.count_changed.connect(self.search_results_count_changed)
|
w.count_changed.connect(self.search_results_count_changed)
|
||||||
|
w.goto_cfi.connect(self.goto_cfi)
|
||||||
self.search_dock.setWidget(w)
|
self.search_dock.setWidget(w)
|
||||||
self.search_dock.visibilityChanged.connect(self.search_widget.visibility_changed)
|
self.search_dock.visibilityChanged.connect(self.search_widget.visibility_changed)
|
||||||
|
|
||||||
@ -315,6 +316,7 @@ class EbookViewer(MainWindow):
|
|||||||
def start_search(self, search_query):
|
def start_search(self, search_query):
|
||||||
name = self.web_view.current_content_file
|
name = self.web_view.current_content_file
|
||||||
if name:
|
if name:
|
||||||
|
self.web_view.get_current_cfi(self.search_widget.set_anchor_cfi)
|
||||||
self.search_widget.start_search(search_query, name)
|
self.search_widget.start_search(search_query, name)
|
||||||
self.web_view.setFocus(Qt.OtherFocusReason)
|
self.web_view.setFocus(Qt.OtherFocusReason)
|
||||||
|
|
||||||
@ -350,9 +352,12 @@ class EbookViewer(MainWindow):
|
|||||||
# annotations will be saved in book file on exit
|
# annotations will be saved in book file on exit
|
||||||
self.save_annotations(in_book_file=False)
|
self.save_annotations(in_book_file=False)
|
||||||
|
|
||||||
def bookmark_activated(self, cfi):
|
def goto_cfi(self, cfi):
|
||||||
self.web_view.goto_cfi(cfi)
|
self.web_view.goto_cfi(cfi)
|
||||||
|
|
||||||
|
def bookmark_activated(self, cfi):
|
||||||
|
self.goto_cfi(cfi)
|
||||||
|
|
||||||
def view_image(self, name):
|
def view_image(self, name):
|
||||||
path = get_path_for_name(name)
|
path = get_path_for_name(name)
|
||||||
if path:
|
if path:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user