src/eric7/PdfViewer/PdfView.py

Fri, 20 Jan 2023 16:11:50 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 20 Jan 2023 16:11:50 +0100
branch
pdf_viewer
changeset 9710
e011859649ea
parent 9708
8956a005f478
child 9711
614bb8b0d175
permissions
-rw-r--r--

Corrected another issue showing markers in Single Page mode.

9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a specialized PDF view class.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
10 import collections
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
11 import enum
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
12
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
13 from dataclasses import dataclass
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
14
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
15 from PyQt6.QtCore import (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
16 QSize, Qt, pyqtSlot, QEvent, QSizeF, QRect, QPoint, QPointF, QRectF,
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
17 pyqtSignal
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
18 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
19 from PyQt6.QtGui import QGuiApplication, QPainter, QColor, QPen
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
20 from PyQt6.QtPdf import QPdfDocument, QPdfLink
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from PyQt6.QtPdfWidgets import QPdfView
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
22 from PyQt6.QtWidgets import QRubberBand
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 from .PdfZoomSelector import PdfZoomSelector
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
27 class PdfMarkerType(enum.Enum):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
28 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
29 Class defining the various marker types.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
30 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
31
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
32 SEARCHRESULT = 0
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
33 SELECTION = 1
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
34
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
35
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
36 @dataclass
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
37 class PdfMarker:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
38 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
39 Class defining the data structure for markers.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
40 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
41
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
42 rectangle: QRectF
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
43 markerType: PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
44
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
45
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
46 @dataclass
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
47 class PdfMarkerGeometry:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
48 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
49 Class defining the data structure for marker geometries.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
50 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
51
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
52 rectangle: QRect
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
53 markerType: PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
54
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
55
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 class PdfView(QPdfView):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 Class implementing a specialized PDF view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
61 MarkerColors = {
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
62 # merker type: (pen color, brush color)
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
63 PdfMarkerType.SEARCHRESULT: (QColor(255, 200, 0, 255), QColor(255, 200, 0, 64)),
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
64 PdfMarkerType.SELECTION: (QColor(0, 0, 255, 255), QColor(0, 0, 255, 64)),
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
65 }
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
66
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
67 selectionAvailable = pyqtSignal(bool)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
68
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 def __init__(self, parent):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 Constructor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @param parent reference to the parent widget
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 @type QWidget
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 super().__init__(parent)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.__screenResolution = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 QGuiApplication.primaryScreen().logicalDotsPerInch() / 72.0
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
82 self.__documentViewport = QRect()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
83 self.__documentSize = QSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
84 self.__pageGeometries = {}
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
85 self.__markers = collections.defaultdict(list)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
86 self.__markerGeometries = collections.defaultdict(list)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
87 self.__rubberBand = None
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
88
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
89 self.pageModeChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
90 self.zoomModeChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
91 self.zoomFactorChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
92 self.pageSpacingChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
93 self.documentMarginsChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
94
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
95 self.pageNavigator().currentPageChanged.connect(self.__currentPageChanged)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
96
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.grabGesture(Qt.GestureType.PinchGesture)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
99 def setDocument(self, document):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
100 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
101 Public method to set the PDF document.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
102
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
103 @param document reference to the PDF document object
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
104 @type QPdfDocument
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
105 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
106 super().setDocument(document)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
107
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
108 document.statusChanged.connect(self.__calculateDocumentLayout)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
109
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 def __zoomInOut(self, zoomIn):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 Private method to zoom into or out of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @param zoomIn flag indicating to zoom into the view
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 @type bool
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 zoomFactor = self.__zoomFactorForMode(self.zoomMode())
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 factors = list(PdfZoomSelector.ZoomValues)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 factors.append(self.__zoomFactorForMode(QPdfView.ZoomMode.FitInView))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 factors.append(self.__zoomFactorForMode(QPdfView.ZoomMode.FitToWidth))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 if zoomIn:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 factors.sort()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 if zoomFactor >= factors[-1]:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 newIndex = next(x for x, val in enumerate(factors) if val > zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 factors.sort(reverse=True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if zoomFactor <= factors[-1]:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 newIndex = next(x for x, val in enumerate(factors) if val < zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 newFactor = factors[newIndex]
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if newFactor == self.__zoomFactorForMode(QPdfView.ZoomMode.FitInView):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.setZoomMode(QPdfView.ZoomMode.FitInView)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitInView)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 elif newFactor == self.__zoomFactorForMode(QPdfView.ZoomMode.FitToWidth):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.setZoomMode(QPdfView.ZoomMode.FitToWidth)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitToWidth)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 self.setZoomFactor(newFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 self.zoomFactorChanged.emit(newFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 def __zoomFactorForMode(self, zoomMode):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 Private method to calculate the zoom factor iaw. the current zoom mode.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 @param zoomMode zoom mode to get the zoom factor for
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 @type QPdfView.ZoomMode
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 @return zoom factor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 @rtype float
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 """
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
154 self.__calculateDocumentViewport()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
155
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 if zoomMode == QPdfView.ZoomMode.Custom:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 return self.zoomFactor()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 curPage = self.pageNavigator().currentPage()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 margins = self.documentMargins()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 if zoomMode == QPdfView.ZoomMode.FitToWidth:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 pageSize = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 ).toSize()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 factor = (
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
166 self.__documentViewport.width() - margins.left() - margins.right()
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 ) / pageSize.width()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 pageSize *= factor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 # QPdfView.ZoomMode.FitInView
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
171 viewportSize = self.__documentViewport.size() + QSize(
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 -margins.left() - margins.right(), -self.pageSpacing()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 pageSize = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 ).toSize()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 pageSize = pageSize.scaled(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 viewportSize, Qt.AspectRatioMode.KeepAspectRatio
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 zoomFactor = pageSize.width() / (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 ).width()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 return zoomFactor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 def zoomIn(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 Public slot to zoom into the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.__zoomInOut(True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 def zoomOut(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 Public slot to zoom out of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 self.__zoomInOut(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 def zoomReset(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 Public slot to reset the zoom factor of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 if self.zoomMode() != QPdfView.ZoomMode.Custom or self.zoomFactor() != 1.0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 self.setZoomFactor(1.0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 self.zoomFactorChanged.emit(1.0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 def wheelEvent(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 Protected method to handle wheel events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 @param evt reference to the wheel event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 @type QWheelEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 delta = evt.angleDelta().y()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 if delta < 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 self.zoomOut()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 elif delta > 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.zoomIn()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 evt.accept()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 elif evt.modifiers() & Qt.KeyboardModifier.ShiftModifier:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 if delta < 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 self.pageNavigator().back()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 elif delta > 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 self.pageNavigator().forward()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 evt.accept()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 super().wheelEvent(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
236 def keyPressEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
237 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
238 Protected method handling key press events.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
239
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
240 @param evt reference to the key event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
241 @type QKeyEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
242 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
243 if evt.key() == Qt.Key.Key_Escape:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
244 self.clearSelection()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
245
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
246 def mousePressEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
247 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
248 Protected method to handle mouse press events.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
249
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
250 @param evt reference to the mouse event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
251 @type QMouseEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
252 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
253 if evt.button() == Qt.MouseButton.LeftButton:
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
254 self.clearMarkers(PdfMarkerType.SELECTION)
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
255 self.selectionAvailable.emit(False)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
256
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
257 self.__rubberBandOrigin = evt.pos()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
258 if self.__rubberBand is None:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
259 self.__rubberBand = QRubberBand(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
260 QRubberBand.Shape.Rectangle, self.viewport()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
261 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
262 self.__rubberBand.setGeometry(QRect(self.__rubberBandOrigin, QSize()))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
263 self.__rubberBand.show()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
264
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
265 super().mousePressEvent(evt)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
266
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
267 def mouseMoveEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
268 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
269 Protected method to handle mouse move events.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
270
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
271 @param evt reference to the mouse event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
272 @type QMouseEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
273 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
274 if evt.buttons() & Qt.MouseButton.LeftButton:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
275 self.__rubberBand.setGeometry(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
276 QRect(self.__rubberBandOrigin, evt.pos()).normalized()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
277 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
278
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
279 super().mousePressEvent(evt)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
280
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
281 def mouseReleaseEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
282 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
283 Protected method to handle mouse release events.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
284
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
285 @param evt reference to the mouse event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
286 @type QMouseEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
287 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
288 if evt.button() == Qt.MouseButton.LeftButton:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
289 self.__rubberBand.hide()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
290 translatedRubber = self.__rubberBand.geometry().translated(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
291 self.__documentViewport.topLeft()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
292 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
293 for page in self.__pageGeometries:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
294 if self.__pageGeometries[page].intersects(translatedRubber):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
295 translatedRubber = translatedRubber.translated(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
296 -self.__pageGeometries[page].topLeft()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
297 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
298 factor = self.__zoomFactorForMode(self.zoomMode())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
299 selectionSize = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
300 QSizeF(translatedRubber.size()) / factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
301 / self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
302 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
303 selectionTopLeft = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
304 QPointF(translatedRubber.topLeft()) / factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
305 / self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
306 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
307 selectionRect = QRectF(selectionTopLeft, selectionSize)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
308 selection = self.document().getSelection(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
309 page, selectionRect.topLeft(), selectionRect.bottomRight()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
310 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
311 if selection.isValid():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
312 for bound in selection.bounds():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
313 self.addMarker(
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
314 page, bound.boundingRect(), PdfMarkerType.SELECTION
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
315 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
316 self.selectionAvailable.emit(True)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
317
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
318 super().mousePressEvent(evt)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
319
9704
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 def event(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
321 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 Public method handling events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 @param evt reference to the event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 @type QEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 @return flag indicating, if the event was handled
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 @rtype bool
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 if evt.type() == QEvent.Type.Gesture:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 self.gestureEvent(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 return True
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 return super().event(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 def gestureEvent(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 Protected method handling gesture events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 @param evt reference to the gesture event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 @type QGestureEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
342 pinch = evt.gesture(Qt.GestureType.PinchGesture)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 if pinch:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 if pinch.state() == Qt.GestureState.GestureStarted:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 pinch.setTotalScaleFactor(self.__zoomFactorForMode(self.zoomMode()))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 elif pinch.state() == Qt.GestureState.GestureUpdated:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 if self.zoomMode() != QPdfView.ZoomMode.Custom:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 zoomFactor = pinch.totalScaleFactor()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
351 self.setZoomFactor(zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
352 self.zoomFactorChanged.emit(zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
353 evt.accept()
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
354
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
355 def resizeEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
356 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
357 Protected method to handle a widget resize.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
358
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
359 @param evt reference to the resize event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
360 @type QResizeEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
361 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
362 super().resizeEvent(evt)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
363
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
364 self.__calculateDocumentViewport()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
365
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
366 def paintEvent(self, evt):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
367 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
368 Protected method to paint the view.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
369
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
370 This event handler calls the original paint event handler of the super class
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
371 and paints the markers on top of the result.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
372
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
373 @param evt reference to the paint event
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
374 @type QPaintEvent
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
375 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
376 super().paintEvent(evt)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
377
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
378 painter = QPainter(self.viewport())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
379 painter.translate(-self.__documentViewport.x(), -self.__documentViewport.y())
9708
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
380 curPage = self.pageNavigator().currentPage()
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
381 for page in self.__markerGeometries:
9708
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
382 if self.pageMode() == QPdfView.PageMode.SinglePage and page != curPage:
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
383 continue
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
384
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
385 for markerGeom in self.__markerGeometries[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
386 if markerGeom.rectangle.intersects(self.__documentViewport):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
387 painter.setPen(QPen(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
388 PdfView.MarkerColors[markerGeom.markerType][0], 2
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
389 ))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
390 painter.setBrush(PdfView.MarkerColors[markerGeom.markerType][1])
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
391 painter.drawRect(markerGeom.rectangle)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
392 painter.end()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
393
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
394 def __calculateDocumentViewport(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
395 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
396 Private method to calculate the document viewport.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
397
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
398 This is a PyQt implementation of the code found in the QPdfView class
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
399 because it is calculated in a private part and not accessible.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
400 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
401 x = self.horizontalScrollBar().value()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
402 y = self.verticalScrollBar().value()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
403 width = self.viewport().width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
404 height = self.viewport().height()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
405
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
406 docViewport = QRect(x, y, width, height)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
407 if self.__documentViewport == docViewport:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
408 return
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
409
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
410 oldSize = self.__documentViewport.size()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
411
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
412 self.__documentViewport = docViewport
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
413
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
414 if oldSize != self.__documentViewport.size():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
415 self.__calculateDocumentLayout()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
416
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
417 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
418 def __calculateDocumentLayout(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
419 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
420 Private slot to calculate the document layout data.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
421
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
422 This is a PyQt implementation of the code found in the QPdfView class
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
423 because it is calculated in a private part and not accessible.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
424 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
425 self.__documentSize = QSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
426 self.__pageGeometries.clear()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
427 self.__markerGeometries.clear()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
428
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
429 document = self.document()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
430 margins = self.documentMargins()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
431
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
432 if document is None or document.status() != QPdfDocument.Status.Ready:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
433 return
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
434
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
435 pageCount = document.pageCount()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
436
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
437 totalWidth = 0
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
438
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
439 startPage = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
440 self.pageNavigator().currentPage()
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
441 if self.pageMode() == QPdfView.PageMode.SinglePage
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
442 else 0
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
443 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
444 endPage = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
445 self.pageNavigator().currentPage() + 1
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
446 if self.pageMode() == QPdfView.PageMode.SinglePage
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
447 else pageCount
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
448 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
449
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
450 # calculate pageSizes
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
451 for page in range(startPage, endPage):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
452 if self.zoomMode() == QPdfView.ZoomMode.Custom:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
453 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
454 document.pagePointSize(page) * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
455 * self.zoomFactor()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
456 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
457 elif self.zoomMode() == QPdfView.ZoomMode.FitToWidth:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
458 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
459 document.pagePointSize(page) * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
460 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
461 factor = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
462 self.__documentViewport.width() - margins.left() - margins.right()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
463 ) / pageSize.width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
464 pageSize *= factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
465 elif self.zoomMode() == QPdfView.ZoomMode.FitInView:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
466 viewportSize = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
467 self.__documentViewport.size()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
468 + QSize(-margins.left() - margins.right(), -self.pageSpacing())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
469 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
470 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
471 document.pagePointSize(page) * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
472 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
473 pageSize = pageSize.scaled(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
474 viewportSize, Qt.AspectRatioMode.KeepAspectRatio
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
475 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
476
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
477 totalWidth = max(totalWidth, pageSize.width())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
478
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
479 self.__pageGeometries[page] = QRect(QPoint(0, 0), pageSize)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
480
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
481 totalWidth += margins.left() + margins.right()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
482
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
483 pageY = margins.top()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
484
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
485 # calculate page positions
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
486 for page in range(startPage, endPage):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
487 pageSize = self.__pageGeometries[page].size()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
488
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
489 # center horizontally inside the viewport
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
490 pageX = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
491 max(totalWidth, self.__documentViewport.width()) - pageSize.width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
492 ) // 2
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
493 self.__pageGeometries[page].moveTopLeft(QPoint(pageX, pageY))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
494
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
495 self.__calculateMarkerGeometries(page, QPoint(pageX, pageY))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
496
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
497 pageY += pageSize.height() + self.pageSpacing()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
498
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
499 pageY += margins.bottom()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
500
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
501 self.__documentSize = QSize(totalWidth, pageY)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
502
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
503 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
504 def __currentPageChanged(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
505 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
506 Private slot to handle a change of the current page.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
507 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
508 if self.pageMode() == QPdfView.PageMode.SinglePage:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
509 self.__calculateDocumentLayout()
9708
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
510 self.update()
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
511
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
512 def __calculateMarkerGeometries(self, page, offset):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
513 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
514 Private method to calculate the marker geometries.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
515
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
516 @param page page number
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
517 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
518 @param offset page offset
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
519 @type QPoint or QPointF
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
520 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
521 # calculate search marker sizes
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
522 if page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
523 factor = self.__zoomFactorForMode(self.zoomMode())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
524 for marker in self.__markers[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
525 markerSize = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
526 QSizeF(marker.rectangle.size()) * factor * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
527 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
528 markerTopLeft = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
529 QPointF(marker.rectangle.topLeft()) * factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
530 * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
531 ).toPoint()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
532
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
533 markerGeometry = QRect(markerTopLeft, markerSize)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
534 self.__markerGeometries[page].append(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
535 PdfMarkerGeometry(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
536 rectangle=markerGeometry.translated(offset),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
537 markerType=marker.markerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
538 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
539 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
540
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
541 def scrollContentsBy(self, dx, dy):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
542 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
543 Public method called when the scrollbars are moved.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
544
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
545 @param dx change of the horizontal scroll bar
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
546 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
547 @param dy change of the vertical scroll bar
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
548 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
549 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
550 super().scrollContentsBy(dx, dy)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
551
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
552 self.__calculateDocumentViewport()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
553
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
554 def __updateView(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
555 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
556 Private method to update the view.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
557 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
558 self.__calculateDocumentLayout()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
559 self.update()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
560
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
561 @pyqtSlot(int, QRectF, PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
562 @pyqtSlot(int, QRect, PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
563 def addMarker(self, page, rect, markerType):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
564 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
565 Public slot to add a marker.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
566
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
567 @param page page number for the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
568 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
569 @param rect marker rectangle
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
570 @type QRect or QRectF
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
571 @param markerType type of the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
572 @type PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
573 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
574 marker = PdfMarker(rectangle=QRectF(rect), markerType=markerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
575 if marker not in self.__markers[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
576 self.__markers[page].append(marker)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
577 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
578
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
579 @pyqtSlot(PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
580 def clearMarkers(self, markerType):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
581 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
582 Public slot to clear the markers of a specific type.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
583
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
584 @param markerType type of the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
585 @type PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
586 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
587 markers = collections.defaultdict(list)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
588 for page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
589 markersList = [
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
590 m for m in self.__markers[page] if m.markerType != markerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
591 ]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
592 if markersList:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
593 markers[page] = markersList
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
594
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
595 self.__markers = markers
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
596 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
597
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
598 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
599 def clearAllMarkers(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
600 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
601 Public slot to clear all markers.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
602 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
603 self.__markers.clear()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
604 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
605
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
606 @pyqtSlot(QPdfLink)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
607 def addSearchMarker(self, link):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
608 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
609 Public slot to add a search marker given a PDF link.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
610
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
611 @param link reference to the PDF link object
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
612 @type QPdfLink
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
613 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
614 for rect in link.rectangles():
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
615 self.addMarker(link.page(), rect, PdfMarkerType.SEARCHRESULT)
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
616
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
617 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
618 def clearSearchMarkers(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
619 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
620 Public slot to clear the search markers.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
621 """
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
622 self.clearMarkers(PdfMarkerType.SEARCHRESULT)
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
623
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
624 def hasSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
625 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
626 Public method to check the presence of a selection.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
627
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
628 @return flag indicating the presence of a selection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
629 @rtype bool
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
630 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
631 return any(
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
632 m.markerType == PdfMarkerType.SELECTION
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
633 for p in self.__markers
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
634 for m in self.__markers[p]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
635 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
636
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
637 def getSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
638 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
639 Public method to get a PDF selection object.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
640
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
641 @return reference to the PDF selection object
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
642 @rtype QPdfSelection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
643 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
644 for page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
645 markersList = [
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
646 m for m in self.__markers[page]
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
647 if m.markerType == PdfMarkerType.SELECTION
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
648 ]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
649 if markersList:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
650 selection = self.document().getSelection(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
651 page,
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
652 markersList[0].rectangle.topLeft(),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
653 markersList[-1].rectangle.bottomRight(),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
654 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
655 if selection.isValid():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
656 return selection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
657
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
658 return None
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
659
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
660 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
661 def clearSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
662 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
663 Public slot to clear the current selection.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
664 """
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
665 self.clearMarkers(PdfMarkerType.SELECTION)

eric ide

mercurial