diff options
author | Martin Klapetek <mklapetek@kde.org> | 2013-09-19 21:58:30 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-20 23:45:06 +0200 |
commit | 99f9bf9af68530302fcb5a920f477a224adc0e09 (patch) | |
tree | 414d87079843a4e9ec3b739a588176e9a9acbde1 /src/printsupport/dialogs/qprintdialog_unix.cpp | |
parent | c5b58ecd2e4d236a6071bbf2298638d3baaa7a12 (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.cpp | 49 |
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 |