summaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2012-05-09 23:47:14 +0100
committerQt by Nokia <qt-info@nokia.com>2012-05-31 17:40:55 +0200
commitf70924e9ccc016b979bc74bba156600639184be7 (patch)
treea470d6ac093035526cbc3840e0588d33c003e05f /src/plugins
parent704bd686315deeaf86a15d1eb37af56b0b0e184b (diff)
QtPrintSupport: Add CUPS printsupport plugin
Move CUPS code around to create a new CUPS printsupport plugin, this fixes QPrinterInfo for CUPS which depends on the plugin to work. It QT_NO_CUPS is defined then the plugin is not built and only Print to PDF is supported under Linux. * Move unused genericiunixprintersupport plugin to start new CUPS printsupport plugin * Split QPdfPrintEngine to create QCupsPrintEngine * Remove LPR related code from QPdfPrintEngine * Move CUPS specific code from plugin base class to derived CUPS class * Remove forcing CUPS print engine to use PDF mode as PDF is now Native * Move qt_getCupsPrinterPaperSizes from qprinterinfo_unix to QCUPSSupport * Remove qprinterinfo_unix as no longer used * Remove all QT_NO_LPR uses There is now no CUPS specific code left in printsupport/kernel except QCUPSSupport which is needed for the dialogs. Task-number: QTBUG-23060 Change-Id: Ie8fa4512a2424edc8943068e0fa9fb714cc42db9 Reviewed-by: Teemu Katajisto <teemu.katajisto@digia.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: John Layt <jlayt@kde.org>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/printsupport/cups/cups.json3
-rw-r--r--src/plugins/printsupport/cups/cups.pro19
-rw-r--r--src/plugins/printsupport/cups/main.cpp74
-rw-r--r--src/plugins/printsupport/cups/qcupsprintengine.cpp269
-rw-r--r--src/plugins/printsupport/cups/qcupsprintengine_p.h114
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport.cpp99
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport_p.h70
-rw-r--r--src/plugins/printsupport/printsupport.pro1
8 files changed, 649 insertions, 0 deletions
diff --git a/src/plugins/printsupport/cups/cups.json b/src/plugins/printsupport/cups/cups.json
new file mode 100644
index 0000000000..f578375d09
--- /dev/null
+++ b/src/plugins/printsupport/cups/cups.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "cupsprintersupport" ]
+}
diff --git a/src/plugins/printsupport/cups/cups.pro b/src/plugins/printsupport/cups/cups.pro
new file mode 100644
index 0000000000..e19694cb40
--- /dev/null
+++ b/src/plugins/printsupport/cups/cups.pro
@@ -0,0 +1,19 @@
+TARGET = cupsprintersupport
+load(qt_plugin)
+DESTDIR = $$QT.gui.plugins/printsupport
+
+QT += core-private gui-private printsupport printsupport-private
+
+INCLUDEPATH += ../../../printsupport/kernel
+
+SOURCES += main.cpp \
+ qcupsprintersupport.cpp \
+ qcupsprintengine.cpp
+
+HEADERS += qcupsprintersupport.h \
+ qcupsprintengine_p.h
+
+OTHER_FILES += cups.json
+
+target.path += $$[QT_INSTALL_PLUGINS]/printsupport
+INSTALLS += target
diff --git a/src/plugins/printsupport/cups/main.cpp b/src/plugins/printsupport/cups/main.cpp
new file mode 100644
index 0000000000..c705ca3c86
--- /dev/null
+++ b/src/plugins/printsupport/cups/main.cpp
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins 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 "qcupsprintersupport_p.h"
+
+#include <qpa/qplatformprintplugin.h>
+#include <QtCore/QStringList>
+
+QT_BEGIN_NAMESPACE
+
+class QCupsPrinterSupportPlugin : public QPlatformPrinterSupportPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.QPlatformPrinterSupportFactoryInterface" FILE "cups.json")
+
+public:
+ QStringList keys() const;
+ QPlatformPrinterSupport *create(const QString &);
+};
+
+QStringList QCupsPrinterSupportPlugin::keys() const
+{
+ return QStringList(QStringLiteral("cupsprintersupport"));
+}
+
+QPlatformPrinterSupport *QCupsPrinterSupportPlugin::create(const QString &key)
+{
+ if (key.compare(key, QStringLiteral("cupsprintersupport"), Qt::CaseInsensitive) == 0)
+ return new QCupsPrinterSupport;
+ return 0;
+}
+
+QT_END_NAMESPACE
+
+#include "main.moc"
diff --git a/src/plugins/printsupport/cups/qcupsprintengine.cpp b/src/plugins/printsupport/cups/qcupsprintengine.cpp
new file mode 100644
index 0000000000..8d350e72ab
--- /dev/null
+++ b/src/plugins/printsupport/cups/qcupsprintengine.cpp
@@ -0,0 +1,269 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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 "qcupsprintengine_p.h"
+
+#ifndef QT_NO_PRINTER
+
+#include <qiodevice.h>
+#include <qfile.h>
+#include <qdebug.h>
+#include <qbuffer.h>
+#include "private/qcups_p.h"
+#include "qprinterinfo.h"
+
+#include <limits.h>
+#include <math.h>
+
+#include "private/qcore_unix_p.h" // overrides QT_OPEN
+
+QT_BEGIN_NAMESPACE
+
+QCupsPrintEngine::QCupsPrintEngine(QPrinter::PrinterMode m)
+ : QPdfPrintEngine(*new QCupsPrintEnginePrivate(m))
+{
+ Q_D(QCupsPrintEngine);
+
+ 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;
+ }
+ }
+
+ }
+
+ state = QPrinter::Idle;
+}
+
+QCupsPrintEngine::~QCupsPrintEngine()
+{
+}
+
+void QCupsPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &value)
+{
+ Q_D(QCupsPrintEngine);
+
+ switch (int(key)) {
+ 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;
+ default:
+ QPdfPrintEngine::setProperty(key, value);
+ break;
+ }
+}
+
+QVariant QCupsPrintEngine::property(PrintEnginePropertyKey key) const
+{
+ Q_D(const QCupsPrintEngine);
+
+ QVariant ret;
+ switch (int(key)) {
+ case PPK_SupportsMultipleCopies:
+ ret = true;
+ break;
+ case PPK_NumberOfCopies:
+ ret = 1;
+ 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;
+ default:
+ ret = QPdfPrintEngine::property(key);
+ break;
+ }
+ return ret;
+}
+
+
+QCupsPrintEnginePrivate::QCupsPrintEnginePrivate(QPrinter::PrinterMode m) : QPdfPrintEnginePrivate(m)
+{
+}
+
+QCupsPrintEnginePrivate::~QCupsPrintEnginePrivate()
+{
+}
+
+bool QCupsPrintEnginePrivate::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;
+ } else if (QCUPSSupport::isAvailable()) {
+ QCUPSSupport cups;
+ QPair<int, QString> 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<QFile *>(outDevice)->open(ret.first, QIODevice::WriteOnly);
+ }
+
+ return true;
+}
+
+void QCupsPrintEnginePrivate::closePrintDevice()
+{
+ QPdfPrintEnginePrivate::closePrintDevice();
+
+ if (!cupsTempFile.isEmpty()) {
+ QString tempFile = cupsTempFile;
+ cupsTempFile.clear();
+ QCUPSSupport cups;
+
+ // Set up print options.
+ QByteArray prnName;
+ QList<QPair<QByteArray, QByteArray> > options;
+ QVector<cups_option_t> 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<QByteArray, QByteArray>("media", cupsStringPageSize.toLocal8Bit()));
+
+ if (copies > 1)
+ options.append(QPair<QByteArray, QByteArray>("copies", QString::number(copies).toLocal8Bit()));
+
+ if (collate)
+ options.append(QPair<QByteArray, QByteArray>("Collate", "True"));
+
+ switch (duplex) {
+ case QPrinter::DuplexNone:
+ options.append(QPair<QByteArray, QByteArray>("sides", "one-sided"));
+ break;
+ case QPrinter::DuplexAuto:
+ if (!landscape)
+ options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-long-edge"));
+ else
+ options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-short-edge"));
+ break;
+ case QPrinter::DuplexLongSide:
+ options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-long-edge"));
+ break;
+ case QPrinter::DuplexShortSide:
+ options.append(QPair<QByteArray, QByteArray>("sides", "two-sided-short-edge"));
+ break;
+ }
+
+ if (QCUPSSupport::cupsVersion() >= 10300 && landscape)
+ options.append(QPair<QByteArray, QByteArray>("landscape", ""));
+
+ QStringList::const_iterator it = cupsOptions.constBegin();
+ while (it != cupsOptions.constEnd()) {
+ options.append(QPair<QByteArray, QByteArray>((*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);
+ }
+}
+
+void QCupsPrintEnginePrivate::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/plugins/printsupport/cups/qcupsprintengine_p.h b/src/plugins/printsupport/cups/qcupsprintengine_p.h
new file mode 100644
index 0000000000..bbffeaaca2
--- /dev/null
+++ b/src/plugins/printsupport/cups/qcupsprintengine_p.h
@@ -0,0 +1,114 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** 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 QCUPSPRINTENGINE_P_H
+#define QCUPSPRINTENGINE_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 "QtPrintSupport/qprintengine.h"
+
+#ifndef QT_NO_PRINTER
+
+#include <QtCore/qstring.h>
+#include <QtGui/qpaintengine.h>
+
+#include <private/qpaintengine_p.h>
+#include <private/qprintengine_pdf_p.h>
+#include <QtPrintSupport/qprintengine.h>
+#include <private/qcups_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QCupsPrintEnginePrivate;
+
+class QCupsPrintEngine : public QPdfPrintEngine
+{
+ Q_DECLARE_PRIVATE(QCupsPrintEngine)
+public:
+ QCupsPrintEngine(QPrinter::PrinterMode m);
+ virtual ~QCupsPrintEngine();
+
+ // reimplementations QPdfPrintEngine
+ void setProperty(PrintEnginePropertyKey key, const QVariant &value);
+ QVariant property(PrintEnginePropertyKey key) const;
+ // end reimplementations QPdfPrintEngine
+
+private:
+ Q_DISABLE_COPY(QCupsPrintEngine)
+};
+
+class QCupsPrintEnginePrivate : public QPdfPrintEnginePrivate
+{
+ Q_DECLARE_PUBLIC(QCupsPrintEngine)
+public:
+ QCupsPrintEnginePrivate(QPrinter::PrinterMode m);
+ ~QCupsPrintEnginePrivate();
+
+ bool openPrintDevice();
+ void closePrintDevice();
+
+ void updatePaperSize();
+
+private:
+ Q_DISABLE_COPY(QCupsPrintEnginePrivate)
+
+ QStringList cupsOptions;
+ QString cupsStringPageSize;
+ QRect cupsPaperRect;
+ QRect cupsPageRect;
+ QString cupsTempFile;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_PRINTER
+
+#endif // QCUPSPRINTENGINE_P_H
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
new file mode 100644
index 0000000000..279c26ad72
--- /dev/null
+++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins 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 "qcupsprintersupport_p.h"
+
+#include "qcupsprintengine_p.h"
+#include <private/qprinterinfo_p.h>
+
+#include <QtPrintSupport/QPrinterInfo>
+
+#include "qcups_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QCupsPrinterSupport::QCupsPrinterSupport() : QPlatformPrinterSupport()
+{
+}
+
+QCupsPrinterSupport::~QCupsPrinterSupport()
+{
+}
+
+QPrintEngine *QCupsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode)
+{
+ return new QCupsPrintEngine(printerMode);
+}
+
+QPaintEngine *QCupsPrinterSupport::createPaintEngine(QPrintEngine *engine, QPrinter::PrinterMode printerMode)
+{
+ Q_UNUSED(printerMode)
+ return static_cast<QCupsPrintEngine *>(engine);
+}
+
+QList<QPrinter::PaperSize> QCupsPrinterSupport::supportedPaperSizes(const QPrinterInfo &printerInfo) const
+{
+ return QCUPSSupport::getCupsPrinterPaperSizes(printerInfoCupsPrinterIndex(printerInfo));
+}
+
+QList<QPrinterInfo> QCupsPrinterSupport::availablePrinters()
+{
+ QList<QPrinterInfo> printers;
+ foreach (const QCUPSSupport::Printer &p, QCUPSSupport::availableUnixPrinters()) {
+ QPrinterInfo printer(p.name);
+ printer.d_func()->isDefault = p.isDefault;
+ setPrinterInfoCupsPrinterIndex(&printer, p.cupsPrinterIndex);
+ printers.append(printer);
+ }
+ return printers;
+}
+
+int QCupsPrinterSupport::printerInfoCupsPrinterIndex(const QPrinterInfo &p)
+{
+ return p.isNull() ? -1 : p.d_func()->cupsPrinterIndex;
+}
+
+void QCupsPrinterSupport::setPrinterInfoCupsPrinterIndex(QPrinterInfo *p, int index)
+{
+ p->d_func()->cupsPrinterIndex = index;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport_p.h b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
new file mode 100644
index 0000000000..81887e3dd8
--- /dev/null
+++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins 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 QCUPSPRINTERSUPPORT_H
+#define QCUPSPRINTERSUPPORT_H
+
+#include <qpa/qplatformprintersupport.h>
+
+QT_BEGIN_HEADER
+QT_BEGIN_NAMESPACE
+
+class QCupsPrinterSupport : public QPlatformPrinterSupport
+{
+public:
+ QCupsPrinterSupport();
+ ~QCupsPrinterSupport();
+
+ virtual QPrintEngine *createNativePrintEngine(QPrinter::PrinterMode printerMode);
+ virtual QPaintEngine *createPaintEngine(QPrintEngine *printEngine, QPrinter::PrinterMode);
+ virtual QList<QPrinter::PaperSize> supportedPaperSizes(const QPrinterInfo &) const;
+
+ virtual QList<QPrinterInfo> availablePrinters();
+
+private:
+ static int printerInfoCupsPrinterIndex(const QPrinterInfo &p);
+ static void setPrinterInfoCupsPrinterIndex(QPrinterInfo *p, int index);
+};
+
+QT_END_NAMESPACE
+QT_END_HEADER
+
+#endif // QCUPSPRINTERSUPPORT_H
diff --git a/src/plugins/printsupport/printsupport.pro b/src/plugins/printsupport/printsupport.pro
index 547ac42c9e..93f3d65bc5 100644
--- a/src/plugins/printsupport/printsupport.pro
+++ b/src/plugins/printsupport/printsupport.pro
@@ -2,3 +2,4 @@ TEMPLATE = subdirs
mac: SUBDIRS += cocoa
win32: SUBDIRS += windows
+unix:!mac:contains(QT_CONFIG, cups): SUBDIRS += cups