fileprinter.h 7.87 KB
Newer Older
John Layt's avatar
John Layt committed
1
/***************************************************************************
2
 *   Copyright (C) 2007, 2010 by John Layt <john@layt.net>                 *
John Layt's avatar
John Layt committed
3 4 5 6 7 8 9 10 11 12 13 14 15 16
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 ***************************************************************************/

// This Class is a temporary addition to Okular for the duration of KDE 4.0.
// In KDE 4.1 this class will either be moved to kdelibs if still required,
// or replaced  with a Qt 4.4 based solution.

#ifndef FILEPRINTER_H
#define FILEPRINTER_H

Dirk Mueller's avatar
Dirk Mueller committed
17 18
#include <QtCore/QList>
#include <QtCore/QString>
Frederik Gladhorn's avatar
Frederik Gladhorn committed
19
#include <QtPrintSupport/QPrinter>
20

21 22
#include "okular_export.h"
#include "generator.h"
John Layt's avatar
John Layt committed
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

class QSize;

namespace Okular {

class OKULAR_EXPORT FilePrinter
{
public:

    /** Whether file(s) get deleted by the application or by the print system.
     *
     *  You may need to chose system deletion if your temp file clean-up
     *  deletes the file before the print system is finished with it.
     */
    enum FileDeletePolicy { ApplicationDeletesFiles, SystemDeletesFiles };

    /** Whether pages to be printed are selected by the application or the print system.
     *
     *  If application side, then the generated file will only contain those pages
     *  selected by the user, so FilePrinter will print all the pages in the file.
     *
     *  If system side, then the file will contain all the pages in the document, and
     *  the print system will print the users selected print range from out of the file.
     *
     *  Note system side only works in CUPS, not LPR.
     */
    enum PageSelectPolicy { ApplicationSelectsPages, SystemSelectsPages };

    /** Print a file using the settings in QPrinter
     *
     *  Only supports CUPS and LPR on *NIX.  Page Range only supported in CUPS.
     *  Most settings unsupported by LPR, some settings unsupported by CUPS.
     *
56 57
     *  The documentOrientation parameter was added in version 0.14.
     *
John Layt's avatar
John Layt committed
58 59
     * @param printer the print settings to use
     * @param file the file to print
60
     * @param documentOrientation the orientation stored in the document itself
John Layt's avatar
John Layt committed
61 62 63 64 65 66 67 68 69
     * @param fileDeletePolicy if the application or system deletes the file
     * @param pageSelectPolicy if the application or system selects the pages to print
     * @param pageRange page range to print if SystemSlectsPages and user chooses Selection in Print Dialog
     *
     * @returns Returns exit code:
     *          -9 if lpr not found
     *          -8 if empty file name
     *          -7 if unable to find file
     *          -6 if invalid printer state
70
     *          -5 if print to file copy failed
John Layt's avatar
John Layt committed
71 72 73
     *          -2 if the KProcess could not be started
     *          -1 if the KProcess crashed
     *          otherwise the KProcess exit code
74 75
     *
     * @since 0.14 (KDE 4.8)
John Layt's avatar
John Layt committed
76 77
     */

78
    static int printFile( QPrinter &printer, const QString file,
79
                          QPrinter::Orientation documentOrientation,
John Layt's avatar
John Layt committed
80 81 82 83 84 85 86 87
                          FileDeletePolicy fileDeletePolicy = FilePrinter::ApplicationDeletesFiles,
                          PageSelectPolicy pageSelectPolicy = FilePrinter::ApplicationSelectsPages,
                          const QString &pageRange = QString() );

