src/eric7/PdfViewer/PdfView.py

Mon, 23 Jan 2023 17:12:03 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 23 Jan 2023 17:12:03 +0100
branch
pdf_viewer
changeset 9722
63135ab601e7
parent 9711
614bb8b0d175
child 10439
21c28b0f9e41
permissions
-rw-r--r--

Corrected some code formatting and style issues.

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

eric ide

mercurial