diff options
Diffstat (limited to 'src/plugins/printsupport/cups/qcupsprintersupport.cpp')
-rw-r--r-- | src/plugins/printsupport/cups/qcupsprintersupport.cpp | 109 |
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 |