Ignore:
Timestamp:
Feb 11, 2010, 11:19:06 PM (15 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.6.1 sources.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/dialogs/qprintpreviewdialog.cpp

    r2 r561  
    22**
    33** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
    4 ** Contact: Qt Software Information (qt-info@nokia.com)
     4** All rights reserved.
     5** Contact: Nokia Corporation (qt-info@nokia.com)
    56**
    67** This file is part of the QtGui module of the Qt Toolkit.
     
    2122** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
    2223**
    23 ** In addition, as a special exception, Nokia gives you certain
    24 ** additional rights. These rights are described in the Nokia Qt LGPL
    25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
    26 ** package.
     24** In addition, as a special exception, Nokia gives you certain additional
     25** rights.  These rights are described in the Nokia Qt LGPL Exception
     26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
    2727**
    2828** GNU General Public License Usage
     
    3434** met: http://www.gnu.org/copyleft/gpl.html.
    3535**
    36 ** If you are unsure which license is appropriate for your use, please
    37 ** contact the sales department at qt-sales@nokia.com.
     36** If you have questions regarding the use of this file, please contact
     37** Nokia at qt-info@nokia.com.
    3838** $QT_END_LICENSE$
    3939**
     
    4343#include "qprintpreviewwidget.h"
    4444#include <private/qprinter_p.h>
     45#include "private/qdialog_p.h"
    4546
    4647#include <QtGui/qaction.h>
     
    5556#include <QtGui/qvalidator.h>
    5657#include <QtGui/qfiledialog.h>
     58#include <QtGui/qmainwindow.h>
     59#include <QtGui/qtoolbar.h>
     60#include <QtGui/qformlayout.h>
    5761#include <QtCore/QCoreApplication>
    5862
     
    6468
    6569namespace {
     70class QPrintPreviewMainWindow : public QMainWindow
     71{
     72public:
     73    QPrintPreviewMainWindow(QWidget *parent) : QMainWindow(parent) {}
     74    QMenu *createPopupMenu() { return 0; }
     75};
     76
    6677class ZoomFactorValidator : public QDoubleValidator
    6778{
     
    129140} // anonymous namespace
    130141
    131 class QPrintPreviewDialogPrivate
     142class QPrintPreviewDialogPrivate : public QDialogPrivate
    132143{
    133144    Q_DECLARE_PUBLIC(QPrintPreviewDialog)
    134145public:
    135     QPrintPreviewDialogPrivate(QPrintPreviewDialog *q)
    136         : q_ptr(q), printDialog(0), ownPrinter(false),
     146    QPrintPreviewDialogPrivate()
     147        : printDialog(0), ownPrinter(false),
    137148          initialized(false) {}
    138149
     
    159170    void updateZoomFactor();
    160171
    161     QPrintPreviewDialog *q_ptr;
    162172    QPrintDialog *printDialog;
    163173    QPrintPreviewWidget *preview;
     
    198208    QAction *printAction;
    199209    QAction *pageSetupAction;
    200     QAction *closeAction;
    201210
    202211    QPointer<QObject> receiverToDisconnectOnClose;
     
    216225        preview = new QPrintPreviewWidget(printer, q);
    217226    }
    218     QObject::connect(preview, SIGNAL(paintRequested(QPrinter *)), q, SIGNAL(paintRequested(QPrinter *)));
     227    QObject::connect(preview, SIGNAL(paintRequested(QPrinter*)), q, SIGNAL(paintRequested(QPrinter*)));
    219228    QObject::connect(preview, SIGNAL(previewChanged()), q, SLOT(_q_previewChanged()));
    220229    setupActions();
    221230
    222     // Navigation
    223     QToolButton* nextPageButton = new QToolButton;
    224     nextPageButton->setDefaultAction(nextPageAction);
    225     QToolButton* prevPageButton = new QToolButton;
    226     prevPageButton->setDefaultAction(prevPageAction);
    227     QToolButton* firstPageButton = new QToolButton;
    228     firstPageButton->setDefaultAction(firstPageAction);
    229     QToolButton* lastPageButton = new QToolButton;
    230     lastPageButton->setDefaultAction(lastPageAction);
    231 
    232231    pageNumEdit = new LineEdit;
    233232    pageNumEdit->setAlignment(Qt::AlignRight);
    234     pageNumEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::MinimumExpanding));
     233    pageNumEdit->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
    235234    pageNumLabel = new QLabel;
    236235    QObject::connect(pageNumEdit, SIGNAL(editingFinished()), q, SLOT(_q_pageNumEdited()));
    237 
    238     QToolButton* fitWidthButton = new QToolButton;
    239     fitWidthButton->setDefaultAction(fitWidthAction);
    240     QToolButton* fitPageButton = new QToolButton;
    241     fitPageButton->setDefaultAction(fitPageAction);
    242236
    243237    zoomFactor = new QComboBox;
     
    256250                     q, SLOT(_q_zoomFactorChanged()));
    257251
    258     QToolButton* zoomInButton = new QToolButton;
    259     zoomInButton->setDefaultAction(zoomInAction);
     252    QPrintPreviewMainWindow *mw = new QPrintPreviewMainWindow(q);
     253    QToolBar *toolbar = new QToolBar(mw);
     254    toolbar->addAction(fitWidthAction);
     255    toolbar->addAction(fitPageAction);
     256    toolbar->addSeparator();
     257    toolbar->addWidget(zoomFactor);
     258    toolbar->addAction(zoomOutAction);
     259    toolbar->addAction(zoomInAction);
     260    toolbar->addSeparator();
     261    toolbar->addAction(portraitAction);
     262    toolbar->addAction(landscapeAction);
     263    toolbar->addSeparator();
     264    toolbar->addAction(firstPageAction);
     265    toolbar->addAction(prevPageAction);
     266
     267    // this is to ensure the label text and the editor text are
     268    // aligned in all styles - the extra QVBoxLayout is a workaround
     269    // for bug in QFormLayout
     270    QWidget *pageEdit = new QWidget(toolbar);
     271    QVBoxLayout *vboxLayout = new QVBoxLayout;
     272    vboxLayout->setContentsMargins(0, 0, 0, 0);
     273    QFormLayout *formLayout = new QFormLayout;
     274    formLayout->setWidget(0, QFormLayout::LabelRole, pageNumEdit);
     275    formLayout->setWidget(0, QFormLayout::FieldRole, pageNumLabel);
     276    vboxLayout->addLayout(formLayout);
     277    vboxLayout->setAlignment(Qt::AlignVCenter);
     278    pageEdit->setLayout(vboxLayout);
     279    toolbar->addWidget(pageEdit);
     280
     281    toolbar->addAction(nextPageAction);
     282    toolbar->addAction(lastPageAction);
     283    toolbar->addSeparator();
     284    toolbar->addAction(singleModeAction);
     285    toolbar->addAction(facingModeAction);
     286    toolbar->addAction(overviewModeAction);
     287    toolbar->addSeparator();
     288    toolbar->addAction(pageSetupAction);
     289    toolbar->addAction(printAction);
     290
     291    // Cannot use the actions' triggered signal here, since it doesn't autorepeat
     292    QToolButton *zoomInButton = static_cast<QToolButton *>(toolbar->widgetForAction(zoomInAction));
     293    QToolButton *zoomOutButton = static_cast<QToolButton *>(toolbar->widgetForAction(zoomOutAction));
    260294    zoomInButton->setAutoRepeat(true);
    261295    zoomInButton->setAutoRepeatInterval(200);
    262296    zoomInButton->setAutoRepeatDelay(200);
    263 
    264     QToolButton* zoomOutButton = new QToolButton;
    265     zoomOutButton->setDefaultAction(zoomOutAction);
    266297    zoomOutButton->setAutoRepeat(true);
    267298    zoomOutButton->setAutoRepeatInterval(200);
    268299    zoomOutButton->setAutoRepeatDelay(200);
    269 
    270     //Cannot use the actions' triggered signal here, since it doesnt autorepeat
    271300    QObject::connect(zoomInButton, SIGNAL(clicked()), q, SLOT(_q_zoomIn()));
    272301    QObject::connect(zoomOutButton, SIGNAL(clicked()), q, SLOT(_q_zoomOut()));
    273302
    274     QToolButton* portraitButton = new QToolButton;
    275     portraitButton->setDefaultAction(portraitAction);
    276     QToolButton* landscapeButton = new QToolButton;
    277     landscapeButton->setDefaultAction(landscapeAction);
    278 
    279     QToolButton* singleModeButton = new QToolButton;
    280     singleModeButton->setDefaultAction(singleModeAction);
    281     QToolButton* facingModeButton = new QToolButton;
    282     facingModeButton->setDefaultAction(facingModeAction);
    283     QToolButton* overviewModeButton = new QToolButton;
    284     overviewModeButton->setDefaultAction(overviewModeAction);
    285 
    286     QToolButton *printButton = new QToolButton;
    287     printButton->setDefaultAction(printAction);
    288     QToolButton *pageSetupButton = new QToolButton;
    289     pageSetupButton->setDefaultAction(pageSetupAction);
    290     QToolButton *closeButton = new QToolButton;
    291     closeButton->setDefaultAction(closeAction);
    292 
    293     QHBoxLayout* modeLayout = new QHBoxLayout;
    294     modeLayout->setSpacing(0);
    295     modeLayout->addWidget(singleModeButton);
    296     modeLayout->addWidget(facingModeButton);
    297     modeLayout->addWidget(overviewModeButton);
    298 
    299     QHBoxLayout *barLayout = new QHBoxLayout;
    300     barLayout->addWidget(fitWidthButton);
    301     barLayout->addWidget(fitPageButton);
    302     barLayout->addWidget(zoomFactor);
    303     barLayout->addWidget(zoomOutButton);
    304     barLayout->addWidget(zoomInButton);
    305     barLayout->addWidget(portraitButton);
    306     barLayout->addWidget(landscapeButton);
    307     barLayout->addStretch();
    308     barLayout->addWidget(firstPageButton);
    309     barLayout->addWidget(prevPageButton);
    310     barLayout->addWidget(pageNumEdit);
    311     barLayout->addWidget(pageNumLabel);
    312     barLayout->addWidget(nextPageButton);
    313     barLayout->addWidget(lastPageButton);
    314     barLayout->addStretch();
    315     barLayout->addLayout(modeLayout);
    316     barLayout->addStretch();
    317     barLayout->addWidget(pageSetupButton);
    318     barLayout->addWidget(printButton);
    319     barLayout->addWidget(closeButton);
    320 
    321     QWidget* buttonBar = new QWidget;
    322     buttonBar->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum));
    323     barLayout->setMargin(0);
    324     buttonBar->setLayout(barLayout);
     303    mw->addToolBar(toolbar);
     304    mw->setCentralWidget(preview);
     305    // QMainWindows are always created as top levels, force it to be a
     306    // plain widget
     307    mw->setParent(q, Qt::Widget);
    325308
    326309    QVBoxLayout *topLayout = new QVBoxLayout;
    327     topLayout->addWidget(buttonBar);
    328     topLayout->addWidget(preview);
     310    topLayout->addWidget(mw);
     311    topLayout->setMargin(0);
    329312    q->setLayout(topLayout);
    330313
     
    339322#endif
    340323        )
    341         pageSetupButton->setEnabled(false);
     324        pageSetupAction->setEnabled(false);
     325    preview->setFocus();
    342326}
    343327
     
    419403    printAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Print"));
    420404    pageSetupAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Page setup"));
    421     closeAction = printerGroup->addAction(QCoreApplication::translate("QPrintPreviewDialog", "Close"));
    422405    qt_setupActionIcon(printAction, QLatin1String("print"));
    423406    qt_setupActionIcon(pageSetupAction, QLatin1String("page-setup"));
    424407    QObject::connect(printAction, SIGNAL(triggered(bool)), q, SLOT(_q_print()));
    425408    QObject::connect(pageSetupAction, SIGNAL(triggered(bool)), q, SLOT(_q_pageSetup()));
    426     QObject::connect(closeAction, SIGNAL(triggered(bool)), q, SLOT(reject()));
    427409
    428410    // Initial state:
     
    465447{
    466448    int curPage = preview->currentPage();
    467     int numPages = preview->numPages();
     449    int numPages = preview->pageCount();
    468450    nextPageAction->setEnabled(curPage < numPages);
    469451    prevPageAction->setEnabled(curPage > 1);
     
    477459    Q_Q(QPrintPreviewDialog);
    478460
    479     int numPages = preview->numPages();
     461    int numPages = preview->pageCount();
    480462    int maxChars = QString::number(numPages).length();
    481     pageNumLabel->setText(QString(QLatin1String("/ %1")).arg(numPages));
     463    pageNumLabel->setText(QString::fromLatin1("/ %1").arg(numPages));
    482464    int cyphersWidth = q->fontMetrics().width(QString().fill(QLatin1Char('8'), maxChars));
    483465    int maxWidth = pageNumEdit->minimumSizeHint().width() + cyphersWidth;
     
    534516        preview->setCurrentPage(1);
    535517    else if (action == lastPageAction)
    536         preview->setCurrentPage(preview->numPages());
     518        preview->setCurrentPage(preview->pageCount());
    537519    updateNavActions();
    538520}
     
    577559        }
    578560        QString fileName = QFileDialog::getSaveFileName(q, title, printer->outputFileName(),
    579                                                         QLatin1String("*") + suffix);
     561                                                        QLatin1Char('*') + suffix);
    580562        if (!fileName.isEmpty()) {
    581563            if (QFileInfo(fileName).suffix().isEmpty())
     
    630612    if (ok) {
    631613        preview->setZoomFactor(factor/100.0);
    632         zoomFactor->setEditText(QString(QLatin1String("%1%")).arg(factor));
     614        zoomFactor->setEditText(QString::fromLatin1("%1%").arg(factor));
    633615        setFitting(false);
    634616    }
     
    643625    \brief The QPrintPreviewDialog class provides a dialog for
    644626    previewing and configuring page layouts for printer output.
     627
     628    \ingroup standard-dialogs
     629    \ingroup printing
    645630
    646631    Using QPrintPreviewDialog in your existing application is
     
    681666*/
    682667QPrintPreviewDialog::QPrintPreviewDialog(QPrinter* printer, QWidget *parent, Qt::WindowFlags flags)
    683     : QDialog(parent, flags), d_ptr(new QPrintPreviewDialogPrivate(this))
     668    : QDialog(*new QPrintPreviewDialogPrivate, parent, flags)
    684669{
    685670    Q_D(QPrintPreviewDialog);
     
    695680*/
    696681QPrintPreviewDialog::QPrintPreviewDialog(QWidget *parent, Qt::WindowFlags f)
    697     : QDialog(parent, f), d_ptr(new QPrintPreviewDialogPrivate(this))
     682    : QDialog(*new QPrintPreviewDialogPrivate, parent, f)
    698683{
    699684    Q_D(QPrintPreviewDialog);
     
    710695        delete d->printer;
    711696    delete d->printDialog;
    712     delete d_ptr;
    713697}
    714698
Note: See TracChangeset for help on using the changeset viewer.