// "/etc/printcap" file parsing (Linux/LPR) void KMLpdUnixManager::parseEtcPrintcap() { QFile f(getPrintcapFileName()); if (f.exists() && f.open(IO_ReadOnly)) { KTextBuffer t(&f); QMap<QString,QString> entry; while (!t.eof()) { entry = readEntry(t); if (entry.isEmpty() || !entry.contains("printer-name") || entry.contains("server")) continue; if (entry["printer-name"] == "all") { if (entry.contains("all")) { // find separator int p = entry["all"].find(QRegExp("[^a-zA-Z0-9_\\s-]")); if (p != -1) { QChar c = entry["all"][p]; QStringList prs = QStringList::split(c,entry["all"],false); for (QStringList::ConstIterator it=prs.begin(); it!=prs.end(); ++it) { KMPrinter *printer = ::createPrinter(*it); printer->setDescription(i18n("Description unavailable")); addPrinter(printer); } } } } else { KMPrinter *printer = ::createPrinter(entry); if (entry.contains("rm")) printer->setDescription(i18n("Remote printer queue on %1").arg(entry["rm"])); else printer->setDescription(i18n("Local printer")); addPrinter(printer); } } } }
// Private Methods void QDicomPrinterConfigurationWidget::createConnections() { connect(m_addPrinterPushButton, SIGNAL(clicked()), SLOT(addPrinter())); connect(m_applySettingsPushButton, SIGNAL(clicked()), SLOT(modifyPrinter())); connect(m_acceptSettingsPushButton, SIGNAL(clicked()), SLOT(accept())); connect(m_cancelSettingsPushButton, SIGNAL(clicked()), SLOT(cancel())); connect(m_deletePrinterPushButton, SIGNAL(clicked()), SLOT(deletePrinter())); connect(m_testPrinterPushButton, SIGNAL(clicked()), SLOT(testPrinter())); connect(m_listPrintersTreeWidget, SIGNAL(itemSelectionChanged()), SLOT(printerSelectionChanged())); connect(m_addPrinterWidget, SIGNAL(newPrinterAddedSignal(int)), SLOT(showNewPrinterAdded(int))); connect(m_magnifactionTypeComboBox, SIGNAL(currentIndexChanged (const QString)), SLOT(m_magnitifacationTypeComboBoxIndexChanged(const QString))); connect(m_supportsAnnotationBoxYesRadioButton, SIGNAL(toggled(bool)), SLOT(m_supportsAnnotationBoxYesRadioButtonToogled())); }
void KMLpdManager::listPrinters() { m_entries.clear(); loadPrintcapFile(QString::fromLatin1("%1/etc/printcap").arg(lpdprefix)); QDictIterator<PrintcapEntry> it(m_entries); for (;it.current();++it) { KMPrinter *printer = it.current()->createPrinter(); addPrinter(printer); } checkStatus(); }
// "/etc/lp/member/" directory parsing (HP-UX) void KMLpdUnixManager::parseEtcLpMember() { QDir d("/etc/lp/member"); const QFileInfoList *prlist = d.entryInfoList(QDir::Files); if (!prlist) return; QFileInfoListIterator it(*prlist); for (;it.current();++it) { KMPrinter *printer = new KMPrinter; printer->setName(it.current()->fileName()); printer->setPrinterName(it.current()->fileName()); printer->setType(KMPrinter::Printer); printer->setState(KMPrinter::Idle); printer->setDescription(i18n("Local printer")); addPrinter(printer); } }
// "/etc/lp/printers/" directory parsing (Solaris non-2.6) void KMLpdUnixManager::parseEtcLpPrinters() { QDir d("/etc/lp/printers"); const QFileInfoList *prlist = d.entryInfoList(QDir::Dirs); if (!prlist) return; QFileInfoListIterator it(*prlist); for (;it.current();++it) { if (it.current()->fileName() == "." || it.current()->fileName() == "..") continue; QFile f(it.current()->absFilePath() + "/configuration"); if (f.exists() && f.open(IO_ReadOnly)) { KTextBuffer t(&f); QString line, remote; while (!t.eof()) { line = readLine(t); if (line.isEmpty()) continue; if (line.startsWith("Remote:")) { QStringList l = QStringList::split(':',line,false); if (l.count() > 1) remote = l[1]; } } KMPrinter *printer = new KMPrinter; printer->setName(it.current()->fileName()); printer->setPrinterName(it.current()->fileName()); printer->setType(KMPrinter::Printer); printer->setState(KMPrinter::Idle); if (!remote.isEmpty()) printer->setDescription(i18n("Remote printer queue on %1").arg(remote)); else printer->setDescription(i18n("Local printer")); addPrinter(printer); } } }
// "/usr/spool/lp/interfaces/" directory parsing (IRIX 6.x) void KMLpdUnixManager::parseSpoolInterface() { QDir d("/usr/spool/interfaces/lp"); const QFileInfoList *prlist = d.entryInfoList(QDir::Files); if (!prlist) return; QFileInfoListIterator it(*prlist); for (;it.current();++it) { QFile f(it.current()->absFilePath()); if (f.exists() && f.open(IO_ReadOnly)) { KTextBuffer t(&f); QString line, remote; while (!t.eof()) { line = t.readLine().stripWhiteSpace(); if (line.startsWith("HOSTNAME")) { QStringList l = QStringList::split('=',line,false); if (l.count() > 1) remote = l[1]; } } KMPrinter *printer = new KMPrinter; printer->setName(it.current()->fileName()); printer->setPrinterName(it.current()->fileName()); printer->setType(KMPrinter::Printer); printer->setState(KMPrinter::Idle); if (!remote.isEmpty()) printer->setDescription(i18n("Remote printer queue on %1").arg(remote)); else printer->setDescription(i18n("Local printer")); addPrinter(printer); } } }
// "/etc/printers.conf" file parsing (Solaris 2.6) void KMLpdUnixManager::parseEtcPrintersConf() { QFile f(getEtcPrintersConfName()); if (f.exists() && f.open(IO_ReadOnly)) { KTextBuffer t(&f); QMap<QString,QString> entry; QString default_printer; while (!t.eof()) { entry = readEntry(t); if (entry.isEmpty() || !entry.contains("printer-name")) continue; QString prname = entry["printer-name"]; if (prname == "_default") { if (entry.contains("use")) default_printer = entry["use"]; } else if (prname != "_all") { KMPrinter *printer = ::createPrinter(entry); if (entry.contains("bsdaddr")) { QStringList l = QStringList::split(',',entry["bsdaddr"],false); printer->setDescription(i18n("Remote printer queue on %1").arg(l[0])); } else printer->setDescription(i18n("Local printer")); addPrinter(printer); } } if (!default_printer.isEmpty()) setSoftDefault(findPrinter(default_printer)); } }
void KMFoomaticManager::listPrinters() { KPipeProcess proc("foomatic-configure -Q -q -r"); QDomDocument doc; doc.setContent(&proc); QDomElement docElem = doc.documentElement(); if(docElem.isNull() || docElem.tagName() != "queues") return; QDomNode queueNode = docElem.firstChild(); while(!queueNode.isNull()) { QDomElement queueElem = queueNode.toElement(); if(!queueElem.isNull() && queueElem.tagName() == "queue") { KMPrinter *printer = createPrinterFromElement(&queueElem); if(printer) addPrinter(printer); } queueNode = queueNode.nextSibling(); } }