src/eric7/PdfViewer/PdfZoomSelector.py

Sat, 14 Jan 2023 18:25:26 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 14 Jan 2023 18:25:26 +0100
branch
pdf_viewer
changeset 9699
92dcd34d54e4
child 9700
b74a13a382a8
permissions
-rw-r--r--

PDF Viewer
- finished 'Go to' functions
- started with 'Zoom' functions

9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2023 Detlev Offenbach <detlev@die-offenbachs.de>
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a widget to select a PDF zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt6.QtCore import pyqtSignal, pyqtSlot, Qt
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt6.QtPdfWidgets import QPdfView
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt6.QtWidgets import QComboBox
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 class PdfZoomSelector(QComboBox):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17 Class implementing a widget to select a PDF zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 @signal zoomFactorChanged(factor) emitted to indicate the selected zoom factor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 @signal zoomModeChanged(zoomMode) emitted to indicate the selected zoom mode
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 zoomFactorChanged = pyqtSignal(float)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 zoomModeChanged = pyqtSignal(QPdfView.ZoomMode)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, parent=None):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 Constructor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 @param parent reference to the parent widget (defaults to None)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @type QWidget (optional)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 super().__init__(parent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.setEditable(True)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 self.setInsertPolicy(QComboBox.InsertPolicy.NoInsert)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.addItem(self.tr("Page Width"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.addItem(self.tr("Whole Page"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.addItem(self.tr("12%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.addItem(self.tr("25%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.addItem(self.tr("33%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.addItem(self.tr("50%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.addItem(self.tr("66%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.addItem(self.tr("75%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.addItem(self.tr("100%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.addItem(self.tr("125%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.addItem(self.tr("150%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.addItem(self.tr("200%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.addItem(self.tr("400%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.addItem(self.tr("800%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.addItem(self.tr("1600%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.addItem(self.tr("2500%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.addItem(self.tr("5000%"))
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.lineEdit().setAlignment(Qt.AlignmentFlag.AlignCenter)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.currentTextChanged.connect(self.__processText)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.lineEdit().editingFinished.connect(self.__editingFinished)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def __editingFinished(self):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Private slot handling the end of entering a zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.__processText(self.lineEdit().text())
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 @pyqtSlot(str)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 def __processText(self, text):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 Private slot to handle the change of the entered zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 @param text text to be handled
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 @type str
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 if text == self.tr("Page Width"):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitToWidth)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 elif text == self.tr("Whole Page"):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitInView)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 else:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 withoutPercent = text.replace("%", "")
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 try:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 zoomLevel = int(withoutPercent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 factor = zoomLevel / 100.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 except ValueError:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 factor = 1.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 self.zoomFactorChanged.emit(factor)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def reset(self):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 Public slot to reset the zoom factor to 100%.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 self.setCurrentIndex(8) # index 8 is 100%
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 @pyqtSlot(float)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 def setZoomFactor(self, zoomFactor):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 Public slot to set the current zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 @param zoomFactor current zoom factor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 @type float
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 self.setCurrentText(self.tr("{0}%").format(round(zoomFactor * 100)))

eric ide

mercurial