20 #include "kmmanager.h"
21 #include "kmprinter.h"
22 #include "kmdbentry.h"
23 #include "kmfactory.h"
24 #include "kmvirtualmanager.h"
25 #include "kmspecialmanager.h"
26 #include "printerfilter.h"
31 #include <kstandarddirs.h>
32 #include <tdeconfig.h>
33 #include <tdelocale.h>
35 #include <tdeapplication.h>
36 #include <klibloader.h>
39 KMManager::KMManager(TQObject *parent,
const char *name)
40 : TQObject(parent,name)
42 m_printers.setAutoDelete(
true);
43 m_fprinters.setAutoDelete(
false);
44 m_hasmanagement =
false;
45 m_printeroperationmask = 0;
46 m_serveroperationmask = 0;
47 m_printerfilter =
new PrinterFilter(
this);
49 m_specialmgr =
new KMSpecialManager(
this);
50 TQ_CHECK_PTR(m_specialmgr);
51 m_virtualmgr =
new KMVirtualManager(
this);
52 TQ_CHECK_PTR(m_virtualmgr);
56 m_updatepossible =
true;
59 KMManager::~KMManager()
63 KMManager* KMManager::self()
65 return KMFactory::self()->manager();
68 bool KMManager::notImplemented()
70 setErrorMsg(i18n(
"This operation is not implemented."));
74 bool KMManager::modifyPrinter(KMPrinter *oldp, KMPrinter *newp)
76 if (oldp->printerName() != newp->printerName())
81 DrMain *driver = loadPrinterDriver(oldp,
true);
82 newp->setDriver(driver);
83 if (!removePrinter(oldp))
86 return createPrinter(newp);
89 bool KMManager::createPrinter(KMPrinter*)
91 return notImplemented();
94 bool KMManager::removePrinter(KMPrinter*)
96 return notImplemented();
99 bool KMManager::removePrinter(
const TQString& name)
101 KMPrinter *p = findPrinter(name);
102 return (p ? removePrinter(p) :
false);
105 bool KMManager::enablePrinter(KMPrinter*,
bool)
107 return notImplemented();
110 bool KMManager::enablePrinter(
const TQString& name,
bool state)
112 KMPrinter *p = findPrinter(name);
113 return (p ? enablePrinter(p, state) :
false);
116 bool KMManager::startPrinter(KMPrinter*,
bool)
118 return notImplemented();
121 bool KMManager::startPrinter(
const TQString& name,
bool state)
123 KMPrinter *p = findPrinter(name);
124 return (p ? startPrinter(p, state) :
false);
127 bool KMManager::upPrinter(KMPrinter *p,
bool state)
129 bool result = enablePrinter(p, state);
131 result = startPrinter(p, state);
135 bool KMManager::completePrinter(KMPrinter*)
141 bool KMManager::completePrinterShort(KMPrinter *p)
143 return completePrinter(p);
146 bool KMManager::completePrinter(
const TQString& name)
148 KMPrinter *p = findPrinter(name);
149 return (p ? completePrinter(p) :
false);
152 bool KMManager::setDefaultPrinter(KMPrinter*)
154 return notImplemented();
157 bool KMManager::setDefaultPrinter(
const TQString& name)
159 KMPrinter *p = findPrinter(name);
160 return (p ? setDefaultPrinter(p) :
false);
163 bool KMManager::testPrinter(KMPrinter *prt)
166 TQString testpage = testPage();
167 if (testpage.isEmpty())
169 setErrorMsg(i18n(
"Unable to locate test page."));
173 bool prExist = (findPrinter(prt->printerName()) != 0), result(
false);
181 m_printers.append(prt);
182 result = pr.
printFiles(testpage,
false,
false);
184 m_printers.take(m_printers.count()-1);
189 KMPrinter* KMManager::findPrinter(
const TQString& name)
191 TQPtrListIterator<KMPrinter> it(m_printers);
192 for (;it.current();++it)
193 if (it.current()->name() == name)
return it.current();
198 KMPrinter* KMManager::softDefault()
const
200 TQPtrListIterator<KMPrinter> it(m_printers);
201 for (;it.current();++it)
202 if (it.current()->isSoftDefault())
return it.current();
206 KMPrinter* KMManager::hardDefault()
const
208 TQPtrListIterator<KMPrinter> it(m_printers);
209 for (; it.current();++it)
210 if (it.current()->isHardDefault())
215 KMPrinter* KMManager::defaultPrinter()
218 KMPrinter *prt = softDefault();
224 TQPtrList<KMPrinter>* KMManager::printerList(
bool reload)
226 setErrorMsg(TQString::null);
229 if (reload || m_printers.count() == 0)
232 m_printerfilter->update();
236 discardAllPrinters(
true);
240 if (m_printers.count() == 0)
241 m_virtualmgr->reset();
244 if ( m_updatepossible )
248 m_specialmgr->refresh();
250 if ( m_updatepossible )
251 m_virtualmgr->refresh();
254 for (uint i=0; i<m_printers.count(); i++)
256 KMPrinter *prt = m_printers.at(i);
257 if (prt->isDiscarded())
259 m_printers.remove(i);
262 else if (prt->isSpecial() || m_printerfilter->filter(prt))
263 m_fprinters.append(prt);
271 KMPrinter *defprinter = findPrinter(TQString::fromLatin1(getenv(
"PRINTER")));
273 setSoftDefault(defprinter);
280 TQPtrList<KMPrinter>* KMManager::printerListComplete(
bool reload)
286 void KMManager::listPrinters()
291 void KMManager::addPrinter(KMPrinter *p)
295 if (p->name().isEmpty())
300 KMPrinter *other = findPrinter(p->name());
308 p->setDiscarded(
false);
309 m_printers.inSort(p);
315 TQString KMManager::driverDbCreationProgram()
317 return TQString::null;
320 TQString KMManager::driverDirectory()
322 return TQString::null;
325 DrMain* KMManager::loadPrinterDriver(KMPrinter*,
bool)
330 DrMain* KMManager::loadDbDriver(KMDBEntry *entry)
332 return loadFileDriver(entry->file);
335 DrMain* KMManager::loadFileDriver(
const TQString&)
340 DrMain* KMManager::loadDriver(KMPrinter *p,
bool config)
343 return m_specialmgr->loadDriver(p);
345 return loadPrinterDriver(p, config);
348 bool KMManager::savePrinterDriver(KMPrinter*,DrMain*)
350 return notImplemented();
353 bool KMManager::uncompressFile(
const TQString& filename, TQString& destname)
357 destname = TQString::null;
358 if (f.exists() && f.open(IO_ReadOnly))
360 char buf[1024] = {0};
362 if ((uchar)(buf[0]) == 037 && (uchar)(buf[1]) == 0213)
365 destname = locateLocal(
"tmp",
"tdeprint_") + TDEApplication::randomString(8);
368 if (f.open(IO_WriteOnly))
370 gzFile in = gzopen(filename.latin1(),
"r");
372 while ((n=gzread(in,buf,1024)) > 0)
373 if (f.writeBlock(buf,n) != n)
375 if (n != 0) result =
false;
384 void KMManager::setHardDefault(KMPrinter *p)
386 TQPtrListIterator<KMPrinter> it(m_printers);
387 for (;it.current();++it)
388 it.current()->setHardDefault(
false);
389 if (p) p->setHardDefault(
true);
392 void KMManager::setSoftDefault(KMPrinter *p)
394 TQPtrListIterator<KMPrinter> it(m_printers);
395 for (;it.current();++it)
397 it.current()->setSoftDefault(
false);
398 it.current()->setOwnSoftDefault(
false);
402 p->setSoftDefault(
true);
403 KMPrinter *pp = findPrinter(p->printerName());
405 pp->setOwnSoftDefault(
true);
409 bool KMManager::restartServer()
411 return notImplemented();
414 bool KMManager::configureServer(TQWidget*)
416 return notImplemented();
419 TQString KMManager::testPage()
421 TDEConfig *conf = KMFactory::self()->printConfig();
422 conf->setGroup(
"General");
423 QString tpage = conf->readPathEntry(
"TestPage");
425 tpage = locate(
"data",
"tdeprint/testprint.ps");
429 void KMManager::discardAllPrinters(
bool on)
431 TQPtrListIterator<KMPrinter> it(m_printers);
432 for (;it.current();++it)
433 if (!on || !it.current()->isSpecial())
434 it.current()->setDiscarded(on);
437 bool KMManager::validateDbDriver(KMDBEntry*)
442 bool KMManager::createSpecialPrinter(KMPrinter *p)
444 if (p && p->isSpecial())
446 KMPrinter *old = findPrinter(p->name());
447 if (old && !old->isSpecial())
449 setErrorMsg(i18n(
"Can't overwrite regular printer with special printer settings."));
454 return m_specialmgr->savePrinters();
459 bool KMManager::removeSpecialPrinter(KMPrinter *p)
461 if (p && p->isSpecial() && m_printers.findRef(p) != -1)
463 m_printers.removeRef(p);
464 return m_specialmgr->savePrinters();
474 TQStringList KMManager::detectLocalPrinters()
477 for (
int i=0; i<3; i++)
478 list << TQString() << TQString::fromLatin1(
"parallel:/dev/lp%1").arg(i) << i18n(
"Parallel Port #%1").arg(i+1) << TQString();
482 int KMManager::addPrinterWizard(TQWidget *parent)
484 KLibrary *lib = KLibLoader::self()->library(
"libtdeprint_management_module");
486 setErrorMsg(i18n(
"Unable to load TDE print management library: %1").arg(KLibLoader::self()->lastErrorMessage()));
489 int (*func)(TQWidget*) = (
int(*)(TQWidget*))lib->symbol(
"add_printer_wizard");
491 setErrorMsg(i18n(
"Unable to find wizard object in management library."));
498 bool KMManager::invokeOptionsDialog(TQWidget *parent)
500 KLibrary *lib = KLibLoader::self()->library(
"libtdeprint_management_module");
502 setErrorMsg(i18n(
"Unable to load TDE print management library: %1").arg(KLibLoader::self()->lastErrorMessage()));
505 bool (*func)(TQWidget*) = (
bool(*)(TQWidget*))lib->symbol(
"config_dialog");
507 setErrorMsg(i18n(
"Unable to find options dialog in management library."));
514 void KMManager::createPluginActions(TDEActionCollection*)
518 void KMManager::validatePluginActions(TDEActionCollection*, KMPrinter*)
522 void KMManager::enableFilter(
bool on)
524 m_printerfilter->setEnabled(on);
527 bool KMManager::isFilterEnabled()
const
529 return m_printerfilter->isEnabled();
532 TQString KMManager::stateInformation()
534 return i18n(
"No plugin information available");
537 void KMManager::checkUpdatePossible()
539 m_updatepossible =
false;
540 checkUpdatePossibleInternal();
543 void KMManager::checkUpdatePossibleInternal()
545 setUpdatePossible(
true );
548 void KMManager::setUpdatePossible(
bool value )
550 if ( value != m_updatepossible )
551 m_virtualmgr->reset();
552 m_updatepossible = value;
553 emit updatePossible( m_updatepossible );
556 #include "kmmanager.moc"