aboutsummaryrefslogtreecommitdiffstats
path: root/examples/pdfwidgets/pdfviewer/zoomselector.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pdfwidgets/pdfviewer/zoomselector.py')
-rw-r--r--examples/pdfwidgets/pdfviewer/zoomselector.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/examples/pdfwidgets/pdfviewer/zoomselector.py b/examples/pdfwidgets/pdfviewer/zoomselector.py
new file mode 100644
index 000000000..6f9f972e0
--- /dev/null
+++ b/examples/pdfwidgets/pdfviewer/zoomselector.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+from PySide6.QtPdfWidgets import QPdfView
+from PySide6.QtWidgets import QComboBox
+from PySide6.QtCore import Signal, Slot
+
+
+class ZoomSelector(QComboBox):
+
+ zoom_mode_changed = Signal(QPdfView.ZoomMode)
+ zoom_factor_changed = Signal(float)
+
+ def __init__(self, parent):
+ super().__init__(parent)
+ self.setEditable(True)
+
+ self.addItem("Fit Width")
+ self.addItem("Fit Page")
+ self.addItem("12%")
+ self.addItem("25%")
+ self.addItem("33%")
+ self.addItem("50%")
+ self.addItem("66%")
+ self.addItem("75%")
+ self.addItem("100%")
+ self.addItem("125%")
+ self.addItem("150%")
+ self.addItem("200%")
+ self.addItem("400%")
+
+ self.currentTextChanged.connect(self.on_current_text_changed)
+ self.lineEdit().editingFinished.connect(self._editing_finished)
+
+ @Slot(float)
+ def set_zoom_factor(self, zoomFactor):
+ percent = int(zoomFactor * 100)
+ self.setCurrentText(f"{percent}%")
+
+ @Slot()
+ def reset(self):
+ self.setCurrentIndex(8) # 100%
+
+ @Slot(str)
+ def on_current_text_changed(self, text):
+ if text == "Fit Width":
+ self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitToWidth)
+ elif text == "Fit Page":
+ self.zoom_mode_changed.emit(QPdfView.ZoomMode.FitInView)
+ elif text.endswith("%"):
+ factor = 1.0
+ zoom_level = int(text[:-1])
+ factor = zoom_level / 100.0
+ self.zoom_mode_changed.emit(QPdfView.ZoomMode.Custom)
+ self.zoom_factor_changed.emit(factor)
+
+ @Slot()
+ def _editing_finished(self):
+ self.on_current_text_changed(self.lineEdit().text())