src/eric7/PdfViewer/PdfZoomSelector.py

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

eric ide

mercurial