Select highlight in panel when it is selected in text

This commit is contained in:
Kovid Goyal 2020-08-12 20:53:58 +05:30
parent 74644b31ae
commit c5b9677809
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
6 changed files with 20 additions and 6 deletions

View File

@ -161,6 +161,15 @@ class Highlights(QListWidget):
return True
return False
def find_annot_id(self, annot_id):
for i in range(self.count()):
item = self.item(i)
h = item.data(Qt.UserRole)
if h.get('uuid') == annot_id:
self.set_current_row(i)
return True
return False
def set_current_row(self, row):
self.setCurrentRow(row, QItemSelectionModel.ClearAndSelect)
@ -363,3 +372,7 @@ class HighlightsPanel(QWidget):
if not hl:
return error_dialog(self, _('No highlights'), _('This book has no highlights to export'), show=True)
Export(hl, self).exec_()
def selected_text_changed(self, text, annot_id):
if annot_id:
self.highlights.find_annot_id(annot_id)

View File

@ -337,6 +337,6 @@ class Lookup(QWidget):
self.view.load(QUrl(url))
self.current_query = query
def selected_text_changed(self, text):
def selected_text_changed(self, text, annot_id):
self.selected_text = text or ''
self.debounce_timer.start()

View File

@ -175,6 +175,7 @@ class EbookViewer(MainWindow):
self.web_view.toggle_full_screen.connect(self.toggle_full_screen)
self.web_view.ask_for_open.connect(self.ask_for_open, type=Qt.QueuedConnection)
self.web_view.selection_changed.connect(self.lookup_widget.selected_text_changed, type=Qt.QueuedConnection)
self.web_view.selection_changed.connect(self.highlights_widget.selected_text_changed, type=Qt.QueuedConnection)
self.web_view.view_image.connect(self.view_image, type=Qt.QueuedConnection)
self.web_view.copy_image.connect(self.copy_image, type=Qt.QueuedConnection)
self.web_view.show_loading_message.connect(self.show_loading_message)

View File

@ -249,7 +249,7 @@ class ViewerBridge(Bridge):
toggle_full_screen = from_js()
report_cfi = from_js(object, object)
ask_for_open = from_js(object)
selection_changed = from_js(object)
selection_changed = from_js(object, object)
autoscroll_state_changed = from_js(object)
copy_selection = from_js(object)
view_image = from_js(object)
@ -443,7 +443,7 @@ class WebView(RestartingWebEngineView):
update_current_toc_nodes = pyqtSignal(object, object)
toggle_full_screen = pyqtSignal()
ask_for_open = pyqtSignal(object)
selection_changed = pyqtSignal(object)
selection_changed = pyqtSignal(object, object)
autoscroll_state_changed = pyqtSignal(object)
view_image = pyqtSignal(object)
copy_image = pyqtSignal(object)

View File

@ -541,7 +541,7 @@ class View:
'selection_change_caused_by_search': data.selection_change_caused_by_search
}
if ui_operations.selection_changed:
ui_operations.selection_changed(self.currently_showing.selection.text)
ui_operations.selection_changed(self.currently_showing.selection.text, self.currently_showing.selection.annot_id)
self.selection_bar.update_position()
def update_selection_position(self, data):

View File

@ -351,8 +351,8 @@ if window is window.top:
to_python.quit()
ui_operations.toggle_lookup = def(force_show):
to_python.toggle_lookup(v'!!force_show')
ui_operations.selection_changed = def(selected_text):
to_python.selection_changed(selected_text)
ui_operations.selection_changed = def(selected_text, annot_id):
to_python.selection_changed(selected_text, annot_id or None)
ui_operations.update_current_toc_nodes = def(current_node_id, top_level_node_id):
to_python.update_current_toc_nodes(current_node_id, top_level_node_id)
ui_operations.toggle_full_screen = def():