summaryrefslogtreecommitdiffstats
path: root/src/plugins/printsupport/cups/qcupsprintersupport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/printsupport/cups/qcupsprintersupport.cpp')
-rw-r--r--src/plugins/printsupport/cups/qcupsprintersupport.cpp109
1 files changed, 32 insertions, 77 deletions
diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
index b9f0c394f8..b2abb07fc7 100644
--- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp
+++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 John Layt <jlayt@kde.org>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the plugins of the Qt Toolkit.
@@ -44,7 +45,9 @@
#ifndef QT_NO_PRINTER
#include "qcupsprintengine_p.h"
+#include "qppdprintdevice.h"
#include <private/qprinterinfo_p.h>
+#include <private/qprintdevice_p.h>
#include <QtPrintSupport/QPrinterInfo>
@@ -55,18 +58,13 @@
QT_BEGIN_NAMESPACE
-QCupsPrinterSupport::QCupsPrinterSupport() : QPlatformPrinterSupport(),
- m_cups(QLatin1String("cups"), 2),
- m_cupsPrinters(0),
- m_cupsPrintersCount(0)
+QCupsPrinterSupport::QCupsPrinterSupport()
+ : QPlatformPrinterSupport()
{
- loadCups();
- loadCupsPrinters();
}
QCupsPrinterSupport::~QCupsPrinterSupport()
{
- freeCupsPrinters();
}
QPrintEngine *QCupsPrinterSupport::createNativePrintEngine(QPrinter::PrinterMode printerMode)
@@ -80,85 +78,42 @@ QPaintEngine *QCupsPrinterSupport::createPaintEngine(QPrintEngine *engine, QPrin
return static_cast<QCupsPrintEngine *>(engine);
}
-QList<QPrinter::PaperSize> QCupsPrinterSupport::supportedPaperSizes(const QPrinterInfo &printerInfo) const
+QPrintDevice QCupsPrinterSupport::createPrintDevice(const QString &id)
{
- return QCUPSSupport::getCupsPrinterPaperSizes(printerIndex(printerInfo));
+ return QPlatformPrinterSupport::createPrintDevice(new QPpdPrintDevice(id));
}
-QList<QPair<QString, QSizeF> > QCupsPrinterSupport::supportedSizesWithNames(const QPrinterInfo &printerInfo) const
+QStringList QCupsPrinterSupport::availablePrintDeviceIds() const
{
- return QCUPSSupport::getCupsPrinterPaperSizesWithNames(printerIndex(printerInfo));
-}
-
-void QCupsPrinterSupport::loadCups()
-{
- cupsGetDests = (CupsGetDests) m_cups.resolve("cupsGetDests");
- cupsFreeDests = (CupsFreeDests) m_cups.resolve("cupsFreeDests");
- cupsGetOption = (CupsGetOption) m_cups.resolve("cupsGetOption");
-}
-
-void QCupsPrinterSupport::freeCupsPrinters()
-{
- if (cupsFreeDests && m_cupsPrintersCount) {
- cupsFreeDests(m_cupsPrintersCount, m_cupsPrinters);
- m_cupsPrintersCount = 0;
- m_cupsPrinters = 0;
+ QStringList list;
+ cups_dest_t *dests;
+ int count = cupsGetDests(&dests);
+ for (int i = 0; i < count; ++i) {
+ QString printerId = QString::fromLocal8Bit(dests[i].name);
+ if (dests[i].instance)
+ printerId += QLatin1Char('/') + QString::fromLocal8Bit(dests[i].instance);
+ list.append(printerId);
}
+ cupsFreeDests(count, dests);
+ return list;
}
-void QCupsPrinterSupport::loadCupsPrinters()
-{
- freeCupsPrinters();
- m_printers.clear();
-
- if (cupsGetDests)
- m_cupsPrintersCount = cupsGetDests(&m_cupsPrinters);
-
- for (int i = 0; i < m_cupsPrintersCount; ++i) {
- QString printerName = QString::fromLocal8Bit(m_cupsPrinters[i].name);
- if (m_cupsPrinters[i].instance)
- printerName += QLatin1Char('/') + QString::fromLocal8Bit(m_cupsPrinters[i].instance);
- QString description = cupsOption(i, "printer-info");
- QString location = cupsOption(i, "printer-location");
- QString makeAndModel = cupsOption(i, "printer-make-and-model");
- QPrinterInfo printer = createPrinterInfo(printerName, description, location, makeAndModel,
- m_cupsPrinters[i].is_default, i);
- m_printers.append(printer);
- }
-}
-
-QList<QPrinterInfo> QCupsPrinterSupport::availablePrinters()
-{
- loadCupsPrinters();
- return QPlatformPrinterSupport::availablePrinters();
-}
-
-QString QCupsPrinterSupport::printerOption(const QPrinterInfo &printer, const QString &key) const
-{
- return cupsOption(printerIndex(printer), key);
-}
-
-QString QCupsPrinterSupport::cupsOption(int i, const QString &key) const
-{
- QString value;
- if (i > -1 && i < m_cupsPrintersCount && cupsGetOption)
- value = cupsGetOption(key.toLocal8Bit(), m_cupsPrinters[i].num_options, m_cupsPrinters[i].options);
- return value;
-}
-
-PrinterOptions QCupsPrinterSupport::printerOptions(const QPrinterInfo &printer) const
+QString QCupsPrinterSupport::defaultPrintDeviceId() const
{
- PrinterOptions options;
- int p = printerIndex(printer);
- if (p <= -1 || p >= m_cupsPrintersCount)
- return options;
- int numOptions = m_cupsPrinters[p].num_options;
- for (int i = 0; i < numOptions; ++i) {
- QString name = m_cupsPrinters[p].options[i].name;
- QString value = m_cupsPrinters[p].options[i].value;
- options.insert(name, value);
+ QString printerId;
+ cups_dest_t *dests;
+ int count = cupsGetDests(&dests);
+ for (int i = 0; i < count; ++i) {
+ if (dests[i].is_default) {
+ printerId = QString::fromLocal8Bit(dests[i].name);
+ if (dests[i].instance) {
+ printerId += QLatin1Char('/') + QString::fromLocal8Bit(dests[i].instance);
+ break;
+ }
+ }
}
- return options;
+ cupsFreeDests(count, dests);
+ return printerId;
}
QT_END_NAMESPACE