src/eric7/PdfViewer/PdfZoomSelector.py

Sun, 15 Jan 2023 17:41:35 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 15 Jan 2023 17:41:35 +0100
branch
pdf_viewer
changeset 9700
b74a13a382a8
parent 9699
92dcd34d54e4
child 9705
7629a6f23b2e
permissions
-rw-r--r--

PDF Viewer
- finished '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
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
25 ZoomValues = (0.12, 0.25, 0.33, 0.5, 0.66, 0.75, 1.0, 1.25, 1.50, 2.0, 4.0, 8.0, 16.0, 25.0, 50.0)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
26
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 def __init__(self, parent=None):
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 Constructor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 @param parent reference to the parent widget (defaults to None)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @type QWidget (optional)
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 super().__init__(parent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 self.setEditable(True)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 self.setInsertPolicy(QComboBox.InsertPolicy.NoInsert)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
39 self.__pageWidthLabel = self.tr("Page Width")
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
40 self.__wholePageLabel = self.tr("Whole Page")
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
41
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
42 self.addItem(self.__pageWidthLabel)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
43 self.addItem(self.__wholePageLabel)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
44 for val in PdfZoomSelector.ZoomValues:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
45 self.addItem(self.tr("{0}%").format(int(val * 100)))
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 self.lineEdit().setAlignment(Qt.AlignmentFlag.AlignCenter)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
49 ##self.currentTextChanged.connect(self.__processText)
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.lineEdit().editingFinished.connect(self.__editingFinished)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 def __editingFinished(self):
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 Private slot handling the end of entering a zoom factor.
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.__processText(self.lineEdit().text())
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @pyqtSlot(str)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 def __processText(self, text):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 Private slot to handle the change of the entered zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param text text to be handled
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @type str
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 """
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
67 if text == self.__pageWidthLabel:
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitToWidth)
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
69 elif text == self.__wholePageLabel:
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitInView)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 else:
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
72 withoutPercent = text.replace("%", "").replace("&", "")
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 try:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 zoomLevel = int(withoutPercent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 factor = zoomLevel / 100.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 except ValueError:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 factor = 1.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.zoomFactorChanged.emit(factor)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 def reset(self):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 Public slot to reset the zoom factor to 100%.
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.setCurrentIndex(8) # index 8 is 100%
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
88 self.__editingFinished()
9699
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(float)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 def setZoomFactor(self, zoomFactor):
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 set the current zoom factor.
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 @param zoomFactor current zoom factor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 @type float
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.setCurrentText(self.tr("{0}%").format(round(zoomFactor * 100)))
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
99 self.__editingFinished()
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
100
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
101 @pyqtSlot(QPdfView.ZoomMode)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
102 def setZoomMode(self, zoomMode):
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
103 """
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
104 Public slot to set the zoom value iaw. the zoom mode.
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
105
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
106 @param zoomMode current zoom mode
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
107 @type QPdfView.ZoomMode
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
108 """
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
109 if zoomMode == QPdfView.ZoomMode.FitToWidth:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
110 self.setCurrentIndex(0) # index 0 is 'Page Width'
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
111 elif zoomMode == QPdfView.ZoomMode.FitInView:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
112 self.setCurrentIndex(1) # index 1 is 'Whole Page'
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
113 else:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
114 # ignore Custom mode here
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
115 return
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
116 self.__editingFinished()

eric ide

mercurial