diff options
Diffstat (limited to 'src/gui/painting/qprinter.cpp')
-rw-r--r-- | src/gui/painting/qprinter.cpp | 2453 |
1 files changed, 0 insertions, 2453 deletions
diff --git a/src/gui/painting/qprinter.cpp b/src/gui/painting/qprinter.cpp deleted file mode 100644 index 74a8f6a9d8..0000000000 --- a/src/gui/painting/qprinter.cpp +++ /dev/null @@ -1,2453 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qprinter_p.h" -#include "qprinter.h" -#include "qprintengine.h" -#include "qprinterinfo.h" -#include "qlist.h" -#include <qpagesetupdialog.h> -#include <qapplication.h> -#include <qfileinfo.h> -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) -#include "private/qcups_p.h" -#endif - -#ifndef QT_NO_PRINTER - -#if defined (Q_WS_WIN) -#include <private/qprintengine_win_p.h> -#elif defined (Q_WS_MAC) -#include <private/qprintengine_mac_p.h> -#elif defined (QTOPIA_PRINTENGINE) -#include <private/qprintengine_qws_p.h> -#endif -#include <private/qprintengine_ps_p.h> - -#if defined(Q_WS_X11) -#include <private/qt_x11_p.h> -#endif - -#ifndef QT_NO_PDF -#include "qprintengine_pdf_p.h" -#endif - -#include <qpicture.h> -#include <private/qpaintengine_preview_p.h> - -#if defined(QT3_SUPPORT) -# include "qprintdialog.h" -#endif // QT3_SUPPORT - -QT_BEGIN_NAMESPACE - -#define ABORT_IF_ACTIVE(location) \ - if (d->printEngine->printerState() == QPrinter::Active) { \ - qWarning("%s: Cannot be changed while printer is active", location); \ - return; \ - } - -// NB! This table needs to be in sync with QPrinter::PaperSize -static const float qt_paperSizes[][2] = { - {210, 297}, // A4 - {176, 250}, // B5 - {215.9f, 279.4f}, // Letter - {215.9f, 355.6f}, // Legal - {190.5f, 254}, // Executive - {841, 1189}, // A0 - {594, 841}, // A1 - {420, 594}, // A2 - {297, 420}, // A3 - {148, 210}, // A5 - {105, 148}, // A6 - {74, 105}, // A7 - {52, 74}, // A8 - {37, 52}, // A8 - {1000, 1414}, // B0 - {707, 1000}, // B1 - {31, 44}, // B10 - {500, 707}, // B2 - {353, 500}, // B3 - {250, 353}, // B4 - {125, 176}, // B6 - {88, 125}, // B7 - {62, 88}, // B8 - {33, 62}, // B9 - {163, 229}, // C5E - {105, 241}, // US Common - {110, 220}, // DLE - {210, 330}, // Folio - {431.8f, 279.4f}, // Ledger - {279.4f, 431.8f} // Tabloid -}; - -/// return the multiplier of converting from the unit value to postscript-points. -double qt_multiplierForUnit(QPrinter::Unit unit, int resolution) -{ - switch(unit) { - case QPrinter::Millimeter: - return 2.83464566929; - case QPrinter::Point: - return 1.0; - case QPrinter::Inch: - return 72.0; - case QPrinter::Pica: - return 12; - case QPrinter::Didot: - return 1.065826771; - case QPrinter::Cicero: - return 12.789921252; - case QPrinter::DevicePixel: - return 72.0/resolution; - } - return 1.0; -} - -// not static: it's needed in qpagesetupdialog_unix.cpp -QSizeF qt_printerPaperSize(QPrinter::Orientation orientation, - QPrinter::PaperSize paperSize, - QPrinter::Unit unit, - int resolution) -{ - int width_index = 0; - int height_index = 1; - if (orientation == QPrinter::Landscape) { - width_index = 1; - height_index = 0; - } - const qreal multiplier = qt_multiplierForUnit(unit, resolution); - return QSizeF((qt_paperSizes[paperSize][width_index] * 72 / 25.4) / multiplier, - (qt_paperSizes[paperSize][height_index] * 72 / 25.4) / multiplier); -} - -void QPrinterPrivate::createDefaultEngines() -{ - QPrinter::OutputFormat realOutputFormat = outputFormat; -#if !defined (QTOPIA_PRINTENGINE) -#if defined (Q_OS_UNIX) && ! defined (Q_WS_MAC) - if(outputFormat == QPrinter::NativeFormat) { - realOutputFormat = QPrinter::PostScriptFormat; - } -#endif -#endif - - switch (realOutputFormat) { - case QPrinter::NativeFormat: { -#if defined (Q_WS_WIN) - QWin32PrintEngine *winEngine = new QWin32PrintEngine(printerMode); - paintEngine = winEngine; - printEngine = winEngine; -#elif defined (Q_WS_MAC) - QMacPrintEngine *macEngine = new QMacPrintEngine(printerMode); - paintEngine = macEngine; - printEngine = macEngine; -#elif defined (QTOPIA_PRINTENGINE) - QtopiaPrintEngine *qwsEngine = new QtopiaPrintEngine(printerMode); - paintEngine = qwsEngine; - printEngine = qwsEngine; -#elif defined (Q_OS_UNIX) - Q_ASSERT(false); -#endif - } - break; - case QPrinter::PdfFormat: { - QPdfEngine *pdfEngine = new QPdfEngine(printerMode); - paintEngine = pdfEngine; - printEngine = pdfEngine; - } - break; - case QPrinter::PostScriptFormat: { - QPSPrintEngine *psEngine = new QPSPrintEngine(printerMode); - paintEngine = psEngine; - printEngine = psEngine; - } - break; - } - use_default_engine = true; - had_default_engines = true; -} - -#ifndef QT_NO_PRINTPREVIEWWIDGET -QList<const QPicture *> QPrinterPrivate::previewPages() const -{ - if (previewEngine) - return previewEngine->pages(); - return QList<const QPicture *>(); -} - -void QPrinterPrivate::setPreviewMode(bool enable) -{ - Q_Q(QPrinter); - if (enable) { - if (!previewEngine) - previewEngine = new QPreviewPaintEngine; - had_default_engines = use_default_engine; - use_default_engine = false; - realPrintEngine = printEngine; - realPaintEngine = paintEngine; - q->setEngines(previewEngine, previewEngine); - previewEngine->setProxyEngines(realPrintEngine, realPaintEngine); - } else { - q->setEngines(realPrintEngine, realPaintEngine); - use_default_engine = had_default_engines; - } -} -#endif // QT_NO_PRINTPREVIEWWIDGET - -void QPrinterPrivate::addToManualSetList(QPrintEngine::PrintEnginePropertyKey key) -{ - for (int c = 0; c < manualSetList.size(); ++c) { - if (manualSetList[c] == key) return; - } - manualSetList.append(key); -} - - -/*! - \class QPrinter - \reentrant - - \brief The QPrinter class is a paint device that paints on a printer. - - \ingroup printing - - - This device represents a series of pages of printed output, and is - used in almost exactly the same way as other paint devices such as - QWidget and QPixmap. - A set of additional functions are provided to manage device-specific - features, such as orientation and resolution, and to step through - the pages in a document as it is generated. - - When printing directly to a printer on Windows or Mac OS X, QPrinter uses - the built-in printer drivers. On X11, QPrinter uses the - \l{Common Unix Printing System (CUPS)} or the standard Unix \l lpr utility - to send PostScript or PDF output to the printer. As an alternative, - the printProgram() function can be used to specify the command or utility - to use instead of the system default. - - Note that setting parameters like paper size and resolution on an - invalid printer is undefined. You can use QPrinter::isValid() to - verify this before changing any parameters. - - QPrinter supports a number of parameters, most of which can be - changed by the end user through a \l{QPrintDialog}{print dialog}. In - general, QPrinter passes these functions onto the underlying QPrintEngine. - - The most important parameters are: - \list - \i setOrientation() tells QPrinter which page orientation to use. - \i setPaperSize() tells QPrinter what paper size to expect from the - printer. - \i setResolution() tells QPrinter what resolution you wish the - printer to provide, in dots per inch (DPI). - \i setFullPage() tells QPrinter whether you want to deal with the - full page or just with the part the printer can draw on. - \i setCopyCount() tells QPrinter how many copies of the document - it should print. - \endlist - - Many of these functions can only be called before the actual printing - begins (i.e., before QPainter::begin() is called). This usually makes - sense because, for example, it's not possible to change the number of - copies when you are halfway through printing. There are also some - settings that the user sets (through the printer dialog) and that - applications are expected to obey. See QAbstractPrintDialog's - documentation for more details. - - When QPainter::begin() is called, the QPrinter it operates on is prepared for - a new page, enabling the QPainter to be used immediately to paint the first - page in a document. Once the first page has been painted, newPage() can be - called to request a new blank page to paint on, or QPainter::end() can be - called to finish printing. The second page and all following pages are - prepared using a call to newPage() before they are painted. - - The first page in a document does not need to be preceded by a call to - newPage(). You only need to calling newPage() after QPainter::begin() if you - need to insert a blank page at the beginning of a printed document. - Similarly, calling newPage() after the last page in a document is painted will - result in a trailing blank page appended to the end of the printed document. - - If you want to abort the print job, abort() will try its best to - stop printing. It may cancel the entire job or just part of it. - - Since QPrinter can print to any QPrintEngine subclass, it is possible to - extend printing support to cover new types of printing subsystem by - subclassing QPrintEngine and reimplementing its interface. - - \sa QPrintDialog, {Printing with Qt} -*/ - -/*! - \enum QPrinter::PrinterState - - \value Idle - \value Active - \value Aborted - \value Error -*/ - -/*! - \enum QPrinter::PrinterMode - - This enum describes the mode the printer should work in. It - basically presets a certain resolution and working mode. - - \value ScreenResolution Sets the resolution of the print device to - the screen resolution. This has the big advantage that the results - obtained when painting on the printer will match more or less - exactly the visible output on the screen. It is the easiest to - use, as font metrics on the screen and on the printer are the - same. This is the default value. ScreenResolution will produce a - lower quality output than HighResolution and should only be used - for drafts. - - \value PrinterResolution This value is deprecated. Is is - equivalent to ScreenResolution on Unix and HighResolution on - Windows and Mac. Due do the difference between ScreenResolution - and HighResolution, use of this value may lead to non-portable - printer code. - - \value HighResolution On Windows, sets the printer resolution to that - defined for the printer in use. For PostScript printing, sets the - resolution of the PostScript driver to 1200 dpi. - - \note When rendering text on a QPrinter device, it is important - to realize that the size of text, when specified in points, is - independent of the resolution specified for the device itself. - Therefore, it may be useful to specify the font size in pixels - when combining text with graphics to ensure that their relative - sizes are what you expect. -*/ - -/*! - \enum QPrinter::Orientation - - This enum type (not to be confused with \c Orientation) is used - to specify each page's orientation. - - \value Portrait the page's height is greater than its width. - - \value Landscape the page's width is greater than its height. - - This type interacts with \l QPrinter::PaperSize and - QPrinter::setFullPage() to determine the final size of the page - available to the application. -*/ - - -/*! - \enum QPrinter::PrintRange - - Used to specify the print range selection option. - - \value AllPages All pages should be printed. - \value Selection Only the selection should be printed. - \value PageRange The specified page range should be printed. - \value CurrentPage Only the current page should be printed. - - \sa QAbstractPrintDialog::PrintRange -*/ - -/*! - \enum QPrinter::PrinterOption - \compat - - Use QAbstractPrintDialog::PrintDialogOption instead. - - \value PrintToFile - \value PrintSelection - \value PrintPageRange -*/ - -/*! - \enum QPrinter::PageSize - - \obsolete - Use QPrinter::PaperSize instead. - - \value A0 841 x 1189 mm - \value A1 594 x 841 mm - \value A2 420 x 594 mm - \value A3 297 x 420 mm - \value A4 210 x 297 mm, 8.26 x 11.69 inches - \value A5 148 x 210 mm - \value A6 105 x 148 mm - \value A7 74 x 105 mm - \value A8 52 x 74 mm - \value A9 37 x 52 mm - \value B0 1030 x 1456 mm - \value B1 728 x 1030 mm - \value B10 32 x 45 mm - \value B2 515 x 728 mm - \value B3 364 x 515 mm - \value B4 257 x 364 mm - \value B5 182 x 257 mm, 7.17 x 10.13 inches - \value B6 128 x 182 mm - \value B7 91 x 128 mm - \value B8 64 x 91 mm - \value B9 45 x 64 mm - \value C5E 163 x 229 mm - \value Comm10E 105 x 241 mm, U.S. Common 10 Envelope - \value DLE 110 x 220 mm - \value Executive 7.5 x 10 inches, 191 x 254 mm - \value Folio 210 x 330 mm - \value Ledger 432 x 279 mm - \value Legal 8.5 x 14 inches, 216 x 356 mm - \value Letter 8.5 x 11 inches, 216 x 279 mm - \value Tabloid 279 x 432 mm - \value Custom Unknown, or a user defined size. - - \omitvalue NPageSize - */ - -/*! - \enum QPrinter::PaperSize - \since 4.4 - - This enum type specifies what paper size QPrinter should use. - QPrinter does not check that the paper size is available; it just - uses this information, together with QPrinter::Orientation and - QPrinter::setFullPage(), to determine the printable area. - - The defined sizes (with setFullPage(true)) are: - - \value A0 841 x 1189 mm - \value A1 594 x 841 mm - \value A2 420 x 594 mm - \value A3 297 x 420 mm - \value A4 210 x 297 mm, 8.26 x 11.69 inches - \value A5 148 x 210 mm - \value A6 105 x 148 mm - \value A7 74 x 105 mm - \value A8 52 x 74 mm - \value A9 37 x 52 mm - \value B0 1000 x 1414 mm - \value B1 707 x 1000 mm - \value B2 500 x 707 mm - \value B3 353 x 500 mm - \value B4 250 x 353 mm - \value B5 176 x 250 mm, 6.93 x 9.84 inches - \value B6 125 x 176 mm - \value B7 88 x 125 mm - \value B8 62 x 88 mm - \value B9 33 x 62 mm - \value B10 31 x 44 mm - \value C5E 163 x 229 mm - \value Comm10E 105 x 241 mm, U.S. Common 10 Envelope - \value DLE 110 x 220 mm - \value Executive 7.5 x 10 inches, 190.5 x 254 mm - \value Folio 210 x 330 mm - \value Ledger 431.8 x 279.4 mm - \value Legal 8.5 x 14 inches, 215.9 x 355.6 mm - \value Letter 8.5 x 11 inches, 215.9 x 279.4 mm - \value Tabloid 279.4 x 431.8 mm - \value Custom Unknown, or a user defined size. - - With setFullPage(false) (the default), the metrics will be a bit - smaller; how much depends on the printer in use. - - \omitvalue NPageSize - \omitvalue NPaperSize -*/ - - -/*! - \enum QPrinter::PageOrder - - This enum type is used by QPrinter to tell the application program - how to print. - - \value FirstPageFirst the lowest-numbered page should be printed - first. - - \value LastPageFirst the highest-numbered page should be printed - first. -*/ - -/*! - \enum QPrinter::ColorMode - - This enum type is used to indicate whether QPrinter should print - in color or not. - - \value Color print in color if available, otherwise in grayscale. - - \value GrayScale print in grayscale, even on color printers. -*/ - -/*! - \enum QPrinter::PaperSource - - This enum type specifies what paper source QPrinter is to use. - QPrinter does not check that the paper source is available; it - just uses this information to try and set the paper source. - Whether it will set the paper source depends on whether the - printer has that particular source. - - \warning This is currently only implemented for Windows. - - \value Auto - \value Cassette - \value Envelope - \value EnvelopeManual - \value FormSource - \value LargeCapacity - \value LargeFormat - \value Lower - \value MaxPageSource - \value Middle - \value Manual - \value OnlyOne - \value Tractor - \value SmallFormat -*/ - -/*! - \enum QPrinter::Unit - \since 4.4 - - This enum type is used to specify the measurement unit for page and - paper sizes. - - \value Millimeter - \value Point - \value Inch - \value Pica - \value Didot - \value Cicero - \value DevicePixel - - Note the difference between Point and DevicePixel. The Point unit is - defined to be 1/72th of an inch, while the DevicePixel unit is - resolution dependant and is based on the actual pixels, or dots, on - the printer. -*/ - - -/* - \enum QPrinter::PrintRange - - This enum is used to specify which print range the application - should use to print. - - \value AllPages All the pages should be printed. - \value Selection Only the selection should be printed. - \value PageRange Print according to the from page and to page options. - \value CurrentPage Only the current page should be printed. - - \sa setPrintRange(), printRange() -*/ - -/* - \enum QPrinter::PrinterOption - - This enum describes various printer options that appear in the - printer setup dialog. It is used to enable and disable these - options in the setup dialog. - - \value PrintToFile Describes if print to file should be enabled. - \value PrintSelection Describes if printing selections should be enabled. - \value PrintPageRange Describes if printing page ranges (from, to) should - be enabled - \value PrintCurrentPage if Print Current Page option should be enabled - - \sa setOptionEnabled(), isOptionEnabled() -*/ - -/*! - Creates a new printer object with the given \a mode. -*/ -QPrinter::QPrinter(PrinterMode mode) - : QPaintDevice(), - d_ptr(new QPrinterPrivate(this)) -{ - init(mode); - QPrinterInfo defPrn(QPrinterInfo::defaultPrinter()); - if (!defPrn.isNull()) { - setPrinterName(defPrn.printerName()); - } else if (QPrinterInfo::availablePrinters().isEmpty() - && d_ptr->paintEngine->type() != QPaintEngine::Windows - && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { - setOutputFormat(QPrinter::PdfFormat); - } -} - -/*! - \since 4.4 - - Creates a new printer object with the given \a printer and \a mode. -*/ -QPrinter::QPrinter(const QPrinterInfo& printer, PrinterMode mode) - : QPaintDevice(), - d_ptr(new QPrinterPrivate(this)) -{ - init(mode); - setPrinterName(printer.printerName()); -} - -void QPrinter::init(PrinterMode mode) -{ -#if !defined(Q_WS_X11) - if (!qApp) { -#else - if (!qApp || !X11) { -#endif - qFatal("QPrinter: Must construct a QApplication before a QPaintDevice"); - return; - } - Q_D(QPrinter); - - d->printerMode = mode; - d->outputFormat = QPrinter::NativeFormat; - d->createDefaultEngines(); - -#ifndef QT_NO_PRINTPREVIEWWIDGET - d->previewEngine = 0; -#endif - d->realPrintEngine = 0; - d->realPaintEngine = 0; - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (QCUPSSupport::cupsVersion() >= 10200 && QCUPSSupport().currentPPD()) { - setOutputFormat(QPrinter::PdfFormat); - d->outputFormat = QPrinter::NativeFormat; - } -#endif -} - -/*! - This function is used by subclasses of QPrinter to specify custom - print and paint engines (\a printEngine and \a paintEngine, - respectively). - - QPrinter does not take ownership of the engines, so you need to - manage these engine instances yourself. - - Note that changing the engines will reset the printer state and - all its properties. - - \sa printEngine() paintEngine() setOutputFormat() - - \since 4.1 -*/ -void QPrinter::setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine) -{ - Q_D(QPrinter); - - if (d->use_default_engine) - delete d->printEngine; - - d->printEngine = printEngine; - d->paintEngine = paintEngine; - d->use_default_engine = false; -} - -/*! - Destroys the printer object and frees any allocated resources. If - the printer is destroyed while a print job is in progress this may - or may not affect the print job. -*/ -QPrinter::~QPrinter() -{ - Q_D(QPrinter); - if (d->use_default_engine) - delete d->printEngine; -#ifndef QT_NO_PRINTPREVIEWWIDGET - delete d->previewEngine; -#endif -} - -/*! - \enum QPrinter::OutputFormat - - The OutputFormat enum is used to describe the format QPrinter should - use for printing. - - \value NativeFormat QPrinter will print output using a method defined - by the platform it is running on. This mode is the default when printing - directly to a printer. - - \value PdfFormat QPrinter will generate its output as a searchable PDF file. - This mode is the default when printing to a file. - - \value PostScriptFormat QPrinter will generate its output as in the PostScript format. - (This feature was introduced in Qt 4.2.) - - \sa outputFormat(), setOutputFormat(), setOutputFileName() -*/ - -/*! - \since 4.1 - - Sets the output format for this printer to \a format. -*/ -void QPrinter::setOutputFormat(OutputFormat format) -{ - -#ifndef QT_NO_PDF - Q_D(QPrinter); - if (d->validPrinter && d->outputFormat == format) - return; - d->outputFormat = format; - - QPrintEngine *oldPrintEngine = d->printEngine; - const bool def_engine = d->use_default_engine; - d->printEngine = 0; - - d->createDefaultEngines(); - - if (oldPrintEngine) { - for (int i = 0; i < d->manualSetList.size(); ++i) { - QPrintEngine::PrintEnginePropertyKey key = d->manualSetList[i]; - QVariant prop; - // PPK_NumberOfCopies need special treatmeant since it in most cases - // will return 1, disregarding the actual value that was set - if (key == QPrintEngine::PPK_NumberOfCopies) - prop = QVariant(copyCount()); - else - prop = oldPrintEngine->property(key); - if (prop.isValid()) - d->printEngine->setProperty(key, prop); - } - } - - if (def_engine) - delete oldPrintEngine; - - if (d->outputFormat == QPrinter::PdfFormat || d->outputFormat == QPrinter::PostScriptFormat) - d->validPrinter = true; -#else - Q_UNUSED(format); -#endif -} - -/*! - \since 4.1 - - Returns the output format for this printer. -*/ -QPrinter::OutputFormat QPrinter::outputFormat() const -{ - Q_D(const QPrinter); - return d->outputFormat; -} - - - -/*! \internal -*/ -int QPrinter::devType() const -{ - return QInternal::Printer; -} - -/*! - Returns the printer name. This value is initially set to the name - of the default printer. - - \sa setPrinterName() -*/ -QString QPrinter::printerName() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_PrinterName).toString(); -} - -/*! - Sets the printer name to \a name. - - \sa printerName(), isValid() -*/ -void QPrinter::setPrinterName(const QString &name) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setPrinterName"); - -#if defined(Q_OS_UNIX) && !defined(QT_NO_CUPS) - if(d->use_default_engine - && d->outputFormat == QPrinter::NativeFormat) { - if (QCUPSSupport::cupsVersion() >= 10200 - && QCUPSSupport::printerHasPPD(name.toLocal8Bit().constData())) - setOutputFormat(QPrinter::PdfFormat); - else - setOutputFormat(QPrinter::PostScriptFormat); - d->outputFormat = QPrinter::NativeFormat; - } -#endif - - QList<QPrinterInfo> prnList = QPrinterInfo::availablePrinters(); - if (name.isEmpty()) { - d->validPrinter = d->outputFormat == QPrinter::PdfFormat || d->outputFormat == QPrinter::PostScriptFormat; - } else { - d->validPrinter = false; - for (int i = 0; i < prnList.size(); ++i) { - if (prnList[i].printerName() == name) { - d->validPrinter = true; - break; - } - } - } - - d->printEngine->setProperty(QPrintEngine::PPK_PrinterName, name); - d->addToManualSetList(QPrintEngine::PPK_PrinterName); -} - - -/*! - \since 4.4 - - Returns true if the printer currently selected is a valid printer - in the system, or a pure PDF/PostScript printer; otherwise returns false. - - To detect other failures check the output of QPainter::begin() or QPrinter::newPage(). - - \snippet doc/src/snippets/printing-qprinter/errors.cpp 0 - - \sa setPrinterName() -*/ -bool QPrinter::isValid() const -{ - Q_D(const QPrinter); -#if defined(Q_WS_X11) - if (!qApp || !X11) { - return false; - } -#endif - return d->validPrinter; -} - - -/*! - \fn bool QPrinter::outputToFile() const - - Returns true if the output should be written to a file, or false - if the output should be sent directly to the printer. The default - setting is false. - - \sa setOutputToFile(), setOutputFileName() -*/ - - -/*! - \fn void QPrinter::setOutputToFile(bool enable) - - Specifies whether the output should be written to a file or sent - directly to the printer. - - Will output to a file if \a enable is true, or will output - directly to the printer if \a enable is false. - - \sa outputToFile(), setOutputFileName() -*/ - - -/*! - \fn QString QPrinter::outputFileName() const - - Returns the name of the output file. By default, this is an empty string - (indicating that the printer shouldn't print to file). - - \sa QPrintEngine::PrintEnginePropertyKey - -*/ - -QString QPrinter::outputFileName() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_OutputFileName).toString(); -} - -/*! - Sets the name of the output file to \a fileName. - - Setting a null or empty name (0 or "") disables printing to a file. - Setting a non-empty name enables printing to a file. - - This can change the value of outputFormat(). If the file name has the - suffix ".ps" then PostScript is automatically selected as output format. - If the file name has the ".pdf" suffix PDF is generated. If the file name - has a suffix other than ".ps" and ".pdf", the output format used is the - one set with setOutputFormat(). - - QPrinter uses Qt's cross-platform PostScript or PDF print engines - respectively. If you can produce this format natively, for example - Mac OS X can generate PDF's from its print engine, set the output format - back to NativeFormat. - - \sa outputFileName() setOutputToFile() setOutputFormat() -*/ - -void QPrinter::setOutputFileName(const QString &fileName) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setOutputFileName"); - - QFileInfo fi(fileName); - if (!fi.suffix().compare(QLatin1String("ps"), Qt::CaseInsensitive)) - setOutputFormat(QPrinter::PostScriptFormat); - else if (!fi.suffix().compare(QLatin1String("pdf"), Qt::CaseInsensitive)) - setOutputFormat(QPrinter::PdfFormat); - else if (fileName.isEmpty()) - setOutputFormat(QPrinter::NativeFormat); - - d->printEngine->setProperty(QPrintEngine::PPK_OutputFileName, fileName); - d->addToManualSetList(QPrintEngine::PPK_OutputFileName); -} - - -/*! - Returns the name of the program that sends the print output to the - printer. - - The default is to return an empty string; meaning that QPrinter will try to - be smart in a system-dependent way. On X11 only, you can set it to something - different to use a specific print program. On the other platforms, this - returns an empty string. - - \sa setPrintProgram(), setPrinterSelectionOption() -*/ -QString QPrinter::printProgram() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_PrinterProgram).toString(); -} - - -/*! - Sets the name of the program that should do the print job to \a - printProg. - - On X11, this function sets the program to call with the PostScript - output. On other platforms, it has no effect. - - \sa printProgram() -*/ -void QPrinter::setPrintProgram(const QString &printProg) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setPrintProgram"); - d->printEngine->setProperty(QPrintEngine::PPK_PrinterProgram, printProg); - d->addToManualSetList(QPrintEngine::PPK_PrinterProgram); -} - - -/*! - Returns the document name. - - \sa setDocName(), QPrintEngine::PrintEnginePropertyKey -*/ -QString QPrinter::docName() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_DocumentName).toString(); -} - - -/*! - Sets the document name to \a name. - - On X11, the document name is for example used as the default - output filename in QPrintDialog. Note that the document name does - not affect the file name if the printer is printing to a file. - Use the setOutputFile() function for this. - - \sa docName(), QPrintEngine::PrintEnginePropertyKey -*/ -void QPrinter::setDocName(const QString &name) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setDocName"); - d->printEngine->setProperty(QPrintEngine::PPK_DocumentName, name); - d->addToManualSetList(QPrintEngine::PPK_DocumentName); -} - - -/*! - Returns the name of the application that created the document. - - \sa setCreator() -*/ -QString QPrinter::creator() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_Creator).toString(); -} - - -/*! - Sets the name of the application that created the document to \a - creator. - - This function is only applicable to the X11 version of Qt. If no - creator name is specified, the creator will be set to "Qt" - followed by some version number. - - \sa creator() -*/ -void QPrinter::setCreator(const QString &creator) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setCreator"); - d->printEngine->setProperty(QPrintEngine::PPK_Creator, creator); - d->addToManualSetList(QPrintEngine::PPK_Creator); -} - - -/*! - Returns the orientation setting. This is driver-dependent, but is usually - QPrinter::Portrait. - - \sa setOrientation() -*/ -QPrinter::Orientation QPrinter::orientation() const -{ - Q_D(const QPrinter); - return QPrinter::Orientation(d->printEngine->property(QPrintEngine::PPK_Orientation).toInt()); -} - - -/*! - Sets the print orientation to \a orientation. - - The orientation can be either QPrinter::Portrait or - QPrinter::Landscape. - - The printer driver reads this setting and prints using the - specified orientation. - - On Windows, this option can be changed while printing and will - take effect from the next call to newPage(). - - On Mac OS X, changing the orientation during a print job has no effect. - - \sa orientation() -*/ - -void QPrinter::setOrientation(Orientation orientation) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_Orientation, orientation); - d->addToManualSetList(QPrintEngine::PPK_Orientation); -} - - -/*! - \since 4.4 - Returns the printer paper size. The default value is driver-dependent. - - \sa setPaperSize() pageRect() paperRect() -*/ - -QPrinter::PaperSize QPrinter::paperSize() const -{ - Q_D(const QPrinter); - return QPrinter::PaperSize(d->printEngine->property(QPrintEngine::PPK_PaperSize).toInt()); -} - -/*! - \since 4.4 - - Sets the printer paper size to \a newPaperSize if that size is - supported. The result is undefined if \a newPaperSize is not - supported. - - The default paper size is driver-dependent. - - This function is useful mostly for setting a default value that - the user can override in the print dialog. - - \sa paperSize() PaperSize setFullPage() setResolution() pageRect() paperRect() -*/ -void QPrinter::setPaperSize(PaperSize newPaperSize) -{ - Q_D(QPrinter); - if (d->paintEngine->type() != QPaintEngine::Pdf) - ABORT_IF_ACTIVE("QPrinter::setPaperSize"); - if (newPaperSize < 0 || newPaperSize >= NPaperSize) { - qWarning("QPrinter::setPaperSize: Illegal paper size %d", newPaperSize); - return; - } - d->printEngine->setProperty(QPrintEngine::PPK_PaperSize, newPaperSize); - d->addToManualSetList(QPrintEngine::PPK_PaperSize); - d->hasUserSetPageSize = true; -} - -/*! - \obsolete - - Returns the printer page size. The default value is driver-dependent. - - Use paperSize() instead. -*/ -QPrinter::PageSize QPrinter::pageSize() const -{ - return paperSize(); -} - - -/*! - \obsolete - - Sets the printer page size based on \a newPageSize. - - Use setPaperSize() instead. -*/ - -void QPrinter::setPageSize(PageSize newPageSize) -{ - setPaperSize(newPageSize); -} - -/*! - \since 4.4 - - Sets the paper size based on \a paperSize in \a unit. - - \sa paperSize() -*/ - -void QPrinter::setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit) -{ - Q_D(QPrinter); - if (d->paintEngine->type() != QPaintEngine::Pdf) - ABORT_IF_ACTIVE("QPrinter::setPaperSize"); - const qreal multiplier = qt_multiplierForUnit(unit, resolution()); - QSizeF size(paperSize.width() * multiplier, paperSize.height() * multiplier); - d->printEngine->setProperty(QPrintEngine::PPK_CustomPaperSize, size); - d->addToManualSetList(QPrintEngine::PPK_CustomPaperSize); - d->hasUserSetPageSize = true; -} - -/*! - \since 4.4 - - Returns the paper size in \a unit. - - \sa setPaperSize() -*/ - -QSizeF QPrinter::paperSize(Unit unit) const -{ - Q_D(const QPrinter); - int res = resolution(); - const qreal multiplier = qt_multiplierForUnit(unit, res); - PaperSize paperType = paperSize(); - if (paperType == Custom) { - QSizeF size = d->printEngine->property(QPrintEngine::PPK_CustomPaperSize).toSizeF(); - return QSizeF(size.width() / multiplier, size.height() / multiplier); - } - else { - return qt_printerPaperSize(orientation(), paperType, unit, res); - } -} - -/*! - Sets the page order to \a pageOrder. - - The page order can be QPrinter::FirstPageFirst or - QPrinter::LastPageFirst. The application is responsible for - reading the page order and printing accordingly. - - This function is mostly useful for setting a default value that - the user can override in the print dialog. - - This function is only supported under X11. -*/ - -void QPrinter::setPageOrder(PageOrder pageOrder) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setPageOrder"); - d->printEngine->setProperty(QPrintEngine::PPK_PageOrder, pageOrder); - d->addToManualSetList(QPrintEngine::PPK_PageOrder); -} - - -/*! - Returns the current page order. - - The default page order is \c FirstPageFirst. -*/ - -QPrinter::PageOrder QPrinter::pageOrder() const -{ - Q_D(const QPrinter); - return QPrinter::PageOrder(d->printEngine->property(QPrintEngine::PPK_PageOrder).toInt()); -} - - -/*! - Sets the printer's color mode to \a newColorMode, which can be - either \c Color or \c GrayScale. - - \sa colorMode() -*/ - -void QPrinter::setColorMode(ColorMode newColorMode) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setColorMode"); - d->printEngine->setProperty(QPrintEngine::PPK_ColorMode, newColorMode); - d->addToManualSetList(QPrintEngine::PPK_ColorMode); -} - - -/*! - Returns the current color mode. - - \sa setColorMode() -*/ -QPrinter::ColorMode QPrinter::colorMode() const -{ - Q_D(const QPrinter); - return QPrinter::ColorMode(d->printEngine->property(QPrintEngine::PPK_ColorMode).toInt()); -} - - -/*! - \obsolete - Returns the number of copies to be printed. The default value is 1. - - On Windows, Mac OS X and X11 systems that support CUPS, this will always - return 1 as these operating systems can internally handle the number - of copies. - - On X11, this value will return the number of times the application is - required to print in order to match the number specified in the printer setup - dialog. This has been done since some printer drivers are not capable of - buffering up the copies and in those cases the application must make an - explicit call to the print code for each copy. - - Use copyCount() in conjunction with supportsMultipleCopies() instead. - - \sa setNumCopies(), actualNumCopies() -*/ - -int QPrinter::numCopies() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_NumberOfCopies).toInt(); -} - - -/*! - \obsolete - \since 4.6 - - Returns the number of copies that will be printed. The default - value is 1. - - This function always returns the actual value specified in the print - dialog or using setNumCopies(). - - Use copyCount() instead. - - \sa setNumCopies(), numCopies() -*/ -int QPrinter::actualNumCopies() const -{ - return copyCount(); -} - - - -/*! - \obsolete - Sets the number of copies to be printed to \a numCopies. - - The printer driver reads this setting and prints the specified - number of copies. - - Use setCopyCount() instead. - - \sa numCopies() -*/ - -void QPrinter::setNumCopies(int numCopies) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setNumCopies"); - d->printEngine->setProperty(QPrintEngine::PPK_NumberOfCopies, numCopies); - d->addToManualSetList(QPrintEngine::PPK_NumberOfCopies); -} - -/*! - \since 4.7 - - Sets the number of copies to be printed to \a count. - - The printer driver reads this setting and prints the specified number of - copies. - - \sa copyCount(), supportsMultipleCopies() -*/ - -void QPrinter::setCopyCount(int count) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setCopyCount;"); - d->printEngine->setProperty(QPrintEngine::PPK_CopyCount, count); - d->addToManualSetList(QPrintEngine::PPK_CopyCount); -} - -/*! - \since 4.7 - - Returns the number of copies that will be printed. The default value is 1. - - \sa setCopyCount(), supportsMultipleCopies() -*/ - -int QPrinter::copyCount() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_CopyCount).toInt(); -} - -/*! - \since 4.7 - - Returns true if the printer supports printing multiple copies of the same - document in one job; otherwise false is returned. - - On most systems this function will return true. However, on X11 systems - that do not support CUPS, this function will return false. That means the - application has to handle the number of copies by printing the same - document the required number of times. - - \sa setCopyCount(), copyCount() -*/ - -bool QPrinter::supportsMultipleCopies() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_SupportsMultipleCopies).toBool(); -} - -/*! - \since 4.1 - - Returns true if collation is turned on when multiple copies is selected. - Returns false if it is turned off when multiple copies is selected. - When collating is turned off the printing of each individual page will be repeated - the numCopies() amount before the next page is started. With collating turned on - all pages are printed before the next copy of those pages is started. - - \sa setCollateCopies() -*/ -bool QPrinter::collateCopies() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_CollateCopies).toBool(); -} - - -/*! - \since 4.1 - - Sets the default value for collation checkbox when the print - dialog appears. If \a collate is true, it will enable - setCollateCopiesEnabled(). The default value is false. This value - will be changed by what the user presses in the print dialog. - - \sa collateCopies() -*/ -void QPrinter::setCollateCopies(bool collate) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setCollateCopies"); - d->printEngine->setProperty(QPrintEngine::PPK_CollateCopies, collate); - d->addToManualSetList(QPrintEngine::PPK_CollateCopies); -} - - - -/*! - If \a fp is true, enables support for painting over the entire page; - otherwise restricts painting to the printable area reported by the - device. - - By default, full page printing is disabled. In this case, the origin - of the QPrinter's coordinate system coincides with the top-left - corner of the printable area. - - If full page printing is enabled, the origin of the QPrinter's - coordinate system coincides with the top-left corner of the paper - itself. In this case, the - \l{QPaintDevice::PaintDeviceMetric}{device metrics} will report - the exact same dimensions as indicated by \l{PaperSize}. It may not - be possible to print on the entire physical page because of the - printer's margins, so the application must account for the margins - itself. - - \sa fullPage(), setPaperSize(), width(), height(), {Printing with Qt} -*/ - -void QPrinter::setFullPage(bool fp) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_FullPage, fp); - d->addToManualSetList(QPrintEngine::PPK_FullPage); -} - - -/*! - Returns true if the origin of the printer's coordinate system is - at the corner of the page and false if it is at the edge of the - printable area. - - See setFullPage() for details and caveats. - - \sa setFullPage() PaperSize -*/ - -bool QPrinter::fullPage() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_FullPage).toBool(); -} - - -/*! - Requests that the printer prints at \a dpi or as near to \a dpi as - possible. - - This setting affects the coordinate system as returned by, for - example QPainter::viewport(). - - This function must be called before QPainter::begin() to have an effect on - all platforms. - - \sa resolution() setPaperSize() -*/ - -void QPrinter::setResolution(int dpi) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setResolution"); - d->printEngine->setProperty(QPrintEngine::PPK_Resolution, dpi); - d->addToManualSetList(QPrintEngine::PPK_Resolution); -} - - -/*! - Returns the current assumed resolution of the printer, as set by - setResolution() or by the printer driver. - - \sa setResolution() -*/ - -int QPrinter::resolution() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_Resolution).toInt(); -} - -/*! - Sets the paper source setting to \a source. - - Windows only: This option can be changed while printing and will - take effect from the next call to newPage() - - \sa paperSource() -*/ - -void QPrinter::setPaperSource(PaperSource source) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_PaperSource, source); - d->addToManualSetList(QPrintEngine::PPK_PaperSource); -} - -/*! - Returns the printer's paper source. This is \c Manual or a printer - tray or paper cassette. -*/ -QPrinter::PaperSource QPrinter::paperSource() const -{ - Q_D(const QPrinter); - return QPrinter::PaperSource(d->printEngine->property(QPrintEngine::PPK_PaperSource).toInt()); -} - - -/*! - \since 4.1 - - Enabled or disables font embedding depending on \a enable. - - Currently this option is only supported on X11. - - \sa fontEmbeddingEnabled() -*/ -void QPrinter::setFontEmbeddingEnabled(bool enable) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_FontEmbedding, enable); - d->addToManualSetList(QPrintEngine::PPK_FontEmbedding); -} - -/*! - \since 4.1 - - Returns true if font embedding is enabled. - - Currently this option is only supported on X11. - - \sa setFontEmbeddingEnabled() -*/ -bool QPrinter::fontEmbeddingEnabled() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_FontEmbedding).toBool(); -} - -/*! - \enum QPrinter::DuplexMode - \since 4.4 - - This enum is used to indicate whether printing will occur on one or both sides - of each sheet of paper (simplex or duplex printing). - - \value DuplexNone Single sided (simplex) printing only. - \value DuplexAuto The printer's default setting is used to determine whether - duplex printing is used. - \value DuplexLongSide Both sides of each sheet of paper are used for printing. - The paper is turned over its longest edge before the second - side is printed - \value DuplexShortSide Both sides of each sheet of paper are used for printing. - The paper is turned over its shortest edge before the second - side is printed -*/ - -/*! - \since 4.2 - - Enables double sided printing if \a doubleSided is true; otherwise disables it. - - Currently this option is only supported on X11. -*/ -void QPrinter::setDoubleSidedPrinting(bool doubleSided) -{ - setDuplex(doubleSided ? DuplexAuto : DuplexNone); -} - - -/*! - \since 4.2 - - Returns true if double side printing is enabled. - - Currently this option is only supported on X11. -*/ -bool QPrinter::doubleSidedPrinting() const -{ - return duplex() != DuplexNone; -} - -/*! - \since 4.4 - - Enables double sided printing based on the \a duplex mode. - - Currently this option is only supported on X11. -*/ -void QPrinter::setDuplex(DuplexMode duplex) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_Duplex, duplex); - d->addToManualSetList(QPrintEngine::PPK_Duplex); -} - -/*! - \since 4.4 - - Returns the current duplex mode. - - Currently this option is only supported on X11. -*/ -QPrinter::DuplexMode QPrinter::duplex() const -{ - Q_D(const QPrinter); - return static_cast <DuplexMode> (d->printEngine->property(QPrintEngine::PPK_Duplex).toInt()); -} - -/*! - \since 4.4 - - Returns the page's rectangle in \a unit; this is usually smaller - than the paperRect() since the page normally has margins between - its borders and the paper. - - \sa paperSize() -*/ -QRectF QPrinter::pageRect(Unit unit) const -{ - Q_D(const QPrinter); - int res = resolution(); - const qreal multiplier = qt_multiplierForUnit(unit, res); - // the page rect is in device pixels - QRect devRect(d->printEngine->property(QPrintEngine::PPK_PageRect).toRect()); - if (unit == DevicePixel) - return devRect; - QRectF diRect(devRect.x()*72.0/res, - devRect.y()*72.0/res, - devRect.width()*72.0/res, - devRect.height()*72.0/res); - return QRectF(diRect.x()/multiplier, diRect.y()/multiplier, - diRect.width()/multiplier, diRect.height()/multiplier); -} - - -/*! - \since 4.4 - - Returns the paper's rectangle in \a unit; this is usually larger - than the pageRect(). - - \sa pageRect() -*/ -QRectF QPrinter::paperRect(Unit unit) const -{ - Q_D(const QPrinter); - int res = resolution(); - const qreal multiplier = qt_multiplierForUnit(unit, resolution()); - // the page rect is in device pixels - QRect devRect(d->printEngine->property(QPrintEngine::PPK_PaperRect).toRect()); - if (unit == DevicePixel) - return devRect; - QRectF diRect(devRect.x()*72.0/res, - devRect.y()*72.0/res, - devRect.width()*72.0/res, - devRect.height()*72.0/res); - return QRectF(diRect.x()/multiplier, diRect.y()/multiplier, - diRect.width()/multiplier, diRect.height()/multiplier); -} - -/*! - Returns the page's rectangle; this is usually smaller than the - paperRect() since the page normally has margins between its - borders and the paper. - - The unit of the returned rectangle is DevicePixel. - - \sa paperSize() -*/ -QRect QPrinter::pageRect() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_PageRect).toRect(); -} - -/*! - Returns the paper's rectangle; this is usually larger than the - pageRect(). - - The unit of the returned rectangle is DevicePixel. - - \sa pageRect() -*/ -QRect QPrinter::paperRect() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_PaperRect).toRect(); -} - - -/*! - \since 4.4 - - This function sets the \a left, \a top, \a right and \a bottom - page margins for this printer. The unit of the margins are - specified with the \a unit parameter. -*/ -void QPrinter::setPageMargins(qreal left, qreal top, qreal right, qreal bottom, QPrinter::Unit unit) -{ - Q_D(QPrinter); - const qreal multiplier = qt_multiplierForUnit(unit, resolution()); - QList<QVariant> margins; - margins << (left * multiplier) << (top * multiplier) - << (right * multiplier) << (bottom * multiplier); - d->printEngine->setProperty(QPrintEngine::PPK_PageMargins, margins); - d->addToManualSetList(QPrintEngine::PPK_PageMargins); - d->hasCustomPageMargins = true; -} - -/*! - \since 4.4 - - Returns the page margins for this printer in \a left, \a top, \a - right, \a bottom. The unit of the returned margins are specified - with the \a unit parameter. -*/ -void QPrinter::getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, QPrinter::Unit unit) const -{ - Q_D(const QPrinter); - Q_ASSERT(left && top && right && bottom); - const qreal multiplier = qt_multiplierForUnit(unit, resolution()); - QList<QVariant> margins(d->printEngine->property(QPrintEngine::PPK_PageMargins).toList()); - *left = margins.at(0).toReal() / multiplier; - *top = margins.at(1).toReal() / multiplier; - *right = margins.at(2).toReal() / multiplier; - *bottom = margins.at(3).toReal() / multiplier; -} - -/*! - \internal - - Returns the metric for the given \a id. -*/ -int QPrinter::metric(PaintDeviceMetric id) const -{ - Q_D(const QPrinter); - return d->printEngine->metric(id); -} - -/*! - Returns the paint engine used by the printer. -*/ -QPaintEngine *QPrinter::paintEngine() const -{ - Q_D(const QPrinter); - return d->paintEngine; -} - -/*! - \since 4.1 - - Returns the print engine used by the printer. -*/ -QPrintEngine *QPrinter::printEngine() const -{ - Q_D(const QPrinter); - return d->printEngine; -} - -#if defined (Q_WS_WIN) -/*! - Sets the page size to be used by the printer under Windows to \a - pageSize. - - \warning This function is not portable so you may prefer to use - setPaperSize() instead. - - \sa winPageSize() -*/ -void QPrinter::setWinPageSize(int pageSize) -{ - Q_D(QPrinter); - ABORT_IF_ACTIVE("QPrinter::setWinPageSize"); - d->printEngine->setProperty(QPrintEngine::PPK_WindowsPageSize, pageSize); - d->addToManualSetList(QPrintEngine::PPK_WindowsPageSize); -} - -/*! - Returns the page size used by the printer under Windows. - - \warning This function is not portable so you may prefer to use - paperSize() instead. - - \sa setWinPageSize() -*/ -int QPrinter::winPageSize() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_WindowsPageSize).toInt(); -} -#endif // Q_WS_WIN - -/*! - Returns a list of the resolutions (a list of dots-per-inch - integers) that the printer says it supports. - - For X11 where all printing is directly to postscript, this - function will always return a one item list containing only the - postscript resolution, i.e., 72 (72 dpi -- but see PrinterMode). -*/ -QList<int> QPrinter::supportedResolutions() const -{ - Q_D(const QPrinter); - QList<QVariant> varlist - = d->printEngine->property(QPrintEngine::PPK_SupportedResolutions).toList(); - QList<int> intlist; - for (int i=0; i<varlist.size(); ++i) - intlist << varlist.at(i).toInt(); - return intlist; -} - -/*! - Tells the printer to eject the current page and to continue - printing on a new page. Returns true if this was successful; - otherwise returns false. - - Calling newPage() on an inactive QPrinter object will always - fail. -*/ -bool QPrinter::newPage() -{ - Q_D(QPrinter); - if (d->printEngine->printerState() != QPrinter::Active) - return false; - return d->printEngine->newPage(); -} - -/*! - Aborts the current print run. Returns true if the print run was - successfully aborted and printerState() will return QPrinter::Aborted; otherwise - returns false. - - It is not always possible to abort a print job. For example, - all the data has gone to the printer but the printer cannot or - will not cancel the job when asked to. -*/ -bool QPrinter::abort() -{ - Q_D(QPrinter); - return d->printEngine->abort(); -} - -/*! - Returns the current state of the printer. This may not always be - accurate (for example if the printer doesn't have the capability - of reporting its state to the operating system). -*/ -QPrinter::PrinterState QPrinter::printerState() const -{ - Q_D(const QPrinter); - return d->printEngine->printerState(); -} - - -/*! \fn void QPrinter::margins(uint *top, uint *left, uint *bottom, uint *right) const - - Sets *\a top, *\a left, *\a bottom, *\a right to be the top, - left, bottom, and right margins. - - This function has been superseded by paperRect() and pageRect(). - Use paperRect().top() - pageRect().top() for the top margin, - paperRect().left() - pageRect().left() for the left margin, - paperRect().bottom() - pageRect().bottom() for the bottom margin, - and papaerRect().right() - pageRect().right() for the right - margin. - - \oldcode - uint rightMargin; - uint bottomMargin; - printer->margins(0, 0, &bottomMargin, &rightMargin); - \newcode - int rightMargin = printer->paperRect().right() - printer->pageRect().right(); - int bottomMargin = printer->paperRect().bottom() - printer->pageRect().bottom(); - \endcode -*/ - -/*! \fn QSize QPrinter::margins() const - - \overload - - Returns a QSize containing the left margin and the top margin. - - This function has been superseded by paperRect() and pageRect(). - Use paperRect().left() - pageRect().left() for the left margin, - and paperRect().top() - pageRect().top() for the top margin. - - \oldcode - QSize margins = printer->margins(); - int leftMargin = margins.width(); - int topMargin = margins.height(); - \newcode - int leftMargin = printer->paperRect().left() - printer->pageRect().left(); - int topMargin = printer->paperRect().top() - printer->pageRect().top(); - \endcode -*/ - -/*! \fn bool QPrinter::aborted() - - Use printerState() == QPrinter::Aborted instead. -*/ - -#ifdef Q_WS_WIN -/*! - \internal -*/ -HDC QPrinter::getDC() const -{ - Q_D(const QPrinter); - return d->printEngine->getPrinterDC(); -} - -/*! - \internal -*/ -void QPrinter::releaseDC(HDC hdc) const -{ - Q_D(const QPrinter); - d->printEngine->releasePrinterDC(hdc); -} - -/*! - Returns the supported paper sizes for this printer. - - The values will be either a value that matches an entry in the - QPrinter::PaperSource enum or a driver spesific value. The driver - spesific values are greater than the constant DMBIN_USER declared - in wingdi.h. - - \warning This function is only available in windows. -*/ - -QList<QPrinter::PaperSource> QPrinter::supportedPaperSources() const -{ - Q_D(const QPrinter); - QVariant v = d->printEngine->property(QPrintEngine::PPK_PaperSources); - - QList<QVariant> variant_list = v.toList(); - QList<QPrinter::PaperSource> int_list; - for (int i=0; i<variant_list.size(); ++i) - int_list << (QPrinter::PaperSource) variant_list.at(i).toInt(); - - return int_list; -} - -#endif - -/*! - \fn QString QPrinter::printerSelectionOption() const - - Returns the printer options selection string. This is useful only - if the print command has been explicitly set. - - The default value (an empty string) implies that the printer should - be selected in a system-dependent manner. - - Any other value implies that the given value should be used. - - \warning This function is not available on Windows. - - \sa setPrinterSelectionOption() -*/ - -/*! - \fn void QPrinter::setPrinterSelectionOption(const QString &option) - - Sets the printer to use \a option to select the printer. \a option - is null by default (which implies that Qt should be smart enough - to guess correctly), but it can be set to other values to use a - specific printer selection option. - - If the printer selection option is changed while the printer is - active, the current print job may or may not be affected. - - \warning This function is not available on Windows. - - \sa printerSelectionOption() -*/ - -#ifndef Q_WS_WIN -QString QPrinter::printerSelectionOption() const -{ - Q_D(const QPrinter); - return d->printEngine->property(QPrintEngine::PPK_SelectionOption).toString(); -} - -void QPrinter::setPrinterSelectionOption(const QString &option) -{ - Q_D(QPrinter); - d->printEngine->setProperty(QPrintEngine::PPK_SelectionOption, option); - d->addToManualSetList(QPrintEngine::PPK_SelectionOption); -} -#endif - -/*! - \since 4.1 - \fn int QPrinter::fromPage() const - - Returns the number of the first page in a range of pages to be printed - (the "from page" setting). Pages in a document are numbered according to - the convention that the first page is page 1. - - By default, this function returns a special value of 0, meaning that - the "from page" setting is unset. - - \note If fromPage() and toPage() both return 0, this indicates that - \e{the whole document will be printed}. - - \sa setFromTo(), toPage() -*/ - -int QPrinter::fromPage() const -{ - Q_D(const QPrinter); - return d->fromPage; -} - -/*! - \since 4.1 - - Returns the number of the last page in a range of pages to be printed - (the "to page" setting). Pages in a document are numbered according to - the convention that the first page is page 1. - - By default, this function returns a special value of 0, meaning that - the "to page" setting is unset. - - \note If fromPage() and toPage() both return 0, this indicates that - \e{the whole document will be printed}. - - The programmer is responsible for reading this setting and - printing accordingly. - - \sa setFromTo(), fromPage() -*/ - -int QPrinter::toPage() const -{ - Q_D(const QPrinter); - return d->toPage; -} - -/*! - \since 4.1 - - Sets the range of pages to be printed to cover the pages with numbers - specified by \a from and \a to, where \a from corresponds to the first - page in the range and \a to corresponds to the last. - - \note Pages in a document are numbered according to the convention that - the first page is page 1. However, if \a from and \a to are both set to 0, - the \e{whole document will be printed}. - - This function is mostly used to set a default value that the user can - override in the print dialog when you call setup(). - - \sa fromPage(), toPage() -*/ - -void QPrinter::setFromTo(int from, int to) -{ - Q_D(QPrinter); - if (from > to) { - qWarning() << "QPrinter::setFromTo: 'from' must be less than or equal to 'to'"; - from = to; - } - d->fromPage = from; - d->toPage = to; - - if (d->minPage == 0 && d->maxPage == 0) { - d->minPage = 1; - d->maxPage = to; - d->options |= QAbstractPrintDialog::PrintPageRange; - } -} - -/*! - \since 4.1 - - Sets the print range option in to be \a range. -*/ -void QPrinter::setPrintRange( PrintRange range ) -{ - Q_D(QPrinter); - d->printRange = QAbstractPrintDialog::PrintRange(range); -} - -/*! - \since 4.1 - - Returns the page range of the QPrinter. After the print setup - dialog has been opened, this function returns the value selected - by the user. - - \sa setPrintRange() -*/ -QPrinter::PrintRange QPrinter::printRange() const -{ - Q_D(const QPrinter); - return PrintRange(d->printRange); -} - -#if defined(QT3_SUPPORT) - -void QPrinter::setOutputToFile(bool f) -{ - if (f) { - if (outputFileName().isEmpty()) - setOutputFileName(QLatin1String("untitled_printer_document")); - } else { - setOutputFileName(QString()); - } -} - -bool qt_compat_QPrinter_printSetup(QPrinter *printer, QPrinterPrivate *pd, QWidget *parent) -{ - Q_UNUSED(pd); - QPrintDialog dlg(printer, parent); - return dlg.exec() != 0; -} - - -#ifdef Q_WS_MAC -bool qt_compat_QPrinter_pageSetup(QPrinter *p, QWidget *parent) -{ - QPageSetupDialog psd(p, parent); - return psd.exec() != 0; -} - -/*! - Executes a page setup dialog so that the user can configure the type of - page used for printing. Returns true if the contents of the dialog are - accepted; returns false if the dialog is canceled. -*/ -bool QPrinter::pageSetup(QWidget *parent) -{ - return qt_compat_QPrinter_pageSetup(this, parent); -} - -/*! - Executes a print setup dialog so that the user can configure the printing - process. Returns true if the contents of the dialog are accepted; returns - false if the dialog is canceled. -*/ -bool QPrinter::printSetup(QWidget *parent) -{ - Q_D(QPrinter); - return qt_compat_QPrinter_printSetup(this, d, parent); -} -#endif // Q_WS_MAC - -/*! - Use QPrintDialog instead. - - \oldcode - if (printer->setup(parent)) - ... - \newcode - QPrintDialog dialog(printer, parent); - if (dialog.exec()) - ... - \endcode -*/ -bool QPrinter::setup(QWidget *parent) -{ - Q_D(QPrinter); - return qt_compat_QPrinter_printSetup(this, d, parent) -#ifdef Q_WS_MAC - && qt_compat_QPrinter_pageSetup(this, parent); -#endif - ; -} - -/*! - Use QPrintDialog::minPage() instead. -*/ -int QPrinter::minPage() const -{ - Q_D(const QPrinter); - return d->minPage; -} - -/*! - Use QPrintDialog::maxPage() instead. -*/ -int QPrinter::maxPage() const -{ - Q_D(const QPrinter); - return d->maxPage; -} - -/*! - Use QPrintDialog::setMinMax() instead. -*/ -void QPrinter::setMinMax( int minPage, int maxPage ) -{ - Q_D(QPrinter); - Q_ASSERT_X(minPage <= maxPage, "QPrinter::setMinMax", - "'min' must be less than or equal to 'max'"); - d->minPage = minPage; - d->maxPage = maxPage; - d->options |= QPrintDialog::PrintPageRange; -} - -/*! - Returns true if the printer is set up to collate copies of printed documents; - otherwise returns false. - - Use QPrintDialog::isOptionEnabled(QPrintDialog::PrintCollateCopies) - instead. - - \sa collateCopies() -*/ -bool QPrinter::collateCopiesEnabled() const -{ - Q_D(const QPrinter); - return (d->options & QPrintDialog::PrintCollateCopies); -} - -/*! - Use QPrintDialog::setOption(QPrintDialog::PrintCollateCopies) - or QPrintDialog::setOptions(QPrintDialog::options() - & ~QPrintDialog::PrintCollateCopies) instead, depending on \a - enable. -*/ -void QPrinter::setCollateCopiesEnabled(bool enable) -{ - Q_D(QPrinter); - - if (enable) - d->options |= QPrintDialog::PrintCollateCopies; - else - d->options &= ~QPrintDialog::PrintCollateCopies; -} - -/*! - Use QPrintDialog instead. -*/ -void QPrinter::setOptionEnabled( PrinterOption option, bool enable ) -{ - Q_D(QPrinter); - if (enable) - d->options |= QPrintDialog::PrintDialogOption(1 << option); - else - d->options &= ~QPrintDialog::PrintDialogOption(1 << option); -} - -/*! - Use QPrintDialog instead. -*/ -bool QPrinter::isOptionEnabled( PrinterOption option ) const -{ - Q_D(const QPrinter); - return (d->options & QPrintDialog::PrintDialogOption(option)); -} - -#endif // QT3_SUPPORT - -/*! - \class QPrintEngine - \reentrant - - \ingroup printing - - \brief The QPrintEngine class defines an interface for how QPrinter - interacts with a given printing subsystem. - - The common case when creating your own print engine is to derive from both - QPaintEngine and QPrintEngine. Various properties of a print engine are - given with property() and set with setProperty(). - - \sa QPaintEngine -*/ - -/*! - \enum QPrintEngine::PrintEnginePropertyKey - - This enum is used to communicate properties between the print - engine and QPrinter. A property may or may not be supported by a - given print engine. - - \value PPK_CollateCopies A boolean value indicating whether the - printout should be collated or not. - - \value PPK_ColorMode Refers to QPrinter::ColorMode, either color or - monochrome. - - \value PPK_Creator A string describing the document's creator. - - \value PPK_Duplex A boolean value indicating whether both sides of - the printer paper should be used for the printout. - - \value PPK_DocumentName A string describing the document name in - the spooler. - - \value PPK_FontEmbedding A boolean value indicating whether data for - the document's fonts should be embedded in the data sent to the - printer. - - \value PPK_FullPage A boolean describing if the printer should be - full page or not. - - \value PPK_NumberOfCopies Obsolete. An integer specifying the number of - copies. Use PPK_CopyCount instead. - - \value PPK_Orientation Specifies a QPrinter::Orientation value. - - \value PPK_OutputFileName The output file name as a string. An - empty file name indicates that the printer should not print to a file. - - \value PPK_PageOrder Specifies a QPrinter::PageOrder value. - - \value PPK_PageRect A QRect specifying the page rectangle - - \value PPK_PageSize Obsolete. Use PPK_PaperSize instead. - - \value PPK_PaperRect A QRect specifying the paper rectangle. - - \value PPK_PaperSource Specifies a QPrinter::PaperSource value. - - \value PPK_PaperSources Specifies more than one QPrinter::PaperSource value. - - \value PPK_PaperSize Specifies a QPrinter::PaperSize value. - - \value PPK_PrinterName A string specifying the name of the printer. - - \value PPK_PrinterProgram A string specifying the name of the - printer program used for printing, - - \value PPK_Resolution An integer describing the dots per inch for - this printer. - - \value PPK_SelectionOption - - \value PPK_SupportedResolutions A list of integer QVariants - describing the set of supported resolutions that the printer has. - - \value PPK_SuppressSystemPrintStatus Suppress the built-in dialog for showing - printing progress. As of 4.1 this only has effect on Mac OS X where, by default, - a status dialog is shown. - - \value PPK_WindowsPageSize An integer specifying a DM_PAPER entry - on Windows. - - \value PPK_CustomPaperSize A QSizeF specifying a custom paper size - in the QPrinter::Point unit. - - \value PPK_PageMargins A QList<QVariant> containing the left, top, - right and bottom margin values. - - \value PPK_CopyCount An integer specifying the number of copies to print. - - \value PPK_SupportsMultipleCopies A boolean value indicating whether or not - the printer supports printing multiple copies in one job. - - \value PPK_CustomBase Basis for extension. -*/ - -/*! - \fn QPrintEngine::~QPrintEngine() - - Destroys the print engine. -*/ - -/*! - \fn void QPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value) - - Sets the print engine's property specified by \a key to the given \a value. - - \sa property() -*/ - -/*! - \fn void QPrintEngine::property(PrintEnginePropertyKey key) const - - Returns the print engine's property specified by \a key. - - \sa setProperty() -*/ - -/*! - \fn bool QPrintEngine::newPage() - - Instructs the print engine to start a new page. Returns true if - the printer was able to create the new page; otherwise returns false. -*/ - -/*! - \fn bool QPrintEngine::abort() - - Instructs the print engine to abort the printing process. Returns - true if successful; otherwise returns false. -*/ - -/*! - \fn int QPrintEngine::metric(QPaintDevice::PaintDeviceMetric id) const - - Returns the metric for the given \a id. -*/ - -/*! - \fn QPrinter::PrinterState QPrintEngine::printerState() const - - Returns the current state of the printer being used by the print engine. -*/ - -/*! - \fn HDC QPrintEngine::getPrinterDC() const - \internal -*/ - -/*! - \fn void QPrintEngine::releasePrinterDC(HDC) const - \internal -*/ - -/* - Returns the dimensions for the given paper size, \a size, in millimeters. -*/ -QSizeF qt_paperSizeToQSizeF(QPrinter::PaperSize size) -{ - if (size == QPrinter::Custom) return QSizeF(0, 0); - return QSizeF(qt_paperSizes[size][0], qt_paperSizes[size][1]); -} - -/* - Returns the PaperSize type that matches \a size, where \a size - is in millimeters. - - Because dimensions may not always be completely accurate (for - example when converting between units), a particular PaperSize - will be returned if it matches within -1/+1 millimeters. -*/ -QPrinter::PaperSize qSizeFTopaperSize(const QSizeF& size) -{ - for (int i = 0; i < static_cast<int>(QPrinter::NPaperSize); ++i) { - if (qt_paperSizes[i][0] >= size.width() - 1 && - qt_paperSizes[i][0] <= size.width() + 1 && - qt_paperSizes[i][1] >= size.height() - 1 && - qt_paperSizes[i][1] <= size.height() + 1) { - return QPrinter::PaperSize(i); - } - } - - return QPrinter::Custom; -} - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER |