5 |
5 |
6 """ |
6 """ |
7 Module implementing the QTextBrowser based help viewer class. |
7 Module implementing the QTextBrowser based help viewer class. |
8 """ |
8 """ |
9 |
9 |
10 from PyQt6.QtCore import Qt, QByteArray, QUrl |
10 from PyQt6.QtCore import Qt, QByteArray, QUrl, QEvent |
11 from PyQt6.QtGui import QDesktopServices, QImage |
11 from PyQt6.QtGui import QDesktopServices, QImage |
12 from PyQt6.QtWidgets import QTextBrowser |
12 from PyQt6.QtWidgets import QTextBrowser |
13 |
13 |
14 from .HelpViewerImpl import HelpViewerImpl |
14 from .HelpViewerImpl import HelpViewerImpl |
15 |
15 |
31 HelpViewerImpl.__init__(self, engine) |
31 HelpViewerImpl.__init__(self, engine) |
32 |
32 |
33 self.__zoomCount = 0 |
33 self.__zoomCount = 0 |
34 |
34 |
35 self.sourceChanged.connect(self.titleChanged) |
35 self.sourceChanged.connect(self.titleChanged) |
|
36 |
|
37 self.grabGesture(Qt.GestureType.PinchGesture) |
36 |
38 |
37 def setUrl(self, url): |
39 def setUrl(self, url): |
38 """ |
40 """ |
39 Public method to set the URL of the document to be shown. |
41 Public method to set the URL of the document to be shown. |
40 |
42 |
151 if self.__zoomCount > -5: |
153 if self.__zoomCount > -5: |
152 self.__zoomCount -= 1 |
154 self.__zoomCount -= 1 |
153 self.zoomOut() |
155 self.zoomOut() |
154 self.zoomChanged.emit() |
156 self.zoomChanged.emit() |
155 |
157 |
|
158 def setScale(self, scale): |
|
159 """ |
|
160 Public method to set the zoom level. |
|
161 |
|
162 @param scale zoom level to set |
|
163 @type int |
|
164 """ |
|
165 if -5 <= scale <= 10: |
|
166 self.zoomOut(scale) |
|
167 self.__zoomCount = scale |
|
168 self.zoomChanged.emit() |
|
169 |
156 def resetScale(self): |
170 def resetScale(self): |
157 """ |
171 """ |
158 Public method to reset the zoom level. |
172 Public method to reset the zoom level. |
159 """ |
173 """ |
160 if self.__zoomCount != 0: |
174 if self.__zoomCount != 0: |
203 self.scaleDown() |
217 self.scaleDown() |
204 evt.accept() |
218 evt.accept() |
205 else: |
219 else: |
206 QTextBrowser.wheelEvent(self, evt) |
220 QTextBrowser.wheelEvent(self, evt) |
207 |
221 |
208 # TODO: implement context menu |
222 def keyPressEvent(self, evt): |
|
223 """ |
|
224 Public method to handle key press events. |
|
225 |
|
226 @param evt reference to the key event |
|
227 @type QKeyEvent |
|
228 """ |
|
229 if evt.key() == Qt.Key.Key_ZoomIn: |
|
230 self.scaleUp() |
|
231 evt.accept() |
|
232 elif evt.key() == Qt.Key.Key_ZoomOut: |
|
233 self.scaleDown() |
|
234 evt.accept() |
|
235 elif evt.key() == Qt.Key.Key_Plus: |
|
236 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier: |
|
237 self.scaleUp() |
|
238 evt.accept() |
|
239 elif evt.key() == Qt.Key.Key_Minus: |
|
240 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier: |
|
241 self.scaleDown() |
|
242 evt.accept() |
|
243 elif evt.key() == Qt.Key.Key_0: |
|
244 if evt.modifiers() & Qt.KeyboardModifier.ControlModifier: |
|
245 self.resetScale() |
|
246 evt.accept() |
|
247 elif evt.key() == Qt.Key.Key_Backspace: |
|
248 self.backward() |
|
249 evt.accept() |
|
250 |
|
251 def event(self, evt): |
|
252 """ |
|
253 Public method handling events. |
|
254 |
|
255 @param evt reference to the event |
|
256 @type QEvent |
|
257 @return flag indicating the event was handled |
|
258 @rtype bool |
|
259 """ |
|
260 if evt.type() == QEvent.Type.Gesture: |
|
261 self.gestureEvent(evt) |
|
262 return True |
|
263 |
|
264 return super().event(evt) |
|
265 |
|
266 def gestureEvent(self, evt): |
|
267 """ |
|
268 Protected method handling gesture events. |
|
269 |
|
270 @param evt reference to the gesture event |
|
271 @type QGestureEvent |
|
272 """ |
|
273 pinch = evt.gesture(Qt.GestureType.PinchGesture) |
|
274 if pinch: |
|
275 if pinch.state() == Qt.GestureState.GestureStarted: |
|
276 zoom = (self.getZoom() + 6) / 10.0 |
|
277 pinch.setTotalScaleFactor(zoom) |
|
278 elif pinch.state() == Qt.GestureState.GestureUpdated: |
|
279 zoom = int(pinch.totalScaleFactor() * 10) - 6 |
|
280 if zoom <= -5: |
|
281 zoom = -5 |
|
282 pinch.setTotalScaleFactor(0.1) |
|
283 elif zoom >= 10: |
|
284 zoom = 10 |
|
285 pinch.setTotalScaleFactor(1.6) |
|
286 self.setScale(zoom) |
|
287 evt.accept() |
|
288 |
|
289 # TODO: implement context menu |
|
290 # - Open Link |
|
291 # - Open Link in New Page |
|
292 # - Open Link in Background Page |
|
293 # - Copy |
|
294 # - Copy Link LOcation |
|
295 # - Select All |
209 # TODO: add Ctrl+LMB action (open link in new page) |
296 # TODO: add Ctrl+LMB action (open link in new page) |