src/eric7/PdfViewer/PdfView.py

Fri, 20 Jan 2023 16:14:05 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 20 Jan 2023 16:14:05 +0100
branch
pdf_viewer
changeset 9711
614bb8b0d175
parent 9710
e011859649ea
child 9722
63135ab601e7
permissions
-rw-r--r--

Undid part of change 8956a005f478 because it was not the real issue.

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())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
380 for page in self.__markerGeometries:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
381 for markerGeom in self.__markerGeometries[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
382 if markerGeom.rectangle.intersects(self.__documentViewport):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
383 painter.setPen(QPen(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
384 PdfView.MarkerColors[markerGeom.markerType][0], 2
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
385 ))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
386 painter.setBrush(PdfView.MarkerColors[markerGeom.markerType][1])
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
387 painter.drawRect(markerGeom.rectangle)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
388 painter.end()
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 def __calculateDocumentViewport(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
391 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
392 Private method to calculate the document viewport.
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 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
395 because it is calculated in a private part and not accessible.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
396 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
397 x = self.horizontalScrollBar().value()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
398 y = self.verticalScrollBar().value()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
399 width = self.viewport().width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
400 height = self.viewport().height()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
401
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
402 docViewport = QRect(x, y, width, height)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
403 if self.__documentViewport == docViewport:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
404 return
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 oldSize = self.__documentViewport.size()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
407
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
408 self.__documentViewport = docViewport
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 if oldSize != self.__documentViewport.size():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
411 self.__calculateDocumentLayout()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
412
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
413 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
414 def __calculateDocumentLayout(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
415 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
416 Private slot to calculate the document layout data.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
417
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
418 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
419 because it is calculated in a private part and not accessible.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
420 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
421 self.__documentSize = QSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
422 self.__pageGeometries.clear()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
423 self.__markerGeometries.clear()
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 document = self.document()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
426 margins = self.documentMargins()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
427
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
428 if document is None or document.status() != QPdfDocument.Status.Ready:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
429 return
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
430
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
431 pageCount = document.pageCount()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
432
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
433 totalWidth = 0
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 startPage = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
436 self.pageNavigator().currentPage()
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
437 if self.pageMode() == QPdfView.PageMode.SinglePage
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
438 else 0
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
439 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
440 endPage = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
441 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
442 if self.pageMode() == QPdfView.PageMode.SinglePage
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
443 else pageCount
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
444 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
445
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
446 # calculate pageSizes
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
447 for page in range(startPage, endPage):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
448 if self.zoomMode() == QPdfView.ZoomMode.Custom:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
449 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
450 document.pagePointSize(page) * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
451 * self.zoomFactor()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
452 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
453 elif self.zoomMode() == QPdfView.ZoomMode.FitToWidth:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
454 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
455 document.pagePointSize(page) * self.__screenResolution
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 factor = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
458 self.__documentViewport.width() - margins.left() - margins.right()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
459 ) / pageSize.width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
460 pageSize *= factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
461 elif self.zoomMode() == QPdfView.ZoomMode.FitInView:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
462 viewportSize = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
463 self.__documentViewport.size()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
464 + QSize(-margins.left() - margins.right(), -self.pageSpacing())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
465 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
466 pageSize = QSizeF(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
467 document.pagePointSize(page) * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
468 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
469 pageSize = pageSize.scaled(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
470 viewportSize, Qt.AspectRatioMode.KeepAspectRatio
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
471 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
472
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
473 totalWidth = max(totalWidth, pageSize.width())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
474
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
475 self.__pageGeometries[page] = QRect(QPoint(0, 0), pageSize)
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 += margins.left() + margins.right()
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 pageY = margins.top()
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 # calculate page positions
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
482 for page in range(startPage, endPage):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
483 pageSize = self.__pageGeometries[page].size()
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 # center horizontally inside the viewport
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
486 pageX = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
487 max(totalWidth, self.__documentViewport.width()) - pageSize.width()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
488 ) // 2
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
489 self.__pageGeometries[page].moveTopLeft(QPoint(pageX, pageY))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
490
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
491 self.__calculateMarkerGeometries(page, QPoint(pageX, pageY))
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
492
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
493 pageY += pageSize.height() + self.pageSpacing()
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 pageY += margins.bottom()
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 self.__documentSize = QSize(totalWidth, pageY)
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 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
500 def __currentPageChanged(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
501 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
502 Private slot to handle a change of the current page.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
503 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
504 if self.pageMode() == QPdfView.PageMode.SinglePage:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
505 self.__calculateDocumentLayout()
9708
8956a005f478 Corrected an issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9707
diff changeset
506 self.update()
9707
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 def __calculateMarkerGeometries(self, page, offset):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
509 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
510 Private method to calculate the marker geometries.
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 @param page page number
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
513 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
514 @param offset page offset
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
515 @type QPoint or QPointF
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
516 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
517 # calculate search marker sizes
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
518 if page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
519 factor = self.__zoomFactorForMode(self.zoomMode())
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
520 for marker in self.__markers[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
521 markerSize = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
522 QSizeF(marker.rectangle.size()) * factor * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
523 ).toSize()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
524 markerTopLeft = (
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
525 QPointF(marker.rectangle.topLeft()) * factor
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
526 * self.__screenResolution
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
527 ).toPoint()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
528
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
529 markerGeometry = QRect(markerTopLeft, markerSize)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
530 self.__markerGeometries[page].append(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
531 PdfMarkerGeometry(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
532 rectangle=markerGeometry.translated(offset),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
533 markerType=marker.markerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
534 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
535 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
536
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
537 def scrollContentsBy(self, dx, dy):
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 Public method called when the scrollbars are moved.
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 @param dx change of the horizontal scroll bar
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
542 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
543 @param dy change of the vertical scroll bar
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
544 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
545 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
546 super().scrollContentsBy(dx, dy)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
547
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
548 self.__calculateDocumentViewport()
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 def __updateView(self):
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 Private method to update the view.
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 self.__calculateDocumentLayout()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
555 self.update()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
556
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
557 @pyqtSlot(int, QRectF, PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
558 @pyqtSlot(int, QRect, PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
559 def addMarker(self, page, rect, markerType):
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 Public slot to add a marker.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
562
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
563 @param page page number for the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
564 @type int
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
565 @param rect marker rectangle
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
566 @type QRect or QRectF
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
567 @param markerType type of the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
568 @type PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
569 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
570 marker = PdfMarker(rectangle=QRectF(rect), markerType=markerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
571 if marker not in self.__markers[page]:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
572 self.__markers[page].append(marker)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
573 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
574
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
575 @pyqtSlot(PdfMarkerType)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
576 def clearMarkers(self, markerType):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
577 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
578 Public slot to clear the markers of a specific type.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
579
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
580 @param markerType type of the marker
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
581 @type PdfMarkerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
582 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
583 markers = collections.defaultdict(list)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
584 for page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
585 markersList = [
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
586 m for m in self.__markers[page] if m.markerType != markerType
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
587 ]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
588 if markersList:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
589 markers[page] = markersList
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
590
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
591 self.__markers = markers
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
592 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
593
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
594 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
595 def clearAllMarkers(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
596 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
597 Public slot to clear all markers.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
598 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
599 self.__markers.clear()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
600 self.__updateView()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
601
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
602 @pyqtSlot(QPdfLink)
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
603 def addSearchMarker(self, link):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
604 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
605 Public slot to add a search marker given a PDF link.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
606
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
607 @param link reference to the PDF link object
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
608 @type QPdfLink
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
609 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
610 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
611 self.addMarker(link.page(), rect, PdfMarkerType.SEARCHRESULT)
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
612
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
613 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
614 def clearSearchMarkers(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
615 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
616 Public slot to clear the search markers.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
617 """
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
618 self.clearMarkers(PdfMarkerType.SEARCHRESULT)
9707
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 def hasSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
621 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
622 Public method to check the presence of a selection.
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 @return flag indicating the presence of a selection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
625 @rtype bool
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
626 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
627 return any(
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
628 m.markerType == PdfMarkerType.SELECTION
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
629 for p in self.__markers
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
630 for m in self.__markers[p]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
631 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
632
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
633 def getSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
634 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
635 Public method to get a PDF selection object.
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 @return reference to the PDF selection object
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
638 @rtype QPdfSelection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
639 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
640 for page in self.__markers:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
641 markersList = [
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
642 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
643 if m.markerType == PdfMarkerType.SELECTION
9707
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
644 ]
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
645 if markersList:
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
646 selection = self.document().getSelection(
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
647 page,
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
648 markersList[0].rectangle.topLeft(),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
649 markersList[-1].rectangle.bottomRight(),
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
650 )
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
651 if selection.isValid():
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
652 return selection
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
653
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
654 return None
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
655
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
656 @pyqtSlot()
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
657 def clearSelection(self):
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
658 """
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
659 Public slot to clear the current selection.
717f95e35ca8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9704
diff changeset
660 """
9710
e011859649ea Corrected another issue showing markers in Single Page mode.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9708
diff changeset
661 self.clearMarkers(PdfMarkerType.SELECTION)

eric ide

mercurial