eric6/WebBrowser/WebBrowserTabWidget.py

branch
without_py2_and_pyqt4
changeset 7201
6b42677d7043
parent 6999
f23e546a7eb9
child 7229
53054eb5b15a
--- a/eric6/WebBrowser/WebBrowserTabWidget.py	Sun Sep 01 19:58:00 2019 +0200
+++ b/eric6/WebBrowser/WebBrowserTabWidget.py	Mon Sep 02 18:50:38 2019 +0200
@@ -11,8 +11,7 @@
 
 import os
 
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \
-    QFileDevice, QTemporaryFile
+from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QFile, QFileDevice
 from PyQt5.QtGui import QIcon, QPixmap, QPainter
 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, \
     QDialog, QApplication
@@ -25,7 +24,6 @@
 from .WebBrowserView import WebBrowserView
 from .WebBrowserPage import WebBrowserPage
 from .Tools import WebBrowserTools
-from .Tools import FilePrinter
 from . import WebInspector
 
 import UI.PixmapCache
@@ -33,11 +31,27 @@
 import Utilities
 import Preferences
 import Globals
-from Globals import qVersionTuple
 
 from eric6config import getConfig
 
 
+def isCupsAvailable():
+    """
+    Static method to test the availability of CUPS.
+    
+    @return flag indicating the availability of CUPS
+    @rtype bool
+    """
+    if Globals.isMacPlatform():
+        # OS X/MacOS always have CUPS
+        return True
+    elif Globals.isLinuxPlatform():
+        testPrinter = QPrinter()
+        return testPrinter.supportsMultipleCopies()
+    else:
+        return False
+
+
 class WebBrowserTabWidget(E5TabWidget):
     """
     Class implementing the central widget showing the web pages.
@@ -142,8 +156,6 @@
         self.__initTabContextMenu()
         
         self.__historyCompleter = None
-        
-        self.__pdfPrinter = None
     
     def __initTabContextMenu(self):
         """
@@ -173,20 +185,15 @@
         self.__tabContextMenu.addAction(
             self.tr('Close All'), self.closeAllBrowsers)
         self.__tabContextMenu.addSeparator()
-        if qVersionTuple() >= (5, 8, 0) or (
-           not Globals.isWindowsPlatform() and qVersionTuple() < (5, 7, 0)):
-            self.__tabContextMenu.addAction(
-                UI.PixmapCache.getIcon("printPreview.png"),
-                self.tr('Print Preview'), self.__tabContextMenuPrintPreview)
-        if qVersionTuple() >= (5, 8, 0) or (
-           not Globals.isWindowsPlatform() or qVersionTuple() >= (5, 7, 0)):
-            self.__tabContextMenu.addAction(
-                UI.PixmapCache.getIcon("print.png"),
-                self.tr('Print'), self.__tabContextMenuPrint)
-        if Globals.isLinuxPlatform() or qVersionTuple() >= (5, 7, 0):
-            self.__tabContextMenu.addAction(
-                UI.PixmapCache.getIcon("printPdf.png"),
-                self.tr('Print as PDF'), self.__tabContextMenuPrintPdf)
+        self.__tabContextMenu.addAction(
+            UI.PixmapCache.getIcon("printPreview.png"),
+            self.tr('Print Preview'), self.__tabContextMenuPrintPreview)
+        self.__tabContextMenu.addAction(
+            UI.PixmapCache.getIcon("print.png"),
+            self.tr('Print'), self.__tabContextMenuPrint)
+        self.__tabContextMenu.addAction(
+            UI.PixmapCache.getIcon("printPdf.png"),
+            self.tr('Print as PDF'), self.__tabContextMenuPrintPdf)
         self.__tabContextMenu.addSeparator()
         if hasattr(WebBrowserPage, "isAudioMuted"):
             self.__audioAct = self.__tabContextMenu.addAction(
@@ -660,29 +667,11 @@
         printDialog.setOptions(QAbstractPrintDialog.PrintToFile |
                                QAbstractPrintDialog.PrintShowPageSize)
         if not Globals.isWindowsPlatform():
-            if FilePrinter.isCupsAvailable():
+            if isCupsAvailable():
                 printDialog.setOption(QAbstractPrintDialog.PrintCollateCopies)
             printDialog.setOption(QAbstractPrintDialog.PrintPageRange)
         if printDialog.exec_() == QDialog.Accepted:
-            if hasattr(browser.page(), "print"):
-                # Qt >= 5.8.0
-                browser.page().execPrintPage(printer, 10 * 1000)
-            elif hasattr(browser.page(), "printToPdf"):
-                # Qt >= 5.7.0
-                if printer.outputFormat() == QPrinter.PdfFormat:
-                    # print to PDF file selected
-                    browser.page().printToPdf(
-                        lambda pdf: self.__pdfGeneratedForSave(
-                            printer.outputFileName(), pdf),
-                        printer.pageLayout())
-                else:
-                    # print to printer
-                    self.__pdfPrinter = printer
-                    browser.page().printToPdf(
-                        self.__pdfGeneratedForPrinting,
-                        printer.pageLayout())
-            else:
-                browser.render(printer)
+            browser.page().execPrintPage(printer, 10 * 1000)
     
     @pyqtSlot()
     def printBrowserPdf(self, browser=None):
@@ -766,38 +755,6 @@
                 E5MessageBox.StandardButtons(
                     E5MessageBox.Ok))
     
-    def __pdfGeneratedForPrinting(self, pdfData):
-        """
-        Private slot to print the generated PDF data.
-        
-        @param pdfData generated PDF document
-        @type QByteArray
-        """
-        if self.__pdfPrinter is None or pdfData.isEmpty():
-            return
-        
-        tempFile = QTemporaryFile(QDir.tempPath() + "/ericBrowserXXXXXX.pdf")
-        tempFile.setAutoRemove(False)
-        if tempFile.open():
-            bytesWritten = tempFile.write(pdfData)
-            tempFile.close()
-            if bytesWritten == pdfData.size():
-                if Globals.isWindowsPlatform():
-                    printerName = self.__pdfPrinter.printerName()
-                    import ctypes
-                    ctypes.windll.shell32.ShellExecuteW(
-                        None, "printto", tempFile.fileName(),
-                        '"{0}"'.format(printerName), None, 0)
-                else:
-                    FilePrinter.printFile(
-                        self.__pdfPrinter, tempFile.fileName(),
-                        FilePrinter.FilePrinter.SystemDeletesFiles,
-                        FilePrinter.FilePrinter.SystemSelectsPages)
-            else:
-                tempFile.remove()
-        
-        self.__pdfPrinter = None
-    
     @pyqtSlot()
     def printPreviewBrowser(self, browser=None):
         """
@@ -833,11 +790,8 @@
         
         preview = QPrintPreviewDialog(printer, self)
         preview.resize(800, 750)
-        if qVersionTuple() >= (5, 8, 0):
-            preview.paintRequested.connect(
-                lambda p: self.__printPreviewRequested(p, browser))
-        else:
-            preview.paintRequested.connect(lambda p: browser.render(p))
+        preview.paintRequested.connect(
+            lambda p: self.__printPreviewRequested(p, browser))
         preview.exec_()
     
     def __printPreviewRequested(self, printer, browser):

eric ide

mercurial