12 import os |
12 import os |
13 |
13 |
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \ |
14 from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QUrl, QDir, QFile, \ |
15 QFileDevice, QTemporaryFile, qVersion |
15 QFileDevice, QTemporaryFile, qVersion |
16 from PyQt5.QtGui import QIcon, QPixmap, QPainter |
16 from PyQt5.QtGui import QIcon, QPixmap, QPainter |
17 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, QDialog |
17 from PyQt5.QtWidgets import QWidget, QHBoxLayout, QMenu, QToolButton, \ |
|
18 QDialog, QApplication |
18 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog |
19 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog, QAbstractPrintDialog |
19 |
20 |
20 from E5Gui.E5TabWidget import E5TabWidget |
21 from E5Gui.E5TabWidget import E5TabWidget |
21 from E5Gui import E5MessageBox |
22 from E5Gui import E5MessageBox |
22 from E5Gui.E5Application import e5App |
23 from E5Gui.E5Application import e5App |
181 UI.PixmapCache.getIcon("tabCloseOther.png"), |
182 UI.PixmapCache.getIcon("tabCloseOther.png"), |
182 self.tr("Close Others"), self.__tabContextMenuCloseOthers) |
183 self.tr("Close Others"), self.__tabContextMenuCloseOthers) |
183 self.__tabContextMenu.addAction( |
184 self.__tabContextMenu.addAction( |
184 self.tr('Close All'), self.closeAllBrowsers) |
185 self.tr('Close All'), self.closeAllBrowsers) |
185 self.__tabContextMenu.addSeparator() |
186 self.__tabContextMenu.addSeparator() |
186 if not Globals.isWindowsPlatform() and qVersion() < "5.7.0": |
187 if qVersion() >= "5.8.0" or ( |
|
188 not Globals.isWindowsPlatform() and qVersion() < "5.7.0"): |
187 self.__tabContextMenu.addAction( |
189 self.__tabContextMenu.addAction( |
188 UI.PixmapCache.getIcon("printPreview.png"), |
190 UI.PixmapCache.getIcon("printPreview.png"), |
189 self.tr('Print Preview'), self.__tabContextMenuPrintPreview) |
191 self.tr('Print Preview'), self.__tabContextMenuPrintPreview) |
190 if not Globals.isWindowsPlatform() or qVersion() >= "5.7.0": |
192 if qVersion() >= "5.8.0" or ( |
|
193 not Globals.isWindowsPlatform() or qVersion() >= "5.7.0"): |
191 self.__tabContextMenu.addAction( |
194 self.__tabContextMenu.addAction( |
192 UI.PixmapCache.getIcon("print.png"), |
195 UI.PixmapCache.getIcon("print.png"), |
193 self.tr('Print'), self.__tabContextMenuPrint) |
196 self.tr('Print'), self.__tabContextMenuPrint) |
194 if Globals.isLinuxPlatform() or qVersion() >= "5.7.0": |
197 if Globals.isLinuxPlatform() or qVersion() >= "5.7.0": |
195 self.__tabContextMenu.addAction( |
198 self.__tabContextMenu.addAction( |
637 if not Globals.isWindowsPlatform(): |
640 if not Globals.isWindowsPlatform(): |
638 if FilePrinter.isCupsAvailable(): |
641 if FilePrinter.isCupsAvailable(): |
639 printDialog.setOption(QAbstractPrintDialog.PrintCollateCopies) |
642 printDialog.setOption(QAbstractPrintDialog.PrintCollateCopies) |
640 printDialog.setOption(QAbstractPrintDialog.PrintPageRange) |
643 printDialog.setOption(QAbstractPrintDialog.PrintPageRange) |
641 if printDialog.exec_() == QDialog.Accepted: |
644 if printDialog.exec_() == QDialog.Accepted: |
642 # TODO: enable this once it works correctly in Qt |
645 if hasattr(browser.page(), "print"): |
643 ## if hasattr(browser.page(), "print"): |
646 # Qt >= 5.8.0 |
644 ## # Qt >= 5.8.0 |
647 browser.page().execPrintPage(printer) |
645 ## browser.page().printPage(printer) |
648 elif hasattr(browser.page(), "printToPdf"): |
646 ## elif hasattr(browser.page(), "printToPdf"): |
|
647 if hasattr(browser.page(), "printToPdf"): |
|
648 # Qt >= 5.7.0 |
649 # Qt >= 5.7.0 |
649 if printer.outputFormat() == QPrinter.PdfFormat: |
650 if printer.outputFormat() == QPrinter.PdfFormat: |
650 # print to PDF file selected |
651 # print to PDF file selected |
651 browser.page().printToPdf( |
652 browser.page().printToPdf( |
652 lambda pdf: self.__pdfGeneratedForSave( |
653 lambda pdf: self.__pdfGeneratedForSave( |
656 # print to printer |
657 # print to printer |
657 self.__pdfPrinter = printer |
658 self.__pdfPrinter = printer |
658 browser.page().printToPdf( |
659 browser.page().printToPdf( |
659 self.__pdfGeneratedForPrinting, |
660 self.__pdfGeneratedForPrinting, |
660 printer.pageLayout()) |
661 printer.pageLayout()) |
661 else: |
662 else: |
662 browser.render(printer) |
663 browser.render(printer) |
663 |
664 |
664 @pyqtSlot() |
665 @pyqtSlot() |
665 def printBrowserPdf(self, browser=None): |
666 def printBrowserPdf(self, browser=None): |
666 """ |
667 """ |
667 Public slot called to print the displayed page to PDF. |
668 Public slot called to print the displayed page to PDF. |
778 @pyqtSlot() |
779 @pyqtSlot() |
779 def printPreviewBrowser(self, browser=None): |
780 def printPreviewBrowser(self, browser=None): |
780 """ |
781 """ |
781 Public slot called to show a print preview of the displayed file. |
782 Public slot called to show a print preview of the displayed file. |
782 |
783 |
783 @param browser reference to the browser to be printed (HelpBrowserWV) |
784 @param browser reference to the browser to be printed (WebBrowserView) |
784 """ |
785 """ |
785 from PyQt5.QtPrintSupport import QPrintPreviewDialog |
786 from PyQt5.QtPrintSupport import QPrintPreviewDialog |
786 |
787 |
787 if browser is None: |
788 if browser is None: |
788 browser = self.currentBrowser() |
789 browser = self.currentBrowser() |
807 if printerName: |
808 if printerName: |
808 printer.setPrinterName(printerName) |
809 printer.setPrinterName(printerName) |
809 printer.setResolution(Preferences.getPrinter("Resolution")) |
810 printer.setResolution(Preferences.getPrinter("Resolution")) |
810 |
811 |
811 preview = QPrintPreviewDialog(printer, self) |
812 preview = QPrintPreviewDialog(printer, self) |
812 preview.paintRequested.connect(lambda p: browser.render(p)) |
813 preview.resize(800, 750) |
|
814 if qVersion() >= "5.8.0": |
|
815 preview.paintRequested.connect( |
|
816 lambda p: self.__printPreviewRequested(p, browser)) |
|
817 else: |
|
818 preview.paintRequested.connect(lambda p: browser.render(p)) |
813 preview.exec_() |
819 preview.exec_() |
|
820 |
|
821 def __printPreviewRequested(self, printer, browser): |
|
822 """ |
|
823 Private slot to generate the print preview. |
|
824 |
|
825 @param printer reference to the printer object |
|
826 @type QPrinter |
|
827 @param browser reference to the browser to be printed |
|
828 @type WebBrowserView |
|
829 """ |
|
830 QApplication.setOverrideCursor(Qt.WaitCursor); |
|
831 browser.page().execPrintPage(printer, 10 * 1000) |
|
832 QApplication.restoreOverrideCursor(); |
814 |
833 |
815 def __sourceChanged(self, url): |
834 def __sourceChanged(self, url): |
816 """ |
835 """ |
817 Private slot to handle a change of a browsers source. |
836 Private slot to handle a change of a browsers source. |
818 |
837 |