PDF code refactor, improve workflow and cancel search when zooming

master
Matthew 6 years ago
parent d893b9c721
commit a28ff859e5
  1. 60
      app/pdf-viewer/buffer.py

@ -50,7 +50,7 @@ class AppBuffer(Buffer):
def cancel_input_message(self, result_type):
if result_type == "jump_link":
self.buffer_widget.clean_links()
self.buffer_widget.cleanup_links()
def scroll(self, scroll_direction, scroll_type):
if scroll_type == "page":
@ -109,10 +109,10 @@ class AppBuffer(Buffer):
self.buffer_widget.zoom_out()
def jump_to_page(self):
self.buffer_widget.send_input_message("EAF PDF Viewer - Jump to Page: ", "jump_page")
self.buffer_widget.send_input_message("EAF PDF - Jump to Page: ", "jump_page")
def jump_to_percent(self):
self.buffer_widget.send_input_message("EAF PDF Viewer - Jump to Percent: ", "jump_percent")
self.buffer_widget.send_input_message("EAF PDF - Jump to Percent: ", "jump_percent")
def remember_current_position(self):
self.buffer_widget.remember_current_position()
@ -128,25 +128,24 @@ class AppBuffer(Buffer):
def jump_to_link(self):
self.buffer_widget.add_mark_jump_link_tips()
self.buffer_widget.send_input_message("EAF PDF Viewer - Jump to Link: ", "jump_link")
self.buffer_widget.send_input_message("EAF PDF - Jump to Link: ", "jump_link")
def search_text(self):
if self.buffer_widget.search_flag:
self.buffer_widget.remove_marked_search_text()
else:
self.buffer_widget.send_input_message("EAF PDF Viewer - Search Text: ", "search_text")
if self.buffer_widget.is_mark_search:
self.buffer_widget.cleanup_search()
self.buffer_widget.send_input_message("EAF PDF - Search Text: ", "search_text")
def jump_next_match(self):
if self.buffer_widget.search_flag:
if self.buffer_widget.is_mark_search:
self.buffer_widget.jump_next_match()
else:
self.message_to_emacs.emit("EAF PDF Viewer - Cannot jump to next match. Nothing searched!")
self.message_to_emacs.emit("EAF PDF - Cannot jump to next match. Nothing searched!")
def jump_last_match(self):
if self.buffer_widget.search_flag:
if self.buffer_widget.is_mark_search:
self.buffer_widget.jump_last_match()
else:
self.message_to_emacs.emit("EAF PDF Viewer - Cannot jump to last match. Nothing searched!")
self.message_to_emacs.emit("EAF PDF - Cannot jump to last match. Nothing searched!")
class PdfViewerWidget(QWidget):
translate_double_click_word = QtCore.pyqtSignal(str)
@ -183,7 +182,7 @@ class PdfViewerWidget(QWidget):
self.jump_link_annot_cache_dict = {}
#global search text
self.search_flag = False
self.is_mark_search = False
self.search_text_offset_list = []
self.search_text_annot_cache_dict = {}
@ -218,11 +217,11 @@ class PdfViewerWidget(QWidget):
def remember_current_position(self):
self.remember_offset = self.scroll_offset
self.message_to_emacs.emit("EAF PDF Viewer - Remembered current position.")
self.message_to_emacs.emit("EAF PDF - Remembered current position.")
def remember_jump(self):
if self.remember_offset is None:
self.message_to_emacs.emit("EAF PDF Viewer - Cannot jump from this position.")
self.message_to_emacs.emit("EAF PDF - Cannot jump from this position.")
else:
current_scroll_offset = self.scroll_offset
self.scroll_offset = self.remember_offset
@ -248,7 +247,7 @@ class PdfViewerWidget(QWidget):
page = self.document[index]
# follow page search text
if self.search_flag:
if self.is_mark_search:
page = self.add_mark_search_text(page, index)
trans = self.page_cache_trans if self.page_cache_trans is not None else fitz.Matrix(scale, scale)
@ -439,16 +438,22 @@ class PdfViewerWidget(QWidget):
self.update_scroll_offset(self.max_scroll_offset())
def zoom_in(self):
if self.is_mark_search:
self.cleanup_search()
self.read_mode = "fit_to_customize"
self.scale_to(min(10, self.scale + 0.2))
self.update()
def zoom_out(self):
if self.is_mark_search:
self.cleanup_search()
self.read_mode = "fit_to_customize"
self.scale_to(max(1, self.scale - 0.2))
self.update()
def zoom_reset(self):
if self.is_mark_search:
self.cleanup_search()
self.read_mode = "fit_to_width"
self.update_scale()
self.update()
@ -544,9 +549,9 @@ class PdfViewerWidget(QWidget):
self.jump_to_page(link["page"] + 1)
self.delete_all_mark_jump_link_tips()
self.update()
self.message_to_emacs.emit("EAF PDF Viewer - Landed on Page " + str(link["page"] + 1))
self.message_to_emacs.emit("EAF PDF - Landed on Page " + str(link["page"] + 1))
def clean_links(self):
def cleanup_links(self):
self.is_mark_link = False
self.delete_all_mark_jump_link_tips()
self.page_cache_pixmap_dict.clear()
@ -566,7 +571,7 @@ class PdfViewerWidget(QWidget):
return page
def search_text(self, text):
self.search_flag = True
self.is_mark_search = True
self.search_term = text
self.page_cache_pixmap_dict.clear()
@ -584,31 +589,32 @@ class PdfViewerWidget(QWidget):
search_text_index += 1
self.update()
if(len(self.search_text_offset_list) == 0):
self.message_to_emacs.emit("EAF PDF Viewer - No results found with \"" + text + "\".")
self.message_to_emacs.emit("EAF PDF - No results found with \"" + text + "\".")
self.is_mark_search = False
else:
self.jump_next_match()
self.message_to_emacs.emit("EAF PDF Viewer - Found " + str(len(self.search_text_offset_list)) + " results with \"" + text + "\".")
self.update_scroll_offset(self.search_text_offset_list[self.search_text_index])
self.message_to_emacs.emit("EAF PDF - Found " + str(len(self.search_text_offset_list)) + " results with \"" + text + "\".")
def jump_next_match(self):
if len(self.search_text_offset_list) > 0:
self.search_text_index = (self.search_text_index + 1) % len(self.search_text_offset_list)
self.update_scroll_offset(self.search_text_offset_list[self.search_text_index])
self.message_to_emacs.emit("EAF PDF Viewer - Match " + str(self.search_text_index + 1) + "/" + str(len(self.search_text_offset_list)))
self.message_to_emacs.emit("EAF PDF - Match " + str(self.search_text_index + 1) + "/" + str(len(self.search_text_offset_list)))
def jump_last_match(self):
if len(self.search_text_offset_list) > 0:
self.search_text_index = (self.search_text_index - 1) % len(self.search_text_offset_list)
self.update_scroll_offset(self.search_text_offset_list[self.search_text_index])
self.message_to_emacs.emit("EAF PDF Viewer - Match " + str(self.search_text_index + 1) + "/" + str(len(self.search_text_offset_list)))
self.message_to_emacs.emit("EAF PDF - Match " + str(self.search_text_index + 1) + "/" + str(len(self.search_text_offset_list)))
def remove_marked_search_text(self):
self.message_to_emacs.emit("EAF PDF Viewer - Unmarked all matched results.")
def cleanup_search(self):
self.message_to_emacs.emit("EAF PDF - Unmarked all matched results.")
if self.search_text_annot_cache_dict:
for page_index in self.search_text_annot_cache_dict.keys():
page = self.document[page_index]
for annot in self.search_text_annot_cache_dict[page_index]:
page.deleteAnnot(annot)
self.search_flag = False
self.is_mark_search = False
self.search_term = None
self.search_text_annot_cache_dict.clear()
self.page_cache_pixmap_dict.clear()

Loading…
Cancel
Save