1/****************************************************************************
2**
3** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4** Contact: http://www.qt-project.org/legal
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 Digia. For licensing terms and
14** conditions see http://qt.digia.com/licensing. For further information
15** use the contact form at http://qt.digia.com/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 2.1 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 2.1 requirements
23** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24**
25** In addition, as a special exception, Digia gives you certain additional
26** rights. These rights are described in the Digia Qt LGPL Exception
27** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28**
29** GNU General Public License Usage
30** Alternatively, this file may be used under the terms of the GNU
31** General Public License version 3.0 as published by the Free Software
32** Foundation and appearing in the file LICENSE.GPL included in the
33** packaging of this file. Please review the following information to
34** ensure the GNU General Public License version 3.0 requirements will be
35** met: http://www.gnu.org/copyleft/gpl.html.
36**
37**
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "qpagesetupdialog.h"
43
44#ifndef QT_NO_PRINTDIALOG
45#include "qpagesetupdialog_unix_p.h"
46
47#include "qpainter.h"
48#include "qprintdialog.h"
49#include "qdialogbuttonbox.h"
50#include <ui_qpagesetupwidget.h>
51
52#include <QtGui/qprinter.h>
53#include <private/qabstractpagesetupdialog_p.h>
54#include <private/qprinter_p.h>
55
56#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
57# include <private/qcups_p.h>
58# include <cups/cups.h>
59# include <private/qpdf_p.h>
60#endif
61
62
63QT_BEGIN_NAMESPACE
64
65QSizeF qt_printerPaperSize(QPrinter::Orientation, QPrinter::PaperSize, QPrinter::Unit, int);
66
67// Disabled until we have support for papersources on unix
68// #define PSD_ENABLE_PAPERSOURCE
69
70static void populatePaperSizes(QComboBox* cb)
71{
72 cb->addItem(QPrintDialog::tr("A0"), QPrinter::A0);
73 cb->addItem(QPrintDialog::tr("A1"), QPrinter::A1);
74 cb->addItem(QPrintDialog::tr("A2"), QPrinter::A2);
75 cb->addItem(QPrintDialog::tr("A3"), QPrinter::A3);
76 cb->addItem(QPrintDialog::tr("A4"), QPrinter::A4);
77 cb->addItem(QPrintDialog::tr("A5"), QPrinter::A5);
78 cb->addItem(QPrintDialog::tr("A6"), QPrinter::A6);
79 cb->addItem(QPrintDialog::tr("A7"), QPrinter::A7);
80 cb->addItem(QPrintDialog::tr("A8"), QPrinter::A8);
81 cb->addItem(QPrintDialog::tr("A9"), QPrinter::A9);
82 cb->addItem(QPrintDialog::tr("B0"), QPrinter::B0);
83 cb->addItem(QPrintDialog::tr("B1"), QPrinter::B1);
84 cb->addItem(QPrintDialog::tr("B2"), QPrinter::B2);
85 cb->addItem(QPrintDialog::tr("B3"), QPrinter::B3);
86 cb->addItem(QPrintDialog::tr("B4"), QPrinter::B4);
87 cb->addItem(QPrintDialog::tr("B5"), QPrinter::B5);
88 cb->addItem(QPrintDialog::tr("B6"), QPrinter::B6);
89 cb->addItem(QPrintDialog::tr("B7"), QPrinter::B7);
90 cb->addItem(QPrintDialog::tr("B8"), QPrinter::B8);
91 cb->addItem(QPrintDialog::tr("B9"), QPrinter::B9);
92 cb->addItem(QPrintDialog::tr("B10"), QPrinter::B10);
93 cb->addItem(QPrintDialog::tr("C5E"), QPrinter::C5E);
94 cb->addItem(QPrintDialog::tr("DLE"), QPrinter::DLE);
95 cb->addItem(QPrintDialog::tr("Executive"), QPrinter::Executive);
96 cb->addItem(QPrintDialog::tr("Folio"), QPrinter::Folio);
97 cb->addItem(QPrintDialog::tr("Ledger"), QPrinter::Ledger);
98 cb->addItem(QPrintDialog::tr("Legal"), QPrinter::Legal);
99 cb->addItem(QPrintDialog::tr("Letter"), QPrinter::Letter);
100 cb->addItem(QPrintDialog::tr("Tabloid"), QPrinter::Tabloid);
101 cb->addItem(QPrintDialog::tr("US Common #10 Envelope"), QPrinter::Comm10E);
102 cb->addItem(QPrintDialog::tr("Custom"), QPrinter::Custom);
103}
104
105
106static QSizeF sizeForOrientation(QPrinter::Orientation orientation, const QSizeF &size)
107{
108 return (orientation == QPrinter::Portrait) ? size : QSizeF(size.height(), size.width());
109}
110
111#ifdef PSD_ENABLE_PAPERSOURCE
112static const char *paperSourceNames[] = {
113 "Only One",
114 "Lower",
115 "Middle",
116 "Manual",
117 "Envelope",
118 "Envelope manual",
119 "Auto",
120 "Tractor",
121 "Small format",
122 "Large format",
123 "Large capacity",
124 "Cassette",
125 "Form source",
126 0
127};
128
129struct PaperSourceNames
130{
131 PaperSourceNames(const char *nam, QPrinter::PaperSource ps)
132 : paperSource(ps), name(nam) {}
133 QPrinter::PaperSource paperSource;
134 const char *name;
135};
136#endif
137
138
139class QPagePreview : public QWidget
140{
141public:
142 QPagePreview(QWidget *parent) : QWidget(parent)
143 {
144 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
145 setMinimumSize(50, 50);
146 }
147
148 void setPaperSize(const QSizeF& size)
149 {
150 m_size = size;
151 update();
152 }
153
154 void setMargins(qreal left, qreal top, qreal right, qreal bottom)
155 {
156 m_left = left;
157 m_top = top;
158 m_right = right;
159 m_bottom = bottom;
160 update();
161 }
162
163protected:
164 void paintEvent(QPaintEvent *)
165 {
166 QRect pageRect;
167 QSizeF adjustedSize(m_size);
168 adjustedSize.scale(width()-10, height()-10, Qt::KeepAspectRatio);
169 pageRect = QRect(QPoint(0,0), adjustedSize.toSize());
170 pageRect.moveCenter(rect().center());
171
172 qreal width_factor = pageRect.width() / m_size.width();
173 qreal height_factor = pageRect.height() / m_size.height();
174 int leftSize = qRound(m_left*width_factor);
175 int topSize = qRound(m_top*height_factor);
176 int rightSize = qRound(m_right*width_factor);
177 int bottomSize = qRound(m_bottom * height_factor);
178 QRect marginRect(pageRect.x()+leftSize,
179 pageRect.y()+topSize,
180 pageRect.width() - (leftSize+rightSize+1),
181 pageRect.height() - (topSize+bottomSize+1));
182
183 QPainter p(this);
184 QColor shadow(palette().mid().color());
185 for (int i=1; i<6; ++i) {
186 shadow.setAlpha(180-i*30);
187 QRect offset(pageRect.adjusted(i, i, i, i));
188 p.setPen(shadow);
189 p.drawLine(offset.left(), offset.bottom(), offset.right(), offset.bottom());
190 p.drawLine(offset.right(), offset.top(), offset.right(), offset.bottom()-1);
191 }
192 p.fillRect(pageRect, palette().light());
193
194 if (marginRect.isValid()) {
195 p.setPen(QPen(palette().color(QPalette::Dark), 0, Qt::DotLine));
196 p.drawRect(marginRect);
197
198 marginRect.adjust(2, 2, -1, -1);
199 p.setClipRect(marginRect);
200 QFont font;
201 font.setPointSizeF(font.pointSizeF()*0.25);
202 p.setFont(font);
203 p.setPen(palette().color(QPalette::Dark));
204 QString text(QLatin1String("Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi."));
205 for (int i=0; i<3; ++i)
206 text += text;
207 p.drawText(marginRect, Qt::TextWordWrap|Qt::AlignVCenter, text);
208 }
209 }
210
211private:
212 // all these are in points
213 qreal m_left, m_top, m_right, m_bottom;
214 QSizeF m_size;
215};
216
217
218class QPageSetupDialogPrivate : public QAbstractPageSetupDialogPrivate
219{
220 Q_DECLARE_PUBLIC(QPageSetupDialog)
221
222public:
223 ~QPageSetupDialogPrivate();
224 void init();
225
226 QPageSetupWidget *widget;
227#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
228 QCUPSSupport *cups;
229#endif
230};
231
232QPageSetupDialogPrivate::~QPageSetupDialogPrivate()
233{
234#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
235 delete cups;
236#endif
237}
238
239void QPageSetupDialogPrivate::init()
240{
241 Q_Q(QPageSetupDialog);
242
243 widget = new QPageSetupWidget(q);
244 widget->setPrinter(printer);
245#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
246 if (printer->outputFormat() == QPrinter::NativeFormat && QCUPSSupport::isAvailable()) {
247 cups = new QCUPSSupport;
248 widget->selectPrinter(cups);
249 } else {
250 cups = 0;
251 }
252#endif
253
254 QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok
255 | QDialogButtonBox::Cancel,
256 Qt::Horizontal, q);
257 QObject::connect(buttons, SIGNAL(accepted()), q, SLOT(accept()));
258 QObject::connect(buttons, SIGNAL(rejected()), q, SLOT(reject()));
259
260 QVBoxLayout *lay = new QVBoxLayout(q);
261 lay->addWidget(widget);
262 lay->addWidget(buttons);
263}
264
265QPageSetupWidget::QPageSetupWidget(QWidget *parent)
266 : QWidget(parent),
267 m_printer(0),
268 m_blockSignals(false),
269 m_cups(0)
270{
271 widget.setupUi(this);
272
273 QString suffix = (QLocale::system().measurementSystem() == QLocale::ImperialSystem)
274 ? QString::fromLatin1(" in")
275 : QString::fromLatin1(" mm");
276 widget.topMargin->setSuffix(suffix);
277 widget.bottomMargin->setSuffix(suffix);
278 widget.leftMargin->setSuffix(suffix);
279 widget.rightMargin->setSuffix(suffix);
280 widget.paperWidth->setSuffix(suffix);
281 widget.paperHeight->setSuffix(suffix);
282
283 QVBoxLayout *lay = new QVBoxLayout(widget.preview);
284 widget.preview->setLayout(lay);
285 m_pagePreview = new QPagePreview(widget.preview);
286 lay->addWidget(m_pagePreview);
287
288 setAttribute(Qt::WA_WState_Polished, false);
289
290#ifdef PSD_ENABLE_PAPERSOURCE
291 for (int i=0; paperSourceNames[i]; ++i)
292 widget.paperSource->insertItem(paperSourceNames[i]);
293#else
294 widget.paperSourceLabel->setVisible(false);
295 widget.paperSource->setVisible(false);
296#endif
297
298 widget.reverseLandscape->setVisible(false);
299 widget.reversePortrait->setVisible(false);
300
301 populatePaperSizes(widget.paperSize);
302
303 QStringList units;
304 units << tr("Centimeters (cm)") << tr("Millimeters (mm)") << tr("Inches (in)") << tr("Points (pt)");
305 widget.unit->addItems(units);
306 connect(widget.unit, SIGNAL(activated(int)), this, SLOT(unitChanged(int)));
307 widget.unit->setCurrentIndex((QLocale::system().measurementSystem() == QLocale::ImperialSystem) ? 2 : 1);
308
309 connect(widget.paperSize, SIGNAL(currentIndexChanged(int)), this, SLOT(_q_paperSizeChanged()));
310 connect(widget.paperWidth, SIGNAL(valueChanged(double)), this, SLOT(_q_paperSizeChanged()));
311 connect(widget.paperHeight, SIGNAL(valueChanged(double)), this, SLOT(_q_paperSizeChanged()));
312
313 connect(widget.leftMargin, SIGNAL(valueChanged(double)), this, SLOT(setLeftMargin(double)));
314 connect(widget.topMargin, SIGNAL(valueChanged(double)), this, SLOT(setTopMargin(double)));
315 connect(widget.rightMargin, SIGNAL(valueChanged(double)), this, SLOT(setRightMargin(double)));
316 connect(widget.bottomMargin, SIGNAL(valueChanged(double)), this, SLOT(setBottomMargin(double)));
317
318 connect(widget.portrait, SIGNAL(clicked()), this, SLOT(_q_pageOrientationChanged()));
319 connect(widget.landscape, SIGNAL(clicked()), this, SLOT(_q_pageOrientationChanged()));
320}
321
322void QPageSetupWidget::setPrinter(QPrinter *printer)
323{
324 m_printer = printer;
325 m_blockSignals = true;
326 selectPdfPsPrinter(printer);
327 printer->getPageMargins(&m_leftMargin, &m_topMargin, &m_rightMargin, &m_bottomMargin, QPrinter::Point);
328 unitChanged(widget.unit->currentIndex());
329 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
330 m_paperSize = printer->paperSize(QPrinter::Point);
331 widget.paperWidth->setValue(m_paperSize.width() / m_currentMultiplier);
332 widget.paperHeight->setValue(m_paperSize.height() / m_currentMultiplier);
333
334 widget.landscape->setChecked(printer->orientation() == QPrinter::Landscape);
335
336#ifdef PSD_ENABLE_PAPERSOURCE
337 widget.paperSource->setCurrentItem(printer->paperSource());
338#endif
339 Q_ASSERT(m_blockSignals);
340 m_blockSignals = false;
341 _q_paperSizeChanged();
342}
343
344// set gui data on printer
345void QPageSetupWidget::setupPrinter() const
346{
347 QPrinter::Orientation orientation = widget.portrait->isChecked()
348 ? QPrinter::Portrait
349 : QPrinter::Landscape;
350 m_printer->setOrientation(orientation);
351 // paper format
352 QVariant val = widget.paperSize->itemData(widget.paperSize->currentIndex());
353 int ps = m_printer->pageSize();
354 if (val.type() == QVariant::Int) {
355 ps = val.toInt();
356 }
357#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
358 else if (m_cups && QCUPSSupport::isAvailable() && m_cups->currentPPD()) {
359 QByteArray cupsPageSize = val.toByteArray();
360 QPrintEngine *engine = m_printer->printEngine();
361 engine->setProperty(PPK_CupsStringPageSize, QString::fromLatin1(cupsPageSize));
362 engine->setProperty(PPK_CupsOptions, m_cups->options());
363
364 QRect pageRect = m_cups->pageRect(cupsPageSize);
365 engine->setProperty(PPK_CupsPageRect, pageRect);
366
367 QRect paperRect = m_cups->paperRect(cupsPageSize);
368 engine->setProperty(PPK_CupsPaperRect, paperRect);
369
370 for(ps = 0; ps < QPrinter::NPaperSize; ++ps) {
371 QPdf::PaperSize size = QPdf::paperSize(QPrinter::PaperSize(ps));
372 if (size.width == paperRect.width() && size.height == paperRect.height())
373 break;
374 }
375 }
376#endif
377 if (ps == QPrinter::Custom)
378 m_printer->setPaperSize(sizeForOrientation(orientation, m_paperSize), QPrinter::Point);
379 else
380 m_printer->setPaperSize(static_cast<QPrinter::PaperSize>(ps));
381
382#ifdef PSD_ENABLE_PAPERSOURCE
383 m_printer->setPaperSource((QPrinter::PaperSource)widget.paperSource->currentIndex());
384#endif
385 m_printer->setPageMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin, QPrinter::Point);
386
387}
388
389void QPageSetupWidget::selectPrinter(QCUPSSupport *cups)
390{
391 m_cups = cups;
392 widget.paperSize->clear();
393#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
394 if (m_cups && QCUPSSupport::isAvailable()) {
395 const ppd_option_t* pageSizes = m_cups->pageSizes();
396 const int numChoices = pageSizes ? pageSizes->num_choices : 0;
397
398 int cupsDefaultSize = 0;
399 QSize qtPreferredSize = m_printer->paperSize(QPrinter::Point).toSize();
400 bool preferredSizeMatched = false;
401 for (int i = 0; i < numChoices; ++i) {
402 widget.paperSize->addItem(QString::fromLocal8Bit(pageSizes->choices[i].text), QByteArray(pageSizes->choices[i].choice));
403 if (static_cast<int>(pageSizes->choices[i].marked) == 1)
404 cupsDefaultSize = i;
405 if (m_printer->d_func()->hasUserSetPageSize) {
406 QRect cupsPaperSize = m_cups->paperRect(pageSizes->choices[i].choice);
407 QSize diff = cupsPaperSize.size() - qtPreferredSize;
408 if (qAbs(diff.width()) < 5 && qAbs(diff.height()) < 5) {
409 widget.paperSize->setCurrentIndex(i);
410 preferredSizeMatched = true;
411 }
412 }
413 }
414 if (!preferredSizeMatched)
415 widget.paperSize->setCurrentIndex(cupsDefaultSize);
416 if (m_printer->d_func()->hasCustomPageMargins) {
417 m_printer->getPageMargins(&m_leftMargin, &m_topMargin, &m_rightMargin, &m_bottomMargin, QPrinter::Point);
418 } else {
419 QByteArray cupsPaperSizeChoice = widget.paperSize->itemData(widget.paperSize->currentIndex()).toByteArray();
420 QRect paper = m_cups->paperRect(cupsPaperSizeChoice);
421 QRect content = m_cups->pageRect(cupsPaperSizeChoice);
422
423 m_leftMargin = content.x() - paper.x();
424 m_topMargin = content.y() - paper.y();
425 m_rightMargin = paper.right() - content.right();
426 m_bottomMargin = paper.bottom() - content.bottom();
427 }
428 }
429#endif
430 if (widget.paperSize->count() == 0) {
431 populatePaperSizes(widget.paperSize);
432 widget.paperSize->setCurrentIndex(widget.paperSize->findData(
433 QLocale::system().measurementSystem() == QLocale::ImperialSystem ? QPrinter::Letter : QPrinter::A4));
434 }
435
436 unitChanged(widget.unit->currentIndex());
437 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
438}
439
440void QPageSetupWidget::selectPdfPsPrinter(const QPrinter *p)
441{
442 m_cups = 0;
443 widget.paperSize->clear();
444 populatePaperSizes(widget.paperSize);
445 widget.paperSize->setCurrentIndex(widget.paperSize->findData(p->paperSize()));
446
447 m_leftMargin = 90;
448 m_topMargin = 72;
449 m_bottomMargin = 72;
450 m_rightMargin = 90;
451 unitChanged(widget.unit->currentIndex());
452 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
453}
454
455// Updates size/preview after the combobox has been changed.
456void QPageSetupWidget::_q_paperSizeChanged()
457{
458 QVariant val = widget.paperSize->itemData(widget.paperSize->currentIndex());
459 int index = m_printer->pageSize();
460 if (val.type() == QVariant::Int) {
461 index = val.toInt();
462 }
463
464 if (m_blockSignals) return;
465 m_blockSignals = true;
466
467 QPrinter::PaperSize size = QPrinter::PaperSize(index);
468 QPrinter::Orientation orientation = widget.portrait->isChecked()
469 ? QPrinter::Portrait
470 : QPrinter::Landscape;
471
472 bool custom = size == QPrinter::Custom;
473
474#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
475 custom = custom ? !m_cups : custom;
476#endif
477
478 widget.paperWidth->setEnabled(custom);
479 widget.paperHeight->setEnabled(custom);
480 widget.widthLabel->setEnabled(custom);
481 widget.heightLabel->setEnabled(custom);
482 if (custom) {
483 m_paperSize.setWidth( widget.paperWidth->value() * m_currentMultiplier);
484 m_paperSize.setHeight( widget.paperHeight->value() * m_currentMultiplier);
485 m_pagePreview->setPaperSize(m_paperSize);
486 } else {
487 Q_ASSERT(m_printer);
488#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
489 if (m_cups) { // combobox is filled with cups based data
490 QByteArray cupsPageSize = widget.paperSize->itemData(widget.paperSize->currentIndex()).toByteArray();
491 m_paperSize = m_cups->paperRect(cupsPageSize).size();
492 if (orientation == QPrinter::Landscape)
493 m_paperSize = QSizeF(m_paperSize.height(), m_paperSize.width()); // swap
494 }
495 else
496#endif
497 m_paperSize = qt_printerPaperSize(orientation, size, QPrinter::Point, 1);
498
499 m_pagePreview->setPaperSize(m_paperSize);
500 widget.paperWidth->setValue(m_paperSize.width() / m_currentMultiplier);
501 widget.paperHeight->setValue(m_paperSize.height() / m_currentMultiplier);
502 }
503 m_blockSignals = false;
504}
505
506void QPageSetupWidget::_q_pageOrientationChanged()
507{
508 if (QPrinter::PaperSize(widget.paperSize->currentIndex()) == QPrinter::Custom) {
509 double tmp = widget.paperWidth->value();
510 widget.paperWidth->setValue(widget.paperHeight->value());
511 widget.paperHeight->setValue(tmp);
512 }
513 _q_paperSizeChanged();
514}
515
516extern double qt_multiplierForUnit(QPrinter::Unit unit, int resolution);
517
518void QPageSetupWidget::unitChanged(int item)
519{
520 QString suffix;
521 switch(item) {
522 case 0:
523 m_currentMultiplier = 10 * qt_multiplierForUnit(QPrinter::Millimeter, 1);
524 suffix = QString::fromLatin1(" cm");
525 break;
526 case 2:
527 m_currentMultiplier = qt_multiplierForUnit(QPrinter::Inch, 1);
528 suffix = QString::fromLatin1(" in");
529 break;
530 case 3:
531 m_currentMultiplier = qt_multiplierForUnit(QPrinter::Point, 1);
532 suffix = QString::fromLatin1(" pt");
533 break;
534 case 1:
535 default:
536 m_currentMultiplier = qt_multiplierForUnit(QPrinter::Millimeter, 1);
537 suffix = QString::fromLatin1(" mm");
538 break;
539 }
540 const bool old = m_blockSignals;
541 m_blockSignals = true;
542 widget.topMargin->setSuffix(suffix);
543 widget.leftMargin->setSuffix(suffix);
544 widget.rightMargin->setSuffix(suffix);
545 widget.bottomMargin->setSuffix(suffix);
546 widget.paperWidth->setSuffix(suffix);
547 widget.paperHeight->setSuffix(suffix);
548 widget.topMargin->setValue(m_topMargin / m_currentMultiplier);
549 widget.leftMargin->setValue(m_leftMargin / m_currentMultiplier);
550 widget.rightMargin->setValue(m_rightMargin / m_currentMultiplier);
551 widget.bottomMargin->setValue(m_bottomMargin / m_currentMultiplier);
552 widget.paperWidth->setValue(m_paperSize.width() / m_currentMultiplier);
553 widget.paperHeight->setValue(m_paperSize.height() / m_currentMultiplier);
554 m_blockSignals = old;
555}
556
557void QPageSetupWidget::setTopMargin(double newValue)
558{
559 if (m_blockSignals) return;
560 m_topMargin = newValue * m_currentMultiplier;
561 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
562}
563
564void QPageSetupWidget::setBottomMargin(double newValue)
565{
566 if (m_blockSignals) return;
567 m_bottomMargin = newValue * m_currentMultiplier;
568 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
569}
570
571void QPageSetupWidget::setLeftMargin(double newValue)
572{
573 if (m_blockSignals) return;
574 m_leftMargin = newValue * m_currentMultiplier;
575 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
576}
577
578void QPageSetupWidget::setRightMargin(double newValue)
579{
580 if (m_blockSignals) return;
581 m_rightMargin = newValue * m_currentMultiplier;
582 m_pagePreview->setMargins(m_leftMargin, m_topMargin, m_rightMargin, m_bottomMargin);
583}
584
585
586
587QPageSetupDialog::QPageSetupDialog(QPrinter *printer, QWidget *parent)
588 : QAbstractPageSetupDialog(*(new QPageSetupDialogPrivate), printer, parent)
589{
590 Q_D(QPageSetupDialog);
591 d->init();
592}
593
594
595QPageSetupDialog::QPageSetupDialog(QWidget *parent)
596 : QAbstractPageSetupDialog(*(new QPageSetupDialogPrivate), 0, parent)
597{
598 Q_D(QPageSetupDialog);
599 d->init();
600}
601
602/*!
603 \internal
604*/
605int QPageSetupDialog::exec()
606{
607 Q_D(QPageSetupDialog);
608
609 int ret = QDialog::exec();
610 if (ret == Accepted)
611 d->widget->setupPrinter();
612 return ret;
613}
614
615
616QT_END_NAMESPACE
617
618#include "moc_qpagesetupdialog.cpp"
619
620#endif // QT_NO_PRINTDIALOG
621