Replace 'i < len-1 && func(i+1)' by 'i+1 < len && func(i+1)'
[profile/ivi/qtbase.git] / src / gui / painting / qprinter.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
6 **
7 ** This file is part of the QtGui module of the Qt Toolkit.
8 **
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** GNU Lesser General Public License Usage
11 ** This file may be used under the terms of the GNU Lesser General Public
12 ** License version 2.1 as published by the Free Software Foundation and
13 ** appearing in the file LICENSE.LGPL included in the packaging of this
14 ** file. Please review the following information to ensure the GNU Lesser
15 ** General Public License version 2.1 requirements will be met:
16 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17 **
18 ** In addition, as a special exception, Nokia gives you certain additional
19 ** rights. These rights are described in the Nokia Qt LGPL Exception
20 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21 **
22 ** GNU General Public License Usage
23 ** Alternatively, this file may be used under the terms of the GNU General
24 ** Public License version 3.0 as published by the Free Software Foundation
25 ** and appearing in the file LICENSE.GPL included in the packaging of this
26 ** file. Please review the following information to ensure the GNU General
27 ** Public License version 3.0 requirements will be met:
28 ** http://www.gnu.org/copyleft/gpl.html.
29 **
30 ** Other Usage
31 ** Alternatively, this file may be used in accordance with the terms and
32 ** conditions contained in a signed written agreement between you and Nokia.
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, PageRange, 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 pageRect() const;
231     QRectF paperRect(Unit) const;
232     QRectF pageRect(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