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>bb10
parent
c5b58ecd2e
commit
99f9bf9af6
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -522,6 +522,13 @@ void QCUPSSupport::setPagesPerSheetLayout(QPrinter *printer, const PagesPerShee
|
|||
setCupsOptions(printer, cupsOptions);
|
||||
}
|
||||
|
||||
void QCUPSSupport::setPageRange(QPrinter *printer, int pageFrom, int pageTo)
|
||||
{
|
||||
QStringList cupsOptions = cupsOptionsList(printer);
|
||||
setCupsOption(cupsOptions, QStringLiteral("page-ranges"), QString("%1-%2").arg(pageFrom).arg(pageTo));
|
||||
setCupsOptions(printer, cupsOptions);
|
||||
}
|
||||
|
||||
bool QCUPSSupport::printerHasPPD(const char *printerName)
|
||||
{
|
||||
if (!isAvailable())
|
||||
|
|
|
|||
|
|
@ -175,6 +175,7 @@ public:
|
|||
static void setPageSet(QPrinter *printer, const PageSet pageSet);
|
||||
static void setPagesPerSheetLayout(QPrinter *printer, const PagesPerSheet pagesPerSheet,
|
||||
const PagesPerSheetLayout pagesPerSheetLayout);
|
||||
static void setPageRange(QPrinter *printer, int pageFrom, int pageTo);
|
||||
|
||||
static bool printerHasPPD(const char *printerName);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue