Viewer: Show number of search results in title of search panel. Fixes #1881792 [[Enhancement - Viewer] Show number of search results](https://bugs.launchpad.net/calibre/+bug/1881792)

This commit is contained in:
Kovid Goyal 2020-06-03 13:51:22 +05:30
parent c49ba575b2
commit 6ed197b08f
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 19 additions and 1 deletions

View File

@ -522,6 +522,7 @@ class Results(QTreeWidget): # {{{
show_search_result = pyqtSignal(object)
current_result_changed = pyqtSignal(object)
count_changed = pyqtSignal(object)
def __init__(self, parent=None):
QTreeWidget.__init__(self, parent)
@ -578,7 +579,9 @@ class Results(QTreeWidget): # {{{
item.setIcon(0, self.blank_icon)
self.item_map[len(self.search_results)] = item
self.search_results.append(result)
return self.number_of_results
n = self.number_of_results
self.count_changed.emit(n)
return n
def item_activated(self):
i = self.currentItem()
@ -627,6 +630,7 @@ class Results(QTreeWidget): # {{{
self.item_map = {}
self.search_results = []
self.clear()
self.count_changed.emit(-1)
def select_first_result(self):
if self.number_of_results:
@ -640,6 +644,7 @@ class SearchPanel(QWidget): # {{{
search_requested = pyqtSignal(object)
results_found = pyqtSignal(object)
show_search_result = pyqtSignal(object)
count_changed = pyqtSignal(object)
hide_search_panel = pyqtSignal()
def __init__(self, parent=None):
@ -655,6 +660,7 @@ class SearchPanel(QWidget): # {{{
si.do_search.connect(self.search_requested)
l.addWidget(si)
self.results = r = Results(self)
r.count_changed.connect(self.count_changed)
si.cleared.connect(r.clear_all_results)
r.show_search_result.connect(self.do_show_search_result, type=Qt.QueuedConnection)
r.current_result_changed.connect(self.update_hidden_message)

View File

@ -140,6 +140,7 @@ class EbookViewer(MainWindow):
self.search_widget = w = SearchPanel(self)
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)
self.search_dock.setWidget(w)
self.search_dock.visibilityChanged.connect(self.search_widget.visibility_changed)
@ -294,6 +295,17 @@ class EbookViewer(MainWindow):
def show_search(self):
self.web_view.get_current_cfi(self.show_search_with_current_selection)
def search_results_count_changed(self, num=-1):
if num < 0:
tt = _('Search')
elif num == 0:
tt = _('Search [no matches]')
elif num == 1:
tt = _('Search [one match]')
else:
tt = _('Search [{} matches]').format(num)
self.search_dock.setWindowTitle(tt)
def show_search_with_current_selection(self, pos_data):
self.search_dock.setVisible(True)
self.search_dock.activateWindow()