src/eric7/PdfViewer/PdfZoomSelector.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 9705
7629a6f23b2e
child 10063
9a6a92fd1eae
permissions
-rw-r--r--

Corrected some code formatting and style issues.

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
9722
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
10 from PyQt6.QtCore import Qt, pyqtSignal, pyqtSlot
9699
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.
9722
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
18
9699
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 """
9722
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
22
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 zoomFactorChanged = pyqtSignal(float)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 zoomModeChanged = pyqtSignal(QPdfView.ZoomMode)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
9722
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
26 ZoomValues = (
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
27 0.12,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
28 0.25,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
29 0.33,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
30 0.5,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
31 0.66,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
32 0.75,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
33 1.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
34 1.25,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
35 1.50,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
36 2.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
37 4.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
38 8.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
39 16.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
40 25.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
41 50.0,
63135ab601e7 Corrected some code formatting and style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9705
diff changeset
42 )
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
43
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 def __init__(self, parent=None):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 Constructor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 @param parent reference to the parent widget (defaults to None)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 @type QWidget (optional)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 super().__init__(parent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 self.setEditable(True)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.setInsertPolicy(QComboBox.InsertPolicy.NoInsert)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
56 self.__pageWidthLabel = self.tr("Page Width")
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
57 self.__wholePageLabel = self.tr("Whole Page")
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
58
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
59 self.addItem(self.__pageWidthLabel)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
60 self.addItem(self.__wholePageLabel)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
61 for val in PdfZoomSelector.ZoomValues:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
62 self.addItem(self.tr("{0}%").format(int(val * 100)))
9699
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 self.lineEdit().setAlignment(Qt.AlignmentFlag.AlignCenter)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
9705
7629a6f23b2e Fixed a few bugs in the PDF Viewer.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9700
diff changeset
66 self.currentIndexChanged.connect(self.__editingFinished)
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 self.lineEdit().editingFinished.connect(self.__editingFinished)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 def __editingFinished(self):
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 Private slot handling the end of entering a zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 self.__processText(self.lineEdit().text())
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 @pyqtSlot(str)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 def __processText(self, text):
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 Private slot to handle the change of the entered zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @param text text to be handled
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 @type str
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 """
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
84 if text == self.__pageWidthLabel:
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitToWidth)
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
86 elif text == self.__wholePageLabel:
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 self.zoomModeChanged.emit(QPdfView.ZoomMode.FitInView)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 else:
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
89 withoutPercent = text.replace("%", "").replace("&", "")
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 try:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 zoomLevel = int(withoutPercent)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 factor = zoomLevel / 100.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 except ValueError:
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 factor = 1.0
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 self.zoomModeChanged.emit(QPdfView.ZoomMode.Custom)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 self.zoomFactorChanged.emit(factor)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 @pyqtSlot()
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 def reset(self):
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 Public slot to reset the zoom factor to 100%.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 self.setCurrentIndex(8) # index 8 is 100%
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
105 self.__editingFinished()
9699
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @pyqtSlot(float)
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 def setZoomFactor(self, zoomFactor):
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 Public slot to set the current zoom factor.
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @param zoomFactor current zoom factor
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 @type float
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
92dcd34d54e4 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 self.setCurrentText(self.tr("{0}%").format(round(zoomFactor * 100)))
9700
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
116 self.__editingFinished()
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
117
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
118 @pyqtSlot(QPdfView.ZoomMode)
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
119 def setZoomMode(self, zoomMode):
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
120 """
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
121 Public slot to set the zoom value iaw. the zoom mode.
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
122
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
123 @param zoomMode current zoom mode
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
124 @type QPdfView.ZoomMode
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
125 """
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
126 if zoomMode == QPdfView.ZoomMode.FitToWidth:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
127 self.setCurrentIndex(0) # index 0 is 'Page Width'
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
128 elif zoomMode == QPdfView.ZoomMode.FitInView:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
129 self.setCurrentIndex(1) # index 1 is 'Whole Page'
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
130 else:
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
131 # ignore Custom mode here
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
132 return
b74a13a382a8 PDF Viewer
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9699
diff changeset
133 self.__editingFinished()

eric ide

mercurial