eric6/QScintilla/Printer.py

changeset 6942
2602857055c5
parent 6852
273323ba9d2d
child 7229
53054eb5b15a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/QScintilla/Printer.py	Sun Apr 14 15:09:21 2019 +0200
@@ -0,0 +1,78 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2006 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the printer functionality.
+"""
+
+from __future__ import unicode_literals
+
+from PyQt5.QtCore import QTime, QDate, Qt, QCoreApplication
+from PyQt5.QtGui import QColor
+from PyQt5.QtPrintSupport import QPrinter
+from PyQt5.Qsci import QsciPrinter
+
+import Preferences
+
+
+class Printer(QsciPrinter):
+    """
+    Class implementing the QsciPrinter with a header.
+    """
+    def __init__(self, mode=QPrinter.ScreenResolution):
+        """
+        Constructor
+        
+        @param mode mode of the printer (QPrinter.PrinterMode)
+        """
+        super(Printer, self).__init__(mode)
+        
+        self.setMagnification(Preferences.getPrinter("Magnification"))
+        if Preferences.getPrinter("ColorMode"):
+            self.setColorMode(QPrinter.Color)
+        else:
+            self.setColorMode(QPrinter.GrayScale)
+        if Preferences.getPrinter("FirstPageFirst"):
+            self.setPageOrder(QPrinter.FirstPageFirst)
+        else:
+            self.setPageOrder(QPrinter.LastPageFirst)
+        self.setPageMargins(
+            Preferences.getPrinter("LeftMargin") * 10,
+            Preferences.getPrinter("TopMargin") * 10,
+            Preferences.getPrinter("RightMargin") * 10,
+            Preferences.getPrinter("BottomMargin") * 10,
+            QPrinter.Millimeter
+        )
+        printerName = Preferences.getPrinter("PrinterName")
+        if printerName:
+            self.setPrinterName(printerName)
+        self.time = QTime.currentTime().toString(Qt.LocalDate)
+        self.date = QDate.currentDate().toString(Qt.LocalDate)
+        self.headerFont = Preferences.getPrinter("HeaderFont")
+        
+    def formatPage(self, painter, drawing, area, pagenr):
+        """
+        Public method to generate a header line.
+        
+        @param painter the paint canvas (QPainter)
+        @param drawing flag indicating that something should be drawn
+        @param area the drawing area (QRect)
+        @param pagenr the page number (int)
+        """
+        fn = self.docName()
+        
+        header = QCoreApplication.translate(
+            'Printer', '{0} - Printed on {1}, {2} - Page {3}')\
+            .format(fn, self.date, self.time, pagenr)
+        
+        painter.save()
+        painter.setFont(self.headerFont)    # set our header font
+        painter.setPen(QColor(Qt.black))            # set color
+        if drawing:
+            painter.drawText(
+                area.right() - painter.fontMetrics().width(header),
+                area.top() + painter.fontMetrics().ascent(), header)
+        area.setTop(area.top() + painter.fontMetrics().height() + 5)
+        painter.restore()

eric ide

mercurial