summaryrefslogtreecommitdiffstats
path: root/src/printsupport
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2013-12-08 16:39:49 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-06 20:39:20 +0100
commitba3804004afb96c9fdea32b967d658f1ffb61a22 (patch)
tree1dce7d3cabfc11ccef8101c1a53338d6eeaa70fe /src/printsupport
parentdf56ef165198801cd6c9ed1bf0d44a967cd62f18 (diff)
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 <andy.shaw@digia.com>
Diffstat (limited to 'src/printsupport')
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix.cpp82
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix_p.h2
2 files changed, 47 insertions, 37 deletions
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);
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
index b96d300ab9..4245c3ae5f 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
@@ -94,7 +94,7 @@ private:
qreal m_topMargin;
qreal m_rightMargin;
qreal m_bottomMargin;
- QSizeF m_paperSize;
+ QSizeF m_paperSize; // In QPrinter::Point
qreal m_currentMultiplier;
bool m_blockSignals;
bool m_cups;