#include <qpa/qplatformprintersupport.h>
+#include "qt_mac_p.h"
+
class QCocoaPrinterSupport : public QPlatformPrinterSupport
{
public:
QList<QPrinter::PaperSize> supportedPaperSizes(const QPrinterInfo &) const Q_DECL_OVERRIDE;
QList<QPrinterInfo> availablePrinters() Q_DECL_OVERRIDE;
+ QPrinterInfo printerInfo(const QString &printerName) Q_DECL_OVERRIDE;
+
+private:
+ QPrinterInfo printerInfoFromPMPrinter(const PMPrinter &printer);
};
#endif // QCOCOAPRINTERSUPPORT_H
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPrinterInfo>
+#include <private/qprinterinfo_p.h>
QCocoaPrinterSupport::QCocoaPrinterSupport()
{ }
CFIndex count = CFArrayGetCount(printerList);
for (CFIndex i = 0; i < count; ++i) {
PMPrinter printer = static_cast<PMPrinter>(const_cast<void *>(CFArrayGetValueAtIndex(printerList, i)));
- QString printerName = QCFString::toQString(PMPrinterGetID(printer));
- returnValue += QPlatformPrinterSupport::printerInfo(printerName, PMPrinterIsDefault(printer));
+ returnValue += printerInfoFromPMPrinter(printer);
}
}
return returnValue;
}
+
+QPrinterInfo QCocoaPrinterSupport::printerInfo(const QString &printerName)
+{
+ PMPrinter printer = PMPrinterCreateFromPrinterID(QCFString::toCFStringRef(printerName));
+ QPrinterInfo pi = printerInfoFromPMPrinter(printer);
+ PMRelease(printer);
+ return pi;
+}
+
+QPrinterInfo QCocoaPrinterSupport::printerInfoFromPMPrinter(const PMPrinter &printer)
+{
+ if (!printer)
+ return QPrinterInfo();
+
+ QPrinterInfo pi = QPrinterInfo(QCFString::toQString(PMPrinterGetID(printer)));
+ pi.d_func()->isDefault = PMPrinterIsDefault(printer);
+
+ return pi;
+}
virtual QList<QPrinterInfo> availablePrinters();
virtual QPrinterInfo defaultPrinter();
+ virtual QPrinterInfo printerInfo(const QString &printerName);
static QPrinter::PaperSize convertQSizeFToPaperSize(const QSizeF &sizef);
static QSizeF convertPaperSizeToQSizeF(QPrinter::PaperSize paperSize);
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);
return printers.isEmpty() ? QPrinterInfo() : printers.front();
}
-QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName, bool isDefault)
+QPrinterInfo QPlatformPrinterSupport::printerInfo(const QString &printerName)
{
- QPrinterInfo pi = QPrinterInfo(printerName);
- pi.d_func()->isDefault = isDefault;
- return pi;
+ const QList<QPrinterInfo> printers = availablePrinters();
+ foreach (const QPrinterInfo &printerInfo, printers) {
+ if (printerInfo.printerName() == printerName)
+ return printerInfo;
+ }
+ return QPrinterInfo();
}
void QPlatformPrinterSupport::setPrinterInfoDefault(QPrinterInfo *p, bool isDefault)
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;
- }
+ QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
+ if (ps) {
+ QPrinterInfo pi = ps->printerInfo(printer.printerName());
+ d_ptr.reset(new QPrinterInfoPrivate(*pi.d_ptr));
}
}
QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
if (!ps)
return QPrinterInfo();
- return QPlatformPrinterSupportPlugin::get()->defaultPrinter();
+ return ps->defaultPrinter();
+}
+
+/*!
+ \fn QPrinterInfo QPrinterInfo::printerInfo()
+ \since 5.0
+
+ Returns the named printer.
+
+ The return value should be checked using isNull() before being
+ used, in case the named printer does not exist.
+
+ \sa isNull()
+*/
+
+QPrinterInfo QPrinterInfo::printerInfo(const QString &printerName)
+{
+ QPlatformPrinterSupport *ps = QPlatformPrinterSupportPlugin::get();
+ if (!ps)
+ return QPrinterInfo();
+ return ps->printerInfo(printerName);
}
QT_END_NAMESPACE
static QList<QPrinterInfo> availablePrinters();
static QPrinterInfo defaultPrinter();
+ static QPrinterInfo printerInfo(const QString &printerName);
private:
explicit QPrinterInfo(const QString &name);
private:
friend class QPlatformPrinterSupport;
friend class QWindowsPrinterSupport;
+ friend class QCocoaPrinterSupport;
Q_DECLARE_PRIVATE(QPrinterInfo)
QScopedPointer<QPrinterInfoPrivate, QPrinterInfoPrivateDeleter> d_ptr;
};
void testForPaperSizes();
void testConstructors();
void testAssignment();
+ void namedPrinter();
private:
QString getDefaultPrinterFromSystem();
}
}
+void tst_QPrinterInfo::namedPrinter()
+{
+ QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
+
+ QStringList printerNames;
+
+ foreach (const QPrinterInfo &pi, printers) {
+ QPrinterInfo pi2 = QPrinterInfo::printerInfo(pi.printerName());
+ qDebug() << "Printer: " << pi2.printerName() << " : "
+ << pi2.isNull() << " : " << pi2.isDefault();
+ QCOMPARE(pi2.printerName(), pi.printerName());
+ QCOMPARE(pi2.supportedPaperSizes(), pi.supportedPaperSizes());
+ QCOMPARE(pi2.isNull(), pi.isNull());
+ QCOMPARE(pi2.isDefault(), pi.isDefault());
+ }
+}
+
+
#endif
QTEST_MAIN(tst_QPrinterInfo)