WebBrowser/WebBrowserTabWidget.py

changeset 5534
f9368ecf153a
parent 5530
93f95c4b3153
child 5542
520713d0a381
--- a/WebBrowser/WebBrowserTabWidget.py	Sun Feb 19 19:57:28 2017 +0100
+++ b/WebBrowser/WebBrowserTabWidget.py	Mon Feb 20 19:27:37 2017 +0100
@@ -14,7 +14,8 @@
 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \
     QFileDevice, QTemporaryFile, qVersion
 from PyQt5.QtGui import QIcon, QPixmap, QPainter
-from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog
+from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, \
+    QDialog, QApplication
 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog
 
 from E5Gui.E5TabWidget import E5TabWidget
@@ -183,11 +184,13 @@
         self.__tabContextMenu.addAction(
             self.tr('Close All'), self.closeAllBrowsers)
         self.__tabContextMenu.addSeparator()
-        if not Globals.isWindowsPlatform() and qVersion() < "5.7.0":
+        if qVersion() >= "5.8.0" or (
+                not Globals.isWindowsPlatform() and qVersion() < "5.7.0"):
             self.__tabContextMenu.addAction(
                 UI.PixmapCache.getIcon("printPreview.png"),
                 self.tr('Print Preview'), self.__tabContextMenuPrintPreview)
-        if not Globals.isWindowsPlatform() or qVersion() >= "5.7.0":
+        if qVersion() >= "5.8.0" or (
+                not Globals.isWindowsPlatform() or qVersion() >= "5.7.0"):
             self.__tabContextMenu.addAction(
                 UI.PixmapCache.getIcon("print.png"),
                 self.tr('Print'), self.__tabContextMenuPrint)
@@ -639,12 +642,10 @@
                 printDialog.setOption(QAbstractPrintDialog.PrintCollateCopies)
             printDialog.setOption(QAbstractPrintDialog.PrintPageRange)
         if printDialog.exec_() == QDialog.Accepted:
-            # TODO: enable this once it works correctly in Qt
-##            if hasattr(browser.page(), "print"):
-##                # Qt >= 5.8.0
-##                browser.page().printPage(printer)
-##            elif hasattr(browser.page(), "printToPdf"):
-            if hasattr(browser.page(), "printToPdf"):
+            if hasattr(browser.page(), "print"):
+                # Qt >= 5.8.0
+                browser.page().execPrintPage(printer)
+            elif hasattr(browser.page(), "printToPdf"):
                 # Qt >= 5.7.0
                 if printer.outputFormat() == QPrinter.PdfFormat:
                     # print to PDF file selected
@@ -658,8 +659,8 @@
                     browser.page().printToPdf(
                         self.__pdfGeneratedForPrinting,
                         printer.pageLayout())
-        else:
-            browser.render(printer)
+            else:
+                browser.render(printer)
     
     @pyqtSlot()
     def printBrowserPdf(self, browser=None):
@@ -780,7 +781,7 @@
         """
         Public slot called to show a print preview of the displayed file.
         
-        @param browser reference to the browser to be printed (HelpBrowserWV)
+        @param browser reference to the browser to be printed (WebBrowserView)
         """
         from PyQt5.QtPrintSupport import QPrintPreviewDialog
         
@@ -809,9 +810,27 @@
         printer.setResolution(Preferences.getPrinter("Resolution"))
         
         preview = QPrintPreviewDialog(printer, self)
-        preview.paintRequested.connect(lambda p: browser.render(p))
+        preview.resize(800, 750)
+        if qVersion() >= "5.8.0":
+            preview.paintRequested.connect(
+                lambda p: self.__printPreviewRequested(p, browser))
+        else:
+            preview.paintRequested.connect(lambda p: browser.render(p))
         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
+        """
+        QApplication.setOverrideCursor(Qt.WaitCursor);
+        browser.page().execPrintPage(printer, 10 * 1000)
+        QApplication.restoreOverrideCursor();
+    
     def __sourceChanged(self, url):
         """
         Private slot to handle a change of a browsers source.

eric ide

mercurial