Changeset View
Changeset View
Standalone View
Standalone View
core/fileprinter.cpp
Show All 29 Lines | |||||
30 | #include "debug_p.h" | 30 | #include "debug_p.h" | ||
31 | 31 | | |||
32 | using namespace Okular; | 32 | using namespace Okular; | ||
33 | 33 | | |||
34 | int FilePrinter::printFile( QPrinter &printer, const QString file, | 34 | int FilePrinter::printFile( QPrinter &printer, const QString file, | ||
35 | QPrinter::Orientation documentOrientation, FileDeletePolicy fileDeletePolicy, | 35 | QPrinter::Orientation documentOrientation, FileDeletePolicy fileDeletePolicy, | ||
36 | PageSelectPolicy pageSelectPolicy, const QString &pageRange ) | 36 | PageSelectPolicy pageSelectPolicy, const QString &pageRange ) | ||
37 | { | 37 | { | ||
38 | return printFile( printer, file, documentOrientation, ScaleMode::FitToPrintArea, fileDeletePolicy, | ||||
39 | pageSelectPolicy, pageRange ); | ||||
40 | } | ||||
41 | | ||||
42 | int FilePrinter::printFile( QPrinter &printer, const QString file, | ||||
43 | QPrinter::Orientation documentOrientation, ScaleMode scaleMode, | ||||
44 | FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy, | ||||
45 | const QString &pageRange ) | ||||
46 | { | ||||
38 | FilePrinter fp; | 47 | FilePrinter fp; | ||
39 | return fp.doPrintFiles( printer, QStringList( file ), fileDeletePolicy, pageSelectPolicy, pageRange, | 48 | return fp.doPrintFiles( printer, QStringList( file ), fileDeletePolicy, pageSelectPolicy, pageRange, | ||
40 | documentOrientation ); | 49 | documentOrientation, scaleMode ); | ||
41 | } | 50 | } | ||
42 | 51 | | |||
43 | int FilePrinter::doPrintFiles( QPrinter &printer, QStringList fileList, FileDeletePolicy fileDeletePolicy, | 52 | int FilePrinter::doPrintFiles( QPrinter &printer, QStringList fileList, FileDeletePolicy fileDeletePolicy, | ||
44 | PageSelectPolicy pageSelectPolicy, const QString &pageRange, | 53 | PageSelectPolicy pageSelectPolicy, const QString &pageRange, | ||
45 | QPrinter::Orientation documentOrientation ) | 54 | QPrinter::Orientation documentOrientation ) | ||
46 | { | 55 | { | ||
56 | return doPrintFiles( printer, fileList, fileDeletePolicy, pageSelectPolicy, pageRange, | ||||
57 | documentOrientation, ScaleMode::FitToPrintArea ); | ||||
58 | } | ||||
59 | | ||||
60 | int FilePrinter::doPrintFiles( QPrinter &printer, QStringList fileList, FileDeletePolicy fileDeletePolicy, | ||||
61 | PageSelectPolicy pageSelectPolicy, const QString &pageRange, | ||||
62 | QPrinter::Orientation documentOrientation, ScaleMode scaleMode ) | ||||
63 | { | ||||
47 | 64 | | |||
48 | if ( fileList.size() < 1 ) { | 65 | if ( fileList.size() < 1 ) { | ||
49 | return -8; | 66 | return -8; | ||
50 | } | 67 | } | ||
51 | 68 | | |||
52 | for (QStringList::ConstIterator it = fileList.constBegin(); it != fileList.constEnd(); ++it) { | 69 | for (QStringList::ConstIterator it = fileList.constBegin(); it != fileList.constEnd(); ++it) { | ||
53 | if (!QFile::exists(*it)) { | 70 | if (!QFile::exists(*it)) { | ||
54 | return -7; | 71 | return -7; | ||
▲ Show 20 Lines • Show All 70 Lines • ▼ Show 20 Line(s) | 130 | } else { // Print to a printer via lpr command | |||
125 | } else if ( !QStandardPaths::findExecutable(QStringLiteral("lp")).isEmpty() ) { | 142 | } else if ( !QStandardPaths::findExecutable(QStringLiteral("lp")).isEmpty() ) { | ||
126 | exe = QStringLiteral("lp"); | 143 | exe = QStringLiteral("lp"); | ||
127 | } else { | 144 | } else { | ||
128 | return -9; | 145 | return -9; | ||
129 | } | 146 | } | ||
130 | 147 | | |||
131 | bool useCupsOptions = cupsAvailable(); | 148 | bool useCupsOptions = cupsAvailable(); | ||
132 | argList = printArguments( printer, fileDeletePolicy, pageSelectPolicy, | 149 | argList = printArguments( printer, fileDeletePolicy, pageSelectPolicy, | ||
133 | useCupsOptions, pageRange, exe, documentOrientation ) << fileList; | 150 | useCupsOptions, pageRange, exe, documentOrientation, scaleMode ) << fileList; | ||
134 | qCDebug(OkularCoreDebug) << "Executing" << exe << "with arguments" << argList; | 151 | qCDebug(OkularCoreDebug) << "Executing" << exe << "with arguments" << argList; | ||
135 | 152 | | |||
136 | ret = KProcess::execute( exe, argList ); | 153 | ret = KProcess::execute( exe, argList ); | ||
137 | 154 | | |||
138 | } | 155 | } | ||
139 | 156 | | |||
140 | return ret; | 157 | return ret; | ||
141 | } | 158 | } | ||
▲ Show 20 Lines • Show All 172 Lines • ▼ Show 20 Line(s) | 329 | case -9: | |||
314 | break; | 331 | break; | ||
315 | default: | 332 | default: | ||
316 | pe = Generator::UnknownPrintError; | 333 | pe = Generator::UnknownPrintError; | ||
317 | } | 334 | } | ||
318 | } | 335 | } | ||
319 | return pe; | 336 | return pe; | ||
320 | } | 337 | } | ||
321 | 338 | | |||
339 | QStringList FilePrinter::printArguments( QPrinter &printer, FileDeletePolicy fileDeletePolicy, | ||||
340 | PageSelectPolicy pageSelectPolicy, bool useCupsOptions, | ||||
341 | const QString &pageRange, const QString &version, | ||||
342 | QPrinter::Orientation documentOrientation ) { | ||||
343 | return printArguments( printer, fileDeletePolicy, pageSelectPolicy, useCupsOptions, | ||||
344 | pageRange, version, documentOrientation, ScaleMode::FitToPrintArea); | ||||
345 | } | ||||
322 | 346 | | |||
323 | 347 | | |||
324 | QStringList FilePrinter::printArguments( QPrinter &printer, FileDeletePolicy fileDeletePolicy, | 348 | QStringList FilePrinter::printArguments( QPrinter &printer, FileDeletePolicy fileDeletePolicy, | ||
325 | PageSelectPolicy pageSelectPolicy, bool useCupsOptions, | 349 | PageSelectPolicy pageSelectPolicy, bool useCupsOptions, | ||
326 | const QString &pageRange, const QString &version, | 350 | const QString &pageRange, const QString &version, | ||
327 | QPrinter::Orientation documentOrientation ) | 351 | QPrinter::Orientation documentOrientation, ScaleMode scaleMode ) | ||
328 | { | 352 | { | ||
329 | QStringList argList; | 353 | QStringList argList; | ||
330 | 354 | | |||
331 | if ( ! destination( printer, version ).isEmpty() ) { | 355 | if ( ! destination( printer, version ).isEmpty() ) { | ||
332 | argList << destination( printer, version ); | 356 | argList << destination( printer, version ); | ||
333 | } | 357 | } | ||
334 | 358 | | |||
335 | if ( ! copies( printer, version ).isEmpty() ) { | 359 | if ( ! copies( printer, version ).isEmpty() ) { | ||
336 | argList << copies( printer, version ); | 360 | argList << copies( printer, version ); | ||
337 | } | 361 | } | ||
338 | 362 | | |||
339 | if ( ! jobname( printer, version ).isEmpty() ) { | 363 | if ( ! jobname( printer, version ).isEmpty() ) { | ||
340 | argList << jobname( printer, version ); | 364 | argList << jobname( printer, version ); | ||
341 | } | 365 | } | ||
342 | 366 | | |||
343 | if ( ! pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version ).isEmpty() ) { | 367 | if ( ! pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version ).isEmpty() ) { | ||
344 | argList << pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version ); | 368 | argList << pages( printer, pageSelectPolicy, pageRange, useCupsOptions, version ); | ||
345 | } | 369 | } | ||
346 | 370 | | |||
347 | if ( useCupsOptions && ! cupsOptions( printer, documentOrientation ).isEmpty() ) { | 371 | if ( useCupsOptions && ! cupsOptions( printer, documentOrientation, scaleMode ).isEmpty() ) { | ||
348 | argList << cupsOptions( printer, documentOrientation); | 372 | argList << cupsOptions( printer, documentOrientation, scaleMode); | ||
349 | } | 373 | } | ||
350 | 374 | | |||
351 | if ( ! deleteFile( printer, fileDeletePolicy, version ).isEmpty() ) { | 375 | if ( ! deleteFile( printer, fileDeletePolicy, version ).isEmpty() ) { | ||
352 | argList << deleteFile( printer, fileDeletePolicy, version ); | 376 | argList << deleteFile( printer, fileDeletePolicy, version ); | ||
353 | } | 377 | } | ||
354 | 378 | | |||
355 | if ( version == QLatin1String("lp") ) { | 379 | if ( version == QLatin1String("lp") ) { | ||
356 | argList << QStringLiteral("--"); | 380 | argList << QStringLiteral("--"); | ||
▲ Show 20 Lines • Show All 89 Lines • ▼ Show 20 Line(s) | 442 | { | |||
446 | 470 | | |||
447 | } | 471 | } | ||
448 | 472 | | |||
449 | return QStringList(); // AllPages | 473 | return QStringList(); // AllPages | ||
450 | } | 474 | } | ||
451 | 475 | | |||
452 | QStringList FilePrinter::cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation ) | 476 | QStringList FilePrinter::cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation ) | ||
453 | { | 477 | { | ||
478 | return cupsOptions( printer, documentOrientation, ScaleMode::FitToPrintArea ); | ||||
479 | } | ||||
480 | | ||||
481 | QStringList FilePrinter::cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation, ScaleMode scaleMode ) | ||||
482 | { | ||||
454 | QStringList optionList; | 483 | QStringList optionList; | ||
455 | 484 | | |||
456 | if ( ! optionMedia( printer ).isEmpty() ) { | 485 | if ( ! optionMedia( printer ).isEmpty() ) { | ||
457 | optionList << optionMedia( printer ); | 486 | optionList << optionMedia( printer ); | ||
458 | } | 487 | } | ||
459 | 488 | | |||
460 | if ( ! optionOrientation( printer, documentOrientation ).isEmpty() ) { | 489 | if ( ! optionOrientation( printer, documentOrientation ).isEmpty() ) { | ||
461 | optionList << optionOrientation( printer, documentOrientation ); | 490 | optionList << optionOrientation( printer, documentOrientation ); | ||
462 | } | 491 | } | ||
463 | 492 | | |||
464 | if ( ! optionDoubleSidedPrinting( printer ).isEmpty() ) { | 493 | if ( ! optionDoubleSidedPrinting( printer ).isEmpty() ) { | ||
465 | optionList << optionDoubleSidedPrinting( printer ); | 494 | optionList << optionDoubleSidedPrinting( printer ); | ||
466 | } | 495 | } | ||
467 | 496 | | |||
468 | if ( ! optionPageOrder( printer ).isEmpty() ) { | 497 | if ( ! optionPageOrder( printer ).isEmpty() ) { | ||
469 | optionList << optionPageOrder( printer ); | 498 | optionList << optionPageOrder( printer ); | ||
470 | } | 499 | } | ||
471 | 500 | | |||
472 | if ( ! optionCollateCopies( printer ).isEmpty() ) { | 501 | if ( ! optionCollateCopies( printer ).isEmpty() ) { | ||
473 | optionList << optionCollateCopies( printer ); | 502 | optionList << optionCollateCopies( printer ); | ||
474 | } | 503 | } | ||
475 | 504 | | |||
476 | if ( ! optionPageMargins( printer ).isEmpty() ) { | 505 | if ( ! optionPageMargins( printer, scaleMode ).isEmpty() ) { | ||
477 | optionList << optionPageMargins( printer ); | 506 | optionList << optionPageMargins( printer, scaleMode ); | ||
478 | } | 507 | } | ||
479 | 508 | | |||
480 | optionList << optionCupsProperties( printer ); | 509 | optionList << optionCupsProperties( printer ); | ||
481 | 510 | | |||
482 | return optionList; | 511 | return optionList; | ||
483 | } | 512 | } | ||
484 | 513 | | |||
485 | QStringList FilePrinter::optionMedia( QPrinter &printer ) | 514 | QStringList FilePrinter::optionMedia( QPrinter &printer ) | ||
▲ Show 20 Lines • Show All 121 Lines • ▼ Show 20 Line(s) | 635 | { | |||
607 | if ( printer.collateCopies() ) { | 636 | if ( printer.collateCopies() ) { | ||
608 | return QStringList(QStringLiteral("-o")) << QStringLiteral("Collate=True"); | 637 | return QStringList(QStringLiteral("-o")) << QStringLiteral("Collate=True"); | ||
609 | } | 638 | } | ||
610 | return QStringList(QStringLiteral("-o")) << QStringLiteral("Collate=False"); | 639 | return QStringList(QStringLiteral("-o")) << QStringLiteral("Collate=False"); | ||
611 | } | 640 | } | ||
612 | 641 | | |||
613 | QStringList FilePrinter::optionPageMargins( QPrinter &printer ) | 642 | QStringList FilePrinter::optionPageMargins( QPrinter &printer ) | ||
614 | { | 643 | { | ||
644 | return optionPageMargins( printer, ScaleMode::FitToPrintArea ); | ||||
645 | } | ||||
646 | | ||||
647 | QStringList FilePrinter::optionPageMargins( QPrinter &printer, ScaleMode scaleMode ) | ||||
648 | { | ||||
615 | if (printer.printEngine()->property(QPrintEngine::PPK_PageMargins).isNull()) { | 649 | if (printer.printEngine()->property(QPrintEngine::PPK_PageMargins).isNull()) { | ||
616 | return QStringList(); | 650 | return QStringList(); | ||
617 | } else { | 651 | } else { | ||
618 | qreal l(0), t(0), r(0), b(0); | 652 | qreal l(0), t(0), r(0), b(0); | ||
619 | if (!printer.fullPage()) { | 653 | if (!printer.fullPage()) { | ||
620 | printer.getPageMargins( &l, &t, &r, &b, QPrinter::Point ); | 654 | printer.getPageMargins( &l, &t, &r, &b, QPrinter::Point ); | ||
621 | } | 655 | } | ||
622 | return QStringList(QStringLiteral("-o")) << QStringLiteral("page-left=%1").arg(l) | 656 | QStringList marginOptions; | ||
657 | marginOptions << (QStringLiteral("-o")) << QStringLiteral("page-left=%1").arg(l) | ||||
623 | << QStringLiteral("-o") << QStringLiteral("page-top=%1").arg(t) | 658 | << QStringLiteral("-o") << QStringLiteral("page-top=%1").arg(t) | ||
624 | << QStringLiteral("-o") << QStringLiteral("page-right=%1").arg(r) | 659 | << QStringLiteral("-o") << QStringLiteral("page-right=%1").arg(r) | ||
625 | << QStringLiteral("-o") << QStringLiteral("page-bottom=%1").arg(b) << QStringLiteral("-o") << QStringLiteral("fit-to-page"); | 660 | << QStringLiteral("-o") << QStringLiteral("page-bottom=%1").arg(b); | ||
661 | if (scaleMode == ScaleMode::FitToPrintArea) { | ||||
662 | marginOptions << QStringLiteral("-o") << QStringLiteral("fit-to-page"); | ||||
663 | } | ||||
664 | | ||||
665 | return marginOptions; | ||||
626 | } | 666 | } | ||
627 | } | 667 | } | ||
628 | 668 | | |||
629 | QStringList FilePrinter::optionCupsProperties( QPrinter &printer ) | 669 | QStringList FilePrinter::optionCupsProperties( QPrinter &printer ) | ||
630 | { | 670 | { | ||
631 | QStringList dialogOptions = printer.printEngine()->property(QPrintEngine::PrintEnginePropertyKey(0xfe00)).toStringList(); | 671 | QStringList dialogOptions = printer.printEngine()->property(QPrintEngine::PrintEnginePropertyKey(0xfe00)).toStringList(); | ||
632 | QStringList cupsOptions; | 672 | QStringList cupsOptions; | ||
633 | 673 | | |||
Show All 12 Lines |