diff options
Diffstat (limited to 'src/gui/dialogs/qprintpreviewdialog.cpp')
-rw-r--r-- | src/gui/dialogs/qprintpreviewdialog.cpp | 803 |
1 files changed, 0 insertions, 803 deletions
diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp deleted file mode 100644 index 950500d739..0000000000 --- a/src/gui/dialogs/qprintpreviewdialog.cpp +++ /dev/null @@ -1,803 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qprintpreviewdialog.h" -#include "qprintpreviewwidget.h" -#include <private/qprinter_p.h> -#include "private/qdialog_p.h" -#include "qprintdialog.h" - -#include <QtGui/qaction.h> -#include <QtGui/qboxlayout.h> -#include <QtGui/qcombobox.h> -#include <QtGui/qlabel.h> -#include <QtGui/qlineedit.h> -#include <QtGui/qpagesetupdialog.h> -#include <QtGui/qprinter.h> -#include <QtGui/qstyle.h> -#include <QtGui/qtoolbutton.h> -#include <QtGui/qvalidator.h> -#include <QtGui/qfiledialog.h> -#include <QtGui/qmainwindow.h> -#include <QtGui/qtoolbar.h> -#include <QtGui/qformlayout.h> -#include <QtCore/QCoreApplication> - -#include <math.h> - -#ifndef QT_NO_PRINTPREVIEWDIALOG - -QT_BEGIN_NAMESPACE - -namespace { -class QPrintPreviewMainWindow : public QMainWindow -{ -public: - QPrintPreviewMainWindow(QWidget *parent) : QMainWindow(parent) {} - QMenu *createPopupMenu() { return 0; } -}; - -class ZoomFactorValidator : public QDoubleValidator -{ -public: - ZoomFactorValidator(QObject* parent) - : QDoubleValidator(parent) {} - ZoomFactorValidator(qreal bottom, qreal top, int decimals, QObject *parent) - : QDoubleValidator(bottom, top, decimals, parent) {} - - State validate(QString &input, int &pos) const - { - bool replacePercent = false; - if (input.endsWith(QLatin1Char('%'))) { - input = input.left(input.length() - 1); - replacePercent = true; - } - State state = QDoubleValidator::validate(input, pos); - if (replacePercent) - input += QLatin1Char('%'); - const int num_size = 4; - if (state == Intermediate) { - int i = input.indexOf(QLocale::system().decimalPoint()); - if ((i == -1 && input.size() > num_size) - || (i != -1 && i > num_size)) - return Invalid; - } - return state; - } -}; - -class LineEdit : public QLineEdit -{ - Q_OBJECT -public: - LineEdit(QWidget* parent = 0) - : QLineEdit(parent) - { - setContextMenuPolicy(Qt::NoContextMenu); - connect(this, SIGNAL(returnPressed()), SLOT(handleReturnPressed())); - } - -protected: - void focusInEvent(QFocusEvent *e) - { - origText = text(); - QLineEdit::focusInEvent(e); - } - - void focusOutEvent(QFocusEvent *e) - { - if (isModified() && !hasAcceptableInput()) - setText(origText); - QLineEdit::focusOutEvent(e); - } - -private slots: - void handleReturnPressed() - { - origText = text(); - } - -private: - QString origText; -}; -} // anonymous namespace - -class QPrintPreviewDialogPrivate : public QDialogPrivate -{ - Q_DECLARE_PUBLIC(QPrintPreviewDialog) -public: - QPrintPreviewDialogPrivate() - : printDialog(0), ownPrinter(false), - initialized(false) {} - - // private slots - void _q_fit(QAction *action); - void _q_zoomIn(); - void _q_zoomOut(); - void _q_navigate(QAction *action); - void _q_setMode(QAction *action); - void _q_pageNumEdited(); - void _q_print(); - void _q_pageSetup(); - void _q_previewChanged(); - void _q_zoomFactorChanged(); - - void init(QPrinter *printer = 0); - void populateScene(); - void layoutPages(); - void setupActions(); - void updateNavActions(); - void setFitting(bool on); - bool isFitting(); - void updatePageNumLabel(); - void updateZoomFactor(); - - QPrintDialog *printDialog; - QPrintPreviewWidget *preview; - QPrinter *printer; - bool ownPrinter; - bool initialized; - - // widgets: - QLineEdit *pageNumEdit; - QLabel *pageNumLabel; - QComboBox *zoomFactor; - - // actions: - QActionGroup* navGroup; - QAction *nextPageAction; - QAction *prevPageAction; - QAction *firstPageAction; - QAction *lastPageAction; - - QActionGroup* fitGroup; - QAction *fitWidthAction; - QAction *fitPageAction; - - QActionGroup* zoomGroup; - QAction *zoomInAction; - QAction *zoomOutAction; - - QActionGroup* orientationGroup; - QAction *portraitAction; - QAction *landscapeAction; - - QActionGroup* modeGroup; - QAction *singleModeAction; - QAction *facingModeAction; - QAction *overviewModeAction; - - QActionGroup *printerGroup; - QAction *printAction; - QAction *pageSetupAction; -#if defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA) - QAction *closeAction; -#endif - - QPointer<QObject> receiverToDisconnectOnClose; - QByteArray memberToDisconnectOnClose; -}; - -void QPrintPreviewDialogPrivate::init(QPrinter *_printer) -{ - Q_Q(QPrintPreviewDialog); - - if (_printer) { - preview = new QPrintPreviewWidget(_printer, q); - printer = _printer; - } else { - ownPrinter = true; - printer = new QPrinter; - preview = new QPrintPreviewWidget(printer, q); - } - QObject::connect(preview, SIGNAL(paintRequested(QPrinter*)), q, SIGNAL(paintRequested(QPrinter*))); - QObject::connect(preview, SIGNAL(previewChanged()), q, SLOT(_q_previewChanged())); - setupActions(); - - pageNumEdit = new LineEdit; - pageNumEdit->setAlignment(Qt::AlignRight); - pageNumEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - pageNumLabel = new QLabel; - QObject::connect(pageNumEdit, SIGNAL(editingFinished()), q, SLOT(_q_pageNumEdited())); - - zoomFactor = new QComboBox; - zoomFactor->setEditable(true); - zoomFactor->setMinimumContentsLength(7); - zoomFactor->setInsertPolicy(QComboBox::NoInsert); - LineEdit *zoomEditor = new LineEdit; - zoomEditor->setValidator(new ZoomFactorValidator(1, 1000, 1, zoomEditor)); - zoomFactor->setLineEdit(zoomEditor); - static const short factorsX2[] = { 25, 50, 100, 200, 250, 300, 400, 800, 1600 }; - for (int i = 0; i < int(sizeof(factorsX2) / sizeof(factorsX2[0])); ++i) - zoomFactor->addItem(QPrintPreviewDialog::tr("%1%").arg(factorsX2[i] / 2.0)); - QObject::connect(zoomFactor->lineEdit(), SIGNAL(editingFinished()), - q, SLOT(_q_zoomFactorChanged())); - QObject::connect(zoomFactor, SIGNAL(currentIndexChanged(int)), - q, SLOT(_q_zoomFactorChanged())); - - QPrintPreviewMainWindow *mw = new QPrintPreviewMainWindow(q); - QToolBar *toolbar = new QToolBar(mw); - toolbar->addAction(fitWidthAction); - toolbar->addAction(fitPageAction); - toolbar->addSeparator(); - toolbar->addWidget(zoomFactor); - toolbar->addAction(zoomOutAction); - toolbar->addAction(zoomInAction); - toolbar->addSeparator(); - toolbar->addAction(portraitAction); - toolbar->addAction(landscapeAction); - toolbar->addSeparator(); - toolbar->addAction(firstPageAction); - toolbar->addAction(prevPageAction); - - // this is to ensure the label text and the editor text are - // aligned in all styles - the extra QVBoxLayout is a workaround - // for bug in QFormLayout - QWidget *pageEdit = new QWidget(toolbar); - QVBoxLayout *vboxLayout = new QVBoxLayout; - vboxLayout->setContentsMargins(0, 0, 0, 0); -#ifdef Q_WS_MAC - // We query the widgets about their size and then we fix the size. - // This should do the trick for the laying out part... - QSize pageNumEditSize, pageNumLabelSize; - pageNumEditSize = pageNumEdit->minimumSizeHint(); - pageNumLabelSize = pageNumLabel->minimumSizeHint(); - pageNumEdit->resize(pageNumEditSize); - pageNumLabel->resize(pageNumLabelSize); -#endif - QFormLayout *formLayout = new QFormLayout; -#ifdef Q_WS_MAC - // We have to change the growth policy in Mac. - formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow); -#endif - formLayout->setWidget(0, QFormLayout::LabelRole, pageNumEdit); - formLayout->setWidget(0, QFormLayout::FieldRole, pageNumLabel); - vboxLayout->addLayout(formLayout); - vboxLayout->setAlignment(Qt::AlignVCenter); - pageEdit->setLayout(vboxLayout); - toolbar->addWidget(pageEdit); - - toolbar->addAction(nextPageAction); - toolbar->addAction(lastPageAction); - toolbar->addSeparator(); - toolbar->addAction(singleModeAction); - toolbar->addAction(facingModeAction); - toolbar->addAction(overviewModeAction); - toolbar->addSeparator(); - toolbar->addAction(pageSetupAction); - toolbar->addAction(printAction); -#if defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA) - toolbar->addAction(closeAction); -#endif - - // Cannot use the actions' triggered signal here, since it doesn't autorepeat - QToolButton *zoomInButton = static_cast<QToolButton *>(toolbar->widgetForAction(zoomInAction)); - QToolButton *zoomOutButton = static_cast<QToolButton *>(toolbar->widgetForAction(zoomOutAction)); - zoomInButton->setAutoRepeat(true); - zoomInButton->setAutoRepeatInterval(200); - zoomInButton->setAutoRepeatDelay(200); - zoomOutButton->setAutoRepeat(true); - zoomOutButton->setAutoRepeatInterval(200); - zoomOutButton->setAutoRepeatDelay(200); - QObject::connect(zoomInButton, SIGNAL(clicked()), q, SLOT(_q_zoomIn())); - QObject::connect(zoomOutButton, SIGNAL(clicked()), q, SLOT(_q_zoomOut())); - - mw->addToolBar(toolbar); - mw->setCentralWidget(preview); - // QMainWindows are always created as top levels, force it to be a - // plain widget - mw->setParent(q, Qt::Widget); - - QVBoxLayout *topLayout = new QVBoxLayout; - topLayout->addWidget(mw); - topLayout->setMargin(0); - q->setLayout(topLayout); - - QString caption = QCoreApplication::translate("QPrintPreviewDialog", "Print Preview"); - if (!printer->docName().isEmpty()) - caption += QString::fromLatin1(": ") + printer->docName(); - q->setWindowTitle(caption); - - if (!printer->isValid() -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) - || printer->outputFormat() != QPrinter::NativeFormat -#endif - ) - pageSetupAction->setEnabled(false); - preview->setFocus(); -} - -static inline void qt_setupActionIcon(QAction *action, const QLatin1String &name) -{ - QLatin1String imagePrefix(":/trolltech/dialogs/qprintpreviewdialog/images/"); - QIcon icon; - icon.addFile(imagePrefix + name + QLatin1String("-24.png"), QSize(24, 24)); - icon.addFile(imagePrefix + name + QLatin1String("-32.png"), QSize(32, 32)); - action->setIcon(icon); -} - -void QPrintPreviewDialogPrivate::setupActions() -{ - Q_Q(QPrintPreviewDialog); - - // Navigation - navGroup = new QActionGroup(q); - navGroup->setExclusive(false); - nextPageAction = navGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Next page")); - prevPageAction = navGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Previous page")); - firstPageAction = navGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "First page")); - lastPageAction = navGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Last page")); - qt_setupActionIcon(nextPageAction, QLatin1String("go-next")); - qt_setupActionIcon(prevPageAction, QLatin1String("go-previous")); - qt_setupActionIcon(firstPageAction, QLatin1String("go-first")); - qt_setupActionIcon(lastPageAction, QLatin1String("go-last")); - QObject::connect(navGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_navigate(QAction*))); - - - fitGroup = new QActionGroup(q); - fitWidthAction = fitGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Fit width")); - fitPageAction = fitGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Fit page")); - fitWidthAction->setObjectName(QLatin1String("fitWidthAction")); - fitPageAction->setObjectName(QLatin1String("fitPageAction")); - fitWidthAction->setCheckable(true); - fitPageAction->setCheckable(true); - qt_setupActionIcon(fitWidthAction, QLatin1String("fit-width")); - qt_setupActionIcon(fitPageAction, QLatin1String("fit-page")); - QObject::connect(fitGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_fit(QAction*))); - - // Zoom - zoomGroup = new QActionGroup(q); - zoomInAction = zoomGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Zoom in")); - zoomOutAction = zoomGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Zoom out")); - qt_setupActionIcon(zoomInAction, QLatin1String("zoom-in")); - qt_setupActionIcon(zoomOutAction, QLatin1String("zoom-out")); - - // Portrait/Landscape - orientationGroup = new QActionGroup(q); - portraitAction = orientationGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Portrait")); - landscapeAction = orientationGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Landscape")); - portraitAction->setCheckable(true); - landscapeAction->setCheckable(true); - qt_setupActionIcon(portraitAction, QLatin1String("layout-portrait")); - qt_setupActionIcon(landscapeAction, QLatin1String("layout-landscape")); - QObject::connect(portraitAction, SIGNAL(triggered(bool)), preview, SLOT(setPortraitOrientation())); - QObject::connect(landscapeAction, SIGNAL(triggered(bool)), preview, SLOT(setLandscapeOrientation())); - - // Display mode - modeGroup = new QActionGroup(q); - singleModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show single page")); - facingModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show facing pages")); - overviewModeAction = modeGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Show overview of all pages")); - qt_setupActionIcon(singleModeAction, QLatin1String("view-page-one")); - qt_setupActionIcon(facingModeAction, QLatin1String("view-page-sided")); - qt_setupActionIcon(overviewModeAction, QLatin1String("view-page-multi")); - singleModeAction->setObjectName(QLatin1String("singleModeAction")); - facingModeAction->setObjectName(QLatin1String("facingModeAction")); - overviewModeAction->setObjectName(QLatin1String("overviewModeAction")); - - singleModeAction->setCheckable(true); - facingModeAction->setCheckable(true); - overviewModeAction->setCheckable(true); - QObject::connect(modeGroup, SIGNAL(triggered(QAction*)), q, SLOT(_q_setMode(QAction*))); - - // Print - printerGroup = new QActionGroup(q); - printAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Print")); - pageSetupAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Page setup")); - qt_setupActionIcon(printAction, QLatin1String("print")); - qt_setupActionIcon(pageSetupAction, QLatin1String("page-setup")); - QObject::connect(printAction, SIGNAL(triggered(bool)), q, SLOT(_q_print())); - QObject::connect(pageSetupAction, SIGNAL(triggered(bool)), q, SLOT(_q_pageSetup())); -#if defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA) - closeAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Close")); - QObject::connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(reject())); -#endif - - // Initial state: - fitPageAction->setChecked(true); - singleModeAction->setChecked(true); - if (preview->orientation() == QPrinter::Portrait) - portraitAction->setChecked(true); - else - landscapeAction->setChecked(true); -} - - -bool QPrintPreviewDialogPrivate::isFitting() -{ - return (fitGroup->isExclusive() - && (fitWidthAction->isChecked() || fitPageAction->isChecked())); -} - - -void QPrintPreviewDialogPrivate::setFitting(bool on) -{ - if (isFitting() == on) - return; - fitGroup->setExclusive(on); - if (on) { - QAction* action = fitWidthAction->isChecked() ? fitWidthAction : fitPageAction; - action->setChecked(true); - if (fitGroup->checkedAction() != action) { - // work around exclusitivity problem - fitGroup->removeAction(action); - fitGroup->addAction(action); - } - } else { - fitWidthAction->setChecked(false); - fitPageAction->setChecked(false); - } -} - -void QPrintPreviewDialogPrivate::updateNavActions() -{ - int curPage = preview->currentPage(); - int numPages = preview->pageCount(); - nextPageAction->setEnabled(curPage < numPages); - prevPageAction->setEnabled(curPage > 1); - firstPageAction->setEnabled(curPage > 1); - lastPageAction->setEnabled(curPage < numPages); - pageNumEdit->setText(QString::number(curPage)); -} - -void QPrintPreviewDialogPrivate::updatePageNumLabel() -{ - Q_Q(QPrintPreviewDialog); - - int numPages = preview->pageCount(); - int maxChars = QString::number(numPages).length(); - pageNumLabel->setText(QString::fromLatin1("/ %1").arg(numPages)); - int cyphersWidth = q->fontMetrics().width(QString().fill(QLatin1Char('8'), maxChars)); - int maxWidth = pageNumEdit->minimumSizeHint().width() + cyphersWidth; - pageNumEdit->setMinimumWidth(maxWidth); - pageNumEdit->setMaximumWidth(maxWidth); - pageNumEdit->setValidator(new QIntValidator(1, numPages, pageNumEdit)); - // any old one will be deleted later along with its parent pageNumEdit -} - -void QPrintPreviewDialogPrivate::updateZoomFactor() -{ - zoomFactor->lineEdit()->setText(QString().sprintf("%.1f%%", preview->zoomFactor()*100)); -} - -void QPrintPreviewDialogPrivate::_q_fit(QAction* action) -{ - setFitting(true); - if (action == fitPageAction) - preview->fitInView(); - else - preview->fitToWidth(); -} - -void QPrintPreviewDialogPrivate::_q_zoomIn() -{ - setFitting(false); - preview->zoomIn(); - updateZoomFactor(); -} - -void QPrintPreviewDialogPrivate::_q_zoomOut() -{ - setFitting(false); - preview->zoomOut(); - updateZoomFactor(); -} - -void QPrintPreviewDialogPrivate::_q_pageNumEdited() -{ - bool ok = false; - int res = pageNumEdit->text().toInt(&ok); - if (ok) - preview->setCurrentPage(res); -} - -void QPrintPreviewDialogPrivate::_q_navigate(QAction* action) -{ - int curPage = preview->currentPage(); - if (action == prevPageAction) - preview->setCurrentPage(curPage - 1); - else if (action == nextPageAction) - preview->setCurrentPage(curPage + 1); - else if (action == firstPageAction) - preview->setCurrentPage(1); - else if (action == lastPageAction) - preview->setCurrentPage(preview->pageCount()); - updateNavActions(); -} - -void QPrintPreviewDialogPrivate::_q_setMode(QAction* action) -{ - if (action == overviewModeAction) { - preview->setViewMode(QPrintPreviewWidget::AllPagesView); - setFitting(false); - fitGroup->setEnabled(false); - navGroup->setEnabled(false); - pageNumEdit->setEnabled(false); - pageNumLabel->setEnabled(false); - } else if (action == facingModeAction) { - preview->setViewMode(QPrintPreviewWidget::FacingPagesView); - } else { - preview->setViewMode(QPrintPreviewWidget::SinglePageView); - } - if (action == facingModeAction || action == singleModeAction) { - fitGroup->setEnabled(true); - navGroup->setEnabled(true); - pageNumEdit->setEnabled(true); - pageNumLabel->setEnabled(true); - setFitting(true); - } -} - -void QPrintPreviewDialogPrivate::_q_print() -{ - Q_Q(QPrintPreviewDialog); - -#if defined(Q_WS_WIN) || defined(Q_WS_MAC) - if (printer->outputFormat() != QPrinter::NativeFormat) { - QString title; - QString suffix; - if (printer->outputFormat() == QPrinter::PdfFormat) { - title = QCoreApplication::translate("QPrintPreviewDialog", "Export to PDF"); - suffix = QLatin1String(".pdf"); - } else { - title = QCoreApplication::translate("QPrintPreviewDialog", "Export to PostScript"); - suffix = QLatin1String(".ps"); - } - QString fileName = QFileDialog::getSaveFileName(q, title, printer->outputFileName(), - QLatin1Char('*') + suffix); - if (!fileName.isEmpty()) { - if (QFileInfo(fileName).suffix().isEmpty()) - fileName.append(suffix); - printer->setOutputFileName(fileName); - } - if (!printer->outputFileName().isEmpty()) - preview->print(); - q->accept(); - return; - } -#endif - - if (!printDialog) - printDialog = new QPrintDialog(printer, q); - if (printDialog->exec() == QDialog::Accepted) { - preview->print(); - q->accept(); - } -} - -void QPrintPreviewDialogPrivate::_q_pageSetup() -{ - Q_Q(QPrintPreviewDialog); - - QPageSetupDialog pageSetup(printer, q); - if (pageSetup.exec() == QDialog::Accepted) { - // update possible orientation changes - if (preview->orientation() == QPrinter::Portrait) { - portraitAction->setChecked(true); - preview->setPortraitOrientation(); - }else { - landscapeAction->setChecked(true); - preview->setLandscapeOrientation(); - } - } -} - -void QPrintPreviewDialogPrivate::_q_previewChanged() -{ - updateNavActions(); - updatePageNumLabel(); - updateZoomFactor(); -} - -void QPrintPreviewDialogPrivate::_q_zoomFactorChanged() -{ - QString text = zoomFactor->lineEdit()->text(); - bool ok; - qreal factor = text.remove(QLatin1Char('%')).toFloat(&ok); - factor = qMax(qreal(1.0), qMin(qreal(1000.0), factor)); - if (ok) { - preview->setZoomFactor(factor/100.0); - zoomFactor->setEditText(QString::fromLatin1("%1%").arg(factor)); - setFitting(false); - } -} - -/////////////////////////////////////////////////////////////////////////// - -/*! - \class QPrintPreviewDialog - \since 4.4 - - \brief The QPrintPreviewDialog class provides a dialog for - previewing and configuring page layouts for printer output. - - \ingroup standard-dialogs - \ingroup printing - - Using QPrintPreviewDialog in your existing application is - straightforward: - - \list 1 - \o Create the QPrintPreviewDialog. - - You can construct a QPrintPreviewDialog with an existing QPrinter - object, or you can have QPrintPreviewDialog create one for you, - which will be the system default printer. - - \o Connect the paintRequested() signal to a slot. - - When the dialog needs to generate a set of preview pages, the - paintRequested() signal will be emitted. You can use the exact - same code for the actual printing as for having the preview - generated, including calling QPrinter::newPage() to start a new - page in the preview. Connect a slot to the paintRequested() - signal, where you draw onto the QPrinter object that is passed - into the slot. - - \o Call exec(). - - Call QPrintPreviewDialog::exec() to show the preview dialog. - \endlist - - In Symbian, there is no support for printing. Hence, this dialog should not - be used in Symbian. - - \sa QPrinter, QPrintDialog, QPageSetupDialog, QPrintPreviewWidget -*/ - -/*! - Constructs a QPrintPreviewDialog based on \a printer and with \a - parent as the parent widget. The widget flags \a flags are passed on - to the QWidget constructor. - - \sa QWidget::setWindowFlags() -*/ -QPrintPreviewDialog::QPrintPreviewDialog(QPrinter* printer, QWidget *parent, Qt::WindowFlags flags) - : QDialog(*new QPrintPreviewDialogPrivate, parent, flags) -{ - Q_D(QPrintPreviewDialog); - d->init(printer); -} - -/*! - \overload - \fn QPrintPreviewDialog::QPrintPreviewDialog(QWidget *parent, Qt::WindowFlags flags) - - This will create an internal QPrinter object, which will use the - system default printer. -*/ -QPrintPreviewDialog::QPrintPreviewDialog(QWidget *parent, Qt::WindowFlags f) - : QDialog(*new QPrintPreviewDialogPrivate, parent, f) -{ - Q_D(QPrintPreviewDialog); - d->init(); -} - -/*! - Destroys the QPrintPreviewDialog. -*/ -QPrintPreviewDialog::~QPrintPreviewDialog() -{ - Q_D(QPrintPreviewDialog); - if (d->ownPrinter) - delete d->printer; - delete d->printDialog; -} - -/*! - \reimp -*/ -void QPrintPreviewDialog::setVisible(bool visible) -{ - Q_D(QPrintPreviewDialog); - // this will make the dialog get a decent default size - if (visible && !d->initialized) { - d->preview->updatePreview(); - d->initialized = true; - } - QDialog::setVisible(visible); -} - -/*! - \reimp -*/ -void QPrintPreviewDialog::done(int result) -{ - Q_D(QPrintPreviewDialog); - QDialog::done(result); - if (d->receiverToDisconnectOnClose) { - disconnect(this, SIGNAL(finished(int)), - d->receiverToDisconnectOnClose, d->memberToDisconnectOnClose); - d->receiverToDisconnectOnClose = 0; - } - d->memberToDisconnectOnClose.clear(); -} - -/*! - \overload - \since 4.5 - - Opens the dialog and connects its finished(int) signal to the slot specified - by \a receiver and \a member. - - The signal will be disconnected from the slot when the dialog is closed. -*/ -void QPrintPreviewDialog::open(QObject *receiver, const char *member) -{ - Q_D(QPrintPreviewDialog); - // the int parameter isn't very useful here; we could just as well connect - // to reject(), but this feels less robust somehow - connect(this, SIGNAL(finished(int)), receiver, member); - d->receiverToDisconnectOnClose = receiver; - d->memberToDisconnectOnClose = member; - QDialog::open(); -} - -/*! - Returns a pointer to the QPrinter object this dialog is currently - operating on. -*/ -QPrinter *QPrintPreviewDialog::printer() -{ - Q_D(QPrintPreviewDialog); - return d->printer; -} - -/*! - \fn void QPrintPreviewDialog::paintRequested(QPrinter *printer) - - This signal is emitted when the QPrintPreviewDialog needs to generate - a set of preview pages. - - The \a printer instance supplied is the paint device onto which you should - paint the contents of each page, using the QPrinter instance in the same way - as you would when printing directly. -*/ - - -QT_END_NAMESPACE - -#include "moc_qprintpreviewdialog.cpp" -#include "qprintpreviewdialog.moc" - -#endif // QT_NO_PRINTPREVIEWDIALOG - - |