From 392c2c102d7a0a74cc43490cbc3a741fe0e1dc22 Mon Sep 17 00:00:00 2001 From: zbelial Date: Sun, 13 Sep 2020 22:26:00 +0800 Subject: [PATCH] no need to select content before adding text annot, just 'M-e' and click left button. --- app/pdf-viewer/buffer.py | 51 ++++++++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/app/pdf-viewer/buffer.py b/app/pdf-viewer/buffer.py index 194fd43..ad3d8e1 100755 --- a/app/pdf-viewer/buffer.py +++ b/app/pdf-viewer/buffer.py @@ -180,12 +180,17 @@ class AppBuffer(Buffer): self.buffer_widget.get_focus_text.emit(self.buffer_id, "") elif self.buffer_widget.is_hover_annot: self.buffer_widget.annot_handler("edit") + else: + self.buffer_widget.enable_free_text_annot_mode() def set_focus_text(self, new_text): + self.message_to_emacs.emit(new_text); if self.buffer_widget.is_select_mode: self.buffer_widget.annot_select_char_area("text", new_text) elif self.buffer_widget.is_hover_annot: self.buffer_widget.update_annot_text(new_text) + else: + self.buffer_widget.annot_free_text_annot(new_text) def get_toc(self): result = "" @@ -265,6 +270,8 @@ class PdfViewerWidget(QWidget): # annot self.is_hover_annot = False + self.is_free_text_annot_mode = False + self.free_text_annot_pos = (None, None) self.edited_page_annot = (None, None) # Init scroll attributes. @@ -965,6 +972,19 @@ class PdfViewerWidget(QWidget): self.document.saveIncr() self.select_area_annot_quad_cache_dict.clear() + def annot_free_text_annot(self, text=None): + (point, page_index) = self.free_text_annot_pos + if point == None or page_index == None: + return + + page = self.document[page_index] + new_annot = page.addTextAnnot(point, text, icon="Note") + new_annot.parent = page + + self.disable_free_text_annot_mode() + + self.save_annot() + def cleanup_select(self): self.is_select_mode = False self.delete_all_mark_select_area() @@ -1204,18 +1224,26 @@ class PdfViewerWidget(QWidget): if self.is_select_mode: self.cleanup_select() - if event.button() == Qt.LeftButton: - # In order to catch mouse move event when drap mouse. - self.setMouseTracking(False) - elif event.button() == Qt.RightButton: - self.handle_click_link() + if self.is_free_text_annot_mode: + if event.button() != Qt.LeftButton: + self.disable_free_text_annot_mode() + else: + if event.button() == Qt.LeftButton: + # In order to catch mouse move event when drap mouse. + self.setMouseTracking(False) + elif event.button() == Qt.RightButton: + self.handle_click_link() elif event.type() == QEvent.MouseButtonRelease: # Capture move event, event without holding down the mouse. self.setMouseTracking(True) self.releaseMouse() + if self.is_free_text_annot_mode: + self.handle_free_text_annot_mode() + self.disable_free_text_annot_mode() elif event.type() == QEvent.MouseButtonDblClick: + self.disable_free_text_annot_mode() if self.is_mark_search: self.cleanup_search() if event.button() == Qt.RightButton: @@ -1223,6 +1251,19 @@ class PdfViewerWidget(QWidget): return False + def enable_free_text_annot_mode(self): + self.is_free_text_annot_mode = True + self.free_text_annot_pos = (None, None) + + def disable_free_text_annot_mode(self): + self.is_free_text_annot_mode = False + + def handle_free_text_annot_mode(self): + ex, ey, page_index = self.get_cursor_absolute_position() + self.free_text_annot_pos = (fitz.Point(ex, ey), page_index) + + self.get_focus_text.emit(self.buffer_id, "") + def handle_select_mode(self): self.is_select_mode = True rect_index, page_index = self.get_char_rect_index()