diff options
Diffstat (limited to 'examples/demos/documentviewer/abstractviewer.py')
-rw-r--r-- | examples/demos/documentviewer/abstractviewer.py | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/examples/demos/documentviewer/abstractviewer.py b/examples/demos/documentviewer/abstractviewer.py new file mode 100644 index 000000000..4039fe9fb --- /dev/null +++ b/examples/demos/documentviewer/abstractviewer.py @@ -0,0 +1,185 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +from PySide6.QtCore import QObject + +from PySide6.QtWidgets import (QDialog, QMenu) +from PySide6.QtCore import Signal, Slot +from PySide6.QtPrintSupport import QPrinter, QPrintDialog + + +MENU_NAME = "qtFileMenu" + + +class AbstractViewer(QObject): + + uiInitialized = Signal() + printingEnabledChanged = Signal(bool) + showMessage = Signal(str, int) + documentLoaded = Signal(str) + + def __init__(self): + super().__init__() + self._file = None + self._widget = None + self._menus = [] + self._toolBars = [] + self._printingEnabled = False + self._actions = [] + self._fileMenu = None + + def __del__(self): + self.cleanup() + + def viewerName(self): + return "" + + def saveState(self): + return False + + def restoreState(self, state): + return False + + def supportedMimeTypes(): + return [] + + def init(self, file, widget, mainWindow): + self._file = file + self._widget = widget + self._uiAssets_mainWindow = mainWindow + + def isEmpty(self): + return not self.hasContent() + + def isPrintingEnabled(self): + return self._printingEnabled + + def hasContent(self): + return False + + def supportsOverview(self): + return False + + def isModified(self): + return False + + def saveDocument(self): + return False + + def saveDocumentAs(self): + return False + + def actions(self): + return self._actions + + def widget(self): + return self._widget + + def menus(self): + return self._menus + + def mainWindow(self): + return self._uiAssets_mainWindow + + def statusBar(self): + return self.mainWindow().statusBar() + + def menuBar(self): + return self.mainWindow().menuBar() + + def maybeEnablePrinting(self): + self.maybeSetPrintingEnabled(True) + + def disablePrinting(self): + self.maybeSetPrintingEnabled(False) + + def isDefaultViewer(self): + return False + + def viewer(self): + return self + + def statusMessage(self, message, type="", timeout=8000): + msg = self.viewerName() + if type: + msg += "/" + type + msg += ": " + message + self.showMessage.emit(msg, timeout) + + def addToolBar(self, title): + bar = self.mainWindow().addToolBar(title) + name = title.replace(' ', '') + bar.setObjectName(name) + self._toolBars.append(bar) + return bar + + def addMenu(self, title): + menu = QMenu(title, self.menuBar()) + menu.setObjectName(title) + self.menuBar().insertMenu(self._uiAssets_help, menu) + self._menus.append(menu) + return menu + + def cleanup(self): + # delete all objects created by the viewer which need to be displayed + # and therefore parented on MainWindow + if self._file: + self._file = None + self._menus.clear() + self._toolBars.clear() + + def fileMenu(self): + if self._fileMenu: + return self._fileMenu + + menus = self.mainWindow().findChildren(QMenu) + for menu in menus: + if menu.objectName() == MENU_NAME: + self._fileMenu = menu + return self._fileMenu + self._fileMenu = self.addMenu("File") + self._fileMenu.setObjectName(MENU_NAME) + return self._fileMenu + + @Slot() + def print_(self): + type = "Printing" + if not self.hasContent(): + self.statusMessage("No content to print.", type) + return + printer = QPrinter(QPrinter.HighResolution) + dlg = QPrintDialog(printer, self.mainWindow()) + dlg.setWindowTitle("Print Document") + if dlg.exec() == QDialog.Accepted: + self.printDocument(printer) + else: + self.statusMessage("Printing canceled!", type) + return + state = printer.printerState() + message = self.viewerName() + " :" + if state == QPrinter.PrinterState.Aborted: + message += "Printing aborted." + elif state == QPrinter.PrinterState.Active: + message += "Printing active." + elif state == QPrinter.PrinterState.Idle: + message += "Printing completed." + elif state == QPrinter.PrinterState.Error: + message += "Printing error." + self.statusMessage(message, type) + + def maybeSetPrintingEnabled(self, enabled): + if enabled == self._printingEnabled: + return + self._printingEnabled = enabled + self.printingEnabledChanged.emit(enabled) + + def initViewer(self, back, forward, help, tabs): + self._uiAssets_back = back + self._uiAssets_forward = forward + self._uiAssets_help = help + self._uiAssets_tabs = tabs + # Tabs can be populated individually by the viewer, if it + # supports overview + tabs.clear() + tabs.setVisible(self.supportsOverview()) + self.uiInitialized.emit() |