kmprinter.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kmprinter.h"
00021 #include "kprinter.h"
00022 #include "driver.h"
00023
00024 #include <klocale.h>
00025 #include <kfiledialog.h>
00026
00027 KMPrinter::KMPrinter()
00028 : KMObject()
00029 {
00030 m_type = KMPrinter::Printer;
00031 m_dbentry = 0;
00032 m_harddefault = m_softdefault = m_ownsoftdefault = false;
00033 m_driver = 0;
00034 m_isedited = false;
00035 m_printercap = 0;
00036 }
00037
00038 KMPrinter::KMPrinter(const KMPrinter& p)
00039 : KMObject()
00040 {
00041 m_driver = 0;
00042 m_harddefault = m_softdefault = m_ownsoftdefault = false;
00043 m_isedited = false;
00044 copy(p);
00045 }
00046
00047 KMPrinter::~KMPrinter()
00048 {
00049 delete m_driver;
00050 }
00051
00052 void KMPrinter::copy(const KMPrinter& p)
00053 {
00054 m_name = p.m_name;
00055 m_printername = p.m_printername;
00056 m_instancename = p.m_instancename;
00057 m_type = p.m_type;
00058 m_state = p.m_state;
00059 m_device = p.m_device;
00060 m_members = p.m_members;
00061 m_description = p.m_description;
00062 m_location = p.m_location;
00063 m_manufacturer = p.m_manufacturer;
00064 m_model = p.m_model;
00065 m_uri = p.m_uri;
00066 m_driverinfo = p.m_driverinfo;
00067 m_dbentry = p.m_dbentry;
00068 m_pixmap = p.m_pixmap;
00069
00070
00071 m_options = p.m_options;
00072 m_printercap = p.m_printercap;
00073 setDiscarded(false);
00074 }
00075
00076 void KMPrinter::setDriver(DrMain *driver)
00077 {
00078 delete m_driver;
00079 m_driver = driver;
00080 }
00081
00082 DrMain* KMPrinter::takeDriver()
00083 {
00084 DrMain *dr = m_driver;
00085 m_driver = 0;
00086 return dr;
00087 }
00088
00089 QString KMPrinter::pixmap()
00090 {
00091 if (!m_pixmap.isEmpty()) return m_pixmap;
00092
00093 QString str("kdeprint_printer");
00094 if (!isValid()) str.append("_defect");
00095 else
00096 {
00097
00098 if (isClass(true)) str.append("_class");
00099 else if (isRemote()) str.append("_remote");
00100 switch (state())
00101 {
00102 case KMPrinter::Stopped:
00103 str.append("_stopped");
00104 break;
00105 case KMPrinter::Processing:
00106 str.append("_process");
00107 break;
00108 default:
00109 break;
00110 }
00111 }
00112 return str;
00113 }
00114
00115 int KMPrinter::compare(KMPrinter *p1, KMPrinter *p2)
00116 {
00117 if (p1 && p2)
00118 {
00119 bool s1(p1->isSpecial()), s2(p2->isSpecial());
00120 if (s1 && s2) return QString::compare(p1->name(),p2->name());
00121 else if (s1) return 1;
00122 else if (s2) return -1;
00123 else
00124 {
00125 bool c1(p1->isClass(false)), c2(p2->isClass(false));
00126 if (c1 == c2) return QString::compare(p1->name(),p2->name());
00127 else if (c1 && !c2) return -1;
00128 else if (!c1 && c2) return 1;
00129 }
00130 }
00131 return 0;
00132 }
00133
00134 QString KMPrinter::stateString() const
00135 {
00136 QString s;
00137 switch (state())
00138 {
00139 case KMPrinter::Idle: s = i18n("Idle"); break;
00140 case KMPrinter::Processing: s = i18n("Processing..."); break;
00141 case KMPrinter::Stopped: s = i18n("Stopped"); break;
00142 default: return i18n("Unknown State", "Unknown");
00143 }
00144 s += (" " + (m_state & Rejecting ? i18n("(rejecting jobs)") : i18n("(accepting jobs)")));
00145 return s;
00146 }
00147
00148 bool KMPrinter::autoConfigure(KPrinter *printer, QWidget *parent)
00149 {
00150
00151 printer->setPrinterName(printerName());
00152 printer->setSearchName(name());
00153
00154 printer->setOptions(defaultOptions());
00155
00156
00157
00158 if (isSpecial())
00159 {
00160 if (option("kde-special-file") == "1")
00161 {
00162
00163 QString fName = printer->docFileName(), ext = option( "kde-special-extension" );
00164 if ( fName.isEmpty() )
00165 fName = ( printer->docName() + "." + ext );
00166 else
00167 {
00168 int p = fName.findRev( '.' );
00169 if ( p == -1 )
00170 fName.append( "." ).append( ext );
00171 else
00172 {
00173 fName.truncate( p+1 );
00174 fName.append( ext );
00175 }
00176 }
00177 fName.prepend( "/" ).prepend( printer->docDirectory() );
00178
00179
00180 KFileDialog *dialog = new KFileDialog (fName,
00181 QString::null,
00182 parent,
00183 "filedialog",
00184 true);
00185 dialog->setOperationMode (KFileDialog::Saving);
00186
00187 QString mimetype = option("kde-special-mimetype");
00188
00189 if (!mimetype.isEmpty())
00190 {
00191 QStringList filter;
00192 filter << mimetype;
00193 filter << "all/allfiles";
00194 dialog->setMimeFilter (filter, mimetype);
00195 }
00196 else if (!ext.isEmpty())
00197 dialog->setFilter ("*." + ext + "\n*|" + i18n ("All Files"));
00198
00199 if (dialog->exec ())
00200 {
00201 printer->setOutputToFile(true);
00202 printer->setOutputFileName(dialog->selectedFile ());
00203 }
00204 else
00205 {
00206
00207 return false;
00208 }
00209 }
00210 printer->setOption( "kde-isspecial", "1" );
00211 printer->setOption( "kde-special-command", option( "kde-special-command" ) );
00212 }
00213
00214 return true;
00215 }
00216
00217 QString KMPrinter::deviceProtocol() const
00218 {
00219 int p = m_device.find( ':' );
00220 if ( p != -1 )
00221 return m_device.left( p );
00222 else
00223 return QString::null;
00224 }
|