src/eric7/PdfViewer/PdfView.py

Wed, 18 Jan 2023 14:31:55 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 18 Jan 2023 14:31:55 +0100
branch
pdf_viewer
changeset 9704
6e1650b9b3b5
child 9707
717f95e35ca8
permissions
-rw-r--r--

PDF Viewer
- created a specialized PDF view class to intercept and handle certain events
- added a 'Search' widget

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
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import QSize, Qt, pyqtSlot, QEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtGui import QGuiApplication
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtPdfWidgets import QPdfView
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from .PdfZoomSelector import PdfZoomSelector
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 class PdfView(QPdfView):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 Class implementing a specialized PDF view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 def __init__(self, parent):
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 Constructor
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 @param parent reference to the parent widget
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @type QWidget
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 super().__init__(parent)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 self.__screenResolution = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 QGuiApplication.primaryScreen().logicalDotsPerInch() / 72.0
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
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 self.grabGesture(Qt.GestureType.PinchGesture)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 def __zoomInOut(self, zoomIn):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 Private method to zoom into or out of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @param zoomIn flag indicating to zoom into the view
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 @type bool
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 zoomFactor = self.__zoomFactorForMode(self.zoomMode())
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 factors = list(PdfZoomSelector.ZoomValues)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 factors.append(self.__zoomFactorForMode(QPdfView.ZoomMode.FitInView))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 factors.append(self.__zoomFactorForMode(QPdfView.ZoomMode.FitToWidth))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 if zoomIn:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 factors.sort()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 if zoomFactor >= factors[-1]:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 newIndex = next(x for x, val in enumerate(factors) if val > zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 factors.sort(reverse=True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 if zoomFactor <= factors[-1]:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 newIndex = next(x for x, val in enumerate(factors) if val < zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 newFactor = factors[newIndex]
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 if newFactor == self.__zoomFactorForMode(QPdfView.ZoomMode.FitInView):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.setZoomMode(QPdfView.ZoomMode.FitInView)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitInView)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 elif newFactor == self.__zoomFactorForMode(QPdfView.ZoomMode.FitToWidth):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 self.setZoomMode(QPdfView.ZoomMode.FitToWidth)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitToWidth)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.setZoomFactor(newFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.zoomFactorChanged.emit(newFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 def __zoomFactorForMode(self, zoomMode):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 Private method to calculate the zoom factor iaw. the current zoom mode.
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 @param zoomMode zoom mode to get the zoom factor for
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 @type QPdfView.ZoomMode
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 @return zoom factor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @rtype float
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 if zoomMode == QPdfView.ZoomMode.Custom:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 return self.zoomFactor()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 viewport = self.viewport()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 curPage = self.pageNavigator().currentPage()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 margins = self.documentMargins()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 if zoomMode == QPdfView.ZoomMode.FitToWidth:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 pageSize = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 ).toSize()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 factor = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 viewport.width() - margins.left() - margins.right()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 ) / pageSize.width()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 pageSize *= factor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 else:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 # QPdfView.ZoomMode.FitInView
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 viewportSize = viewport.size() + QSize(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 -margins.left() - margins.right(), -self.pageSpacing()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 pageSize = (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 ).toSize()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 pageSize = pageSize.scaled(
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 viewportSize, Qt.AspectRatioMode.KeepAspectRatio
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 )
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 zoomFactor = pageSize.width() / (
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 self.document().pagePointSize(curPage) * self.__screenResolution
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 ).width()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 return zoomFactor
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 def zoomIn(self):
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 Public slot to zoom into the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 self.__zoomInOut(True)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 def zoomOut(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 Public slot to zoom out of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 self.__zoomInOut(False)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 @pyqtSlot()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 def zoomReset(self):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 Public slot to reset the zoom factor of the view.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 if self.zoomMode() != QPdfView.ZoomMode.Custom or self.zoomFactor() != 1.0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.setZoomFactor(1.0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 self.zoomFactorChanged.emit(1.0)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 def wheelEvent(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 Protected method to handle wheel events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 @param evt reference to the wheel event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 @type QWheelEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 delta = evt.angleDelta().y()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 if delta < 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 self.zoomOut()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 elif delta > 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 self.zoomIn()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 evt.accept()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 elif evt.modifiers() & Qt.KeyboardModifier.ShiftModifier:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 if delta < 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.pageNavigator().back()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 elif delta > 0:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 self.pageNavigator().forward()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 evt.accept()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 return
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 super().wheelEvent(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 def event(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 Public method handling events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @param evt reference to the event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @type QEvent
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 @return flag indicating, if the event was handled
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 @rtype bool
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 if evt.type() == QEvent.Type.Gesture:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.gestureEvent(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 return True
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 return super().event(evt)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 def gestureEvent(self, evt):
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 Protected method handling gesture events.
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 @param evt reference to the gesture event
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 @type QGestureEvent
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 pinch = evt.gesture(Qt.GestureType.PinchGesture)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 if pinch:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 if pinch.state() == Qt.GestureState.GestureStarted:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 pinch.setTotalScaleFactor(self.__zoomFactorForMode(self.zoomMode()))
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 elif pinch.state() == Qt.GestureState.GestureUpdated:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 if self.zoomMode() != QPdfView.ZoomMode.Custom:
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 self.setZoomMode(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 zoomFactor = pinch.totalScaleFactor()
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 self.setZoomFactor(zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 self.zoomFactorChanged.emit(zoomFactor)
6e1650b9b3b5 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 evt.accept()

eric ide

mercurial