1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2014 John Layt <jlayt@kde.org> 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtGui module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QPAGESIZE_H 41 #define QPAGESIZE_H 42 43 #include <QtGui/qtguiglobal.h> 44 #include <QtCore/qsharedpointer.h> 45 46 QT_BEGIN_NAMESPACE 47 48 #if defined(B0) 49 #undef B0 // Terminal hang-up. We assume that you do not want that. 50 #endif 51 52 class QPageSizePrivate; 53 class QString; 54 class QSize; 55 class QSizeF; 56 57 class Q_GUI_EXPORT QPageSize 58 { 59 public: 60 61 // ### Qt6 Re-order and remove duplicates 62 // NOTE: Must keep in sync with QPagedPrintEngine and QPrinter 63 enum PageSizeId { 64 // Existing Qt sizes 65 A4, 66 B5, 67 Letter, 68 Legal, 69 Executive, 70 A0, 71 A1, 72 A2, 73 A3, 74 A5, 75 A6, 76 A7, 77 A8, 78 A9, 79 B0, 80 B1, 81 B10, 82 B2, 83 B3, 84 B4, 85 B6, 86 B7, 87 B8, 88 B9, 89 C5E, 90 Comm10E, 91 DLE, 92 Folio, 93 Ledger, 94 Tabloid, 95 Custom, 96 97 // New values derived from PPD standard 98 A10, 99 A3Extra, 100 A4Extra, 101 A4Plus, 102 A4Small, 103 A5Extra, 104 B5Extra, 105 106 JisB0, 107 JisB1, 108 JisB2, 109 JisB3, 110 JisB4, 111 JisB5, 112 JisB6, 113 JisB7, 114 JisB8, 115 JisB9, 116 JisB10, 117 118 // AnsiA = Letter, 119 // AnsiB = Ledger, 120 AnsiC, 121 AnsiD, 122 AnsiE, 123 LegalExtra, 124 LetterExtra, 125 LetterPlus, 126 LetterSmall, 127 TabloidExtra, 128 129 ArchA, 130 ArchB, 131 ArchC, 132 ArchD, 133 ArchE, 134 135 Imperial7x9, 136 Imperial8x10, 137 Imperial9x11, 138 Imperial9x12, 139 Imperial10x11, 140 Imperial10x13, 141 Imperial10x14, 142 Imperial12x11, 143 Imperial15x11, 144 145 ExecutiveStandard, 146 Note, 147 Quarto, 148 Statement, 149 SuperA, 150 SuperB, 151 Postcard, 152 DoublePostcard, 153 Prc16K, 154 Prc32K, 155 Prc32KBig, 156 157 FanFoldUS, 158 FanFoldGerman, 159 FanFoldGermanLegal, 160 161 EnvelopeB4, 162 EnvelopeB5, 163 EnvelopeB6, 164 EnvelopeC0, 165 EnvelopeC1, 166 EnvelopeC2, 167 EnvelopeC3, 168 EnvelopeC4, 169 // EnvelopeC5 = C5E, 170 EnvelopeC6, 171 EnvelopeC65, 172 EnvelopeC7, 173 // EnvelopeDL = DLE, 174 175 Envelope9, 176 // Envelope10 = Comm10E, 177 Envelope11, 178 Envelope12, 179 Envelope14, 180 EnvelopeMonarch, 181 EnvelopePersonal, 182 183 EnvelopeChou3, 184 EnvelopeChou4, 185 EnvelopeInvite, 186 EnvelopeItalian, 187 EnvelopeKaku2, 188 EnvelopeKaku3, 189 EnvelopePrc1, 190 EnvelopePrc2, 191 EnvelopePrc3, 192 EnvelopePrc4, 193 EnvelopePrc5, 194 EnvelopePrc6, 195 EnvelopePrc7, 196 EnvelopePrc8, 197 EnvelopePrc9, 198 EnvelopePrc10, 199 EnvelopeYou4, 200 201 // Last item, with commonly used synynoms from QPagedPrintEngine / QPrinter 202 LastPageSize = EnvelopeYou4, 203 NPageSize = LastPageSize, 204 NPaperSize = LastPageSize, 205 206 // Convenience overloads for naming consistency 207 AnsiA = Letter, 208 AnsiB = Ledger, 209 EnvelopeC5 = C5E, 210 EnvelopeDL = DLE, 211 Envelope10 = Comm10E 212 }; 213 214 // NOTE: Must keep in sync with QPageLayout::Unit and QPrinter::Unit 215 enum Unit { 216 Millimeter, 217 Point, 218 Inch, 219 Pica, 220 Didot, 221 Cicero 222 }; 223 224 enum SizeMatchPolicy { 225 FuzzyMatch, 226 FuzzyOrientationMatch, 227 ExactMatch 228 }; 229 230 QPageSize(); 231 explicit QPageSize(PageSizeId pageSizeId); 232 explicit QPageSize(const QSize &pointSize, 233 const QString &name = QString(), 234 SizeMatchPolicy matchPolicy = FuzzyMatch); 235 explicit QPageSize(const QSizeF &size, Unit units, 236 const QString &name = QString(), 237 SizeMatchPolicy matchPolicy = FuzzyMatch); 238 QPageSize(const QPageSize &other); 239 QPageSize &operator=(QPageSize &&other) noexcept { swap(other); return *this; } 240 QPageSize &operator=(const QPageSize &other); 241 ~QPageSize(); 242 243 swap(QPageSize & other)244 void swap(QPageSize &other) noexcept { qSwap(d, other.d); } 245 246 friend Q_GUI_EXPORT bool operator==(const QPageSize &lhs, const QPageSize &rhs); 247 bool isEquivalentTo(const QPageSize &other) const; 248 249 bool isValid() const; 250 251 QString key() const; 252 QString name() const; 253 254 PageSizeId id() const; 255 256 int windowsId() const; 257 258 QSizeF definitionSize() const; 259 Unit definitionUnits() const; 260 261 QSizeF size(Unit units) const; 262 QSize sizePoints() const; 263 QSize sizePixels(int resolution) const; 264 265 QRectF rect(Unit units) const; 266 QRect rectPoints() const; 267 QRect rectPixels(int resolution) const; 268 269 static QString key(PageSizeId pageSizeId); 270 static QString name(PageSizeId pageSizeId); 271 272 static PageSizeId id(const QSize &pointSize, 273 SizeMatchPolicy matchPolicy = FuzzyMatch); 274 static PageSizeId id(const QSizeF &size, Unit units, 275 SizeMatchPolicy matchPolicy = FuzzyMatch); 276 277 static PageSizeId id(int windowsId); 278 static int windowsId(PageSizeId pageSizeId); 279 280 static QSizeF definitionSize(PageSizeId pageSizeId); 281 static Unit definitionUnits(PageSizeId pageSizeId); 282 283 static QSizeF size(PageSizeId pageSizeId, Unit units); 284 static QSize sizePoints(PageSizeId pageSizeId); 285 static QSize sizePixels(PageSizeId pageSizeId, int resolution); 286 287 private: 288 friend class QPageSizePrivate; 289 friend class QPlatformPrintDevice; 290 QPageSize(const QString &key, const QSize &pointSize, const QString &name); 291 QPageSize(int windowsId, const QSize &pointSize, const QString &name); 292 QPageSize(QPageSizePrivate &dd); 293 QSharedDataPointer<QPageSizePrivate> d; 294 }; 295 296 Q_DECLARE_SHARED(QPageSize) 297 298 Q_GUI_EXPORT bool operator==(const QPageSize &lhs, const QPageSize &rhs); 299 inline bool operator!=(const QPageSize &lhs, const QPageSize &rhs) 300 { return !operator==(lhs, rhs); } 301 302 #ifndef QT_NO_DEBUG_STREAM 303 Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QPageSize &pageSize); 304 #endif 305 306 QT_END_NAMESPACE 307 308 Q_DECLARE_METATYPE(QPageSize) 309 Q_DECLARE_METATYPE(QPageSize::PageSizeId) 310 Q_DECLARE_METATYPE(QPageSize::Unit) 311 312 #endif // QPAGESIZE_H 313