summaryrefslogtreecommitdiffstats
path: root/src/printsupport/dialogs/qprintdialog_unix.cpp
diff options
context:
space:
mode:
authorMartin Klapetek <mklapetek@kde.org>2013-09-19 21:58:30 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 23:45:06 +0200
commit99f9bf9af68530302fcb5a920f477a224adc0e09 (patch)
tree414d87079843a4e9ec3b739a588176e9a9acbde1 /src/printsupport/dialogs/qprintdialog_unix.cpp
parentc5b58ecd2e4d236a6071bbf2298638d3baaa7a12 (diff)
Offer Page Range option for apps that can't do it themselves
Some apps may not support printing only a particular page range, but with CUPS we can do "server-side print range", ie. we can select the page range for the application. If CUPS is available, the Page Range widget is now displayed if app advertises no such capability and page range is selected on the server instead. [ChangeLog][QtPrintSupport][QPrintDialog] Added CUPS server-side print range support for apps that can't support print range option themselves Change-Id: Ia7784065ba5a8b53bb05ae46e982c718ef672fa5 Reviewed-by: John Layt <jlayt@kde.org>
Diffstat (limited to 'src/printsupport/dialogs/qprintdialog_unix.cpp')
-rw-r--r--src/printsupport/dialogs/qprintdialog_unix.cpp49
1 files changed, 37 insertions, 12 deletions
diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp
index 5e9e6fcc99..0214c97e24 100644
--- a/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -435,23 +435,41 @@ void QPrintDialogPrivate::setupPrinter()
p->setPrintRange(QPrinter::CurrentPage);
p->setFromTo(0,0);
} else if (options.printRange->isChecked()) {
- p->setPrintRange(QPrinter::PageRange);
- p->setFromTo(options.from->value(), qMax(options.from->value(), options.to->value()));
+ if (q->isOptionEnabled(QPrintDialog::PrintPageRange)) {
+ p->setPrintRange(QPrinter::PageRange);
+ p->setFromTo(options.from->value(), qMax(options.from->value(), options.to->value()));
+ } else {
+ // This case happens when CUPS server-side page range is enabled
+ // Setting the range to the printer occurs below
+ p->setPrintRange(QPrinter::AllPages);
+ p->setFromTo(0,0);
+ }
}
#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
// page set
- if (QCUPSSupport::isAvailable() && (p->printRange() == QPrinter::AllPages || p->printRange() == QPrinter::PageRange)) {
- //If the application is selecting pages and the first page number is even then need to adjust the odd-even accordingly
- QCUPSSupport::PageSet pageSet = options.pageSetCombo->itemData(options.pageSetCombo->currentIndex()).value<QCUPSSupport::PageSet>();
- if (p->printRange() == QPrinter::PageRange && (q->fromPage() % 2 == 0)) {
- if (pageSet == QCUPSSupport::OddPages)
- QCUPSSupport::setPageSet(p, QCUPSSupport::EvenPages);
- else if (pageSet == QCUPSSupport::EvenPages)
- QCUPSSupport::setPageSet(p, QCUPSSupport::OddPages);
- } else if (pageSet != QCUPSSupport::AllPages) {
- QCUPSSupport::setPageSet(p, pageSet);
+ if (QCUPSSupport::isAvailable()) {
+ if (p->printRange() == QPrinter::AllPages || p->printRange() == QPrinter::PageRange) {
+ //If the application is selecting pages and the first page number is even then need to adjust the odd-even accordingly
+ QCUPSSupport::PageSet pageSet = options.pageSetCombo->itemData(options.pageSetCombo->currentIndex()).value<QCUPSSupport::PageSet>();
+ if (q->isOptionEnabled(QPrintDialog::PrintPageRange)
+ && p->printRange() == QPrinter::PageRange
+ && (q->fromPage() % 2 == 0)) {
+
+ if (pageSet == QCUPSSupport::OddPages)
+ QCUPSSupport::setPageSet(p, QCUPSSupport::EvenPages);
+ else if (pageSet == QCUPSSupport::EvenPages)
+ QCUPSSupport::setPageSet(p, QCUPSSupport::OddPages);
+ } else if (pageSet != QCUPSSupport::AllPages) {
+ QCUPSSupport::setPageSet(p, pageSet);
+ }
+
}
+
+ // server-side page range, since we set the page range on the printer to 0-0/AllPages above,
+ // we need to take the values directly from the widget as q->fromPage() will return 0
+ if (!q->isOptionEnabled(QPrintDialog::PrintPageRange) && options.printRange->isChecked())
+ QCUPSSupport::setPageRange(p, options.from->value(), qMax(options.from->value(), options.to->value()));
}
#endif
@@ -532,6 +550,13 @@ void QPrintDialogPrivate::updateWidgets()
options.pageSetCombo->setVisible(true);
options.pageSetLabel->setVisible(true);
}
+
+ if (!q->isOptionEnabled(QPrintDialog::PrintPageRange)) {
+ // If we can do CUPS server side pages selection,
+ // display the page range widgets
+ options.gbPrintRange->setVisible(true);
+ options.printRange->setEnabled(true);
+ }
}
#endif