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 | , |
100 | , |
101 | A4Plus, |
102 | A4Small, |
103 | , |
104 | , |
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 | , |
124 | , |
125 | LetterPlus, |
126 | LetterSmall, |
127 | , |
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 | |
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 | |