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
46QT_BEGIN_NAMESPACE
47
48#if defined(B0)
49#undef B0 // Terminal hang-up. We assume that you do not want that.
50#endif
51
52class QPageSizePrivate;
53class QString;
54class QSize;
55class QSizeF;
56
57class Q_GUI_EXPORT QPageSize
58{
59public:
60
61 enum PageSizeId {
62 // Old Qt sizes
63 Letter,
64 Legal,
65 Executive,
66 A0,
67 A1,
68 A2,
69 A3,
70 A4,
71 A5,
72 A6,
73 A7,
74 A8,
75 A9,
76 A10,
77 B0,
78 B1,
79 B2,
80 B3,
81 B4,
82 B5,
83 B6,
84 B7,
85 B8,
86 B9,
87 B10,
88 C5E,
89 Comm10E,
90 DLE,
91 Folio,
92 Ledger,
93 Tabloid,
94 Custom,
95
96 // New values derived from PPD standard
97 A3Extra,
98 A4Extra,
99 A4Plus,
100 A4Small,
101 A5Extra,
102 B5Extra,
103
104 JisB0,
105 JisB1,
106 JisB2,
107 JisB3,
108 JisB4,
109 JisB5,
110 JisB6,
111 JisB7,
112 JisB8,
113 JisB9,
114 JisB10,
115
116 // AnsiA = Letter,
117 // AnsiB = Ledger,
118 AnsiC,
119 AnsiD,
120 AnsiE,
121 LegalExtra,
122 LetterExtra,
123 LetterPlus,
124 LetterSmall,
125 TabloidExtra,
126
127 ArchA,
128 ArchB,
129 ArchC,
130 ArchD,
131 ArchE,
132
133 Imperial7x9,
134 Imperial8x10,
135 Imperial9x11,
136 Imperial9x12,
137 Imperial10x11,
138 Imperial10x13,
139 Imperial10x14,
140 Imperial12x11,
141 Imperial15x11,
142
143 ExecutiveStandard,
144 Note,
145 Quarto,
146 Statement,
147 SuperA,
148 SuperB,
149 Postcard,
150 DoublePostcard,
151 Prc16K,
152 Prc32K,
153 Prc32KBig,
154
155 FanFoldUS,
156 FanFoldGerman,
157 FanFoldGermanLegal,
158
159 EnvelopeB4,
160 EnvelopeB5,
161 EnvelopeB6,
162 EnvelopeC0,
163 EnvelopeC1,
164 EnvelopeC2,
165 EnvelopeC3,
166 EnvelopeC4,
167 // EnvelopeC5 = C5E,
168 EnvelopeC6,
169 EnvelopeC65,
170 EnvelopeC7,
171 // EnvelopeDL = DLE,
172
173 Envelope9,
174 // Envelope10 = Comm10E,
175 Envelope11,
176 Envelope12,
177 Envelope14,
178 EnvelopeMonarch,
179 EnvelopePersonal,
180
181 EnvelopeChou3,
182 EnvelopeChou4,
183 EnvelopeInvite,
184 EnvelopeItalian,
185 EnvelopeKaku2,
186 EnvelopeKaku3,
187 EnvelopePrc1,
188 EnvelopePrc2,
189 EnvelopePrc3,
190 EnvelopePrc4,
191 EnvelopePrc5,
192 EnvelopePrc6,
193 EnvelopePrc7,
194 EnvelopePrc8,
195 EnvelopePrc9,
196 EnvelopePrc10,
197 EnvelopeYou4,
198
199 // Last item
200 LastPageSize = EnvelopeYou4,
201
202 // Convenience overloads for naming consistency
203 AnsiA = Letter,
204 AnsiB = Ledger,
205 EnvelopeC5 = C5E,
206 EnvelopeDL = DLE,
207 Envelope10 = Comm10E
208 };
209
210 // NOTE: Must keep in sync with QPageLayout::Unit and QPrinter::Unit
211 enum Unit {
212 Millimeter,
213 Point,
214 Inch,
215 Pica,
216 Didot,
217 Cicero
218 };
219
220 enum SizeMatchPolicy {
221 FuzzyMatch,
222 FuzzyOrientationMatch,
223 ExactMatch
224 };
225
226 QPageSize();
227 explicit QPageSize(PageSizeId pageSizeId);
228 explicit QPageSize(const QSize &pointSize,
229 const QString &name = QString(),
230 SizeMatchPolicy matchPolicy = FuzzyMatch);
231 explicit QPageSize(const QSizeF &size, Unit units,
232 const QString &name = QString(),
233 SizeMatchPolicy matchPolicy = FuzzyMatch);
234 QPageSize(const QPageSize &other);
235 QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QPageSize)
236 QPageSize &operator=(const QPageSize &other);
237 ~QPageSize();
238
239
240 void swap(QPageSize &other) noexcept { qSwap(d, other.d); }
241
242 friend Q_GUI_EXPORT bool operator==(const QPageSize &lhs, const QPageSize &rhs);
243 bool isEquivalentTo(const QPageSize &other) const;
244
245 bool isValid() const;
246
247 QString key() const;
248 QString name() const;
249
250 PageSizeId id() const;
251
252 int windowsId() const;
253
254 QSizeF definitionSize() const;
255 Unit definitionUnits() const;
256
257 QSizeF size(Unit units) const;
258 QSize sizePoints() const;
259 QSize sizePixels(int resolution) const;
260
261 QRectF rect(Unit units) const;
262 QRect rectPoints() const;
263 QRect rectPixels(int resolution) const;
264
265 static QString key(PageSizeId pageSizeId);
266 static QString name(PageSizeId pageSizeId);
267
268 static PageSizeId id(const QSize &pointSize,
269 SizeMatchPolicy matchPolicy = FuzzyMatch);
270 static PageSizeId id(const QSizeF &size, Unit units,
271 SizeMatchPolicy matchPolicy = FuzzyMatch);
272
273 static PageSizeId id(int windowsId);
274 static int windowsId(PageSizeId pageSizeId);
275
276 static QSizeF definitionSize(PageSizeId pageSizeId);
277 static Unit definitionUnits(PageSizeId pageSizeId);
278
279 static QSizeF size(PageSizeId pageSizeId, Unit units);
280 static QSize sizePoints(PageSizeId pageSizeId);
281 static QSize sizePixels(PageSizeId pageSizeId, int resolution);
282
283private:
284 friend class QPageSizePrivate;
285 friend class QPlatformPrintDevice;
286 QPageSize(const QString &key, const QSize &pointSize, const QString &name);
287 QPageSize(int windowsId, const QSize &pointSize, const QString &name);
288 QPageSize(QPageSizePrivate &dd);
289 QSharedDataPointer<QPageSizePrivate> d;
290};
291
292Q_DECLARE_SHARED(QPageSize)
293
294Q_GUI_EXPORT bool operator==(const QPageSize &lhs, const QPageSize &rhs);
295inline bool operator!=(const QPageSize &lhs, const QPageSize &rhs)
296{ return !operator==(lhs, rhs); }
297
298#ifndef QT_NO_DEBUG_STREAM
299Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QPageSize &pageSize);
300#endif
301
302QT_END_NAMESPACE
303
304Q_DECLARE_METATYPE(QPageSize)
305Q_DECLARE_METATYPE(QPageSize::PageSizeId)
306Q_DECLARE_METATYPE(QPageSize::Unit)
307
308#endif // QPAGESIZE_H
309