--- a/src/eric7/WebBrowser/WebBrowserTabWidget.py Thu Oct 12 17:03:41 2023 +0200 +++ b/src/eric7/WebBrowser/WebBrowserTabWidget.py Thu Oct 12 17:05:08 2023 +0200 @@ -7,53 +7,26 @@ Module implementing the central widget showing the web pages. """ -import os - -from PyQt6.QtCore import QMarginsF, Qt, QUrl, pyqtSignal, pyqtSlot -from PyQt6.QtGui import QIcon, QPageLayout, QPainter, QPixmap -from PyQt6.QtPrintSupport import ( - QAbstractPrintDialog, - QPrintDialog, - QPrinter, - QPrintPreviewDialog, -) -from PyQt6.QtWidgets import QDialog, QHBoxLayout, QMenu, QToolButton, QWidget +from PyQt6.QtCore import Qt, QUrl, pyqtSignal, pyqtSlot +from PyQt6.QtGui import QIcon, QPainter, QPixmap +from PyQt6.QtWidgets import QHBoxLayout, QMenu, QToolButton, QWidget from eric7 import Preferences from eric7.EricGui import EricPixmapCache -from eric7.EricGui.EricOverrideCursor import EricOverrideCursor from eric7.EricWidgets import EricMessageBox from eric7.EricWidgets.EricApplication import ericApp from eric7.EricWidgets.EricTabWidget import EricTabWidget -from eric7.SystemUtilities import FileSystemUtilities, OSUtilities +from eric7.SystemUtilities import FileSystemUtilities from eric7.WebBrowser.WebBrowserWindow import WebBrowserWindow from . import WebInspector from .ClosedTabsManager import ClosedTabsManager -from .Tools import WebBrowserTools from .UrlBar.StackedUrlBar import StackedUrlBar from .WebBrowserPage import WebBrowserPage from .WebBrowserTabBar import WebBrowserTabBar from .WebBrowserView import WebBrowserView -def isCupsAvailable(): - """ - Static method to test the availability of CUPS. - - @return flag indicating the availability of CUPS - @rtype bool - """ - if OSUtilities.isMacPlatform(): - # OS X/MacOS always have CUPS - return True - elif OSUtilities.isLinuxPlatform(): - testPrinter = QPrinter() - return testPrinter.supportsMultipleCopies() - else: - return False - - class WebBrowserTabWidget(EricTabWidget): """ Class implementing the central widget showing the web pages. @@ -650,44 +623,8 @@ if browser is None: browser = self.currentBrowser() - printer = QPrinter(mode=QPrinter.PrinterMode.HighResolution) - if Preferences.getPrinter("ColorMode"): - printer.setColorMode(QPrinter.ColorMode.Color) - else: - printer.setColorMode(QPrinter.ColorMode.GrayScale) - if Preferences.getPrinter("FirstPageFirst"): - printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst) - else: - printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) - printer.setPageMargins( - QMarginsF( - Preferences.getPrinter("LeftMargin") * 10, - Preferences.getPrinter("TopMargin") * 10, - Preferences.getPrinter("RightMargin") * 10, - Preferences.getPrinter("BottomMargin") * 10, - ), - QPageLayout.Unit.Millimeter, - ) - printerName = Preferences.getPrinter("PrinterName") - if printerName: - printer.setPrinterName(printerName) - printer.setResolution(Preferences.getPrinter("Resolution")) - documentName = WebBrowserTools.getFileNameFromUrl(browser.url()) - printer.setDocName(documentName) - - printDialog = QPrintDialog(printer, self) - printDialog.setOptions( - QAbstractPrintDialog.PrintDialogOption.PrintToFile - | QAbstractPrintDialog.PrintDialogOption.PrintShowPageSize - ) - if not OSUtilities.isWindowsPlatform(): - if isCupsAvailable(): - printDialog.setOption( - QAbstractPrintDialog.PrintDialogOption.PrintCollateCopies - ) - printDialog.setOption(QAbstractPrintDialog.PrintDialogOption.PrintPageRange) - if printDialog.exec() == QDialog.DialogCode.Accepted: - browser.page().execPrintPage(printer, 10 * 1000) + if browser is not None: + browser.printPage() @pyqtSlot() def printBrowserPdf(self, browser=None): @@ -696,83 +633,11 @@ @param browser reference to the browser to be printed (HelpBrowser) """ - from .Tools.PrintToPdfDialog import PrintToPdfDialog - if browser is None: browser = self.currentBrowser() - name = WebBrowserTools.getFileNameFromUrl(browser.url()) - if name: - name = name.rsplit(".", 1)[0] - name += ".pdf" - if hasattr(browser.page(), "printToPdf"): - if not name: - name = "printout.pdf" - dlg = PrintToPdfDialog(name, self) - if dlg.exec() == QDialog.DialogCode.Accepted: - filePath, pageLayout = dlg.getData() - if filePath: - if os.path.exists(filePath): - res = EricMessageBox.warning( - self, - self.tr("Print to PDF"), - self.tr( - """<p>The file <b>{0}</b> exists""" - """ already. Shall it be""" - """ overwritten?</p>""" - ).format(filePath), - EricMessageBox.No | EricMessageBox.Yes, - EricMessageBox.No, - ) - if res == EricMessageBox.No: - return - browser.page().printToPdf( - lambda pdf: self.__pdfGeneratedForSave(filePath, pdf), - pageLayout, - ) - elif OSUtilities.isLinuxPlatform(): - printer = QPrinter(mode=QPrinter.PrinterMode.HighResolution) - if Preferences.getPrinter("ColorMode"): - printer.setColorMode(QPrinter.ColorMode.Color) - else: - printer.setColorMode(QPrinter.ColorMode.GrayScale) - printerName = Preferences.getPrinter("PrinterName") - if printerName: - printer.setPrinterName(printerName) - printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat) - if name: - printer.setOutputFileName(name) - printer.setResolution(Preferences.getPrinter("Resolution")) - - printDialog = QPrintDialog(printer, self) - if printDialog.exec() == QDialog.DialogCode.Accepted: - browser.render(printer) - - def __pdfGeneratedForSave(self, filePath, pdfData): - """ - Private slot to save the generated PDF data to a file. - - @param filePath path to save the PDF to - @type str - @param pdfData generated PDF document - @type QByteArray - """ - if pdfData.size() == 0: - return - - try: - with open(filePath, "wb") as f: - f.write(pdfData) - except OSError as err: - EricMessageBox.critical( - self, - self.tr("Print to PDF"), - self.tr( - """<p>The PDF could not be written to file <b>{0}""" - """</b>.</p><p><b>Error:</b> {1}</p>""" - ).format(filePath, str(err)), - EricMessageBox.Ok, - ) + if browser is not None: + browser.printPageToPdf() @pyqtSlot() def printPreviewBrowser(self, browser=None): @@ -784,47 +649,8 @@ if browser is None: browser = self.currentBrowser() - printer = QPrinter(mode=QPrinter.PrinterMode.HighResolution) - if Preferences.getPrinter("ColorMode"): - printer.setColorMode(QPrinter.ColorMode.Color) - else: - printer.setColorMode(QPrinter.ColorMode.GrayScale) - if Preferences.getPrinter("FirstPageFirst"): - printer.setPageOrder(QPrinter.PageOrder.FirstPageFirst) - else: - printer.setPageOrder(QPrinter.PageOrder.LastPageFirst) - printer.setPageMargins( - QMarginsF( - Preferences.getPrinter("LeftMargin") * 10, - Preferences.getPrinter("TopMargin") * 10, - Preferences.getPrinter("RightMargin") * 10, - Preferences.getPrinter("BottomMargin") * 10, - ), - QPageLayout.Unit.Millimeter, - ) - printerName = Preferences.getPrinter("PrinterName") - if printerName: - printer.setPrinterName(printerName) - printer.setResolution(Preferences.getPrinter("Resolution")) - - preview = QPrintPreviewDialog(printer, self) - preview.resize(800, 750) - preview.paintRequested.connect( - lambda p: self.__printPreviewRequested(p, browser) - ) - preview.exec() - - def __printPreviewRequested(self, printer, browser): - """ - Private slot to generate the print preview. - - @param printer reference to the printer object - @type QPrinter - @param browser reference to the browser to be printed - @type WebBrowserView - """ - with EricOverrideCursor(): - browser.page().execPrintPage(printer, 10 * 1000) + if browser is not None: + browser.printPreviewPage() def __sourceChanged(self, url, browser): """