From 771d2f3687f8d88010eb4189f43911729f8979bc Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Mon, 16 Dec 2019 11:42:08 +0800 Subject: [PATCH] Refactory search code. --- app/pdf-viewer/buffer.py | 62 +++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 36 deletions(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index faa9013..8f243c4 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -130,17 +130,17 @@ class AppBuffer(Buffer): self.buffer_widget.send_input_message("Jump to link: ", "jump_link") def search_text(self): - if self.buffer_widget.is_search_text: + if self.buffer_widget.search_flag: self.buffer_widget.delete_all_mark_search_text() else: self.buffer_widget.send_input_message("Search text: ", "search_text") def jump_next_match(self): - if self.buffer_widget.is_search_text: + if self.buffer_widget.search_flag: self.buffer_widget.jump_next_match() def jump_last_match(self): - if self.buffer_widget.is_search_text: + if self.buffer_widget.search_flag: self.buffer_widget.jump_last_match() class PdfViewerWidget(QWidget): @@ -177,13 +177,10 @@ class PdfViewerWidget(QWidget): self.jump_link_key_cache_dict = {} self.jump_link_annot_cache_dict = {} - # local search text - self.is_local_search_text = False - self.local_search_text_annot_cache_dict = {} - #global search text - self.is_search_text = False + self.search_flag = False self.search_text_offset_list = [] + self.search_text_annot_cache_dict = {} # Init scroll attributes. self.scroll_step = 20 @@ -246,8 +243,8 @@ class PdfViewerWidget(QWidget): page = self.document[index] # follow page search text - if self.is_local_search_text: - page = self.add_mark_local_search_text(page, index) + if self.search_flag: + 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) pixmap = page.getPixmap(matrix=trans, alpha=False) @@ -550,7 +547,7 @@ class PdfViewerWidget(QWidget): self.update() - def add_mark_local_search_text(self, page, page_index): + def add_mark_search_text(self, page, page_index): quads_list = page.searchFor(self.search_text, hit_max=999, quads=True) annot_list = [] if quads_list: @@ -558,31 +555,14 @@ class PdfViewerWidget(QWidget): annot = page.addHighlightAnnot(quads) annot.parent = page annot_list.append(annot) - self.local_search_text_annot_cache_dict[page_index] = annot_list - return page - - def local_search_text(self, search_text): - # begin local search - self.is_local_search_text = True - self.search_text = search_text - self.page_cache_pixmap_dict.clear() - self.update() + self.search_text_annot_cache_dict[page_index] = annot_list - def delete_all_mark_local_search_text(self): - if self.local_search_text_annot_cache_dict: - for page_index in self.local_search_text_annot_cache_dict.keys(): - page = self.document[page_index] - for annot in self.local_search_text_annot_cache_dict[page_index]: - page.deleteAnnot(annot) - self.is_local_search_text = False - self.search_text = None - self.local_search_text_annot_cache_dict.clear() - self.page_cache_pixmap_dict.clear() - self.update() + return page def search_text(self, text): - self.is_search_text = True - self.local_search_text(text) + self.search_flag = True + self.search_text = text + self.page_cache_pixmap_dict.clear() search_text_index = 0 self.search_text_index = 0 @@ -597,6 +577,8 @@ class PdfViewerWidget(QWidget): self.search_text_index = search_text_index search_text_index += 1 + self.update() + 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) @@ -608,10 +590,18 @@ class PdfViewerWidget(QWidget): self.update_scroll_offset(self.search_text_offset_list[self.search_text_index]) def delete_all_mark_search_text(self): - self.is_search_text = False - self.is_local_search_text = False - self.delete_all_mark_local_search_text() + self.search_flag = False + 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.search_text = None + self.search_text_annot_cache_dict.clear() + self.page_cache_pixmap_dict.clear() self.search_text_offset_list.clear() + self.update() 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()))