From ba3804004afb96c9fdea32b967d658f1ffb61a22 Mon Sep 17 00:00:00 2001 From: John Layt Date: Sun, 8 Dec 2013 16:39:49 +0100 Subject: QPageSetupWidget - Fix input of Custom paper size Currently if selecting the Custom paper size in the page setup widget the custom size inputs are not enabled to allow you to actually enter your custom size. Fix the handling of custom paper size to allow manual size entry and fix orientation change. Change-Id: I73b521976ca13c0164441a724bb277c19205d7c9 Reviewed-by: Andy Shaw --- src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 82 ++++++++++++---------- 1 file changed, 46 insertions(+), 36 deletions(-) (limited to 'src/printsupport/dialogs/qpagesetupdialog_unix.cpp') diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp index c1b9828a23..6801863a3a 100644 --- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp +++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp @@ -472,58 +472,68 @@ void QPageSetupWidget::selectPdfPsPrinter(const QPrinter *p) // Updates size/preview after the combobox has been changed. void QPageSetupWidget::_q_paperSizeChanged() { - QVariant val = widget.paperSize->itemData(widget.paperSize->currentIndex()); - int index = m_printer->pageSize(); - if (val.type() == QVariant::Int) { - index = val.toInt(); - } - if (m_blockSignals) return; m_blockSignals = true; - QPrinter::PaperSize size = QPrinter::PaperSize(index); - QPrinter::Orientation orientation = widget.portrait->isChecked() - ? QPrinter::Portrait - : QPrinter::Landscape; - - bool custom = size == QPrinter::Custom; - -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - custom = custom && m_cups && (m_printer->paperName() == QLatin1String("Custom")); -#endif - - widget.paperWidth->setEnabled(custom); - widget.paperHeight->setEnabled(custom); - widget.widthLabel->setEnabled(custom); - widget.heightLabel->setEnabled(custom); - if (custom) { - m_paperSize.setWidth( widget.paperWidth->value() * m_currentMultiplier); - m_paperSize.setHeight( widget.paperHeight->value() * m_currentMultiplier); - m_pagePreview->setPaperSize(m_paperSize); - } else { - Q_ASSERT(m_printer); -#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) - if (m_cups && QCUPSSupport::isAvailable()) { // combobox is filled with cups based data + bool custom = false; + QVariant val = widget.paperSize->itemData(widget.paperSize->currentIndex()); + QPrinter::Orientation orientation = widget.portrait->isChecked() ? QPrinter::Portrait : QPrinter::Landscape; + + if (m_cups) { + // OutputFormat == NativeFormat, data is QString Cups paper name + QByteArray cupsPageSize = val.toByteArray(); + custom = (cupsPageSize == QByteArrayLiteral("Custom")); +#ifndef QT_NO_CUPS + if (!custom) { QCUPSSupport cups; - QByteArray cupsPageSize = widget.paperSize->itemData(widget.paperSize->currentIndex()).toByteArray(); - m_paperSize = cups.paperRect(cupsPageSize).size(); - if (orientation == QPrinter::Landscape) - m_paperSize = QSizeF(m_paperSize.height(), m_paperSize.width()); // swap + cups.setCurrentPrinter(m_printer->printerName()); + m_paperSize = sizeForOrientation(orientation, cups.paperRect(cupsPageSize).size()); } - else #endif + } else { + // OutputFormat == PdfFormat, data is QPrinter::PageSize + QPrinter::PaperSize size = QPrinter::PaperSize(val.toInt()); + custom = size == QPrinter::Custom; + if (!custom) m_paperSize = qt_printerPaperSize(orientation, size, QPrinter::Point, 1); + } - m_pagePreview->setPaperSize(m_paperSize); + if (custom) { + // Convert input custom size Units to Points + m_paperSize = QSizeF(widget.paperWidth->value() * m_currentMultiplier, + widget.paperHeight->value() * m_currentMultiplier); + } else { + // Display standard size Points as Units widget.paperWidth->setValue(m_paperSize.width() / m_currentMultiplier); widget.paperHeight->setValue(m_paperSize.height() / m_currentMultiplier); } + + m_pagePreview->setPaperSize(m_paperSize); + + widget.paperWidth->setEnabled(custom); + widget.paperHeight->setEnabled(custom); + widget.widthLabel->setEnabled(custom); + widget.heightLabel->setEnabled(custom); + m_blockSignals = false; } void QPageSetupWidget::_q_pageOrientationChanged() { - if (QPrinter::PaperSize(widget.paperSize->currentIndex()) == QPrinter::Custom) { + bool custom = false; + QVariant val = widget.paperSize->itemData(widget.paperSize->currentIndex()); + + if (m_cups) { + // OutputFormat == NativeFormat, data is QString Cups paper name + QByteArray cupsPageSize = val.toByteArray(); + custom = (cupsPageSize == QByteArrayLiteral("Custom")); + } else { + // OutputFormat == PdfFormat, data is QPrinter::PageSize + QPrinter::PaperSize size = QPrinter::PaperSize(val.toInt()); + custom = size == QPrinter::Custom; + } + + if (custom) { double tmp = widget.paperWidth->value(); widget.paperWidth->setValue(widget.paperHeight->value()); widget.paperHeight->setValue(tmp); -- cgit v1.2.3