Merge pull request #397 from zbelial/text_annot

no need to select content before adding text annot, just 'M-e' and
master
Andy Stewart 6 years ago committed by GitHub
commit a76134d73f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 55
      app/pdf-viewer/buffer.py

@ -20,7 +20,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from PyQt5 import QtCore
from PyQt5.QtCore import Qt, QRect, QEvent
from PyQt5.QtCore import Qt, QRect, QEvent, QTimer
from PyQt5.QtGui import QColor, QPixmap, QImage, QFont, QCursor
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QWidget
@ -180,12 +180,16 @@ 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):
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 +269,12 @@ class PdfViewerWidget(QWidget):
# annot
self.is_hover_annot = False
self.free_text_annot_timer = QTimer()
self.free_text_annot_timer.setInterval(300)
self.free_text_annot_timer.setSingleShot(True)
self.free_text_annot_timer.timeout.connect(self.handle_free_text_annot_mode)
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 +975,17 @@ 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.save_annot()
def cleanup_select(self):
self.is_select_mode = False
self.delete_all_mark_select_area()
@ -1204,18 +1225,25 @@ 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 not self.free_text_annot_timer.isActive():
self.free_text_annot_timer.start()
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,21 @@ 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):
if self.is_free_text_annot_mode:
self.disable_free_text_annot_mode()
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()

Loading…
Cancel
Save