Merge pull request #159 from luhuaei/master

pdf-viewer: add global search text.
master
Andy Stewart 6 years ago committed by GitHub
commit cda8010487
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      app/pdf-viewer/buffer.py
  2. 5
      eaf.el

@ -46,6 +46,9 @@ class AppBuffer(Buffer):
self.buffer_widget.jump_to_link(str(result_content))
elif result_type == "local_search_text":
self.buffer_widget.local_search_text(str(result_content))
elif result_type == "global_search_text":
self.buffer_widget.global_search_text(str(result_content))
def cancel_input_message(self, result_type):
if result_type == "jump_link":
@ -135,6 +138,20 @@ class AppBuffer(Buffer):
else:
self.buffer_widget.send_input_message("Search text: ", "local_search_text")
def global_search_text(self):
if self.buffer_widget.is_global_search_text:
self.buffer_widget.delete_all_mark_global_search_text()
else:
self.buffer_widget.send_input_message("Search text: ", "global_search_text")
def global_search_text_next(self):
if self.buffer_widget.is_global_search_text:
self.buffer_widget.global_search_text_next()
def global_search_text_last(self):
if self.buffer_widget.is_global_search_text:
self.buffer_widget.global_search_text_last()
class PdfViewerWidget(QWidget):
translate_double_click_word = QtCore.pyqtSignal(str)
@ -173,6 +190,10 @@ class PdfViewerWidget(QWidget):
self.is_local_search_text = False
self.local_search_text_annot_cache_dict = {}
#global search text
self.is_global_search_text = False
self.global_search_text_offset_list = []
# Init scroll attributes.
self.scroll_step = 20
self.scroll_offset = 0
@ -568,6 +589,39 @@ class PdfViewerWidget(QWidget):
self.page_cache_pixmap_dict.clear()
self.update()
def global_search_text(self, text):
self.is_global_search_text = True
self.local_search_text(text)
search_text_index = 0
self.global_search_text_index = 0
for page_index in range(self.page_total_number):
quads_list = self.document.searchPageFor(page_index, text, hit_max=999, quads=True)
if quads_list:
for quad in quads_list:
search_text_offset = (page_index * self.page_height + quad.ul.y) * self.scale
self.global_search_text_offset_list.append(search_text_offset)
if search_text_offset > self.scroll_offset and search_text_offset < (self.scroll_offset + self.rect().height()):
self.global_search_text_index = search_text_index
search_text_index += 1
def global_search_text_next(self):
if len(self.global_search_text_offset_list) > 0:
self.global_search_text_index = (self.global_search_text_index + 1) % len(self.global_search_text_offset_list)
self.update_scroll_offset(self.global_search_text_offset_list[self.global_search_text_index])
def global_search_text_last(self):
if len(self.global_search_text_offset_list) > 0:
self.global_search_text_index = (self.global_search_text_index - 1) % len(self.global_search_text_offset_list)
self.update_scroll_offset(self.global_search_text_offset_list[self.global_search_text_index])
def delete_all_mark_global_search_text(self):
self.is_global_search_text = False
self.is_local_search_text = False
self.delete_all_mark_local_search_text()
self.global_search_text_offset_list.clear()
def jump_to_page(self, page_num):
self.update_scroll_offset(min(max(self.scale * (int(page_num) - 1) * self.page_height, 0), self.max_scroll_offset()))

@ -238,7 +238,10 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead."
("i" . "toggle_inverted_mode")
("m" . "toggle_mark_link")
("f" . "jump_to_link")
("s" . "local_search_text"))
("s" . "local_search_text")
("S" . "global_search_text")
("n" . "global_search_text_next")
("N" . "global_search_text_last"))
"The keybinding of EAF PDF Viewer."
:type 'cons)

Loading…
Cancel
Save