--- 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.