/**************************************************************************** ** ** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, 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, Digia gives you certain additional ** rights. These rights are described in the Digia 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. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qprinterinfo.h" #include "private/qt_mac_p.h" QT_BEGIN_NAMESPACE #ifndef QT_NO_PRINTER class QPrinterInfoPrivate { Q_DECLARE_PUBLIC(QPrinterInfo) public: ~QPrinterInfoPrivate(); QPrinterInfoPrivate(); QPrinterInfoPrivate(const QString& name); private: QPrinterInfo* q_ptr; QString m_name; bool m_default; bool m_isNull; }; static QPrinterInfoPrivate nullQPrinterInfoPrivate; extern QPrinter::PaperSize qSizeFTopaperSize(const QSizeF& size); ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// QList QPrinterInfo::availablePrinters() { QList printers; OSStatus status = noErr; QCFType printerList; status = PMServerCreatePrinterList(kPMServerLocal, &printerList); if (status == noErr) { CFIndex count = CFArrayGetCount(printerList); for (CFIndex i=0; i(const_cast(CFArrayGetValueAtIndex(printerList, i))); QString name = QCFString::toQString(PMPrinterGetName(printer)); printers.append(QPrinterInfo(name)); if (PMPrinterIsDefault(printer)) { printers[i].d_ptr->m_default = true; } } } return printers; } QPrinterInfo QPrinterInfo::defaultPrinter(){ QList printers = availablePrinters(); for (int c = 0; c < printers.size(); ++c) { if (printers[c].isDefault()) { return printers[c]; } } return QPrinterInfo(); } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// QPrinterInfo::QPrinterInfo(const QPrinter& prn) { d_ptr = &nullQPrinterInfoPrivate; QList list = availablePrinters(); for (int c = 0; c < list.size(); ++c) { if (prn.printerName() == list[c].printerName()) { *this = list[c]; return; } } *this = QPrinterInfo(); } QPrinterInfo::~QPrinterInfo() { if (d_ptr != &nullQPrinterInfoPrivate) delete d_ptr; } QPrinterInfo::QPrinterInfo() { d_ptr = &nullQPrinterInfoPrivate; } QPrinterInfo::QPrinterInfo(const QString& name) { d_ptr = new QPrinterInfoPrivate(name); d_ptr->q_ptr = this; } QPrinterInfo::QPrinterInfo(const QPrinterInfo& src) { d_ptr = &nullQPrinterInfoPrivate; *this = src; } QPrinterInfo& QPrinterInfo::operator=(const QPrinterInfo& src) { Q_ASSERT(d_ptr); if (d_ptr != &nullQPrinterInfoPrivate) delete d_ptr; d_ptr = new QPrinterInfoPrivate(*src.d_ptr); d_ptr->q_ptr = this; return *this; } QString QPrinterInfo::printerName() const { const Q_D(QPrinterInfo); return d->m_name; } bool QPrinterInfo::isNull() const { const Q_D(QPrinterInfo); return d->m_isNull; } bool QPrinterInfo::isDefault() const { const Q_D(QPrinterInfo); return d->m_default; } QList QPrinterInfo::supportedPaperSizes() const { #if (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4) return QList(); #else if (QSysInfo::MacintoshVersion <= QSysInfo::MV_10_4) return QList(); const Q_D(QPrinterInfo); PMPrinter cfPrn = PMPrinterCreateFromPrinterID( QCFString::toCFStringRef(d->m_name)); if (!cfPrn) return QList(); CFArrayRef array; OSStatus status = PMPrinterGetPaperList(cfPrn, &array); if (status != 0) { PMRelease(cfPrn); return QList(); } QList paperList; int count = CFArrayGetCount(array); for (int c = 0; c < count; c++) { PMPaper paper = static_cast( const_cast( CFArrayGetValueAtIndex(array, c))); double width, height; status = PMPaperGetWidth(paper, &width); status |= PMPaperGetHeight(paper, &height); if (status != 0) continue; QSizeF size(width * 0.3527, height * 0.3527); paperList.append(qSizeFTopaperSize(size)); } PMRelease(cfPrn); return paperList; #endif // MAC_OS_X_VERSION_MAX_ALLOWED } ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////// QPrinterInfoPrivate::QPrinterInfoPrivate() : q_ptr(NULL), m_default(false), m_isNull(true) { } QPrinterInfoPrivate::QPrinterInfoPrivate(const QString& name) : q_ptr(NULL), m_name(name), m_default(false), m_isNull(false) { } QPrinterInfoPrivate::~QPrinterInfoPrivate() { } #endif // QT_NO_PRINTER QT_END_NAMESPACE