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/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from PyQt5 import QtCore 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 QColor, QPixmap, QImage, QFont, QCursor
from PyQt5.QtGui import QPainter from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QWidget from PyQt5.QtWidgets import QWidget
@ -180,12 +180,16 @@ class AppBuffer(Buffer):
self.buffer_widget.get_focus_text.emit(self.buffer_id, "") self.buffer_widget.get_focus_text.emit(self.buffer_id, "")
elif self.buffer_widget.is_hover_annot: elif self.buffer_widget.is_hover_annot:
self.buffer_widget.annot_handler("edit") self.buffer_widget.annot_handler("edit")
else:
self.buffer_widget.enable_free_text_annot_mode()
def set_focus_text(self, new_text): def set_focus_text(self, new_text):
if self.buffer_widget.is_select_mode: if self.buffer_widget.is_select_mode:
self.buffer_widget.annot_select_char_area("text", new_text) self.buffer_widget.annot_select_char_area("text", new_text)
elif self.buffer_widget.is_hover_annot: elif self.buffer_widget.is_hover_annot:
self.buffer_widget.update_annot_text(new_text) self.buffer_widget.update_annot_text(new_text)
else:
self.buffer_widget.annot_free_text_annot(new_text)
def get_toc(self): def get_toc(self):
result = "" result = ""
@ -265,6 +269,12 @@ class PdfViewerWidget(QWidget):
# annot # annot
self.is_hover_annot = False 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) self.edited_page_annot = (None, None)
# Init scroll attributes. # Init scroll attributes.
@ -965,6 +975,17 @@ class PdfViewerWidget(QWidget):
self.document.saveIncr() self.document.saveIncr()
self.select_area_annot_quad_cache_dict.clear() 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): def cleanup_select(self):
self.is_select_mode = False self.is_select_mode = False
self.delete_all_mark_select_area() self.delete_all_mark_select_area()
@ -1204,18 +1225,25 @@ class PdfViewerWidget(QWidget):
if self.is_select_mode: if self.is_select_mode:
self.cleanup_select() self.cleanup_select()
if event.button() == Qt.LeftButton: if self.is_free_text_annot_mode:
# In order to catch mouse move event when drap mouse. if event.button() != Qt.LeftButton:
self.setMouseTracking(False) self.disable_free_text_annot_mode()
elif event.button() == Qt.RightButton: else:
self.handle_click_link() 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: elif event.type() == QEvent.MouseButtonRelease:
# Capture move event, event without holding down the mouse. # Capture move event, event without holding down the mouse.
self.setMouseTracking(True) self.setMouseTracking(True)
self.releaseMouse() self.releaseMouse()
if not self.free_text_annot_timer.isActive():
self.free_text_annot_timer.start()
elif event.type() == QEvent.MouseButtonDblClick: elif event.type() == QEvent.MouseButtonDblClick:
self.disable_free_text_annot_mode()
if self.is_mark_search: if self.is_mark_search:
self.cleanup_search() self.cleanup_search()
if event.button() == Qt.RightButton: if event.button() == Qt.RightButton:
@ -1223,6 +1251,21 @@ class PdfViewerWidget(QWidget):
return False 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): def handle_select_mode(self):
self.is_select_mode = True self.is_select_mode = True
rect_index, page_index = self.get_char_rect_index() rect_index, page_index = self.get_char_rect_index()

Loading…
Cancel
Save