From 271b484b0081e0f97a97b3e2e7ea5bee02f43ae8 Mon Sep 17 00:00:00 2001 From: John Layt Date: Fri, 1 Jun 2012 20:33:53 +0100 Subject: [PATCH] QtPrintSupport: Move plugin access of QPrinterInfo internals to base Move all plugin methods requiring access to QPrinterInfo internals into the plugin base class, and remove the plugin classes as friends from QPrinterInfo. Change-Id: Ic527efc681e198abf19e038dd77c36bb8017d049 Reviewed-by: Teemu Katajisto Reviewed-by: John Layt --- src/plugins/platforms/cocoa/qcocoaprintersupport.mm | 19 +++++++++---------- src/plugins/printsupport/cups/qcupsprintersupport.cpp | 16 ++-------------- src/plugins/printsupport/cups/qcupsprintersupport_p.h | 2 -- .../printsupport/windows/qwindowsprintersupport.cpp | 6 ++---- src/printsupport/kernel/qplatformprintersupport.h | 6 ++++-- .../kernel/qplatformprintersupport_qpa.cpp | 16 ++++++++++++---- src/printsupport/kernel/qprinterinfo.h | 3 --- src/printsupport/kernel/qprinterinfo_p.h | 10 ++-------- 8 files changed, 31 insertions(+), 47 deletions(-) diff --git a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm index b77d5a2..ed43684 100644 --- a/src/plugins/platforms/cocoa/qcocoaprintersupport.mm +++ b/src/plugins/platforms/cocoa/qcocoaprintersupport.mm @@ -128,14 +128,13 @@ QPrinterInfo QCocoaPrinterSupport::printerInfoFromPMPrinter(const PMPrinter &pri if (!printer) return QPrinterInfo(); - QPrinterInfo pi = QPrinterInfo(QCFString::toQString(PMPrinterGetID(printer))); - - pi.d_func()->description = QCFString::toQString(PMPrinterGetName(printer)); - pi.d_func()->location = QCFString::toQString(PMPrinterGetLocation(printer)); - CFStringRef makeAndModel; - PMPrinterGetMakeAndModelName(printer, &makeAndModel); - pi.d_func()->makeAndModel = QCFString::toQString(makeAndModel); - pi.d_func()->isDefault = PMPrinterIsDefault(printer); - - return pi; + QString name = QCFString::toQString(PMPrinterGetID(printer)); + QString description = QCFString::toQString(PMPrinterGetName(printer)); + QString location = QCFString::toQString(PMPrinterGetLocation(printer)); + CFStringRef cfMakeAndModel; + PMPrinterGetMakeAndModelName(printer, &cfMakeAndModel); + QString makeAndModel = QCFString::toQString(cfMakeAndModel); + bool isDefault = PMPrinterIsDefault(printer); + + return createPrinterInfo(name, description, location, makeAndModel, isDefault, 0); } diff --git a/src/plugins/printsupport/cups/qcupsprintersupport.cpp b/src/plugins/printsupport/cups/qcupsprintersupport.cpp index 279c26a..83d4068 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport.cpp +++ b/src/plugins/printsupport/cups/qcupsprintersupport.cpp @@ -71,29 +71,17 @@ QPaintEngine *QCupsPrinterSupport::createPaintEngine(QPrintEngine *engine, QPrin QList QCupsPrinterSupport::supportedPaperSizes(const QPrinterInfo &printerInfo) const { - return QCUPSSupport::getCupsPrinterPaperSizes(printerInfoCupsPrinterIndex(printerInfo)); + return QCUPSSupport::getCupsPrinterPaperSizes(printerIndex(printerInfo)); } QList QCupsPrinterSupport::availablePrinters() { QList printers; foreach (const QCUPSSupport::Printer &p, QCUPSSupport::availableUnixPrinters()) { - QPrinterInfo printer(p.name); - printer.d_func()->isDefault = p.isDefault; - setPrinterInfoCupsPrinterIndex(&printer, p.cupsPrinterIndex); + QPrinterInfo printer = createPrinterInfo(p.name, QString(), QString(), QString(), p.isDefault, 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 index 81887e3..13b65a5 100644 --- a/src/plugins/printsupport/cups/qcupsprintersupport_p.h +++ b/src/plugins/printsupport/cups/qcupsprintersupport_p.h @@ -60,8 +60,6 @@ public: virtual QList availablePrinters(); private: - static int printerInfoCupsPrinterIndex(const QPrinterInfo &p); - static void setPrinterInfoCupsPrinterIndex(QPrinterInfo *p, int index); }; QT_END_NAMESPACE diff --git a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp index 4768898..3715aa1 100644 --- a/src/plugins/printsupport/windows/qwindowsprintersupport.cpp +++ b/src/plugins/printsupport/windows/qwindowsprintersupport.cpp @@ -64,10 +64,8 @@ QWindowsPrinterSupport::QWindowsPrinterSupport() QWin32PrintEngine::queryDefaultPrinter(defaultPrinterName, program, port); for (uint i = 0; i < returned; ++i) { QString printerName(QString::fromWCharArray(infoList[i].pPrinterName)); - - QPrinterInfo printerInfo(printerName); - if (printerInfo.printerName() == defaultPrinterName) - printerInfo.d_ptr->isDefault = true; + bool isDefault = (printerName == defaultPrinterName); + QPrinterInfo printerInfo = createPrinterInfo(printerName, QString(), QString(), QString(), isDefault, i); mPrinterList.append(printerInfo); } } diff --git a/src/printsupport/kernel/qplatformprintersupport.h b/src/printsupport/kernel/qplatformprintersupport.h index 910eafa..074405f 100644 --- a/src/printsupport/kernel/qplatformprintersupport.h +++ b/src/printsupport/kernel/qplatformprintersupport.h @@ -79,8 +79,10 @@ public: static QSizeF convertPaperSizeToQSizeF(QPrinter::PaperSize paperSize); protected: - static void setPrinterInfoDefault(QPrinterInfo *p, bool isDefault); - static bool printerInfoIsDefault(const QPrinterInfo &p); + static int printerIndex(const QPrinterInfo &printer); + static QPrinterInfo createPrinterInfo(const QString &name, const QString &description, + const QString &location, const QString &makeAndModel, + bool isDefault, int index); }; #endif // QT_NO_PRINTER diff --git a/src/printsupport/kernel/qplatformprintersupport_qpa.cpp b/src/printsupport/kernel/qplatformprintersupport_qpa.cpp index 7bf2b29..d6ffd9b 100644 --- a/src/printsupport/kernel/qplatformprintersupport_qpa.cpp +++ b/src/printsupport/kernel/qplatformprintersupport_qpa.cpp @@ -107,14 +107,22 @@ QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName) return QPrinterInfo(); } -void QPlatformPrinterSupport::setPrinterInfoDefault(QPrinterInfo *p, bool isDefault) +int QPlatformPrinterSupport::printerIndex(const QPrinterInfo &printer) { - p->d_func()->isDefault = isDefault; + return printer.d_func()->index; } -bool QPlatformPrinterSupport::printerInfoIsDefault(const QPrinterInfo &p) +QPrinterInfo QPlatformPrinterSupport::createPrinterInfo(const QString &name, const QString &description, + const QString &location, const QString &makeAndModel, + bool isDefault, int index) { - return p.d_func()->isDefault; + QPrinterInfo printer(name); + printer.d_func()->description = description; + printer.d_func()->location = location; + printer.d_func()->makeAndModel = makeAndModel; + printer.d_func()->isDefault = isDefault; + printer.d_func()->index = index; + return printer; } /* diff --git a/src/printsupport/kernel/qprinterinfo.h b/src/printsupport/kernel/qprinterinfo.h index 9370890..44ca1fc 100644 --- a/src/printsupport/kernel/qprinterinfo.h +++ b/src/printsupport/kernel/qprinterinfo.h @@ -83,9 +83,6 @@ private: private: friend class QPlatformPrinterSupport; - friend class QWindowsPrinterSupport; - friend class QCocoaPrinterSupport; - friend class QCupsPrinterSupport; Q_DECLARE_PRIVATE(QPrinterInfo) QScopedPointer d_ptr; }; diff --git a/src/printsupport/kernel/qprinterinfo_p.h b/src/printsupport/kernel/qprinterinfo_p.h index 6e1c088..97f0986 100644 --- a/src/printsupport/kernel/qprinterinfo_p.h +++ b/src/printsupport/kernel/qprinterinfo_p.h @@ -65,11 +65,7 @@ class QPrinterInfoPrivate { public: QPrinterInfoPrivate(const QString& name = QString()) : - name(name), isDefault(false) -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - , cupsPrinterIndex(0) -#endif - , hasPaperSizes(false) + name(name), isDefault(false), index(-1), hasPaperSizes(false) {} ~QPrinterInfoPrivate() {} @@ -81,10 +77,8 @@ public: QString location; QString makeAndModel; bool isDefault; + int index; // Internal printer plugin use only -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - int cupsPrinterIndex; -#endif mutable bool hasPaperSizes; mutable QList paperSizes; }; -- 2.7.4