void Viewer::print() { QPrinter printer(QPrinter::PrinterResolution); QPrintDialog *printDialog = new QPrintDialog(&printer, this); printDialog->setWindowTitle(QString::fromUtf8("katarakt/print %1").arg(get_res()->get_file())); printDialog->setOptions(QAbstractPrintDialog::PrintPageRange | QAbstractPrintDialog::PrintCurrentPage); int fromPage = 1, toPage = get_res()->get_page_count(); printDialog->setMinMax(fromPage, toPage); printDialog->setFromTo(fromPage, toPage); if (printDialog->exec() != QDialog::Accepted) { delete printDialog; return; } if (printer.printRange() == QPrinter::PageRange) { fromPage = printer.fromPage(); toPage = printer.toPage(); } else if (printer.printRange() == QPrinter::CurrentPage) { fromPage = toPage = canvas->get_layout()->get_page() + 1; // 0-indexed } QStringList list; list << QString("-d") << QString("%1").arg(printer.printerName()); list << QString("-n") << QString("%1").arg(printer.copyCount()); list << QString("-P") << QString("%1-%2").arg(fromPage).arg(toPage); if (printer.duplex() == QPrinter::DuplexLongSide) { list << QString("-o") << QString("sides=two-sided-long-edge"); } else if (printer.duplex() == QPrinter::DuplexShortSide) { list << QString("-o") << QString("sides=two-sided-short-edge"); } // FIXME: how to set color / grayscale with lp? Or: how to disable it in print dialog? list << QString("--"); list << QString("%1").arg(get_res()->get_file()); QProcess::execute("lp", list); delete printDialog; }