    /** Return the list of pages selected by the user in the Print Dialog
     *
     * @param printer the print settings to use
     * @param lastPage the last page number, needed if AllPages option is selected
88
     * @param currentPage the current page number, needed if CurrentPage option is selected
John Layt's avatar
John Layt committed
89 90 91
     * @param selectedPageList list of pages to use if Selection option is selected
     * @returns Returns list of pages to print
     */
92 93
    static QList<int> pageList( QPrinter &printer, int lastPage,
                                int currentPage, const QList<int> &selectedPageList );
John Layt's avatar
John Layt committed
94

95 96 97 98 99 100 101 102 103
    /** Return the list of pages selected by the user in the Print Dialog
     *
     * @param printer the print settings to use
     * @param lastPage the last page number, needed if AllPages option is selected
     * @param selectedPageList list of pages to use if Selection option is selected
     * @returns Returns list of pages to print
     */
    static QList<int> pageList( QPrinter &printer, int lastPage, const QList<int> &selectedPageList );

John Layt's avatar
John Layt committed
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
    /** Return the range of pages selected by the user in the Print Dialog
     *
     * @param printer the print settings to use
     * @param lastPage the last page number, needed if AllPages option is selected
     * @param selectedPageList list of pages to use if Selection option is selected
     * @returns Returns range of pages to print
     */
    static QString pageRange( QPrinter &printer, int lastPage, const QList<int> &selectedPageList );

    /** convert a Page List into a Page Range
     *
     * @param pageList list of pages to convert
     * @returns Returns equivalent page range
     */
    static QString pageListToPageRange( const QList<int> &pageList );

120 121 122 123 124 125 126 127 128 129 130 131
    /** Return if Ghostscript ps2pdf is available on this system
     *
     * @returns Returns true if Ghostscript ps2pdf available
     */
     static bool ps2pdfAvailable();

    /** Return if Ghostscript pdf2ps is available on this system
     *
     * @returns Returns true if Ghostscript pdf2ps available
     */
     static bool pdf2psAvailable();

John Layt's avatar
John Layt committed
132 133 134 135 136 137 138 139 140 141 142 143
    /** Return if CUPS Print System is available on this system
     *
     * @returns Returns true if CUPS available
     */
    static bool cupsAvailable();

    /** Returns the postscript standard page size
     *
     * @returns Returns paper size in ps points
     */
    static QSize psPaperSize( QPrinter &printer );

144 145 146 147 148 149
    /**
     * Convert the code returned by printFile* to PrintError
     * @since 0.11 (KDE 4.5)
     */
    static Generator::PrintError printError( int c );

John Layt's avatar
John Layt committed
150 151 152 153 154
protected:

    bool detectCupsService();
    bool detectCupsConfig();

155
    int doPrintFiles( QPrinter &printer, const QStringList fileList,
John Layt's avatar
John Layt committed
156
                             FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy,
157 158
                             const QString &pageRange,
                             QPrinter::Orientation documentOrientation );
John Layt's avatar
John Layt committed
159 160 161

    QStringList printArguments( QPrinter &printer,
                                       FileDeletePolicy fileDeletePolicy, PageSelectPolicy pageSelectPolicy,
162 163
                                       bool useCupsOptions, const QString &pageRange, const QString &version,
                                       QPrinter::Orientation documentOrientation );
John Layt's avatar
John Layt committed
164 165 166 167 168 169 170 171 172

    QStringList destination( QPrinter &printer, const QString &version );
    QStringList copies( QPrinter &printer, const QString &version );
    QStringList jobname( QPrinter &printer, const QString &version );
    QStringList deleteFile( QPrinter &printer, FileDeletePolicy fileDeletePolicy,
                                   const QString &version );
    QStringList pages( QPrinter &printer, PageSelectPolicy pageSelectPolicy,
                              const QString &pageRange, bool useCupsOptions, const QString &version );

173
    QStringList cupsOptions( QPrinter &printer, QPrinter::Orientation documentOrientation );
John Layt's avatar
John Layt committed
174 175 176
    QStringList optionMedia( QPrinter &printer );
    QString mediaPageSize( QPrinter &printer );
    QString mediaPaperSource( QPrinter &printer );
177
    QStringList optionOrientation( QPrinter &printer, QPrinter::Orientation documentOrientation );
John Layt's avatar
John Layt committed
178 179 180
    QStringList optionDoubleSidedPrinting( QPrinter &printer );
    QStringList optionPageOrder( QPrinter &printer );
    QStringList optionCollateCopies( QPrinter &printer );
John Layt's avatar
John Layt committed
181
    QStringList optionPageMargins( QPrinter &printer );
182
    QStringList optionCupsProperties( QPrinter &printer );
John Layt's avatar
John Layt committed
183 184 185 186 187
};

}

#endif // FILEPRINTER_H