summaryrefslogtreecommitdiffstats
path: root/src/printsupport
diff options
context:
space:
mode:
authorJohn Layt <jlayt@kde.org>2013-11-30 00:00:01 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-05 19:33:42 +0100
commit053bee8b80f4f987718c6633b831a58eb231b599 (patch)
tree06e23aa3565c31c61d50c80533b3454a68b6ed54 /src/printsupport
parentaae1eb3b03d0a0fff130dbba32e7e4250fb5df7f (diff)
QPrinter - Clean up Print Engine Key defaults and tests
The PrintEngine keys are not consistently treated across the platforms and are not properly tested. Start the process of making the print engines behave consistently by documenting and testing the current behavior. Ensure all unsupported features return a consistent default value. The auto test for valuePreservation() has been flaky depending on the platform and installed printers so remove it and replace it with more complete testing. If no native printers available then don't test the native engines. Fixes for the individual inconsistent keys will follow. Task-number: QTBUG-26430 Change-Id: Iab914d7e0a5ae4a2cdc24c8645751f0910cf440c Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/printsupport')
-rw-r--r--src/printsupport/kernel/qprintengine_pdf.cpp42
-rw-r--r--src/printsupport/kernel/qprintengine_win.cpp83
-rw-r--r--src/printsupport/kernel/qprinter.cpp1
3 files changed, 102 insertions, 24 deletions
diff --git a/src/printsupport/kernel/qprintengine_pdf.cpp b/src/printsupport/kernel/qprintengine_pdf.cpp
index 7b3c3c1dac..f5c80b4cae 100644
--- a/src/printsupport/kernel/qprintengine_pdf.cpp
+++ b/src/printsupport/kernel/qprintengine_pdf.cpp
@@ -147,6 +147,28 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
Q_D(QPdfPrintEngine);
switch (int(key)) {
+
+ // The following keys are properties or derived values and so cannot be set
+ case PPK_PageRect:
+ break;
+ case PPK_PaperRect:
+ break;
+ case PPK_PaperSources:
+ break;
+ case PPK_SupportsMultipleCopies:
+ break;
+ case PPK_SupportedResolutions:
+ break;
+
+ // The following keys are settings that are unsupported by the PDF PrintEngine
+ case PPK_CustomBase:
+ break;
+ case PPK_PaperName:
+ break;
+ case PPK_WindowsPageSize:
+ break;
+
+ // The following keys are properties and settings that are supported by the PDF PrintEngine
case PPK_CollateCopies:
d->collate = value.toBool();
break;
@@ -216,8 +238,7 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
d->pageMarginsSet = true;
break;
}
- default:
- break;
+ // No default so that compiler will complain if new keys added and not handled in this engine
}
}
@@ -227,6 +248,20 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
QVariant ret;
switch (int(key)) {
+
+ // The following keys are settings that are unsupported by the PDF PrintEngine
+ // Return sensible default values to ensure consistent behavior across platforms
+ case PPK_CustomBase:
+ // Special case, leave null
+ break;
+ case PPK_PaperName:
+ ret = QString();
+ break;
+ case PPK_WindowsPageSize:
+ // Special case, leave null
+ break;
+
+ // The following keys are properties and settings that are supported by the PDF PrintEngine
case PPK_CollateCopies:
ret = d->collate;
break;
@@ -307,8 +342,7 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
ret = margins;
break;
}
- default:
- break;
+ // No default so that compiler will complain if new keys added and not handled in this engine
}
return ret;
}
diff --git a/src/printsupport/kernel/qprintengine_win.cpp b/src/printsupport/kernel/qprintengine_win.cpp
index 6dafbb4870..d36b7b87c1 100644
--- a/src/printsupport/kernel/qprintengine_win.cpp
+++ b/src/printsupport/kernel/qprintengine_win.cpp
@@ -1273,6 +1273,38 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
{
Q_D(QWin32PrintEngine);
switch (key) {
+
+ // The following keys are properties or derived values and so cannot be set
+ case PPK_PageRect:
+ break;
+ case PPK_PaperRect:
+ break;
+ case PPK_PaperSources:
+ break;
+ case PPK_SupportsMultipleCopies:
+ break;
+ case PPK_SupportedResolutions:
+ break;
+
+ // The following keys are settings that are unsupported by the Windows PrintEngine
+ case PPK_Creator:
+ // TODO Add value preservation support by using local variable
+ break;
+ case PPK_CustomBase:
+ break;
+ case PPK_Duplex:
+ // TODO Add support using DEVMODE.dmDuplex
+ break;
+ case PPK_FontEmbedding:
+ break;
+ case PPK_PageOrder:
+ break;
+ case PPK_PrinterProgram:
+ break;
+ case PPK_SelectionOption:
+ break;
+
+ // The following keys are properties and settings that are supported by the Windows PrintEngine
case PPK_CollateCopies:
{
if (!d->devMode)
@@ -1291,10 +1323,6 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
}
break;
- case PPK_Creator:
-
- break;
-
case PPK_DocumentName:
if (isActive()) {
qWarning("QWin32PrintEngine: Cannot change document name while printing is active");
@@ -1347,6 +1375,7 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
setDevModePaperFlags(d->devMode, d->has_custom_paper_size);
d->doReinit();
break;
+
case PPK_PaperName:
{
if (!d->devMode)
@@ -1416,15 +1445,6 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
}
break;
- case PPK_SelectionOption:
-
- break;
-
- case PPK_SupportedResolutions:
-
- break;
-
-
case PPK_WindowsPageSize:
if (!d->devMode)
break;
@@ -1468,9 +1488,9 @@ void QWin32PrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &
d->setPageMargins(left, top, right, bottom);
break;
}
- default:
- // Do nothing
- break;
+
+ // No default so that compiler will complain if new keys added and not handled in this engine
+
}
}
@@ -1480,10 +1500,33 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
QVariant value;
switch (key) {
+ // The following keys are settings that are unsupported by the Windows PrintEngine
+ // Return sensible default values to ensure consistent behavior across platforms
case PPK_CollateCopies:
+ // TODO Add support using DEVMODE.dmCollate to match setting
value = false;
break;
+ case PPK_Creator:
+ value = QString();
+ break;
+ case PPK_Duplex:
+ // TODO Add support using DEVMODE.dmDuplex
+ value = QPrinter::DuplexNone;
+ break;
+ case PPK_FontEmbedding:
+ value = false;
+ break;
+ case PPK_PageOrder:
+ value = QPrinter::FirstPageFirst;
+ break;
+ case PPK_PrinterProgram:
+ value = QString();
+ break;
+ case PPK_SelectionOption:
+ value = QString();
+ break;
+ // The following keys are properties and settings that are supported by the Windows PrintEngine
case PPK_ColorMode:
{
if (!d->devMode) {
@@ -1567,6 +1610,7 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
value = QTransform(1/d->stretch_x, 0, 0, 1/d->stretch_y, 0, 0).mapRect(d->devPaperRect);
}
break;
+
case PPK_PaperName:
if (!d->devMode) {
value = QLatin1String("A4");
@@ -1596,6 +1640,7 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
}
}
break;
+
case PPK_PaperSource:
if (!d->devMode) {
value = QPrinter::Auto;
@@ -1670,9 +1715,9 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
value = margins;
break;
}
- default:
- // Do nothing
- break;
+
+ // No default so that compiler will complain if new keys added and not handled in this engine
+
}
return value;
}
diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp
index 984b11123e..77fa40f414 100644
--- a/src/printsupport/kernel/qprinter.cpp
+++ b/src/printsupport/kernel/qprinter.cpp
@@ -226,7 +226,6 @@ void QPrinterPrivate::changeEngines(QPrinter::OutputFormat format, const QPrinte
prop = QVariant(q_ptr->copyCount());
else if (key != QPrintEngine::PPK_PrinterName)
prop = oldPrintEngine->property(key);
-
if (prop.isValid())
setProperty(key, prop);
}