From f67b8df3ebdba2d398b9cce686b7c644adffff08 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Sat, 7 May 2011 00:02:01 +0200 Subject: library split --- src/widgets/dialogs/qpagesetupdialog_win.cpp | 168 +++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 src/widgets/dialogs/qpagesetupdialog_win.cpp (limited to 'src/widgets/dialogs/qpagesetupdialog_win.cpp') diff --git a/src/widgets/dialogs/qpagesetupdialog_win.cpp b/src/widgets/dialogs/qpagesetupdialog_win.cpp new file mode 100644 index 0000000000..d74da7c2fc --- /dev/null +++ b/src/widgets/dialogs/qpagesetupdialog_win.cpp @@ -0,0 +1,168 @@ +/**************************************************************************** +** +** 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 "qpagesetupdialog.h" + +#ifndef QT_NO_PRINTDIALOG +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QPageSetupDialogPrivate : public QAbstractPageSetupDialogPrivate +{ +}; + +QPageSetupDialog::QPageSetupDialog(QPrinter *printer, QWidget *parent) + : QAbstractPageSetupDialog(*(new QPageSetupDialogPrivate), printer, parent) +{ +} + +QPageSetupDialog::QPageSetupDialog(QWidget *parent) + : QAbstractPageSetupDialog(*(new QPageSetupDialogPrivate), 0, parent) +{ +} + +int QPageSetupDialog::exec() +{ + Q_D(QPageSetupDialog); + + if (d->printer->outputFormat() != QPrinter::NativeFormat) + return Rejected; + + QWin32PrintEngine *engine = static_cast(d->printer->paintEngine()); + QWin32PrintEnginePrivate *ep = static_cast(engine->d_ptr.data()); + + PAGESETUPDLG psd; + memset(&psd, 0, sizeof(PAGESETUPDLG)); + psd.lStructSize = sizeof(PAGESETUPDLG); + + // we need a temp DEVMODE struct if we don't have a global DEVMODE + HGLOBAL hDevMode = 0; + int devModeSize = 0; + if (!ep->globalDevMode) { + devModeSize = sizeof(DEVMODE) + ep->devMode->dmDriverExtra; + hDevMode = GlobalAlloc(GHND, devModeSize); + if (hDevMode) { + void *dest = GlobalLock(hDevMode); + memcpy(dest, ep->devMode, devModeSize); + GlobalUnlock(hDevMode); + } + psd.hDevMode = hDevMode; + } else { + psd.hDevMode = ep->devMode; + } + + HGLOBAL *tempDevNames = ep->createDevNames(); + psd.hDevNames = tempDevNames; + + QWidget *parent = parentWidget(); + parent = parent ? parent->window() : QApplication::activeWindow(); + Q_ASSERT(!parent ||parent->testAttribute(Qt::WA_WState_Created)); + psd.hwndOwner = parent ? parent->winId() : 0; + + QRect paperRect = d->printer->paperRect(); + QRect pageRect = d->printer->pageRect(); + + psd.Flags = PSD_MARGINS; + double multiplier = 1; + switch (QLocale::system().measurementSystem()) { + case QLocale::MetricSystem: + psd.Flags |= PSD_INHUNDREDTHSOFMILLIMETERS; + multiplier = 1; + break; + case QLocale::ImperialSystem: + psd.Flags |= PSD_INTHOUSANDTHSOFINCHES; + multiplier = 25.4/10; + break; + } + + QRect marginRect = ep->getPageMargins(); + psd.rtMargin.left = marginRect.left() / multiplier; + psd.rtMargin.top = marginRect.top() / multiplier; + psd.rtMargin.right = marginRect.width() / multiplier;; + psd.rtMargin.bottom = marginRect.height() / multiplier;; + + bool result = PageSetupDlg(&psd); + if (result) { + ep->readDevnames(psd.hDevNames); + ep->readDevmode(psd.hDevMode); + + QRect theseMargins = QRect(psd.rtMargin.left * multiplier, + psd.rtMargin.top * multiplier, + psd.rtMargin.right * multiplier, + psd.rtMargin.bottom * multiplier); + + if (theseMargins != marginRect) { + ep->setPageMargins(psd.rtMargin.left * multiplier, + psd.rtMargin.top * multiplier, + psd.rtMargin.right * multiplier, + psd.rtMargin.bottom * multiplier); + } + + ep->updateCustomPaperSize(); + + // copy from our temp DEVMODE struct + if (!ep->globalDevMode && hDevMode) { + void *src = GlobalLock(hDevMode); + memcpy(ep->devMode, src, devModeSize); + GlobalUnlock(hDevMode); + } + } + + if (!ep->globalDevMode && hDevMode) + GlobalFree(hDevMode); + GlobalFree(tempDevNames); + done(result); + return result; +} + +void QPageSetupDialog::setVisible(bool visible) +{ + if (!visible) + return; + exec(); +} + +QT_END_NAMESPACE +#endif -- cgit v1.2.3