1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). |
4 | ** Contact: http://www.qt-project.org/ |
5 | ** |
6 | ** This file is part of the QtGui module of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:LGPL$ |
9 | ** GNU Lesser General Public License Usage |
10 | ** This file may be used under the terms of the GNU Lesser General Public |
11 | ** License version 2.1 as published by the Free Software Foundation and |
12 | ** appearing in the file LICENSE.LGPL included in the packaging of this |
13 | ** file. Please review the following information to ensure the GNU Lesser |
14 | ** General Public License version 2.1 requirements will be met: |
15 | ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
16 | ** |
17 | ** In addition, as a special exception, Nokia gives you certain additional |
18 | ** rights. These rights are described in the Nokia Qt LGPL Exception |
19 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
20 | ** |
21 | ** GNU General Public License Usage |
22 | ** Alternatively, this file may be used under the terms of the GNU General |
23 | ** Public License version 3.0 as published by the Free Software Foundation |
24 | ** and appearing in the file LICENSE.GPL included in the packaging of this |
25 | ** file. Please review the following information to ensure the GNU General |
26 | ** Public License version 3.0 requirements will be met: |
27 | ** http://www.gnu.org/copyleft/gpl.html. |
28 | ** |
29 | ** Other Usage |
30 | ** Alternatively, this file may be used in accordance with the terms and |
31 | ** conditions contained in a signed written agreement between you and Nokia. |
32 | ** |
33 | ** |
34 | ** |
35 | ** |
36 | ** |
37 | ** |
38 | ** $QT_END_LICENSE$ |
39 | ** |
40 | ****************************************************************************/ |
41 | |
42 | #ifndef QPRINTER_H |
43 | #define QPRINTER_H |
44 | |
45 | #include <QtCore/qstring.h> |
46 | #include <QtCore/qscopedpointer.h> |
47 | #include <QtGui/qpaintdevice.h> |
48 | |
49 | QT_BEGIN_HEADER |
50 | |
51 | QT_BEGIN_NAMESPACE |
52 | |
53 | QT_MODULE(Gui) |
54 | |
55 | #ifndef QT_NO_PRINTER |
56 | |
57 | #if defined(B0) |
58 | #undef B0 // Terminal hang-up. We assume that you do not want that. |
59 | #endif |
60 | |
61 | class QPrinterPrivate; |
62 | class QPaintEngine; |
63 | class QPrintEngine; |
64 | class QPrinterInfo; |
65 | |
66 | class Q_GUI_EXPORT QPrinter : public QPaintDevice |
67 | { |
68 | Q_DECLARE_PRIVATE(QPrinter) |
69 | public: |
70 | enum PrinterMode { ScreenResolution, PrinterResolution, HighResolution }; |
71 | |
72 | explicit QPrinter(PrinterMode mode = ScreenResolution); |
73 | explicit QPrinter(const QPrinterInfo& printer, PrinterMode mode = ScreenResolution); |
74 | ~QPrinter(); |
75 | |
76 | int devType() const; |
77 | |
78 | enum Orientation { Portrait, Landscape }; |
79 | |
80 | #ifndef Q_QDOC |
81 | enum PageSize { A4, B5, Letter, Legal, Executive, |
82 | A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, |
83 | B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, |
84 | DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom, NPaperSize = Custom }; |
85 | typedef PageSize PaperSize; |
86 | #else |
87 | enum PageSize { A4, B5, Letter, Legal, Executive, |
88 | A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, |
89 | B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, |
90 | DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom }; |
91 | enum PaperSize { A4, B5, Letter, Legal, Executive, |
92 | A0, A1, A2, A3, A5, A6, A7, A8, A9, B0, B1, |
93 | B10, B2, B3, B4, B6, B7, B8, B9, C5E, Comm10E, |
94 | DLE, Folio, Ledger, Tabloid, Custom, NPageSize = Custom, NPaperSize = Custom }; |
95 | #endif |
96 | |
97 | enum PageOrder { FirstPageFirst, |
98 | LastPageFirst }; |
99 | |
100 | enum ColorMode { GrayScale, |
101 | Color }; |
102 | |
103 | enum PaperSource { OnlyOne, |
104 | Lower, |
105 | Middle, |
106 | Manual, |
107 | Envelope, |
108 | EnvelopeManual, |
109 | Auto, |
110 | Tractor, |
111 | SmallFormat, |
112 | LargeFormat, |
113 | LargeCapacity, |
114 | Cassette, |
115 | FormSource, |
116 | MaxPageSource |
117 | }; |
118 | |
119 | enum PrinterState { Idle, |
120 | Active, |
121 | Aborted, |
122 | Error }; |
123 | |
124 | enum OutputFormat { NativeFormat, PdfFormat, PostScriptFormat }; |
125 | |
126 | // ### Qt 5: Merge with QAbstractPrintDialog::PrintRange |
127 | enum PrintRange { AllPages, Selection, , CurrentPage }; |
128 | |
129 | enum Unit { |
130 | Millimeter, |
131 | Point, |
132 | Inch, |
133 | Pica, |
134 | Didot, |
135 | Cicero, |
136 | DevicePixel |
137 | }; |
138 | |
139 | enum DuplexMode { |
140 | DuplexNone = 0, |
141 | DuplexAuto, |
142 | DuplexLongSide, |
143 | DuplexShortSide |
144 | }; |
145 | |
146 | #ifdef QT3_SUPPORT |
147 | enum PrinterOption { PrintToFile, PrintSelection, PrintPageRange }; |
148 | #endif // QT3_SUPPORT |
149 | |
150 | void setOutputFormat(OutputFormat format); |
151 | OutputFormat outputFormat() const; |
152 | |
153 | void setPrinterName(const QString &); |
154 | QString printerName() const; |
155 | |
156 | bool isValid() const; |
157 | |
158 | void setOutputFileName(const QString &); |
159 | QString outputFileName()const; |
160 | |
161 | void setPrintProgram(const QString &); |
162 | QString printProgram() const; |
163 | |
164 | void setDocName(const QString &); |
165 | QString docName() const; |
166 | |
167 | void setCreator(const QString &); |
168 | QString creator() const; |
169 | |
170 | void setOrientation(Orientation); |
171 | Orientation orientation() const; |
172 | |
173 | void setPageSize(PageSize); |
174 | PageSize pageSize() const; |
175 | |
176 | void setPaperSize(PaperSize); |
177 | PaperSize paperSize() const; |
178 | |
179 | void setPaperSize(const QSizeF &paperSize, Unit unit); |
180 | QSizeF paperSize(Unit unit) const; |
181 | |
182 | void setPageOrder(PageOrder); |
183 | PageOrder pageOrder() const; |
184 | |
185 | void setResolution(int); |
186 | int resolution() const; |
187 | |
188 | void setColorMode(ColorMode); |
189 | ColorMode colorMode() const; |
190 | |
191 | void setCollateCopies(bool collate); |
192 | bool collateCopies() const; |
193 | |
194 | void setFullPage(bool); |
195 | bool fullPage() const; |
196 | |
197 | void setNumCopies(int); |
198 | int numCopies() const; |
199 | |
200 | int actualNumCopies() const; |
201 | |
202 | void setCopyCount(int); |
203 | int copyCount() const; |
204 | bool supportsMultipleCopies() const; |
205 | |
206 | void setPaperSource(PaperSource); |
207 | PaperSource paperSource() const; |
208 | |
209 | void setDuplex(DuplexMode duplex); |
210 | DuplexMode duplex() const; |
211 | |
212 | QList<int> supportedResolutions() const; |
213 | |
214 | #ifdef Q_WS_WIN |
215 | QList<PaperSource> supportedPaperSources() const; |
216 | #endif |
217 | |
218 | void setFontEmbeddingEnabled(bool enable); |
219 | bool fontEmbeddingEnabled() const; |
220 | |
221 | void setDoubleSidedPrinting(bool enable); |
222 | bool doubleSidedPrinting() const; |
223 | |
224 | #ifdef Q_WS_WIN |
225 | void setWinPageSize(int winPageSize); |
226 | int winPageSize() const; |
227 | #endif |
228 | |
229 | QRect paperRect() const; |
230 | QRect () const; |
231 | QRectF paperRect(Unit) const; |
232 | QRectF (Unit) const; |
233 | |
234 | #if !defined(Q_WS_WIN) || defined(qdoc) |
235 | QString printerSelectionOption() const; |
236 | void setPrinterSelectionOption(const QString &); |
237 | #endif |
238 | |
239 | bool newPage(); |
240 | bool abort(); |
241 | |
242 | PrinterState printerState() const; |
243 | |
244 | QPaintEngine *paintEngine() const; |
245 | QPrintEngine *printEngine() const; |
246 | |
247 | #ifdef Q_WS_WIN |
248 | HDC getDC() const; |
249 | void releaseDC(HDC hdc) const; |
250 | #endif |
251 | |
252 | void setFromTo(int fromPage, int toPage); |
253 | int fromPage() const; |
254 | int toPage() const; |
255 | |
256 | void setPrintRange(PrintRange range); |
257 | PrintRange printRange() const; |
258 | |
259 | void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit); |
260 | void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, Unit unit) const; |
261 | |
262 | #ifdef QT3_SUPPORT |
263 | #ifdef Q_WS_MAC |
264 | QT3_SUPPORT bool pageSetup(QWidget *parent = 0); |
265 | QT3_SUPPORT bool printSetup(QWidget *parent = 0); |
266 | #endif |
267 | |
268 | QT3_SUPPORT bool setup(QWidget *parent = 0); |
269 | |
270 | QT3_SUPPORT void setMinMax(int minPage, int maxPage); |
271 | QT3_SUPPORT int minPage() const; |
272 | QT3_SUPPORT int maxPage() const; |
273 | |
274 | QT3_SUPPORT void setCollateCopiesEnabled(bool); |
275 | QT3_SUPPORT bool collateCopiesEnabled() const; |
276 | |
277 | QT3_SUPPORT void setOptionEnabled(PrinterOption, bool enable); |
278 | QT3_SUPPORT bool isOptionEnabled(PrinterOption) const; |
279 | |
280 | inline QT3_SUPPORT QSize margins() const; |
281 | inline QT3_SUPPORT void margins(uint *top, uint *left, uint *bottom, uint *right) const; |
282 | |
283 | inline QT3_SUPPORT bool aborted() { return printerState() == Aborted; } |
284 | |
285 | QT3_SUPPORT void setOutputToFile(bool); |
286 | inline QT3_SUPPORT bool outputToFile() const { return !outputFileName().isEmpty(); } |
287 | #endif |
288 | |
289 | protected: |
290 | int metric(PaintDeviceMetric) const; |
291 | void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine); |
292 | |
293 | private: |
294 | void init(PrinterMode mode); |
295 | |
296 | Q_DISABLE_COPY(QPrinter) |
297 | |
298 | QScopedPointer<QPrinterPrivate> d_ptr; |
299 | |
300 | friend class QPrintDialogPrivate; |
301 | friend class QAbstractPrintDialog; |
302 | friend class QAbstractPrintDialogPrivate; |
303 | friend class QPrintPreviewWidgetPrivate; |
304 | friend class QTextDocument; |
305 | friend class QPageSetupWidget; |
306 | }; |
307 | |
308 | #ifdef QT3_SUPPORT |
309 | inline QSize QPrinter::margins() const |
310 | { |
311 | QRect page = pageRect(); |
312 | QRect paper = paperRect(); |
313 | return QSize(page.left() - paper.left(), page.top() - paper.top()); |
314 | } |
315 | |
316 | inline void QPrinter::margins(uint *top, uint *left, uint *bottom, uint *right) const |
317 | { |
318 | QRect page = pageRect(); |
319 | QRect paper = paperRect(); |
320 | if (top) |
321 | *top = page.top() - paper.top(); |
322 | if (left) |
323 | *left = page.left() - paper.left(); |
324 | if (bottom) |
325 | *bottom = paper.bottom() - page.bottom(); |
326 | if (right) |
327 | *right = paper.right() - page.right(); |
328 | } |
329 | #endif |
330 | |
331 | #endif // QT_NO_PRINTER |
332 | |
333 | QT_END_NAMESPACE |
334 | |
335 | QT_END_HEADER |
336 | |
337 | #endif // QPRINTER_H |
338 | |