From 64f94fa373900aca357f5f94c5ef16f481dc11b7 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 16 Aug 2011 13:53:57 +0200 Subject: move printing related files into their own directory This is done to prepare the next step where we move printing into it's own module. Change-Id: I95919c28079983e7c5e4ff23d223f8c062b8ac8c Reviewed-on: http://codereview.qt.nokia.com/3205 Reviewed-by: Qt Sanity Bot Reviewed-by: Gunnar Sletta --- src/gui/painting/painting.pri | 84 +- src/gui/painting/qcups.cpp | 446 ----- src/gui/painting/qcups_p.h | 133 -- src/gui/painting/qpaintengine_alpha.cpp | 516 ----- src/gui/painting/qpaintengine_alpha_p.h | 135 -- src/gui/painting/qpaintengine_preview.cpp | 223 --- src/gui/painting/qpaintengine_preview_p.h | 106 - src/gui/painting/qplatformprintersupport_qpa.cpp | 133 -- src/gui/painting/qplatformprintersupport_qpa.h | 84 - src/gui/painting/qprintengine.h | 119 -- src/gui/painting/qprintengine_pdf.cpp | 648 ------ src/gui/painting/qprintengine_pdf_p.h | 163 -- src/gui/painting/qprinter.cpp | 2280 ---------------------- src/gui/painting/qprinter.h | 283 --- src/gui/painting/qprinter_p.h | 136 -- src/gui/painting/qprinterinfo.cpp | 199 -- src/gui/painting/qprinterinfo.h | 91 - src/gui/painting/qprinterinfo_p.h | 108 - src/gui/painting/qprinterinfo_unix.cpp | 857 -------- src/gui/painting/qprinterinfo_unix_p.h | 130 -- 20 files changed, 2 insertions(+), 6872 deletions(-) delete mode 100644 src/gui/painting/qcups.cpp delete mode 100644 src/gui/painting/qcups_p.h delete mode 100644 src/gui/painting/qpaintengine_alpha.cpp delete mode 100644 src/gui/painting/qpaintengine_alpha_p.h delete mode 100644 src/gui/painting/qpaintengine_preview.cpp delete mode 100644 src/gui/painting/qpaintengine_preview_p.h delete mode 100644 src/gui/painting/qplatformprintersupport_qpa.cpp delete mode 100644 src/gui/painting/qplatformprintersupport_qpa.h delete mode 100644 src/gui/painting/qprintengine.h delete mode 100644 src/gui/painting/qprintengine_pdf.cpp delete mode 100644 src/gui/painting/qprintengine_pdf_p.h delete mode 100644 src/gui/painting/qprinter.cpp delete mode 100644 src/gui/painting/qprinter.h delete mode 100644 src/gui/painting/qprinter_p.h delete mode 100644 src/gui/painting/qprinterinfo.cpp delete mode 100644 src/gui/painting/qprinterinfo.h delete mode 100644 src/gui/painting/qprinterinfo_p.h delete mode 100644 src/gui/painting/qprinterinfo_unix.cpp delete mode 100644 src/gui/painting/qprinterinfo_unix_p.h (limited to 'src/gui/painting') diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 2925d6acce..b12b2216a7 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -14,8 +14,6 @@ HEADERS += \ painting/qpaintdevice.h \ painting/qpaintengine.h \ painting/qpaintengine_p.h \ - painting/qpaintengine_alpha_p.h \ - painting/qpaintengine_preview_p.h \ painting/qpaintengineex_p.h \ painting/qpainter.h \ painting/qpainter_p.h \ @@ -28,11 +26,6 @@ HEADERS += \ painting/qpen.h \ painting/qpolygon.h \ painting/qpolygonclipper_p.h \ - painting/qprintengine.h \ - painting/qprinter.h \ - painting/qprinter_p.h \ - painting/qprinterinfo.h \ - painting/qprinterinfo_p.h \ painting/qrasterizer_p.h \ painting/qregion.h \ painting/qstroker_p.h \ @@ -45,6 +38,7 @@ HEADERS += \ SOURCES += \ painting/qbackingstore.cpp \ + painting/qcolormap_qpa.cpp \ painting/qbezier.cpp \ painting/qblendfunctions.cpp \ painting/qbrush.cpp \ @@ -57,9 +51,8 @@ SOURCES += \ painting/qmemrotate.cpp \ painting/qoutlinemapper.cpp \ painting/qpaintdevice.cpp \ + painting/qpaintdevice_qpa.cpp \ painting/qpaintengine.cpp \ - painting/qpaintengine_alpha.cpp \ - painting/qpaintengine_preview.cpp \ painting/qpaintengineex.cpp \ painting/qpainter.cpp \ painting/qpainterpath.cpp \ @@ -68,9 +61,6 @@ SOURCES += \ painting/qpdfwriter.cpp \ painting/qpen.cpp \ painting/qpolygon.cpp \ - painting/qprintengine_pdf.cpp \ - painting/qprinter.cpp \ - painting/qprinterinfo.cpp \ painting/qrasterizer.cpp \ painting/qregion.cpp \ painting/qstroker.cpp \ @@ -97,77 +87,7 @@ SOURCES += \ painting/qpaintengine_blitter_p.h \ painting/qblittable_p.h \ -win32:!qpa { - HEADERS += painting/qprintengine_win_p.h - SOURCES += \ - painting/qcolormap_win.cpp \ - painting/qpaintdevice_win.cpp \ - painting/qprintengine_win.cpp - - !win32-borland:!wince*:LIBS += -lmsimg32 -} - - -unix:x11 { - HEADERS += \ - painting/qpaintengine_x11_p.h - - SOURCES += \ - painting/qcolormap_x11.cpp \ - painting/qpaintdevice_x11.cpp \ - painting/qpaintengine_x11.cpp -} - -!qpa:!x11:mac { - HEADERS += \ - painting/qpaintengine_mac_p.h \ - painting/qprintengine_mac_p.h - - SOURCES += \ - painting/qcolormap_mac.cpp \ - painting/qpaintdevice_mac.cpp \ - painting/qpaintengine_mac.cpp \ - painting/qprinterinfo_mac.cpp - OBJECTIVE_SOURCES += \ - painting/qprintengine_mac.mm \ -} - -unix:!symbian { - HEADERS += \ - painting/qprinterinfo_unix_p.h - SOURCES += \ - painting/qprinterinfo_unix.cpp -} - -qpa { - HEADERS += painting/qplatformprintersupport_qpa.h - SOURCES += \ - painting/qcolormap_qpa.cpp \ - painting/qpaintdevice_qpa.cpp \ - painting/qplatformprintersupport_qpa.cpp -} - -symbian { - SOURCES += \ - painting/qpaintengine_s60.cpp \ - painting/qregion_s60.cpp \ - painting/qcolormap_s60.cpp - - HEADERS += \ - painting/qpaintengine_s60_p.h -} - -x11|qpa:!win32 { - contains(QT_CONFIG,qtopia) { - DEFINES += QT_NO_CUPS QT_NO_LPR - } else { - SOURCES += painting/qcups.cpp - HEADERS += painting/qcups_p.h - } -} else { - DEFINES += QT_NO_CUPS QT_NO_LPR -} if(mmx|3dnow|sse|sse2|iwmmxt) { HEADERS += painting/qdrawhelper_x86_p.h \ diff --git a/src/gui/painting/qcups.cpp b/src/gui/painting/qcups.cpp deleted file mode 100644 index 76050d9d71..0000000000 --- a/src/gui/painting/qcups.cpp +++ /dev/null @@ -1,446 +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 -#include "qcups_p.h" -#include "qprinterinfo_unix_p.h" - -#ifndef QT_NO_CUPS - -#ifndef QT_LINUXBASE // LSB merges everything into cups.h -# include -#endif -#include - -QT_BEGIN_NAMESPACE - -typedef int (*CupsGetDests)(cups_dest_t **dests); -typedef void (*CupsFreeDests)(int num_dests, cups_dest_t *dests); -typedef const char* (*CupsGetPPD)(const char *printer); -typedef int (*CupsMarkOptions)(ppd_file_t *ppd, int num_options, cups_option_t *options); -typedef ppd_file_t* (*PPDOpenFile)(const char *filename); -typedef void (*PPDMarkDefaults)(ppd_file_t *ppd); -typedef int (*PPDMarkOption)(ppd_file_t *ppd, const char *keyword, const char *option); -typedef void (*PPDClose)(ppd_file_t *ppd); -typedef int (*PPDMarkOption)(ppd_file_t *ppd, const char *keyword, const char *option); -typedef void (*CupsFreeOptions)(int num_options, cups_option_t *options); -typedef void (*CupsSetDests)(int num_dests, cups_dest_t *dests); -typedef cups_lang_t* (*CupsLangGet)(const char *language); -typedef const char* (*CupsLangEncoding)(cups_lang_t *language); -typedef int (*CupsAddOption)(const char *name, const char *value, int num_options, cups_option_t **options); -typedef int (*CupsTempFd)(char *name, int len); -typedef int (*CupsPrintFile)(const char * name, const char * filename, const char * title, int num_options, cups_option_t * options); - -static bool cupsLoaded = false; -static int qt_cups_num_printers = 0; -static CupsGetDests _cupsGetDests = 0; -static CupsFreeDests _cupsFreeDests = 0; -static CupsGetPPD _cupsGetPPD = 0; -static PPDOpenFile _ppdOpenFile = 0; -static PPDMarkDefaults _ppdMarkDefaults = 0; -static PPDClose _ppdClose = 0; -static CupsMarkOptions _cupsMarkOptions = 0; -static PPDMarkOption _ppdMarkOption = 0; -static CupsFreeOptions _cupsFreeOptions = 0; -static CupsSetDests _cupsSetDests = 0; -static CupsLangGet _cupsLangGet = 0; -static CupsLangEncoding _cupsLangEncoding = 0; -static CupsAddOption _cupsAddOption = 0; -static CupsTempFd _cupsTempFd = 0; -static CupsPrintFile _cupsPrintFile = 0; - -static void resolveCups() -{ - QLibrary cupsLib(QLatin1String("cups"), 2); - if(cupsLib.load()) { - _cupsGetDests = (CupsGetDests) cupsLib.resolve("cupsGetDests"); - _cupsFreeDests = (CupsFreeDests) cupsLib.resolve("cupsFreeDests"); - _cupsGetPPD = (CupsGetPPD) cupsLib.resolve("cupsGetPPD"); - _cupsLangGet = (CupsLangGet) cupsLib.resolve("cupsLangGet"); - _cupsLangEncoding = (CupsLangEncoding) cupsLib.resolve("cupsLangEncoding"); - _ppdOpenFile = (PPDOpenFile) cupsLib.resolve("ppdOpenFile"); - _ppdMarkDefaults = (PPDMarkDefaults) cupsLib.resolve("ppdMarkDefaults"); - _ppdClose = (PPDClose) cupsLib.resolve("ppdClose"); - _cupsMarkOptions = (CupsMarkOptions) cupsLib.resolve("cupsMarkOptions"); - _ppdMarkOption = (PPDMarkOption) cupsLib.resolve("ppdMarkOption"); - _cupsFreeOptions = (CupsFreeOptions) cupsLib.resolve("cupsFreeOptions"); - _cupsSetDests = (CupsSetDests) cupsLib.resolve("cupsSetDests"); - _cupsAddOption = (CupsAddOption) cupsLib.resolve("cupsAddOption"); - _cupsTempFd = (CupsTempFd) cupsLib.resolve("cupsTempFd"); - _cupsPrintFile = (CupsPrintFile) cupsLib.resolve("cupsPrintFile"); - - if (_cupsGetDests && _cupsFreeDests) { - cups_dest_t *printers; - int num_printers = _cupsGetDests(&printers); - if (num_printers) - _cupsFreeDests(num_printers, printers); - qt_cups_num_printers = num_printers; - } - } - cupsLoaded = true; -} - -// ================ CUPS Support class ======================== - -QCUPSSupport::QCUPSSupport() - : - prnCount(0), - printers(0), - page_sizes(0), - currPrinterIndex(0), - currPPD(0) -{ - if (!cupsLoaded) - resolveCups(); - - // getting all available printers - if (!isAvailable()) - return; - - prnCount = _cupsGetDests(&printers); - - for (int i = 0; i < prnCount; ++i) { - if (printers[i].is_default) { - currPrinterIndex = i; - setCurrentPrinter(i); - break; - } - } - -#ifndef QT_NO_TEXTCODEC - cups_lang_t *cupsLang = _cupsLangGet(0); - codec = QTextCodec::codecForName(_cupsLangEncoding(cupsLang)); - if (!codec) - codec = QTextCodec::codecForLocale(); -#endif -} - -QCUPSSupport::~QCUPSSupport() -{ - if (currPPD) - _ppdClose(currPPD); - if (prnCount) - _cupsFreeDests(prnCount, printers); -} - -int QCUPSSupport::availablePrintersCount() const -{ - return prnCount; -} - -const cups_dest_t* QCUPSSupport::availablePrinters() const -{ - return printers; -} - -const ppd_file_t* QCUPSSupport::currentPPD() const -{ - return currPPD; -} - -const ppd_file_t* QCUPSSupport::setCurrentPrinter(int index) -{ - Q_ASSERT(index >= 0 && index <= prnCount); - if (index == prnCount) - return 0; - - currPrinterIndex = index; - - if (currPPD) - _ppdClose(currPPD); - currPPD = 0; - page_sizes = 0; - - const char *ppdFile = _cupsGetPPD(printers[index].name); - - if (!ppdFile) - return 0; - - currPPD = _ppdOpenFile(ppdFile); - unlink(ppdFile); - - // marking default options - _ppdMarkDefaults(currPPD); - - // marking options explicitly set - _cupsMarkOptions(currPPD, printers[currPrinterIndex].num_options, printers[currPrinterIndex].options); - - // getting pointer to page sizes - page_sizes = ppdOption("PageSize"); - - return currPPD; -} - -int QCUPSSupport::currentPrinterIndex() const -{ - return currPrinterIndex; -} - -bool QCUPSSupport::isAvailable() -{ - if(!cupsLoaded) - resolveCups(); - - return _cupsGetDests && - _cupsFreeDests && - _cupsGetPPD && - _ppdOpenFile && - _ppdMarkDefaults && - _ppdClose && - _cupsMarkOptions && - _ppdMarkOption && - _cupsFreeOptions && - _cupsSetDests && - _cupsLangGet && - _cupsLangEncoding && - _cupsAddOption && - (qt_cups_num_printers > 0); -} - -const ppd_option_t* QCUPSSupport::ppdOption(const char *key) const -{ - if (currPPD) { - for (int gr = 0; gr < currPPD->num_groups; ++gr) { - for (int opt = 0; opt < currPPD->groups[gr].num_options; ++opt) { - if (qstrcmp(currPPD->groups[gr].options[opt].keyword, key) == 0) - return &currPPD->groups[gr].options[opt]; - } - } - } - return 0; -} - -const cups_option_t* QCUPSSupport::printerOption(const QString &key) const -{ - for (int i = 0; i < printers[currPrinterIndex].num_options; ++i) { - if (QLatin1String(printers[currPrinterIndex].options[i].name) == key) - return &printers[currPrinterIndex].options[i]; - } - return 0; -} - -const ppd_option_t* QCUPSSupport::pageSizes() const -{ - return page_sizes; -} - -int QCUPSSupport::markOption(const char* name, const char* value) -{ - return _ppdMarkOption(currPPD, name, value); -} - -void QCUPSSupport::saveOptions(QList options, QList markedOptions) -{ - int oldOptionCount = printers[currPrinterIndex].num_options; - cups_option_t* oldOptions = printers[currPrinterIndex].options; - - int newOptionCount = 0; - cups_option_t* newOptions = 0; - - // copying old options that are not on the new list - for (int i = 0; i < oldOptionCount; ++i) { - bool contains = false; - for (int j = 0; j < options.count(); ++j) { - if (qstrcmp(options.at(j)->keyword, oldOptions[i].name) == 0) { - contains = true; - break; - } - } - - if (!contains) { - newOptionCount = _cupsAddOption(oldOptions[i].name, oldOptions[i].value, newOptionCount, &newOptions); - } - } - - // we can release old option list - _cupsFreeOptions(oldOptionCount, oldOptions); - - // adding marked options - for (int i = 0; i < markedOptions.count(); ++i) { - const char* name = markedOptions.at(i); - ++i; - newOptionCount = _cupsAddOption(name, markedOptions.at(i), newOptionCount, &newOptions); - } - - // placing the new option list - printers[currPrinterIndex].num_options = newOptionCount; - printers[currPrinterIndex].options = newOptions; - - // saving new default values - _cupsSetDests(prnCount, printers); -} - -QRect QCUPSSupport::paperRect(const char *choice) const -{ - if (!currPPD) - return QRect(); - for (int i = 0; i < currPPD->num_sizes; ++i) { - if (qstrcmp(currPPD->sizes[i].name, choice) == 0) - return QRect(0, 0, qRound(currPPD->sizes[i].width), qRound(currPPD->sizes[i].length)); - } - return QRect(); -} - -QRect QCUPSSupport::pageRect(const char *choice) const -{ - if (!currPPD) - return QRect(); - for (int i = 0; i < currPPD->num_sizes; ++i) { - if (qstrcmp(currPPD->sizes[i].name, choice) == 0) - return QRect(qRound(currPPD->sizes[i].left), - qRound(currPPD->sizes[i].length - currPPD->sizes[i].top), - qRound(currPPD->sizes[i].right - currPPD->sizes[i].left), - qRound(currPPD->sizes[i].top - currPPD->sizes[i].bottom)); - } - return QRect(); -} - -QStringList QCUPSSupport::options() const -{ - QStringList list; - collectMarkedOptions(list); - return list; -} - -bool QCUPSSupport::printerHasPPD(const char *printerName) -{ - if (!isAvailable()) - return false; - const char *ppdFile = _cupsGetPPD(printerName); - if (ppdFile) - unlink(ppdFile); - return (ppdFile != 0); -} - -QString QCUPSSupport::unicodeString(const char *s) -{ -#ifndef QT_NO_TEXTCODEC - return codec->toUnicode(s); -#else - return QLatin1String(s); -#endif -} - -void QCUPSSupport::collectMarkedOptions(QStringList& list, const ppd_group_t* group) const -{ - if (group == 0) { - if (!currPPD) - return; - for (int i = 0; i < currPPD->num_groups; ++i) { - collectMarkedOptions(list, &currPPD->groups[i]); - collectMarkedOptionsHelper(list, &currPPD->groups[i]); - } - } else { - for (int i = 0; i < group->num_subgroups; ++i) - collectMarkedOptionsHelper(list, &group->subgroups[i]); - } -} - -void QCUPSSupport::collectMarkedOptionsHelper(QStringList& list, const ppd_group_t* group) const -{ - for (int i = 0; i < group->num_options; ++i) { - for (int j = 0; j < group->options[i].num_choices; ++j) { - if (group->options[i].choices[j].marked == 1 && qstrcmp(group->options[i].choices[j].choice, group->options[i].defchoice) != 0) - list << QString::fromLocal8Bit(group->options[i].keyword) << QString::fromLocal8Bit(group->options[i].choices[j].choice); - } - } -} - -QPair QCUPSSupport::tempFd() -{ - char filename[512]; - int fd = _cupsTempFd(filename, 512); - return QPair(fd, QString::fromLocal8Bit(filename)); -} - -// Prints the given file and returns a job id. -int QCUPSSupport::printFile(const char * printerName, const char * filename, const char * title, - int num_options, cups_option_t * options) -{ - return _cupsPrintFile(printerName, filename, title, num_options, options); -} - -QCUPSSupport::Printer::Printer(const QString &n) : name(n), isDefault(false), cupsPrinterIndex(-1) -{ -} - -QList QCUPSSupport::availableUnixPrinters() -{ - QList printers; - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (QCUPSSupport::isAvailable()) { - QCUPSSupport cups; - int cupsPrinterCount = cups.availablePrintersCount(); - const cups_dest_t* cupsPrinters = cups.availablePrinters(); - for (int i = 0; i < cupsPrinterCount; ++i) { - QString printerName(QString::fromLocal8Bit(cupsPrinters[i].name)); - if (cupsPrinters[i].instance) - printerName += QLatin1Char('/') + QString::fromLocal8Bit(cupsPrinters[i].instance); - - Printer p(printerName); - if (cupsPrinters[i].is_default) - p.isDefault = true; - p.cupsPrinterIndex = i; - printers.append(p); - } - } else -#endif - { - QList lprPrinters; - int defprn = qt_getLprPrinters(lprPrinters); - // populating printer combo - foreach (const QPrinterDescription &description, lprPrinters) - printers.append(Printer(description.name)); - if (defprn >= 0 && defprn < printers.size()) - printers[defprn].isDefault = true; - } - - return printers; -} - -QList QCUPSSupport::getCupsPrinterPaperSizes(int cupsPrinterIndex) -{ - return qt_getCupsPrinterPaperSizes(cupsPrinterIndex); -} - -QT_END_NAMESPACE - -#endif // QT_NO_CUPS diff --git a/src/gui/painting/qcups_p.h b/src/gui/painting/qcups_p.h deleted file mode 100644 index 6b6a55a440..0000000000 --- a/src/gui/painting/qcups_p.h +++ /dev/null @@ -1,133 +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$ -** -****************************************************************************/ - -#ifndef QCUPS_P_H -#define QCUPS_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// -#include "QtCore/qstring.h" -#include "QtCore/qstringlist.h" -#include "QtCore/qpair.h" -#include "QtGui/qprinter.h" - -#ifndef QT_NO_CUPS -#include -#include -#include - -QT_BEGIN_NAMESPACE - -Q_DECLARE_TYPEINFO(cups_option_t, Q_MOVABLE_TYPE | Q_PRIMITIVE_TYPE); - -class Q_GUI_EXPORT QCUPSSupport -{ -public: - struct Printer - { - Printer(const QString &name = QString()); - - QString name; - bool isDefault; - int cupsPrinterIndex; - }; - QCUPSSupport(); - ~QCUPSSupport(); - - static bool isAvailable(); - static int cupsVersion() { return isAvailable() ? CUPS_VERSION_MAJOR*10000+CUPS_VERSION_MINOR*100+CUPS_VERSION_PATCH : 0; } - int availablePrintersCount() const; - const cups_dest_t* availablePrinters() const; - int currentPrinterIndex() const; - const ppd_file_t* setCurrentPrinter(int index); - - const ppd_file_t* currentPPD() const; - const ppd_option_t* ppdOption(const char *key) const; - - const cups_option_t* printerOption(const QString &key) const; - const ppd_option_t* pageSizes() const; - - int markOption(const char* name, const char* value); - void saveOptions(QList options, QList markedOptions); - - QRect paperRect(const char *choice) const; - QRect pageRect(const char *choice) const; - - QStringList options() const; - - static bool printerHasPPD(const char *printerName); - - QString unicodeString(const char *s); - - QPair tempFd(); - int printFile(const char * printerName, const char * filename, const char * title, - int num_options, cups_option_t * options); - - static QList availableUnixPrinters(); - static QList getCupsPrinterPaperSizes(int cupsPrinterIndex); - -private: - void collectMarkedOptions(QStringList& list, const ppd_group_t* group = 0) const; - void collectMarkedOptionsHelper(QStringList& list, const ppd_group_t* group) const; - - int prnCount; - cups_dest_t *printers; - const ppd_option_t* page_sizes; - int currPrinterIndex; - ppd_file_t *currPPD; -#ifndef QT_NO_TEXTCODEC - QTextCodec *codec; -#endif -}; - -QT_END_NAMESPACE - -#endif // QT_NO_CUPS - -#endif diff --git a/src/gui/painting/qpaintengine_alpha.cpp b/src/gui/painting/qpaintengine_alpha.cpp deleted file mode 100644 index beda2c7144..0000000000 --- a/src/gui/painting/qpaintengine_alpha.cpp +++ /dev/null @@ -1,516 +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 - -#ifndef QT_NO_PRINTER -#include -#include "private/qpaintengine_alpha_p.h" - -#include "private/qpicture_p.h" -#include "private/qfont_p.h" -#include "QtGui/qpicture.h" - -QT_BEGIN_NAMESPACE - -QAlphaPaintEngine::QAlphaPaintEngine(QAlphaPaintEnginePrivate &data, PaintEngineFeatures devcaps) - : QPaintEngine(data, devcaps) -{ - -} - -QAlphaPaintEngine::~QAlphaPaintEngine() -{ - -} - -bool QAlphaPaintEngine::begin(QPaintDevice *pdev) -{ - Q_D(QAlphaPaintEngine); - - d->m_continueCall = true; - if (d->m_pass != 0) { - return true; - } - - d->m_savedcaps = gccaps; - d->m_pdev = pdev; - - d->m_alphaPen = false; - d->m_alphaBrush = false; - d->m_alphaOpacity = false; - d->m_hasalpha = false; - d->m_advancedPen = false; - d->m_advancedBrush = false; - d->m_complexTransform = false; - d->m_emulateProjectiveTransforms = false; - - // clear alpha region - d->m_alphargn = QRegion(); - d->m_cliprgn = QRegion(); - d->m_pen = QPen(); - d->m_transform = QTransform(); - - flushAndInit(); - - return true; -} - -bool QAlphaPaintEngine::end() -{ - Q_D(QAlphaPaintEngine); - - d->m_continueCall = true; - if (d->m_pass != 0) { - return true; - } - - flushAndInit(false); - return true; -} - -void QAlphaPaintEngine::updateState(const QPaintEngineState &state) -{ - Q_D(QAlphaPaintEngine); - - DirtyFlags flags = state.state(); - if (flags & QPaintEngine::DirtyTransform) { - d->m_transform = state.transform(); - d->m_complexTransform = (d->m_transform.type() > QTransform::TxScale); - d->m_emulateProjectiveTransforms = !(d->m_savedcaps & QPaintEngine::PerspectiveTransform) - && !(d->m_savedcaps & QPaintEngine::AlphaBlend) - && (d->m_transform.type() >= QTransform::TxProject); - } - if (flags & QPaintEngine::DirtyPen) { - d->m_pen = state.pen(); - if (d->m_pen.style() == Qt::NoPen) { - d->m_advancedPen = false; - d->m_alphaPen = false; - } else { - d->m_advancedPen = (d->m_pen.brush().style() != Qt::SolidPattern); - d->m_alphaPen = !d->m_pen.brush().isOpaque(); - } - } - - if (d->m_pass != 0) { - d->m_continueCall = true; - return; - } - d->m_continueCall = false; - - if (flags & QPaintEngine::DirtyOpacity) { - d->m_alphaOpacity = (state.opacity() != 1.0f); - } - - if (flags & QPaintEngine::DirtyBrush) { - if (state.brush().style() == Qt::NoBrush) { - d->m_advancedBrush = false; - d->m_alphaBrush = false; - } else { - d->m_advancedBrush = (state.brush().style() != Qt::SolidPattern); - d->m_alphaBrush = !state.brush().isOpaque(); - } - } - - - d->m_hasalpha = d->m_alphaOpacity || d->m_alphaBrush || d->m_alphaPen; - - if (d->m_picengine) - d->m_picengine->updateState(state); -} - -void QAlphaPaintEngine::drawPath(const QPainterPath &path) -{ - Q_D(QAlphaPaintEngine); - - QRectF tr = d->addPenWidth(path); - - if (d->m_pass == 0) { - d->m_continueCall = false; - if (d->m_hasalpha || d->m_advancedPen || d->m_advancedBrush - || d->m_emulateProjectiveTransforms) - { - d->addAlphaRect(tr); - } - if (d->m_picengine) - d->m_picengine->drawPath(path); - } else { - d->m_continueCall = !d->fullyContained(tr); - } -} - -void QAlphaPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) -{ - Q_D(QAlphaPaintEngine); - - QPolygonF poly; - for (int i=0; iaddPenWidth(path); - - if (d->m_pass == 0) { - d->m_continueCall = false; - if (d->m_hasalpha || d->m_advancedPen || d->m_advancedBrush - || d->m_emulateProjectiveTransforms) - { - d->addAlphaRect(tr); - } - - if (d->m_picengine) - d->m_picengine->drawPolygon(points, pointCount, mode); - } else { - d->m_continueCall = !d->fullyContained(tr); - } -} - -void QAlphaPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) -{ - Q_D(QAlphaPaintEngine); - - QRectF tr = d->m_transform.mapRect(r); - if (d->m_pass == 0) { - d->m_continueCall = false; - if (pm.hasAlpha() || d->m_alphaOpacity || d->m_complexTransform || pm.isQBitmap()) { - d->addAlphaRect(tr); - } - - if (d->m_picengine) - d->m_picengine->drawPixmap(r, pm, sr); - - } else { - d->m_continueCall = !d->fullyContained(tr); - } -} - -void QAlphaPaintEngine::drawImage(const QRectF &r, const QImage &image, const QRectF &sr) -{ - Q_D(QAlphaPaintEngine); - - QRectF tr = d->m_transform.mapRect(r); - if (d->m_pass == 0) { - d->m_continueCall = false; - if (image.hasAlphaChannel() || d->m_alphaOpacity || d->m_complexTransform) { - d->addAlphaRect(tr); - } - - if (d->m_picengine) - d->m_picengine->drawImage(r, image, sr); - - } else { - d->m_continueCall = !d->fullyContained(tr); - } -} - -void QAlphaPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem) -{ - Q_D(QAlphaPaintEngine); - - QRectF tr(p.x(), p.y() - textItem.ascent(), textItem.width() + 5, textItem.ascent() + textItem.descent() + 5); - tr = d->m_transform.mapRect(tr); - - if (d->m_pass == 0) { - d->m_continueCall = false; - if (d->m_alphaPen || d->m_alphaOpacity || d->m_advancedPen) { - d->addAlphaRect(tr); - } - if (d->m_picengine) { - d->m_picengine->drawTextItem(p, textItem); - } - } else { - d->m_continueCall = !d->fullyContained(tr); - } -} - -void QAlphaPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) -{ - Q_D(QAlphaPaintEngine); - - QRectF brect = d->m_transform.mapRect(r); - - if (d->m_pass == 0) { - d->m_continueCall = false; - if (pixmap.hasAlpha() || d->m_alphaOpacity || d->m_complexTransform || pixmap.isQBitmap()) { - d->addAlphaRect(brect); - } - if (d->m_picengine) - d->m_picengine->drawTiledPixmap(r, pixmap, s); - } else { - d->m_continueCall = !d->fullyContained(brect); - } -} - -QRegion QAlphaPaintEngine::alphaClipping() const -{ - Q_D(const QAlphaPaintEngine); - return d->m_cliprgn; -} - -bool QAlphaPaintEngine::continueCall() const -{ - Q_D(const QAlphaPaintEngine); - return d->m_continueCall; -} - -void QAlphaPaintEngine::flushAndInit(bool init) -{ - Q_D(QAlphaPaintEngine); - Q_ASSERT(d->m_pass == 0); - - if (d->m_pic) { - d->m_picpainter->end(); - - // set clip region - d->m_alphargn = d->m_alphargn.intersected(QRect(0, 0, d->m_pdev->width(), d->m_pdev->height())); - - // just use the bounding rect if it's a complex region.. - QVector rects = d->m_alphargn.rects(); - if (rects.size() > 10) { - QRect br = d->m_alphargn.boundingRect(); - d->m_alphargn = QRegion(br); - rects.clear(); - rects.append(br); - } - - d->m_cliprgn = d->m_alphargn; - - // now replay the QPicture - ++d->m_pass; // we are now doing pass #2 - - // reset states - gccaps = d->m_savedcaps; - - painter()->save(); - d->resetState(painter()); - - // make sure the output from QPicture is unscaled - QTransform mtx; - mtx.scale(1.0f / (qreal(d->m_pdev->logicalDpiX()) / qreal(qt_defaultDpiX())), - 1.0f / (qreal(d->m_pdev->logicalDpiY()) / qreal(qt_defaultDpiY()))); - painter()->setTransform(mtx); - painter()->drawPicture(0, 0, *d->m_pic); - - d->m_cliprgn = QRegion(); - d->resetState(painter()); - - // fill in the alpha images - for (int i=0; idrawAlphaImage(rects.at(i)); - - d->m_alphargn = QRegion(); - - painter()->restore(); - - --d->m_pass; // pass #2 finished - - cleanUp(); - } - - if (init) { - gccaps = PaintEngineFeatures(AllFeatures & ~QPaintEngine::ObjectBoundingModeGradients); - - d->m_pic = new QPicture(); - d->m_pic->d_ptr->in_memory_only = true; - d->m_picpainter = new QPainter(d->m_pic); - d->m_picengine = d->m_picpainter->paintEngine(); - - // When newPage() is called and the m_picpainter is recreated - // we have to copy the current state of the original printer - // painter back to the m_picpainter - d->m_picpainter->setPen(painter()->pen()); - d->m_picpainter->setBrush(painter()->brush()); - d->m_picpainter->setBrushOrigin(painter()->brushOrigin()); - d->m_picpainter->setFont(painter()->font()); - d->m_picpainter->setOpacity(painter()->opacity()); - d->m_picpainter->setTransform(painter()->combinedTransform()); - d->m_picengine->syncState(); - } -} - -void QAlphaPaintEngine::cleanUp() -{ - Q_D(QAlphaPaintEngine); - - delete d->m_picpainter; - delete d->m_pic; - - d->m_picpainter = 0; - d->m_pic = 0; - d->m_picengine = 0; -} - -QAlphaPaintEnginePrivate::QAlphaPaintEnginePrivate() - : m_pass(0), - m_pic(0), - m_picengine(0), - m_picpainter(0), - m_hasalpha(false), - m_alphaPen(false), - m_alphaBrush(false), - m_alphaOpacity(false), - m_advancedPen(false), - m_advancedBrush(false), - m_complexTransform(false) -{ - -} - -QAlphaPaintEnginePrivate::~QAlphaPaintEnginePrivate() -{ - delete m_picpainter; - delete m_pic; -} - -QRectF QAlphaPaintEnginePrivate::addPenWidth(const QPainterPath &path) -{ - QPainterPath tmp = path; - - if (m_pen.style() == Qt::NoPen) - return (path.controlPointRect() * m_transform).boundingRect(); - if (m_pen.isCosmetic()) - tmp = path * m_transform; - - QPainterPathStroker stroker; - if (m_pen.widthF() == 0.0f) - stroker.setWidth(1.0); - else - stroker.setWidth(m_pen.widthF()); - stroker.setJoinStyle(m_pen.joinStyle()); - stroker.setCapStyle(m_pen.capStyle()); - tmp = stroker.createStroke(tmp); - if (m_pen.isCosmetic()) - return tmp.controlPointRect(); - - return (tmp.controlPointRect() * m_transform).boundingRect(); -} - -QRect QAlphaPaintEnginePrivate::toRect(const QRectF &rect) const -{ - QRect r; - r.setLeft(int(rect.left())); - r.setTop(int(rect.top())); - r.setRight(int(rect.right() + 1)); - r.setBottom(int(rect.bottom() + 1)); - return r; -} - -void QAlphaPaintEnginePrivate::addAlphaRect(const QRectF &rect) -{ - m_alphargn |= toRect(rect); -} - -void QAlphaPaintEnginePrivate::drawAlphaImage(const QRectF &rect) -{ - Q_Q(QAlphaPaintEngine); - - qreal dpiX = qMax(m_pdev->logicalDpiX(), 300); - qreal dpiY = qMax(m_pdev->logicalDpiY(), 300); - qreal xscale = (dpiX / m_pdev->logicalDpiX()); - qreal yscale = (dpiY / m_pdev->logicalDpiY()); - - QTransform picscale; - picscale.scale(xscale, yscale); - - const int tileSize = 2048; - QSize size((int(rect.width() * xscale)), int(rect.height() * yscale)); - int divw = (size.width() / tileSize); - int divh = (size.height() / tileSize); - divw += 1; - divh += 1; - - int incx = int(rect.width() / divw); - int incy = int(rect.height() / divh); - - for (int y=0; ypainter()->setTransform(QTransform()); - QRect r(xpos, ypos, width, height); - q->painter()->drawImage(r, img); - } - } -} - -bool QAlphaPaintEnginePrivate::fullyContained(const QRectF &rect) const -{ - QRegion r(toRect(rect)); - return (m_cliprgn.intersected(r) == r); -} - -void QAlphaPaintEnginePrivate::resetState(QPainter *p) -{ - p->setPen(QPen()); - p->setBrush(QBrush()); - p->setBrushOrigin(0,0); - p->setBackground(QBrush()); - p->setFont(QFont()); - p->setTransform(QTransform()); - // The view transform is already recorded and included in the - // picture we're about to replay. If we don't turn if off, - // the view matrix will be applied twice. - p->setViewTransformEnabled(false); - p->setClipRegion(QRegion(), Qt::NoClip); - p->setClipPath(QPainterPath(), Qt::NoClip); - p->setClipping(false); - p->setOpacity(1.0f); -} - - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER diff --git a/src/gui/painting/qpaintengine_alpha_p.h b/src/gui/painting/qpaintengine_alpha_p.h deleted file mode 100644 index 5694e2a5bc..0000000000 --- a/src/gui/painting/qpaintengine_alpha_p.h +++ /dev/null @@ -1,135 +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$ -** -****************************************************************************/ - -#ifndef QPAINTENGINE_ALPHA_P_H -#define QPAINTENGINE_ALPHA_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#ifndef QT_NO_PRINTER -#include "private/qpaintengine_p.h" - -QT_BEGIN_NAMESPACE - -class QAlphaPaintEnginePrivate; - -class QAlphaPaintEngine : public QPaintEngine -{ - Q_DECLARE_PRIVATE(QAlphaPaintEngine) -public: - ~QAlphaPaintEngine(); - - virtual bool begin(QPaintDevice *pdev); - virtual bool end(); - - virtual void updateState(const QPaintEngineState &state); - - virtual void drawPath(const QPainterPath &path); - - virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); - - virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr); - virtual void drawImage(const QRectF &r, const QImage &image, const QRectF &sr); - virtual void drawTextItem(const QPointF &p, const QTextItem &textItem); - virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s); - -protected: - QAlphaPaintEngine(QAlphaPaintEnginePrivate &data, PaintEngineFeatures devcaps = 0); - QRegion alphaClipping() const; - bool continueCall() const; - void flushAndInit(bool init = true); - void cleanUp(); -}; - -class QAlphaPaintEnginePrivate : public QPaintEnginePrivate -{ - Q_DECLARE_PUBLIC(QAlphaPaintEngine) -public: - QAlphaPaintEnginePrivate(); - ~QAlphaPaintEnginePrivate(); - - int m_pass; - QPicture *m_pic; - QPaintEngine *m_picengine; - QPainter *m_picpainter; - - QPaintEngine::PaintEngineFeatures m_savedcaps; - QPaintDevice *m_pdev; - - QRegion m_alphargn; - QRegion m_cliprgn; - - bool m_hasalpha; - bool m_alphaPen; - bool m_alphaBrush; - bool m_alphaOpacity; - bool m_advancedPen; - bool m_advancedBrush; - bool m_complexTransform; - bool m_emulateProjectiveTransforms; - bool m_continueCall; - - QTransform m_transform; - QPen m_pen; - - void addAlphaRect(const QRectF &rect); - QRectF addPenWidth(const QPainterPath &path); - void drawAlphaImage(const QRectF &rect); - QRect toRect(const QRectF &rect) const; - bool fullyContained(const QRectF &rect) const; - - void resetState(QPainter *p); -}; - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER - -#endif // QPAINTENGINE_ALPHA_P_H diff --git a/src/gui/painting/qpaintengine_preview.cpp b/src/gui/painting/qpaintengine_preview.cpp deleted file mode 100644 index d3b7756516..0000000000 --- a/src/gui/painting/qpaintengine_preview.cpp +++ /dev/null @@ -1,223 +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 -#include -#include -#include - -#include -#include -#include - -#ifndef QT_NO_PRINTPREVIEWWIDGET -QT_BEGIN_NAMESPACE - -class QPreviewPaintEnginePrivate : public QPaintEnginePrivate -{ - Q_DECLARE_PUBLIC(QPreviewPaintEngine) -public: - QPreviewPaintEnginePrivate() : state(QPrinter::Idle) {} - ~QPreviewPaintEnginePrivate() {} - - QList pages; - QPaintEngine *engine; - QPainter *painter; - QPrinter::PrinterState state; - - QPaintEngine *proxy_paint_engine; - QPrintEngine *proxy_print_engine; -}; - - -QPreviewPaintEngine::QPreviewPaintEngine() - : QPaintEngine(*(new QPreviewPaintEnginePrivate), PaintEngineFeatures(AllFeatures & ~ObjectBoundingModeGradients)) -{ - Q_D(QPreviewPaintEngine); - d->proxy_print_engine = 0; - d->proxy_paint_engine = 0; -} - -QPreviewPaintEngine::~QPreviewPaintEngine() -{ - Q_D(QPreviewPaintEngine); - - qDeleteAll(d->pages); -} - -bool QPreviewPaintEngine::begin(QPaintDevice *) -{ - Q_D(QPreviewPaintEngine); - - qDeleteAll(d->pages); - d->pages.clear(); - - QPicture *page = new QPicture; - page->d_func()->in_memory_only = true; - d->painter = new QPainter(page); - d->engine = d->painter->paintEngine(); - d->pages.append(page); - d->state = QPrinter::Active; - return true; -} - -bool QPreviewPaintEngine::end() -{ - Q_D(QPreviewPaintEngine); - - delete d->painter; - d->painter = 0; - d->engine = 0; - d->state = QPrinter::Idle; - return true; -} - -void QPreviewPaintEngine::updateState(const QPaintEngineState &state) -{ - Q_D(QPreviewPaintEngine); - d->engine->updateState(state); -} - -void QPreviewPaintEngine::drawPath(const QPainterPath &path) -{ - Q_D(QPreviewPaintEngine); - d->engine->drawPath(path); -} - -void QPreviewPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) -{ - Q_D(QPreviewPaintEngine); - d->engine->drawPolygon(points, pointCount, mode); -} - -void QPreviewPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem) -{ - Q_D(QPreviewPaintEngine); - d->engine->drawTextItem(p, textItem); -} - -void QPreviewPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) -{ - Q_D(QPreviewPaintEngine); - d->engine->drawPixmap(r, pm, sr); -} - -void QPreviewPaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p) -{ - Q_D(QPreviewPaintEngine); - d->engine->drawTiledPixmap(r, pm, p); -} - -bool QPreviewPaintEngine::newPage() -{ - Q_D(QPreviewPaintEngine); - - QPicture *page = new QPicture; - page->d_func()->in_memory_only = true; - QPainter *tmp_painter = new QPainter(page); - QPaintEngine *tmp_engine = tmp_painter->paintEngine(); - - // copy the painter state from the original painter - Q_ASSERT(painter()->d_func()->state && tmp_painter->d_func()->state); - *tmp_painter->d_func()->state = *painter()->d_func()->state; - - // composition modes aren't supported on a QPrinter and yields a - // warning, so ignore it for now - tmp_engine->setDirty(DirtyFlags(AllDirty & ~DirtyCompositionMode)); - tmp_engine->syncState(); - - delete d->painter; - d->painter = tmp_painter; - d->pages.append(page); - d->engine = tmp_engine; - return true; -} - -bool QPreviewPaintEngine::abort() -{ - Q_D(QPreviewPaintEngine); - end(); - qDeleteAll(d->pages); - d->state = QPrinter::Aborted; - - return true; -} - -QList QPreviewPaintEngine::pages() -{ - Q_D(QPreviewPaintEngine); - return d->pages; -} - -void QPreviewPaintEngine::setProxyEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine) -{ - Q_D(QPreviewPaintEngine); - d->proxy_print_engine = printEngine; - d->proxy_paint_engine = paintEngine; -} - -void QPreviewPaintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value) -{ - Q_D(QPreviewPaintEngine); - d->proxy_print_engine->setProperty(key, value); -} - -QVariant QPreviewPaintEngine::property(PrintEnginePropertyKey key) const -{ - Q_D(const QPreviewPaintEngine); - return d->proxy_print_engine->property(key); -} - -int QPreviewPaintEngine::metric(QPaintDevice::PaintDeviceMetric id) const -{ - Q_D(const QPreviewPaintEngine); - return d->proxy_print_engine->metric(id); -} - -QPrinter::PrinterState QPreviewPaintEngine::printerState() const -{ - Q_D(const QPreviewPaintEngine); - return d->state; -} - -QT_END_NAMESPACE - -#endif diff --git a/src/gui/painting/qpaintengine_preview_p.h b/src/gui/painting/qpaintengine_preview_p.h deleted file mode 100644 index 902a03bd8f..0000000000 --- a/src/gui/painting/qpaintengine_preview_p.h +++ /dev/null @@ -1,106 +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$ -** -****************************************************************************/ - -#ifndef QPREVIEWPAINTENGINE_P_H -#define QPREVIEWPAINTENGINE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of QPreviewPrinter and friends. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// -// - -#include -#include - -#ifndef QT_NO_PRINTPREVIEWWIDGET - -QT_BEGIN_NAMESPACE - -class QPreviewPaintEnginePrivate; - -class QPreviewPaintEngine : public QPaintEngine, public QPrintEngine -{ - Q_DECLARE_PRIVATE(QPreviewPaintEngine) -public: - QPreviewPaintEngine(); - ~QPreviewPaintEngine(); - - bool begin(QPaintDevice *dev); - bool end(); - - void updateState(const QPaintEngineState &state); - - void drawPath(const QPainterPath &path); - void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode); - void drawTextItem(const QPointF &p, const QTextItem &textItem); - - void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr); - void drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &p); - - QList pages(); - - QPaintEngine::Type type() const { return Picture; } - - void setProxyEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); - - void setProperty(PrintEnginePropertyKey key, const QVariant &value); - QVariant property(PrintEnginePropertyKey key) const; - - bool newPage(); - bool abort(); - - int metric(QPaintDevice::PaintDeviceMetric) const; - - QPrinter::PrinterState printerState() const; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTPREVIEWWIDGET - -#endif diff --git a/src/gui/painting/qplatformprintersupport_qpa.cpp b/src/gui/painting/qplatformprintersupport_qpa.cpp deleted file mode 100644 index 9fb25c953f..0000000000 --- a/src/gui/painting/qplatformprintersupport_qpa.cpp +++ /dev/null @@ -1,133 +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 "qplatformprintersupport_qpa.h" - -#include - -#include - -#ifndef QT_NO_PRINTER - -QT_BEGIN_NAMESPACE - -QPlatformPrinterSupport::QPlatformPrinterSupport() -{ -} - -QPlatformPrinterSupport::~QPlatformPrinterSupport() -{ -} - -QPrintEngine *QPlatformPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode) -{ - return 0; -} - -QPaintEngine *QPlatformPrinterSupport::createPaintEngine(QPrintEngine *, QPrinter::PrinterMode) -{ - return 0; -} - -QList QPlatformPrinterSupport::supportedPaperSizes(const QPrinterInfo &) const -{ - return QList(); -} - -QList QPlatformPrinterSupport::availablePrinters() -{ - return QList(); -} - -QPrinterInfo QPlatformPrinterSupport::defaultPrinter() -{ - const QList printers = availablePrinters(); - foreach (const QPrinterInfo &printerInfo, printers) { - if (printerInfo.isDefault()) - return printerInfo; - } - return printers.isEmpty() ? QPrinterInfo() : printers.front(); -} - -QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName, bool isDefault) -{ - QPrinterInfo pi = QPrinterInfo(printerName); - pi.d_func()->isDefault = isDefault; - return pi; -} - -void QPlatformPrinterSupport::setPrinterInfoDefault(QPrinterInfo *p, bool isDefault) -{ - p->d_func()->isDefault = isDefault; -} - -bool QPlatformPrinterSupport::printerInfoIsDefault(const QPrinterInfo &p) -{ - return p.d_func()->isDefault; -} - -int QPlatformPrinterSupport::printerInfoCupsPrinterIndex(const QPrinterInfo &p) -{ - int i = -1; -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (!p.isNull()) - return i = p.d_func()->cupsPrinterIndex; -#endif -#endif - Q_UNUSED(p) - return i; -} - -void QPlatformPrinterSupport::setPrinterInfoCupsPrinterIndex(QPrinterInfo *p, int index) -{ -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - p->d_func()->cupsPrinterIndex = index; -#endif -#endif - Q_UNUSED(p) - Q_UNUSED(index) -} - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER diff --git a/src/gui/painting/qplatformprintersupport_qpa.h b/src/gui/painting/qplatformprintersupport_qpa.h deleted file mode 100644 index 90dd260925..0000000000 --- a/src/gui/painting/qplatformprintersupport_qpa.h +++ /dev/null @@ -1,84 +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$ -** -****************************************************************************/ - -#ifndef QPLATFORMPRINTINGSUPPORT_H -#define QPLATFORMPRINTINGSUPPORT_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -#ifndef QT_NO_PRINTER - -class QPrintEngine; - -class Q_GUI_EXPORT QPlatformPrinterSupport -{ -public: - QPlatformPrinterSupport(); - virtual ~QPlatformPrinterSupport(); - - virtual QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode); - virtual QPaintEngine *createPaintEngine(QPrintEngine *, QPrinter::PrinterMode printerMode); - virtual QList supportedPaperSizes(const QPrinterInfo &) const; - - virtual QList availablePrinters(); - virtual QPrinterInfo defaultPrinter(); - -protected: - static QPrinterInfo printerInfo(const QString &printerName, bool isDefault = false); - static void setPrinterInfoDefault(QPrinterInfo *p, bool isDefault); - static bool printerInfoIsDefault(const QPrinterInfo &p); - static int printerInfoCupsPrinterIndex(const QPrinterInfo &p); - static void setPrinterInfoCupsPrinterIndex(QPrinterInfo *p, int index); -}; - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPLATFORMPRINTINGSUPPORT_H diff --git a/src/gui/painting/qprintengine.h b/src/gui/painting/qprintengine.h deleted file mode 100644 index da4fe2ac68..0000000000 --- a/src/gui/painting/qprintengine.h +++ /dev/null @@ -1,119 +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$ -** -****************************************************************************/ - -#ifndef QPRINTENGINE_H -#define QPRINTENGINE_H - -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -#ifndef QT_NO_PRINTER - -class Q_GUI_EXPORT QPrintEngine -{ -public: - virtual ~QPrintEngine() {} - enum PrintEnginePropertyKey { - PPK_CollateCopies, - PPK_ColorMode, - PPK_Creator, - PPK_DocumentName, - PPK_FullPage, - PPK_NumberOfCopies, - PPK_Orientation, - PPK_OutputFileName, - PPK_PageOrder, - PPK_PageRect, - PPK_PageSize, - PPK_PaperRect, - PPK_PaperSource, - PPK_PrinterName, - PPK_PrinterProgram, - PPK_Resolution, - PPK_SelectionOption, - PPK_SupportedResolutions, - - PPK_WindowsPageSize, - PPK_FontEmbedding, - PPK_SuppressSystemPrintStatus, - - PPK_Duplex, - - PPK_PaperSources, - PPK_CustomPaperSize, - PPK_PageMargins, - PPK_CopyCount, - PPK_SupportsMultipleCopies, - PPK_PaperSize = PPK_PageSize, - - PPK_CustomBase = 0xff00 - }; - - virtual void setProperty(PrintEnginePropertyKey key, const QVariant &value) = 0; - virtual QVariant property(PrintEnginePropertyKey key) const = 0; - - virtual bool newPage() = 0; - virtual bool abort() = 0; - - virtual int metric(QPaintDevice::PaintDeviceMetric) const = 0; - - virtual QPrinter::PrinterState printerState() const = 0; - -#ifdef Q_WS_WIN - virtual HDC getPrinterDC() const { return 0; } - virtual void releasePrinterDC(HDC) const { } -#endif - -}; - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPRINTENGINE_H diff --git a/src/gui/painting/qprintengine_pdf.cpp b/src/gui/painting/qprintengine_pdf.cpp deleted file mode 100644 index df9a939e4b..0000000000 --- a/src/gui/painting/qprintengine_pdf.cpp +++ /dev/null @@ -1,648 +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 - -#include -#include -#include -#include -#include "private/qcups_p.h" -#include "qprinterinfo.h" - -#ifndef QT_NO_PRINTER -#include -#include - -#include "qprintengine_pdf_p.h" - -#ifdef Q_OS_UNIX -#include "private/qcore_unix_p.h" // overrides QT_OPEN -#endif - -QT_BEGIN_NAMESPACE - -//#define FONT_DUMP - -extern QSizeF qt_paperSizeToQSizeF(QPrinter::PaperSize size); - -#define Q_MM(n) int((n * 720 + 127) / 254) -#define Q_IN(n) int(n * 72) - -static const char * const psToStr[QPrinter::NPaperSize+1] = -{ - "A4", "B5", "Letter", "Legal", "Executive", - "A0", "A1", "A2", "A3", "A5", "A6", "A7", "A8", "A9", "B0", "B1", - "B10", "B2", "B3", "B4", "B6", "B7", "B8", "B9", "C5E", "Comm10E", - "DLE", "Folio", "Ledger", "Tabloid", 0 -}; - -QPdf::PaperSize QPdf::paperSize(QPrinter::PaperSize paperSize) -{ - QSizeF s = qt_paperSizeToQSizeF(paperSize); - PaperSize p = { Q_MM(s.width()), Q_MM(s.height()) }; - return p; -} - -const char *QPdf::paperSizeToString(QPrinter::PaperSize paperSize) -{ - return psToStr[paperSize]; -} - - -QPdfPrintEngine::QPdfPrintEngine(QPrinter::PrinterMode m) - : QPdfEngine(*new QPdfPrintEnginePrivate(m)) -{ - Q_D(QPdfPrintEngine); -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (QCUPSSupport::isAvailable()) { - QCUPSSupport cups; - const cups_dest_t* printers = cups.availablePrinters(); - int prnCount = cups.availablePrintersCount(); - - for (int i = 0; i < prnCount; ++i) { - if (printers[i].is_default) { - d->printerName = QString::fromLocal8Bit(printers[i].name); - break; - } - } - - } else -#endif - { - d->printerName = QString::fromLocal8Bit(qgetenv("PRINTER")); - if (d->printerName.isEmpty()) - d->printerName = QString::fromLocal8Bit(qgetenv("LPDEST")); - if (d->printerName.isEmpty()) - d->printerName = QString::fromLocal8Bit(qgetenv("NPRINTER")); - if (d->printerName.isEmpty()) - d->printerName = QString::fromLocal8Bit(qgetenv("NGPRINTER")); - } - - state = QPrinter::Idle; -} - -QPdfPrintEngine::~QPdfPrintEngine() -{ -} - -bool QPdfPrintEngine::begin(QPaintDevice *pdev) -{ - Q_D(QPdfPrintEngine); - - if (!d->openPrintDevice()) { - state = QPrinter::Error; - return false; - } - state = QPrinter::Active; - - return QPdfEngine::begin(pdev); -} - -bool QPdfPrintEngine::end() -{ - Q_D(QPdfPrintEngine); - - QPdfEngine::end(); - - d->closePrintDevice(); - state = QPrinter::Idle; - - return true; -} - -bool QPdfPrintEngine::newPage() -{ - return QPdfEngine::newPage(); -} - -int QPdfPrintEngine::metric(QPaintDevice::PaintDeviceMetric m) const -{ - return QPdfEngine::metric(m); -} - -void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value) -{ - Q_D(QPdfPrintEngine); - - switch (int(key)) { - case PPK_CollateCopies: - d->collate = value.toBool(); - break; - case PPK_ColorMode: - d->grayscale = (QPrinter::ColorMode(value.toInt()) == QPrinter::GrayScale); - break; - case PPK_Creator: - d->creator = value.toString(); - break; - case PPK_DocumentName: - d->title = value.toString(); - break; - case PPK_FullPage: - d->fullPage = value.toBool(); - break; - case PPK_CopyCount: // fallthrough - case PPK_NumberOfCopies: - d->copies = value.toInt(); - break; - case PPK_Orientation: - d->landscape = (QPrinter::Orientation(value.toInt()) == QPrinter::Landscape); - break; - case PPK_OutputFileName: - d->outputFileName = value.toString(); - break; - case PPK_PageOrder: - d->pageOrder = QPrinter::PageOrder(value.toInt()); - break; - case PPK_PaperSize: - d->printerPaperSize = QPrinter::PaperSize(value.toInt()); - d->updatePaperSize(); - break; - case PPK_PaperSource: - d->paperSource = QPrinter::PaperSource(value.toInt()); - break; - case PPK_PrinterName: - d->printerName = value.toString(); - break; - case PPK_PrinterProgram: - d->printProgram = value.toString(); - break; - case PPK_Resolution: - d->resolution = value.toInt(); - break; - case PPK_SelectionOption: - d->selectionOption = value.toString(); - break; - case PPK_FontEmbedding: - d->embedFonts = value.toBool(); - break; - case PPK_Duplex: - d->duplex = static_cast (value.toInt()); - break; - case PPK_CupsPageRect: - d->cupsPageRect = value.toRect(); - break; - case PPK_CupsPaperRect: - d->cupsPaperRect = value.toRect(); - break; - case PPK_CupsOptions: - d->cupsOptions = value.toStringList(); - break; - case PPK_CupsStringPageSize: - d->cupsStringPageSize = value.toString(); - break; - case PPK_CustomPaperSize: - d->printerPaperSize = QPrinter::Custom; - d->customPaperSize = value.toSizeF(); - d->updatePaperSize(); - break; - case PPK_PageMargins: - { - QList margins(value.toList()); - Q_ASSERT(margins.size() == 4); - d->leftMargin = margins.at(0).toReal(); - d->topMargin = margins.at(1).toReal(); - d->rightMargin = margins.at(2).toReal(); - d->bottomMargin = margins.at(3).toReal(); - break; - } - default: - break; - } -} - -QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const -{ - Q_D(const QPdfPrintEngine); - - QVariant ret; - switch (int(key)) { - case PPK_CollateCopies: - ret = d->collate; - break; - case PPK_ColorMode: - ret = d->grayscale ? QPrinter::GrayScale : QPrinter::Color; - break; - case PPK_Creator: - ret = d->creator; - break; - case PPK_DocumentName: - ret = d->title; - break; - case PPK_FullPage: - ret = d->fullPage; - break; - case PPK_CopyCount: - ret = d->copies; - break; - case PPK_SupportsMultipleCopies: -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (QCUPSSupport::isAvailable()) - ret = true; - else -#endif - ret = false; - break; - case PPK_NumberOfCopies: -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (QCUPSSupport::isAvailable()) - ret = 1; - else -#endif - ret = d->copies; - break; - case PPK_Orientation: - ret = d->landscape ? QPrinter::Landscape : QPrinter::Portrait; - break; - case PPK_OutputFileName: - ret = d->outputFileName; - break; - case PPK_PageOrder: - ret = d->pageOrder; - break; - case PPK_PaperSize: - ret = d->paperSize; - break; - case PPK_PaperSource: - ret = d->paperSource; - break; - case PPK_PrinterName: - ret = d->printerName; - break; - case PPK_PrinterProgram: - ret = d->printProgram; - break; - case PPK_Resolution: - ret = d->resolution; - break; - case PPK_SupportedResolutions: - ret = QList() << 72; - break; - case PPK_PaperRect: - ret = d->paperRect(); - break; - case PPK_PageRect: - ret = d->pageRect(); - break; - case PPK_SelectionOption: - ret = d->selectionOption; - break; - case PPK_FontEmbedding: - ret = d->embedFonts; - break; - case PPK_Duplex: - ret = d->duplex; - break; - case PPK_CupsPageRect: - ret = d->cupsPageRect; - break; - case PPK_CupsPaperRect: - ret = d->cupsPaperRect; - break; - case PPK_CupsOptions: - ret = d->cupsOptions; - break; - case PPK_CupsStringPageSize: - ret = d->cupsStringPageSize; - break; - case PPK_CustomPaperSize: - ret = d->customPaperSize; - break; - case PPK_PageMargins: - { - QList margins; - margins << d->leftMargin << d->topMargin - << d->rightMargin << d->bottomMargin; - ret = margins; - break; - } - default: - break; - } - return ret; -} - - -#ifndef QT_NO_LPR -static void closeAllOpenFds() -{ - // hack time... getting the maximum number of open - // files, if possible. if not we assume it's the - // larger of 256 and the fd we got - int i; -#if defined(_SC_OPEN_MAX) - i = (int)sysconf(_SC_OPEN_MAX); -#elif defined(_POSIX_OPEN_MAX) - i = (int)_POSIX_OPEN_MAX; -#elif defined(OPEN_MAX) - i = (int)OPEN_MAX; -#else - i = 256; -#endif - // leave stdin/out/err untouched - while(--i > 2) - QT_CLOSE(i); -} -#endif - -bool QPdfPrintEnginePrivate::openPrintDevice() -{ - if (outDevice) - return false; - - if (!outputFileName.isEmpty()) { - QFile *file = new QFile(outputFileName); - if (! file->open(QFile::WriteOnly|QFile::Truncate)) { - delete file; - return false; - } - outDevice = file; -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - } else if (QCUPSSupport::isAvailable()) { - QCUPSSupport cups; - QPair ret = cups.tempFd(); - if (ret.first < 0) { - qWarning("QPdfPrinter: Could not open temporary file to print"); - return false; - } - cupsTempFile = ret.second; - outDevice = new QFile(); - static_cast(outDevice)->open(ret.first, QIODevice::WriteOnly); -#endif -#ifndef QT_NO_LPR - } else { - QString pr; - if (!printerName.isEmpty()) - pr = printerName; - int fds[2]; - if (qt_safe_pipe(fds) != 0) { - qWarning("QPdfPrinter: Could not open pipe to print"); - return false; - } - - pid_t pid = fork(); - if (pid == 0) { // child process - // if possible, exit quickly, so the actual lp/lpr - // becomes a child of init, and ::waitpid() is - // guaranteed not to wait. - if (fork() > 0) { - closeAllOpenFds(); - - // try to replace this process with "true" - this prevents - // global destructors from being called (that could possibly - // do wrong things to the parent process) - (void)execlp("true", "true", (char *)0); - (void)execl("/bin/true", "true", (char *)0); - (void)execl("/usr/bin/true", "true", (char *)0); - ::_exit(0); - } - qt_safe_dup2(fds[0], 0, 0); - - closeAllOpenFds(); - - if (!printProgram.isEmpty()) { - if (!selectionOption.isEmpty()) - pr.prepend(selectionOption); - else - pr.prepend(QLatin1String("-P")); - (void)execlp(printProgram.toLocal8Bit().data(), printProgram.toLocal8Bit().data(), - pr.toLocal8Bit().data(), (char *)0); - } else { - // if no print program has been specified, be smart - // about the option string too. - QList lprhack; - QList lphack; - QByteArray media; - if (!pr.isEmpty() || !selectionOption.isEmpty()) { - if (!selectionOption.isEmpty()) { - QStringList list = selectionOption.split(QLatin1Char(' ')); - for (int i = 0; i < list.size(); ++i) - lprhack.append(list.at(i).toLocal8Bit()); - lphack = lprhack; - } else { - lprhack.append("-P"); - lphack.append("-d"); - } - lprhack.append(pr.toLocal8Bit()); - lphack.append(pr.toLocal8Bit()); - } - lphack.append("-s"); - - char ** lpargs = new char *[lphack.size()+6]; - char lp[] = "lp"; - lpargs[0] = lp; - int i; - for (i = 0; i < lphack.size(); ++i) - lpargs[i+1] = (char *)lphack.at(i).constData(); -#ifndef Q_OS_OSF - if (QPdf::paperSizeToString(printerPaperSize)) { - char dash_o[] = "-o"; - lpargs[++i] = dash_o; - lpargs[++i] = const_cast(QPdf::paperSizeToString(printerPaperSize)); - lpargs[++i] = dash_o; - media = "media="; - media += QPdf::paperSizeToString(printerPaperSize); - lpargs[++i] = media.data(); - } -#endif - lpargs[++i] = 0; - char **lprargs = new char *[lprhack.size()+2]; - char lpr[] = "lpr"; - lprargs[0] = lpr; - for (int i = 0; i < lprhack.size(); ++i) - lprargs[i+1] = (char *)lprhack[i].constData(); - lprargs[lprhack.size() + 1] = 0; - (void)execvp("lp", lpargs); - (void)execvp("lpr", lprargs); - (void)execv("/bin/lp", lpargs); - (void)execv("/bin/lpr", lprargs); - (void)execv("/usr/bin/lp", lpargs); - (void)execv("/usr/bin/lpr", lprargs); - - delete []lpargs; - delete []lprargs; - } - // if we couldn't exec anything, close the fd, - // wait for a second so the parent process (the - // child of the GUI process) has exited. then - // exit. - QT_CLOSE(0); - (void)::sleep(1); - ::_exit(0); - } - // parent process - QT_CLOSE(fds[0]); - fd = fds[1]; - (void)qt_safe_waitpid(pid, 0, 0); - - if (fd < 0) - return false; - - outDevice = new QFile(); - static_cast(outDevice)->open(fd, QIODevice::WriteOnly); -#endif - } - - return true; -} - -void QPdfPrintEnginePrivate::closePrintDevice() -{ -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (!cupsTempFile.isEmpty()) { - QString tempFile = cupsTempFile; - cupsTempFile.clear(); - QCUPSSupport cups; - - // Set up print options. - QByteArray prnName; - QList > options; - QVector cupsOptStruct; - - if (!printerName.isEmpty()) { - prnName = printerName.toLocal8Bit(); - } else { - QPrinterInfo def = QPrinterInfo::defaultPrinter(); - if (def.isNull()) { - qWarning("Could not determine printer to print to"); - QFile::remove(tempFile); - return; - } - prnName = def.printerName().toLocal8Bit(); - } - - if (!cupsStringPageSize.isEmpty()) { - options.append(QPair("media", cupsStringPageSize.toLocal8Bit())); - } - - if (copies > 1) { - options.append(QPair("copies", QString::number(copies).toLocal8Bit())); - } - - if (collate) { - options.append(QPair("Collate", "True")); - } - - if (duplex != QPrinter::DuplexNone) { - switch(duplex) { - case QPrinter::DuplexNone: break; - case QPrinter::DuplexAuto: - if (!landscape) - options.append(QPair("sides", "two-sided-long-edge")); - else - options.append(QPair("sides", "two-sided-short-edge")); - break; - case QPrinter::DuplexLongSide: - options.append(QPair("sides", "two-sided-long-edge")); - break; - case QPrinter::DuplexShortSide: - options.append(QPair("sides", "two-sided-short-edge")); - break; - } - } - - if (QCUPSSupport::cupsVersion() >= 10300 && landscape) { - options.append(QPair("landscape", "")); - } - - QStringList::const_iterator it = cupsOptions.constBegin(); - while (it != cupsOptions.constEnd()) { - options.append(QPair((*it).toLocal8Bit(), (*(it+1)).toLocal8Bit())); - it += 2; - } - - for (int c = 0; c < options.size(); ++c) { - cups_option_t opt; - opt.name = options[c].first.data(); - opt.value = options[c].second.data(); - cupsOptStruct.append(opt); - } - - // Print the file. - cups_option_t* optPtr = cupsOptStruct.size() ? &cupsOptStruct.first() : 0; - cups.printFile(prnName.constData(), tempFile.toLocal8Bit().constData(), - title.toLocal8Bit().constData(), cupsOptStruct.size(), optPtr); - - QFile::remove(tempFile); - } -#endif -} - - - -QPdfPrintEnginePrivate::QPdfPrintEnginePrivate(QPrinter::PrinterMode m) - : QPdfEnginePrivate(), - duplex(QPrinter::DuplexNone), - collate(false), - copies(1), - pageOrder(QPrinter::FirstPageFirst), - paperSource(QPrinter::Auto), - printerPaperSize(QPrinter::A4) -{ - resolution = 72; - if (m == QPrinter::HighResolution) - resolution = 1200; - else if (m == QPrinter::ScreenResolution) - resolution = qt_defaultDpi(); -} - -QPdfPrintEnginePrivate::~QPdfPrintEnginePrivate() -{ -} - - -void QPdfPrintEnginePrivate::updatePaperSize() -{ - if (printerPaperSize == QPrinter::Custom) { - paperSize = customPaperSize; - } else if (!cupsPaperRect.isNull()) { - QRect r = cupsPaperRect; - paperSize = r.size(); - } else{ - QPdf::PaperSize s = QPdf::paperSize(printerPaperSize); - paperSize = QSize(s.width, s.height); - } -} - - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprintengine_pdf_p.h b/src/gui/painting/qprintengine_pdf_p.h deleted file mode 100644 index 367e3aebab..0000000000 --- a/src/gui/painting/qprintengine_pdf_p.h +++ /dev/null @@ -1,163 +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$ -** -****************************************************************************/ - -#ifndef QPRINTENGINE_PDF_P_H -#define QPRINTENGINE_PDF_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "QtGui/qprintengine.h" - -#ifndef QT_NO_PRINTER -#include "QtCore/qmap.h" -#include "QtGui/qmatrix.h" -#include "QtCore/qstring.h" -#include "QtCore/qvector.h" -#include "QtGui/qpaintengine.h" -#include "QtGui/qpainterpath.h" -#include "QtCore/qdatastream.h" - -#include "private/qfontengine_p.h" -#include "private/qpdf_p.h" -#include "private/qpaintengine_p.h" -#include "qprintengine.h" - -QT_BEGIN_NAMESPACE - -class QImage; -class QDataStream; -class QPen; -class QPointF; -class QRegion; -class QFile; -class QPdfPrintEngine; - -#define PPK_CupsOptions QPrintEngine::PrintEnginePropertyKey(0xfe00) -#define PPK_CupsPageRect QPrintEngine::PrintEnginePropertyKey(0xfe01) -#define PPK_CupsPaperRect QPrintEngine::PrintEnginePropertyKey(0xfe02) -#define PPK_CupsStringPageSize QPrintEngine::PrintEnginePropertyKey(0xfe03) - -namespace QPdf { - - struct PaperSize { - int width, height; // in postscript points - }; - Q_GUI_EXPORT PaperSize paperSize(QPrinter::PaperSize paperSize); - Q_GUI_EXPORT const char *paperSizeToString(QPrinter::PaperSize paperSize); -} - -class QPdfPrintEnginePrivate; - -class QPdfPrintEngine : public QPdfEngine, public QPrintEngine -{ - Q_DECLARE_PRIVATE(QPdfPrintEngine) -public: - QPdfPrintEngine(QPrinter::PrinterMode m); - virtual ~QPdfPrintEngine(); - - // reimplementations QPaintEngine - bool begin(QPaintDevice *pdev); - bool end(); - // end reimplementations QPaintEngine - - // reimplementations QPrintEngine - bool abort() {return false;} - QPrinter::PrinterState printerState() const {return state;} - - bool newPage(); - int metric(QPaintDevice::PaintDeviceMetric) const; - void setProperty(PrintEnginePropertyKey key, const QVariant &value); - QVariant property(PrintEnginePropertyKey key) const; - // end reimplementations QPrintEngine - - QPrinter::PrinterState state; - -private: - Q_DISABLE_COPY(QPdfPrintEngine) -}; - -class QPdfPrintEnginePrivate : public QPdfEnginePrivate -{ - Q_DECLARE_PUBLIC(QPdfPrintEngine) -public: - QPdfPrintEnginePrivate(QPrinter::PrinterMode m); - ~QPdfPrintEnginePrivate(); - - bool openPrintDevice(); - void closePrintDevice(); - - void updatePaperSize(); - -private: - Q_DISABLE_COPY(QPdfPrintEnginePrivate) - - QString printerName; - QString printProgram; - QString selectionOption; - QStringList cupsOptions; - QString cupsStringPageSize; - - QPrinter::DuplexMode duplex; - bool collate; - int copies; - QPrinter::PageOrder pageOrder; - QPrinter::PaperSource paperSource; - - QPrinter::PaperSize printerPaperSize; - QRect cupsPaperRect; - QRect cupsPageRect; - QSizeF customPaperSize; // in postscript points -}; - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER - -#endif // QPRINTENGINE_PDF_P_H diff --git a/src/gui/painting/qprinter.cpp b/src/gui/painting/qprinter.cpp deleted file mode 100644 index bdbddf20c4..0000000000 --- a/src/gui/painting/qprinter.cpp +++ /dev/null @@ -1,2280 +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 -#include -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) -#include "private/qcups_p.h" -#endif - -#ifndef QT_NO_PRINTER - -#include -#include - -#if defined (Q_WS_WIN) -#include -#elif defined (Q_WS_MAC) -#include -#elif defined (QTOPIA_PRINTENGINE) -#include -#endif - -#if defined(Q_WS_X11) -#include -#endif - -#ifndef QT_NO_PDF -#include "qprintengine_pdf_p.h" -#endif - -#include -#include - -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. -Q_GUI_EXPORT 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 -Q_GUI_EXPORT 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::PdfFormat; - } -#endif -#endif - - switch (realOutputFormat) { - case QPrinter::NativeFormat: { -#if defined (Q_WS_QPA) - printEngine = QGuiApplicationPrivate::platformIntegration()->printerSupport()->createNativePrintEngine(printerMode); - paintEngine = QGuiApplicationPrivate::platformIntegration()->printerSupport()->createPaintEngine(printEngine, printerMode); -#elif 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: { - QPdfPrintEngine *pdfEngine = new QPdfPrintEngine(printerMode); - paintEngine = pdfEngine; - printEngine = pdfEngine; - } - break; - } - use_default_engine = true; - had_default_engines = true; -} - -#ifndef QT_NO_PRINTPREVIEWWIDGET -QList QPrinterPrivate::previewPages() const -{ - if (previewEngine) - return previewEngine->pages(); - return QList(); -} - -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 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 PDF printing, sets the - resolution of the PDF 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 (!QCoreApplication::instance()) { -#else - if (!QCoreApplication::instance() || !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. - - \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->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) { - setOutputFormat(QPrinter::PdfFormat); - d->outputFormat = QPrinter::NativeFormat; - } -#endif - - QList prnList = QPrinterInfo::availablePrinters(); - if (name.isEmpty()) { - d->validPrinter = d->outputFormat == QPrinter::PdfFormat; - } 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 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 ".pdf" suffix PDF is generated. If the file name - has a suffix other than ".pdf", the output format used is the - one set with setOutputFormat(). - - QPrinter uses Qt's cross-platform 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("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 PDF - 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 (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 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 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 PDF, this - function will always return a one item list containing only the - PDF resolution, i.e., 72 (72 dpi -- but see PrinterMode). -*/ -QList QPrinter::supportedResolutions() const -{ - Q_D(const QPrinter); - QList varlist - = d->printEngine->property(QPrintEngine::PPK_SupportedResolutions).toList(); - QList intlist; - for (int i=0; iprintEngine->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::supportedPaperSources() const -{ - Q_D(const QPrinter); - QVariant v = d->printEngine->property(QPrintEngine::PPK_PaperSources); - - QList variant_list = v.toList(); - QList int_list; - for (int i=0; iprintEngine->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; - } -} - -/*! - \since 4.1 - - Sets the print range option in to be \a range. -*/ -void QPrinter::setPrintRange( PrintRange range ) -{ - Q_D(QPrinter); - d->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 d->printRange; -} - - -/*! - \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 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(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 diff --git a/src/gui/painting/qprinter.h b/src/gui/painting/qprinter.h deleted file mode 100644 index d551489bb8..0000000000 --- a/src/gui/painting/qprinter.h +++ /dev/null @@ -1,283 +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$ -** -****************************************************************************/ - -#ifndef QPRINTER_H -#define QPRINTER_H - -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -#ifndef QT_NO_PRINTER - -#if defined(B0) -#undef B0 // Terminal hang-up. We assume that you do not want that. -#endif - -class QPrinterPrivate; -class QPaintEngine; -class QPrintEngine; -class QPrinterInfo; - -class Q_GUI_EXPORT QPrinter : public QPaintDevice -{ - Q_DECLARE_PRIVATE(QPrinter) -public: - enum PrinterMode { ScreenResolution, PrinterResolution, HighResolution }; - - explicit QPrinter(PrinterMode mode = ScreenResolution); - explicit QPrinter(const QPrinterInfo& printer, PrinterMode mode = ScreenResolution); - ~QPrinter(); - - int devType() const; - - enum Orientation { Portrait, Landscape }; - -#ifndef Q_QDOC - enum PageSize { A4, B5, Letter, Legal, Executive, - A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, - B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, - DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom, NPaperSize = Custom }; - typedef PageSize PaperSize; -#else - enum PageSize { A4, B5, Letter, Legal, Executive, - A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, - B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, - DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom }; - enum PaperSize { A4, B5, Letter, Legal, Executive, - A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, - B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, - DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom, NPaperSize = Custom }; -#endif - - enum PageOrder { FirstPageFirst, - LastPageFirst }; - - enum ColorMode { GrayScale, - Color }; - - enum PaperSource { OnlyOne, - Lower, - Middle, - Manual, - Envelope, - EnvelopeManual, - Auto, - Tractor, - SmallFormat, - LargeFormat, - LargeCapacity, - Cassette, - FormSource, - MaxPageSource - }; - - enum PrinterState { Idle, - Active, - Aborted, - Error }; - - enum OutputFormat { NativeFormat, PdfFormat }; - - // Keep in sync with QAbstractPrintDialog::PrintRange - enum PrintRange { AllPages, Selection, PageRange, CurrentPage }; - - enum Unit { - Millimeter, - Point, - Inch, - Pica, - Didot, - Cicero, - DevicePixel - }; - - enum DuplexMode { - DuplexNone = 0, - DuplexAuto, - DuplexLongSide, - DuplexShortSide - }; - - void setOutputFormat(OutputFormat format); - OutputFormat outputFormat() const; - - void setPrinterName(const QString &); - QString printerName() const; - - bool isValid() const; - - void setOutputFileName(const QString &); - QString outputFileName()const; - - void setPrintProgram(const QString &); - QString printProgram() const; - - void setDocName(const QString &); - QString docName() const; - - void setCreator(const QString &); - QString creator() const; - - void setOrientation(Orientation); - Orientation orientation() const; - - void setPageSize(PageSize); - PageSize pageSize() const; - - void setPaperSize(PaperSize); - PaperSize paperSize() const; - - void setPaperSize(const QSizeF &paperSize, Unit unit); - QSizeF paperSize(Unit unit) const; - - void setPageOrder(PageOrder); - PageOrder pageOrder() const; - - void setResolution(int); - int resolution() const; - - void setColorMode(ColorMode); - ColorMode colorMode() const; - - void setCollateCopies(bool collate); - bool collateCopies() const; - - void setFullPage(bool); - bool fullPage() const; - - void setNumCopies(int); - int numCopies() const; - - int actualNumCopies() const; - - void setCopyCount(int); - int copyCount() const; - bool supportsMultipleCopies() const; - - void setPaperSource(PaperSource); - PaperSource paperSource() const; - - void setDuplex(DuplexMode duplex); - DuplexMode duplex() const; - - QList supportedResolutions() const; - -#ifdef Q_WS_WIN - QList supportedPaperSources() const; -#endif - - void setFontEmbeddingEnabled(bool enable); - bool fontEmbeddingEnabled() const; - - void setDoubleSidedPrinting(bool enable); - bool doubleSidedPrinting() const; - -#ifdef Q_WS_WIN - void setWinPageSize(int winPageSize); - int winPageSize() const; -#endif - - QRect paperRect() const; - QRect pageRect() const; - QRectF paperRect(Unit) const; - QRectF pageRect(Unit) const; - -#if !defined(Q_WS_WIN) || defined(qdoc) - QString printerSelectionOption() const; - void setPrinterSelectionOption(const QString &); -#endif - - bool newPage(); - bool abort(); - - PrinterState printerState() const; - - QPaintEngine *paintEngine() const; - QPrintEngine *printEngine() const; - -#ifdef Q_WS_WIN - HDC getDC() const; - void releaseDC(HDC hdc) const; -#endif - - void setFromTo(int fromPage, int toPage); - int fromPage() const; - int toPage() const; - - void setPrintRange(PrintRange range); - PrintRange printRange() const; - - void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit); - void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, Unit unit) const; - -protected: - int metric(PaintDeviceMetric) const; - void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); - -private: - void init(PrinterMode mode); - - Q_DISABLE_COPY(QPrinter) - - QScopedPointer d_ptr; - - friend class QPrintDialogPrivate; - friend class QAbstractPrintDialog; - friend class QAbstractPrintDialogPrivate; - friend class QPrintPreviewWidgetPrivate; - friend class QTextDocument; - friend class QPageSetupWidget; -}; - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPRINTER_H diff --git a/src/gui/painting/qprinter_p.h b/src/gui/painting/qprinter_p.h deleted file mode 100644 index 2ba0f0dbb8..0000000000 --- a/src/gui/painting/qprinter_p.h +++ /dev/null @@ -1,136 +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$ -** -****************************************************************************/ - -#ifndef QPRINTER_P_H -#define QPRINTER_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - - -#include "QtCore/qglobal.h" - -#ifndef QT_NO_PRINTER - -#include "QtGui/qprinter.h" -#include "QtGui/qprintengine.h" -#include "QtCore/qpointer.h" - -#include - -QT_BEGIN_NAMESPACE - -class QPrintEngine; -class QPreviewPaintEngine; -class QPicture; - -class Q_GUI_EXPORT QPrinterPrivate -{ - Q_DECLARE_PUBLIC(QPrinter) -public: - QPrinterPrivate(QPrinter *printer) - : printEngine(0) - , paintEngine(0) - , q_ptr(printer) - , printRange(QPrinter::AllPages) - , minPage(1) - , maxPage(INT_MAX) - , fromPage(0) - , toPage(0) - , use_default_engine(true) - , validPrinter(false) - , hasCustomPageMargins(false) - , hasUserSetPageSize(false) - { - } - - ~QPrinterPrivate() { - - } - - void createDefaultEngines(); -#ifndef QT_NO_PRINTPREVIEWWIDGET - QList previewPages() const; - void setPreviewMode(bool); -#endif - - void addToManualSetList(QPrintEngine::PrintEnginePropertyKey key); - - QPrinter::PrinterMode printerMode; - QPrinter::OutputFormat outputFormat; - QPrintEngine *printEngine; - QPaintEngine *paintEngine; - - QPrintEngine *realPrintEngine; - QPaintEngine *realPaintEngine; -#ifndef QT_NO_PRINTPREVIEWWIDGET - QPreviewPaintEngine *previewEngine; -#endif - - QPrinter *q_ptr; - - QPrinter::PrintRange printRange; - int minPage, maxPage, fromPage, toPage; - - uint use_default_engine : 1; - uint had_default_engines : 1; - - uint validPrinter : 1; - uint hasCustomPageMargins : 1; - uint hasUserSetPageSize : 1; - - // Used to remember which properties have been manually set by the user. - QList manualSetList; -}; - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER - -#endif // QPRINTER_P_H diff --git a/src/gui/painting/qprinterinfo.cpp b/src/gui/painting/qprinterinfo.cpp deleted file mode 100644 index 0049bd248a..0000000000 --- a/src/gui/painting/qprinterinfo.cpp +++ /dev/null @@ -1,199 +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 documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:FDL$ -** GNU Free Documentation License -** Alternatively, this file may be used under the terms of the GNU Free -** Documentation License version 1.3 as published by the Free Software -** Foundation and appearing in the file included in the packaging of -** this file. -** -** 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 "qprinterinfo.h" -#include "qprinterinfo_p.h" - -#ifndef QT_NO_PRINTER - -#include -#include - -QT_BEGIN_NAMESPACE - -QPrinterInfoPrivate QPrinterInfoPrivate::shared_null; - - -/*! - \class QPrinterInfo - - \brief The QPrinterInfo class gives access to information about - existing printers. - - \ingroup printing - - Use the static functions to generate a list of QPrinterInfo - objects. Each QPrinterInfo object in the list represents a single - printer and can be queried for name, supported paper sizes, and - whether or not it is the default printer. - - \since 4.4 -*/ - -/*! - \fn QList QPrinterInfo::availablePrinters() - - Returns a list of available printers on the system. -*/ - -/*! - \fn QPrinterInfo QPrinterInfo::defaultPrinter() - - Returns the default printer on the system. - - The return value should be checked using isNull() before being - used, in case there is no default printer. - - \sa isNull() -*/ - -/*! - Constructs an empty QPrinterInfo object. - - \sa isNull() -*/ -QPrinterInfo::QPrinterInfo() - : d_ptr(&QPrinterInfoPrivate::shared_null) -{ -} - -/*! - Constructs a copy of \a other. -*/ -QPrinterInfo::QPrinterInfo(const QPrinterInfo &other) - : d_ptr(new QPrinterInfoPrivate(*other.d_ptr)) -{ -} - -/*! - Constructs a QPrinterInfo object from \a printer. -*/ -QPrinterInfo::QPrinterInfo(const QPrinter &printer) - : d_ptr(&QPrinterInfoPrivate::shared_null) -{ - foreach (const QPrinterInfo &printerInfo, availablePrinters()) { - if (printerInfo.printerName() == printer.printerName()) { - d_ptr.reset(new QPrinterInfoPrivate(*printerInfo.d_ptr)); - break; - } - } -} - -/*! - \internal -*/ -QPrinterInfo::QPrinterInfo(const QString &name) - : d_ptr(new QPrinterInfoPrivate(name)) -{ -} - -/*! - Destroys the QPrinterInfo object. References to the values in the - object become invalid. -*/ -QPrinterInfo::~QPrinterInfo() -{ -} - -/*! - Sets the QPrinterInfo object to be equal to \a other. -*/ -QPrinterInfo &QPrinterInfo::operator=(const QPrinterInfo &other) -{ - Q_ASSERT(d_ptr); - d_ptr.reset(new QPrinterInfoPrivate(*other.d_ptr)); - return *this; -} - -/*! - Returns the name of the printer. - - \sa QPrinter::setPrinterName() -*/ -QString QPrinterInfo::printerName() const -{ - const Q_D(QPrinterInfo); - return d->name; -} - -/*! - Returns whether this QPrinterInfo object holds a printer definition. - - An empty QPrinterInfo object could result for example from calling - defaultPrinter() when there are no printers on the system. -*/ -bool QPrinterInfo::isNull() const -{ - const Q_D(QPrinterInfo); - return d == &QPrinterInfoPrivate::shared_null; -} - -/*! - Returns whether this printer is the default printer. -*/ -bool QPrinterInfo::isDefault() const -{ - const Q_D(QPrinterInfo); - return d->isDefault; -} - -/*! - \fn QList< QPrinter::PaperSize> QPrinterInfo::supportedPaperSizes() const - \since 4.4 - - Returns a list of supported paper sizes by the printer. - - Not all printer drivers support this query, so the list may be empty. - On Mac OS X 10.3, this function always returns an empty list. -*/ - -#ifdef Q_WS_QPA -QList QPrinterInfo::supportedPaperSizes() const -{ - const Q_D(QPrinterInfo); - if (!isNull() && !d->hasPaperSizes) { - d->paperSizes = QGuiApplicationPrivate::platformIntegration()->printerSupport()->supportedPaperSizes(*this); - d->hasPaperSizes = true; - } - return d->paperSizes; -} - -QList QPrinterInfo::availablePrinters() -{ - return QGuiApplicationPrivate::platformIntegration()->printerSupport()->availablePrinters(); -} - -QPrinterInfo QPrinterInfo::defaultPrinter() -{ - return QGuiApplicationPrivate::platformIntegration()->printerSupport()->defaultPrinter(); -} - -#endif //Q_WS_QPA - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER diff --git a/src/gui/painting/qprinterinfo.h b/src/gui/painting/qprinterinfo.h deleted file mode 100644 index 72082cf299..0000000000 --- a/src/gui/painting/qprinterinfo.h +++ /dev/null @@ -1,91 +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$ -** -****************************************************************************/ - -#ifndef QPRINTERINFO_H -#define QPRINTERINFO_H - -#include - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -#ifndef QT_NO_PRINTER -class QPrinterInfoPrivate; -class QPrinterInfoPrivateDeleter; -class Q_GUI_EXPORT QPrinterInfo -{ -public: - QPrinterInfo(); - QPrinterInfo(const QPrinterInfo &other); - QPrinterInfo(const QPrinter &printer); - ~QPrinterInfo(); - - QPrinterInfo &operator=(const QPrinterInfo &other); - - QString printerName() const; - bool isNull() const; - bool isDefault() const; - QList supportedPaperSizes() const; - - static QList availablePrinters(); - static QPrinterInfo defaultPrinter(); - -private: - QPrinterInfo(const QString &name); - -private: - friend class QPlatformPrinterSupport; - Q_DECLARE_PRIVATE(QPrinterInfo) - QScopedPointer d_ptr; -}; - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPRINTERINFO_H diff --git a/src/gui/painting/qprinterinfo_p.h b/src/gui/painting/qprinterinfo_p.h deleted file mode 100644 index a3c654e7b7..0000000000 --- a/src/gui/painting/qprinterinfo_p.h +++ /dev/null @@ -1,108 +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$ -** -****************************************************************************/ - -#ifndef QPRINTERINFO_P_H -#define QPRINTERINFO_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "QtCore/qglobal.h" - -#ifndef QT_NO_PRINTER - -#include "QtCore/qlist.h" - -QT_BEGIN_NAMESPACE - -class QPrinterInfoPrivate -{ -public: - QPrinterInfoPrivate(const QString& name = QString()) : - name(name), isDefault(false) -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - , cupsPrinterIndex(0) -#endif -#endif - , hasPaperSizes(false) - {} - ~QPrinterInfoPrivate() - {} - - static QPrinterInfoPrivate shared_null; - - QString name; - bool isDefault; - -#if (defined(Q_OS_UNIX) && !defined(Q_OS_MAC) && !defined(Q_OS_SYMBIAN)) || defined(Q_WS_QPA) -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - int cupsPrinterIndex; -#endif -#endif - mutable bool hasPaperSizes; - mutable QList paperSizes; -}; - - -class QPrinterInfoPrivateDeleter -{ -public: - static inline void cleanup(QPrinterInfoPrivate *d) - { - if (d != &QPrinterInfoPrivate::shared_null) - delete d; - } -}; - -QT_END_NAMESPACE - -#endif // QT_NO_PRINTER - -#endif // QPRINTERINFO_P_H diff --git a/src/gui/painting/qprinterinfo_unix.cpp b/src/gui/painting/qprinterinfo_unix.cpp deleted file mode 100644 index 3c66481b4d..0000000000 --- a/src/gui/painting/qprinterinfo_unix.cpp +++ /dev/null @@ -1,857 +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 "qprinterinfo.h" -#include "qprinterinfo_p.h" - -#include -#include -#include -#include -#include -#include - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) -# include -# include -# include -#endif - -#include - -QT_BEGIN_NAMESPACE - -#ifndef QT_NO_PRINTER - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) -// preserver names in ascending order for the binary search -static const struct NamedPaperSize { - const char *const name; - QPrinter::PaperSize size; -} named_sizes_map[QPrinter::NPageSize] = { - { "A0", QPrinter::A0 }, - { "A1", QPrinter::A1 }, - { "A2", QPrinter::A2 }, - { "A3", QPrinter::A3 }, - { "A4", QPrinter::A4 }, - { "A5", QPrinter::A5 }, - { "A6", QPrinter::A6 }, - { "A7", QPrinter::A7 }, - { "A8", QPrinter::A8 }, - { "A9", QPrinter::A9 }, - { "B0", QPrinter::B0 }, - { "B1", QPrinter::B1 }, - { "B10", QPrinter::B10 }, - { "B2", QPrinter::B2 }, - { "B4", QPrinter::B4 }, - { "B5", QPrinter::B5 }, - { "B6", QPrinter::B6 }, - { "B7", QPrinter::B7 }, - { "B8", QPrinter::B8 }, - { "B9", QPrinter::B9 }, - { "C5E", QPrinter::C5E }, - { "Comm10E", QPrinter::Comm10E }, - { "Custom", QPrinter::Custom }, - { "DLE", QPrinter::DLE }, - { "Executive", QPrinter::Executive }, - { "Folio", QPrinter::Folio }, - { "Ledger", QPrinter::Ledger }, - { "Legal", QPrinter::Legal }, - { "Letter", QPrinter::Letter }, - { "Tabloid", QPrinter::Tabloid } -}; - -inline bool operator<(const char *name, const NamedPaperSize &data) -{ return qstrcmp(name, data.name) < 0; } -inline bool operator<(const NamedPaperSize &data, const char *name) -{ return qstrcmp(data.name, name) < 0; } - -static inline QPrinter::PaperSize string2PaperSize(const char *name) -{ - const NamedPaperSize *r = qBinaryFind(named_sizes_map, named_sizes_map + QPrinter::NPageSize, name); - if (r - named_sizes_map != QPrinter::NPageSize) - return r->size; - return QPrinter::Custom; -} - -static inline const char *paperSize2String(QPrinter::PaperSize size) -{ - for (int i = 0; i < QPrinter::NPageSize; ++i) { - if (size == named_sizes_map[i].size) - return named_sizes_map[i].name; - } - return 0; -} -#endif - -void qt_perhapsAddPrinter(QList *printers, const QString &name, - QString host, QString comment, - QStringList aliases) -{ - for (int i = 0; i < printers->size(); ++i) - if (printers->at(i).samePrinter(name)) - return; - - if (host.isEmpty()) - host = QCoreApplication::translate("QPrinter", "locally connected"); - printers->append(QPrinterDescription(name.simplified(), host.simplified(), comment.simplified(), aliases)); -} - -void qt_parsePrinterDesc(QString printerDesc, QList *printers) -{ - if (printerDesc.length() < 1) - return; - - printerDesc = printerDesc.simplified(); - int i = printerDesc.indexOf(QLatin1Char(':')); - QString printerName, printerComment, printerHost; - QStringList aliases; - - if (i >= 0) { - // have ':' want '|' - int j = printerDesc.indexOf(QLatin1Char('|')); - if (j > 0 && j < i) { - printerName = printerDesc.left(j); - aliases = printerDesc.mid(j + 1, i - j - 1).split(QLatin1Char('|')); - // try extracting a comment from the aliases - printerComment = QCoreApplication::translate("QPrinter", "Aliases: %1") - .arg(aliases.join(QLatin1String(", "))); - } else { - printerName = printerDesc.left(i); - } - // look for lprng pseudo all printers entry - i = printerDesc.indexOf(QRegExp(QLatin1String(": *all *="))); - if (i >= 0) - printerName = QString(); - // look for signs of this being a remote printer - i = printerDesc.indexOf(QRegExp(QLatin1String(": *rm *="))); - if (i >= 0) { - // point k at the end of remote host name - while (printerDesc[i] != QLatin1Char('=')) - i++; - while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace()) - i++; - j = i; - while (j < (int)printerDesc.length() && printerDesc[j] != QLatin1Char(':')) - j++; - - // and stuff that into the string - printerHost = printerDesc.mid(i, j - i); - } - } - if (printerName.length()) - qt_perhapsAddPrinter(printers, printerName, printerHost, printerComment, - aliases); -} - -int qt_parsePrintcap(QList *printers, const QString& fileName) -{ - QFile printcap(fileName); - if (!printcap.open(QIODevice::ReadOnly)) - return NotFound; - - char *line_ascii = new char[1025]; - line_ascii[1024] = '\0'; - - QString printerDesc; - bool atEnd = false; - - while (!atEnd) { - if (printcap.atEnd() || printcap.readLine(line_ascii, 1024) <= 0) - atEnd = true; - QString line = QString::fromLocal8Bit(line_ascii); - line = line.trimmed(); - if (line.length() >= 1 && line[int(line.length()) - 1] == QLatin1Char('\\')) - line.chop(1); - if (line[0] == QLatin1Char('#')) { - if (!atEnd) - continue; - } else if (line[0] == QLatin1Char('|') || line[0] == QLatin1Char(':') - || line.isEmpty()) { - printerDesc += line; - if (!atEnd) - continue; - } - - qt_parsePrinterDesc(printerDesc, printers); - - // add the first line of the new printer definition - printerDesc = line; - } - delete[] line_ascii; - return Success; -} - -/*! - \internal - - Checks $HOME/.printers for a line matching '_default ' (where - does not contain any white space). The first such match - results in being returned. - If no lines match then an empty string is returned. -*/ -QString qt_getDefaultFromHomePrinters() -{ - QFile file(QDir::homePath() + QLatin1String("/.printers")); - if (!file.open(QIODevice::ReadOnly)) - return QString(); - QString all(QLatin1String(file.readAll())); - QStringList words = all.split(QRegExp(QLatin1String("\\W+")), QString::SkipEmptyParts); - const int i = words.indexOf(QLatin1String("_default")); - if (i != -1 && i < words.size() - 1) - return words.at(i + 1); - return QString(); -} - -// solaris, not 2.6 -void qt_parseEtcLpPrinters(QList *printers) -{ - QDir lp(QLatin1String("/etc/lp/printers")); - QFileInfoList dirs = lp.entryInfoList(); - if (dirs.isEmpty()) - return; - - QString tmp; - for (int i = 0; i < dirs.size(); ++i) { - QFileInfo printer = dirs.at(i); - if (printer.isDir()) { - tmp.sprintf("/etc/lp/printers/%s/configuration", - printer.fileName().toAscii().data()); - QFile configuration(tmp); - char *line = new char[1025]; - QString remote(QLatin1String("Remote:")); - QString contentType(QLatin1String("Content types:")); - QString printerHost; - bool canPrintPostscript = false; - if (configuration.open(QIODevice::ReadOnly)) { - while (!configuration.atEnd() && - configuration.readLine(line, 1024) > 0) { - if (QString::fromLatin1(line).startsWith(remote)) { - const char *p = line; - while (*p != ':') - p++; - p++; - while (isspace((uchar) *p)) - p++; - printerHost = QString::fromLocal8Bit(p); - printerHost = printerHost.simplified(); - } else if (QString::fromLatin1(line).startsWith(contentType)) { - char *p = line; - while (*p != ':') - p++; - p++; - char *e; - while (*p) { - while (isspace((uchar) *p)) - p++; - if (*p) { - char s; - e = p; - while (isalnum((uchar) *e)) - e++; - s = *e; - *e = '\0'; - if (!qstrcmp(p, "postscript") || - !qstrcmp(p, "any")) - canPrintPostscript = true; - *e = s; - if (s == ',') - e++; - p = e; - } - } - } - } - if (canPrintPostscript) - qt_perhapsAddPrinter(printers, printer.fileName(), - printerHost, QLatin1String("")); - } - delete[] line; - } - } -} - -// solaris 2.6 -char *qt_parsePrintersConf(QList *printers, bool *found) -{ - QFile pc(QLatin1String("/etc/printers.conf")); - if (!pc.open(QIODevice::ReadOnly)) { - if (found) - *found = false; - return 0; - } - if (found) - *found = true; - - char *line = new char[1025]; - line[1024] = '\0'; - - QString printerDesc; - int lineLength = 0; - - char *defaultPrinter = 0; - - while (!pc.atEnd() && - (lineLength=pc.readLine(line, 1024)) > 0) { - if (*line == '#') { - *line = '\0'; - lineLength = 0; - } - if (lineLength >= 2 && line[lineLength-2] == '\\') { - line[lineLength-2] = '\0'; - printerDesc += QString::fromLocal8Bit(line); - } else { - printerDesc += QString::fromLocal8Bit(line); - printerDesc = printerDesc.simplified(); - int i = printerDesc.indexOf(QLatin1Char(':')); - QString printerName, printerHost, printerComment; - QStringList aliases; - if (i >= 0) { - // have : want | - int j = printerDesc.indexOf(QLatin1Char('|')); - if (j >= i) - j = -1; - printerName = printerDesc.mid(0, j < 0 ? i : j); - if (printerName == QLatin1String("_default")) { - i = printerDesc.indexOf( - QRegExp(QLatin1String(": *use *="))); - while (printerDesc[i] != QLatin1Char('=')) - i++; - while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace()) - i++; - j = i; - while (j < (int)printerDesc.length() && - printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(',')) - j++; - // that's our default printer - defaultPrinter = - qstrdup(printerDesc.mid(i, j-i).toAscii().data()); - printerName = QString(); - printerDesc = QString(); - } else if (printerName == QLatin1String("_all")) { - // skip it.. any other cases we want to skip? - printerName = QString(); - printerDesc = QString(); - } - - if (j > 0) { - // try extracting a comment from the aliases - aliases = printerDesc.mid(j + 1, i - j - 1).split(QLatin1Char('|')); - printerComment = QCoreApplication::translate("QPrinter", "Aliases: %1") - .arg(aliases.join(QLatin1String(", "))); - } - // look for signs of this being a remote printer - i = printerDesc.indexOf( - QRegExp(QLatin1String(": *bsdaddr *="))); - if (i >= 0) { - // point k at the end of remote host name - while (printerDesc[i] != QLatin1Char('=')) - i++; - while (printerDesc[i] == QLatin1Char('=') || printerDesc[i].isSpace()) - i++; - j = i; - while (j < (int)printerDesc.length() && - printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(',')) - j++; - // and stuff that into the string - printerHost = printerDesc.mid(i, j-i); - // maybe stick the remote printer name into the comment - if (printerDesc[j] == QLatin1Char(',')) { - i = ++j; - while (printerDesc[i].isSpace()) - i++; - j = i; - while (j < (int)printerDesc.length() && - printerDesc[j] != QLatin1Char(':') && printerDesc[j] != QLatin1Char(',')) - j++; - if (printerName != printerDesc.mid(i, j-i)) { - printerComment = - QLatin1String("Remote name: "); - printerComment += printerDesc.mid(i, j-i); - } - } - } - } - if (printerComment == QLatin1String(":")) - printerComment = QString(); // for cups - if (printerName.length()) - qt_perhapsAddPrinter(printers, printerName, printerHost, - printerComment, aliases); - // chop away the line, for processing the next one - printerDesc = QString(); - } - } - delete[] line; - return defaultPrinter; -} - -#ifndef QT_NO_NIS - -#if defined(Q_C_CALLBACKS) -extern "C" { -#endif - -int qt_pd_foreach(int /*status */, char * /*key */, int /*keyLen */, - char *val, int valLen, char *data) -{ - qt_parsePrinterDesc(QString::fromLatin1(val, valLen), (QList *)data); - return 0; -} - -#if defined(Q_C_CALLBACKS) -} -#endif - -int qt_retrieveNisPrinters(QList *printers) -{ -#ifndef QT_NO_LIBRARY - typedef int (*WildCast)(int, char *, int, char *, int, char *); - char printersConfByname[] = "printers.conf.byname"; - char *domain; - int err; - - QLibrary lib(QLatin1String("nsl")); - typedef int (*ypGetDefaultDomain)(char **); - ypGetDefaultDomain _ypGetDefaultDomain = (ypGetDefaultDomain)lib.resolve("yp_get_default_domain"); - typedef int (*ypAll)(const char *, const char *, const struct ypall_callback *); - ypAll _ypAll = (ypAll)lib.resolve("yp_all"); - - if (_ypGetDefaultDomain && _ypAll) { - err = _ypGetDefaultDomain(&domain); - if (err == 0) { - ypall_callback cb; - // wild cast to support K&R-style system headers - (WildCast &) cb.foreach = (WildCast) qt_pd_foreach; - cb.data = (char *) printers; - err = _ypAll(domain, printersConfByname, &cb); - } - if (!err) - return Success; - } -#endif //QT_NO_LIBRARY - return Unavail; -} - -#endif // QT_NO_NIS - -char *qt_parseNsswitchPrintersEntry(QList *printers, char *line) -{ -#define skipSpaces() \ - while (line[k] != '\0' && isspace((uchar) line[k])) \ - k++ - - char *defaultPrinter = 0; - bool stop = false; - int lastStatus = NotFound; - - int k = 8; - skipSpaces(); - if (line[k] != ':') - return 0; - k++; - - char *cp = strchr(line, '#'); - if (cp != 0) - *cp = '\0'; - - while (line[k] != '\0') { - if (isspace((uchar) line[k])) { - k++; - } else if (line[k] == '[') { - k++; - skipSpaces(); - while (line[k] != '\0') { - char status = tolower(line[k]); - char action = '?'; - - while (line[k] != '=' && line[k] != ']' && line[k] != '\0') - k++; - if (line[k] == '=') { - k++; - skipSpaces(); - action = tolower(line[k]); - while (line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != ']') - k++; - } else if (line[k] == ']') { - k++; - break; - } - skipSpaces(); - - if (lastStatus == status) - stop = (action == (char) Return); - } - } else { - if (stop) - break; - - QByteArray source; - while (line[k] != '\0' && !isspace((uchar) line[k]) && line[k] != '[') { - source += line[k]; - k++; - } - - if (source == "user") { - lastStatus = qt_parsePrintcap(printers, - QDir::homePath() + QLatin1String("/.printers")); - } else if (source == "files") { - bool found; - defaultPrinter = qt_parsePrintersConf(printers, &found); - if (found) - lastStatus = Success; -#ifndef QT_NO_NIS - } else if (source == "nis") { - lastStatus = qt_retrieveNisPrinters(printers); -#endif - } else { - // nisplus, dns, etc., are not implemented yet - lastStatus = NotFound; - } - stop = (lastStatus == Success); - } - } - return defaultPrinter; -} - -char *qt_parseNsswitchConf(QList *printers) -{ - QFile nc(QLatin1String("/etc/nsswitch.conf")); - if (!nc.open(QIODevice::ReadOnly)) - return 0; - - char *defaultPrinter = 0; - - char *line = new char[1025]; - line[1024] = '\0'; - - while (!nc.atEnd() && - nc.readLine(line, 1024) > 0) { - if (qstrncmp(line, "printers", 8) == 0) { - defaultPrinter = qt_parseNsswitchPrintersEntry(printers, line); - delete[] line; - return defaultPrinter; - } - } - - strcpy(line, "printers: user files nis nisplus xfn"); - defaultPrinter = qt_parseNsswitchPrintersEntry(printers, line); - delete[] line; - return defaultPrinter; -} - -// HP-UX -void qt_parseEtcLpMember(QList *printers) -{ - QDir lp(QLatin1String("/etc/lp/member")); - if (!lp.exists()) - return; - QFileInfoList dirs = lp.entryInfoList(); - if (dirs.isEmpty()) - return; - - QString tmp; - for (int i = 0; i < dirs.size(); ++i) { - QFileInfo printer = dirs.at(i); - // I haven't found any real documentation, so I'm guessing that - // since lpstat uses /etc/lp/member rather than one of the - // other directories, it's the one to use. I did not find a - // decent way to locate aliases and remote printers. - if (printer.isFile()) - qt_perhapsAddPrinter(printers, printer.fileName(), - QCoreApplication::translate("QPrinter", "unknown"), - QLatin1String("")); - } -} - -// IRIX 6.x -void qt_parseSpoolInterface(QList *printers) -{ - QDir lp(QLatin1String("/usr/spool/lp/interface")); - if (!lp.exists()) - return; - QFileInfoList files = lp.entryInfoList(); - if(files.isEmpty()) - return; - - for (int i = 0; i < files.size(); ++i) { - QFileInfo printer = files.at(i); - - if (!printer.isFile()) - continue; - - // parse out some information - QFile configFile(printer.filePath()); - if (!configFile.open(QIODevice::ReadOnly)) - continue; - - QByteArray line; - line.resize(1025); - QString namePrinter; - QString hostName; - QString hostPrinter; - QString printerType; - - QString nameKey(QLatin1String("NAME=")); - QString typeKey(QLatin1String("TYPE=")); - QString hostKey(QLatin1String("HOSTNAME=")); - QString hostPrinterKey(QLatin1String("HOSTPRINTER=")); - - while (!configFile.atEnd() && - (configFile.readLine(line.data(), 1024)) > 0) { - QString uline = QString::fromLocal8Bit(line); - if (uline.startsWith(typeKey) ) { - printerType = uline.mid(nameKey.length()); - printerType = printerType.simplified(); - } else if (uline.startsWith(hostKey)) { - hostName = uline.mid(hostKey.length()); - hostName = hostName.simplified(); - } else if (uline.startsWith(hostPrinterKey)) { - hostPrinter = uline.mid(hostPrinterKey.length()); - hostPrinter = hostPrinter.simplified(); - } else if (uline.startsWith(nameKey)) { - namePrinter = uline.mid(nameKey.length()); - namePrinter = namePrinter.simplified(); - } - } - configFile.close(); - - printerType = printerType.trimmed(); - if (printerType.indexOf(QLatin1String("postscript"), 0, Qt::CaseInsensitive) < 0) - continue; - - int ii = 0; - while ((ii = namePrinter.indexOf(QLatin1Char('"'), ii)) >= 0) - namePrinter.remove(ii, 1); - - if (hostName.isEmpty() || hostPrinter.isEmpty()) { - qt_perhapsAddPrinter(printers, printer.fileName(), - QLatin1String(""), namePrinter); - } else { - QString comment; - comment = namePrinter; - comment += QLatin1String(" ("); - comment += hostPrinter; - comment += QLatin1Char(')'); - qt_perhapsAddPrinter(printers, printer.fileName(), - hostName, comment); - } - } -} - - -// Every unix must have its own. It's a standard. Here is AIX. -void qt_parseQconfig(QList *printers) -{ - QFile qconfig(QLatin1String("/etc/qconfig")); - if (!qconfig.open(QIODevice::ReadOnly)) - return; - - QTextStream ts(&qconfig); - QString line; - - QString stanzaName; // either a queue or a device name - bool up = true; // queue up? default true, can be false - QString remoteHost; // null if local - QString deviceName; // null if remote - - QRegExp newStanza(QLatin1String("^[0-z\\-]*:$")); - - // our basic strategy here is to process each line, detecting new - // stanzas. each time we see a new stanza, we check if the - // previous stanza was a valid queue for a) a remote printer or b) - // a local printer. if it wasn't, we assume that what we see is - // the start of the first stanza, or that the previous stanza was - // a device stanza, or that there is some syntax error (we don't - // report those). - - do { - line = ts.readLine(); - bool indented = line[0].isSpace(); - line = line.simplified(); - - int i = line.indexOf(QLatin1Char('=')); - if (indented && i != -1) { // line in stanza - QString variable = line.left(i).simplified(); - QString value=line.mid(i+1, line.length()).simplified(); - if (variable == QLatin1String("device")) - deviceName = value; - else if (variable == QLatin1String("host")) - remoteHost = value; - else if (variable == QLatin1String("up")) - up = !(value.toLower() == QLatin1String("false")); - } else if (line[0] == QLatin1Char('*')) { // comment - // nothing to do - } else if (ts.atEnd() || // end of file, or beginning of new stanza - (!indented && line.contains(newStanza))) { - if (up && stanzaName.length() > 0 && stanzaName.length() < 21) { - if (remoteHost.length()) // remote printer - qt_perhapsAddPrinter(printers, stanzaName, remoteHost, - QString()); - else if (deviceName.length()) // local printer - qt_perhapsAddPrinter(printers, stanzaName, QString(), - QString()); - } - line.chop(1); - if (line.length() >= 1 && line.length() <= 20) - stanzaName = line; - up = true; - remoteHost.clear(); - deviceName.clear(); - } else { - // syntax error? ignore. - } - } while (!ts.atEnd()); -} - -Q_GUI_EXPORT int qt_getLprPrinters(QList& printers) -{ - QByteArray etcLpDefault; - qt_parsePrintcap(&printers, QLatin1String("/etc/printcap")); - qt_parseEtcLpMember(&printers); - qt_parseSpoolInterface(&printers); - qt_parseQconfig(&printers); - - QFileInfo f; - f.setFile(QLatin1String("/etc/lp/printers")); - if (f.isDir()) { - qt_parseEtcLpPrinters(&printers); - QFile def(QLatin1String("/etc/lp/default")); - if (def.open(QIODevice::ReadOnly)) { - etcLpDefault.resize(1025); - if (def.readLine(etcLpDefault.data(), 1024) > 0) { - QRegExp rx(QLatin1String("^(\\S+)")); - if (rx.indexIn(QString::fromLatin1(etcLpDefault)) != -1) - etcLpDefault = rx.cap(1).toAscii(); - } - } - } - - char *def = 0; - f.setFile(QLatin1String("/etc/nsswitch.conf")); - if (f.isFile()) { - def = qt_parseNsswitchConf(&printers); - } else { - f.setFile(QLatin1String("/etc/printers.conf")); - if (f.isFile()) - def = qt_parsePrintersConf(&printers); - } - - if (def) { - etcLpDefault = def; - delete [] def; - } - - QString homePrintersDefault = qt_getDefaultFromHomePrinters(); - - // all printers hopefully known. try to find a good default - QString dollarPrinter; - { - dollarPrinter = QString::fromLocal8Bit(qgetenv("PRINTER")); - if (dollarPrinter.isEmpty()) - dollarPrinter = QString::fromLocal8Bit(qgetenv("LPDEST")); - if (dollarPrinter.isEmpty()) - dollarPrinter = QString::fromLocal8Bit(qgetenv("NPRINTER")); - if (dollarPrinter.isEmpty()) - dollarPrinter = QString::fromLocal8Bit(qgetenv("NGPRINTER")); - if (!dollarPrinter.isEmpty()) - qt_perhapsAddPrinter(&printers, dollarPrinter, - QCoreApplication::translate("QPrinter", "unknown"), - QLatin1String("")); - } - - QRegExp ps(QLatin1String("[^a-z]ps(?:[^a-z]|$)")); - QRegExp lp(QLatin1String("[^a-z]lp(?:[^a-z]|$)")); - - int quality = 0; - int best = 0; - for (int i = 0; i < printers.size(); ++i) { - QString name = printers.at(i).name; - QString comment = printers.at(i).comment; - if (quality < 5 && name == dollarPrinter) { - best = i; - quality = 5; - } else if (quality < 4 && !homePrintersDefault.isEmpty() && - name == homePrintersDefault) { - best = i; - quality = 4; - } else if (quality < 3 && !etcLpDefault.isEmpty() && - name == QLatin1String(etcLpDefault)) { - best = i; - quality = 3; - } else if (quality < 2 && - (name == QLatin1String("ps") || - ps.indexIn(comment) != -1)) { - best = i; - quality = 2; - } else if (quality < 1 && - (name == QLatin1String("lp") || - lp.indexIn(comment) > -1)) { - best = i; - quality = 1; - } - } - - return best; -} - -///////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////// - -QList qt_getCupsPrinterPaperSizes(int cupsPrinterIndex) -{ - QList result; -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (!QCUPSSupport::isAvailable() || cupsPrinterIndex < 0) - return result; - // Find paper sizes from CUPS. - QCUPSSupport cups; - cups.setCurrentPrinter(cupsPrinterIndex); - if (const ppd_option_t* size = cups.pageSizes()) { - for (int j = 0; j < size->num_choices; ++j) - result.append(string2PaperSize(size->choices[j].choice)); - } - return result; -#endif -} - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE diff --git a/src/gui/painting/qprinterinfo_unix_p.h b/src/gui/painting/qprinterinfo_unix_p.h deleted file mode 100644 index f8721deaa9..0000000000 --- a/src/gui/painting/qprinterinfo_unix_p.h +++ /dev/null @@ -1,130 +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$ -** -****************************************************************************/ - -#ifndef QPRINTERINFO_UNIX_P_H -#define QPRINTERINFO_UNIX_P_H - -#include -#include - -#ifndef QT_NO_NIS -# ifndef BOOL_DEFINED -# define BOOL_DEFINED -# endif - -# include -# include -# include -# include -#endif // QT_NO_NIS - -#ifdef Success -# undef Success -#endif - -#include - -QT_BEGIN_NAMESPACE - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#ifndef QT_NO_PRINTER - -struct QPrinterDescription { - QPrinterDescription(const QString &n, const QString &h, const QString &c, const QStringList &a) - : name(n), host(h), comment(c), aliases(a) {} - QString name; - QString host; - QString comment; - QStringList aliases; - bool samePrinter(const QString& printer) const { - return name == printer || aliases.contains(printer); - } -}; - -enum { Success = 's', Unavail = 'u', NotFound = 'n', TryAgain = 't' }; -enum { Continue = 'c', Return = 'r' }; - -void qt_perhapsAddPrinter(QList *printers, const QString &name, - QString host, QString comment, - QStringList aliases = QStringList()); -void qt_parsePrinterDesc(QString printerDesc, QList *printers); - -int qt_parsePrintcap(QList *printers, const QString& fileName); -QString qt_getDefaultFromHomePrinters(); -void qt_parseEtcLpPrinters(QList *printers); -char *qt_parsePrintersConf(QList *printers, bool *found = 0); - -#ifndef QT_NO_NIS -#if defined(Q_C_CALLBACKS) -extern "C" { -#endif -int qt_pd_foreach(int /*status */, char * /*key */, int /*keyLen */, - char *val, int valLen, char *data); - -#if defined(Q_C_CALLBACKS) -} -#endif -int qt_retrieveNisPrinters(QList *printers); -#endif // QT_NO_NIS -char *qt_parseNsswitchPrintersEntry(QList *printers, char *line); -char *qt_parseNsswitchConf(QList *printers); -void qt_parseEtcLpMember(QList *printers); -void qt_parseSpoolInterface(QList *printers); -void qt_parseQconfig(QList *printers); -int qt_getLprPrinters(QList& printers); - -QList qt_getCupsPrinterPaperSizes(int cupsPrinterIndex); - -#endif // QT_NO_PRINTER - -QT_END_NAMESPACE - -#endif // QPRINTERINFO_UNIX_P_H -- cgit v1.2.3