• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • kdeprint
 

kdeprint

kcupsprinterimpl.cpp
00001 /*
00002  *  This file is part of the KDE libraries
00003  *  Copyright (c) 2001 Michael Goffioul <kdeprint@swing.be>
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Library General Public
00007  *  License version 2 as published by the Free Software Foundation.
00008  *
00009  *  This library is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012  *  Library General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU Library General Public License
00015  *  along with this library; see the file COPYING.LIB.  If not, write to
00016  *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00017  *  Boston, MA 02110-1301, USA.
00018  **/
00019 
00020 #include "kcupsprinterimpl.h"
00021 #include "kprinter.h"
00022 #include "driver.h"
00023 #include "kmfactory.h"
00024 #include "kmmanager.h"
00025 #include "cupsinfos.h"
00026 
00027 #include <tqfile.h>
00028 #include <cups/cups.h>
00029 #include <stdlib.h>
00030 #include <kprocess.h>
00031 
00032 static void mapToCupsOptions(const TQMap<TQString,TQString>& opts, TQString& cmd);
00033 
00034 TQSize rangeToSize(const TQString& s)
00035 {
00036     TQString    range = s;
00037     int p(-1);
00038     int from, to;
00039 
00040     if ((p=range.find(',')) != -1)
00041         range.truncate(p);
00042     if ((p=range.find('-')) != -1)
00043     {
00044         from = range.left(p).toInt();
00045         to = range.right(range.length()-p-1).toInt();
00046     }
00047     else if (!range.isEmpty())
00048         from = to = range.toInt();
00049     else
00050         from = to = 0;
00051 
00052     return TQSize(from,to);
00053 }
00054 //******************************************************************************************************
00055 
00056 KCupsPrinterImpl::KCupsPrinterImpl(TQObject *parent, const char *name, const TQStringList & /*args*/)
00057 : KPrinterImpl(parent,name)
00058 {
00059 }
00060 
00061 KCupsPrinterImpl::~KCupsPrinterImpl()
00062 {
00063 }
00064 
00065 bool KCupsPrinterImpl::setupCommand(TQString& cmd, KPrinter *printer)
00066 {
00067     // check printer object
00068     if (!printer) return false;
00069 
00070     TQString    hoststr = TQString::fromLatin1("%1:%2").arg(CupsInfos::self()->host()).arg(CupsInfos::self()->port());
00071     cmd = TQString::fromLatin1("cupsdoprint -P %1 -J %3 -H %2").arg(quote(printer->printerName())).arg(quote(hoststr)).arg(quote(printer->docName()));
00072     if (!CupsInfos::self()->login().isEmpty())
00073     {
00074         TQString    userstr(CupsInfos::self()->login());
00075         //if (!CupsInfos::self()->password().isEmpty())
00076         //  userstr += (":" + CupsInfos::self()->password());
00077         cmd.append(" -U ").append(quote(userstr));
00078     }
00079     mapToCupsOptions(printer->options(),cmd);
00080     return true;
00081 }
00082 
00083 void KCupsPrinterImpl::preparePrinting(KPrinter *printer)
00084 {
00085     // process orientation
00086     TQString    o = printer->option("orientation-requested");
00087     printer->setOption("kde-orientation",(o == "4" || o == "5" ? "Landscape" : "Portrait"));
00088     // if it's a TQt application, then convert orientation as it will be handled by TQt directly
00089     if (printer->applicationType() == KPrinter::Dialog)
00090         printer->setOption("orientation-requested",(o == "5" || o == "6" ? "6" : "3"));
00091 
00092     // translate copies number
00093     if (!printer->option("kde-copies").isEmpty()) printer->setOption("copies",printer->option("kde-copies"));
00094 
00095     // page ranges are handled by CUPS, so application should print all pages
00096     if (printer->pageSelection() == KPrinter::SystemSide)
00097     { // TQt => CUPS
00098         // translations
00099         if (!printer->option("kde-range").isEmpty())
00100             printer->setOption("page-ranges",printer->option("kde-range"));
00101         if (printer->option("kde-pageorder") == "Reverse")
00102             printer->setOption("OutputOrder",printer->option("kde-pageorder"));
00103         o = printer->option("kde-pageset");
00104         if (!o.isEmpty() && o != "0")
00105             printer->setOption("page-set",(o == "1" ? "odd" : "even"));
00106         printer->setOption("multiple-document-handling",(printer->option("kde-collate") == "Collate" ? "separate-documents-collated-copies" : "separate-documents-uncollated-copies"));
00107     }
00108     else
00109     { // No translation needed (but range => (from,to))
00110         TQString range = printer->option("kde-range");
00111         if (!range.isEmpty())
00112         {
00113             TQSize  s = rangeToSize(range);
00114             printer->setOption("kde-from",TQString::number(s.width()));
00115             printer->setOption("kde-to",TQString::number(s.height()));
00116         }
00117     }
00118 
00119     // needed for page size and margins
00120     KPrinterImpl::preparePrinting(printer);
00121 }
00122 
00123 void KCupsPrinterImpl::broadcastOption(const TQString& key, const TQString& value)
00124 {
00125     KPrinterImpl::broadcastOption(key,value);
00126     if (key == "kde-orientation")
00127         KPrinterImpl::broadcastOption("orientation-requested",(value == "Landscape" ? "4" : "3"));
00128     else if (key == "kde-pagesize")
00129     {
00130         TQString    pagename = TQString::fromLatin1(pageSizeToPageName((KPrinter::PageSize)value.toInt()));
00131         KPrinterImpl::broadcastOption("PageSize",pagename);
00132         // simple hack for classes
00133         KPrinterImpl::broadcastOption("media",pagename);
00134     }
00135 }
00136 
00137 //******************************************************************************************************
00138 
00139 static void mapToCupsOptions(const TQMap<TQString,TQString>& opts, TQString& cmd)
00140 {
00141     TQString    optstr;
00142     for (TQMap<TQString,TQString>::ConstIterator it=opts.begin(); it!=opts.end(); ++it)
00143     {
00144         // only encode those options that doesn't start with "kde-" or "app-".
00145         if (!it.key().startsWith("kde-") && !it.key().startsWith("app-") && !it.key().startsWith("_kde"))
00146         {
00147             TQString key = it.key();
00148             if (key.startsWith("KDEPrint-"))
00149                 /* Those are keys added by the "Additional Tags" page. *
00150                  * Strip the prefix to build valid a CUPS option.      */
00151                 key = key.mid(9);
00152             optstr.append(" ").append(key);
00153             if (!it.data().isEmpty())
00154                 optstr.append("=").append(it.data());
00155         }
00156     }
00157     if (!optstr.isEmpty())
00158         cmd.append(" -o ").append( KProcess::quote( optstr ) );
00159 }

kdeprint

Skip menu "kdeprint"
  • Main Page
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

kdeprint

Skip menu "kdeprint"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for kdeprint by doxygen 1.7.6.1
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |