bool KMSpecialManager::loadDesktopFile(const QString& filename) { KSimpleConfig conf(filename); conf.setGroup("General"); int n = conf.readNumEntry("Number",0); for (int i=0;i<n;i++) { QString grpname = QString::fromLatin1("Printer %1").arg(i); if (!conf.hasGroup(grpname)) continue; conf.setGroup(grpname); KMPrinter *printer = new KMPrinter; printer->setName(conf.readEntry("Name")); printer->setPrinterName(printer->name()); printer->setDescription(conf.readEntry("Description")); printer->setLocation(conf.readEntry("Comment")); printer->setOption("kde-special-command",conf.readPathEntry("Command")); printer->setOption("kde-special-file",conf.readPathEntry("File")); printer->setOption("kde-special-extension",conf.readEntry("Extension")); printer->setOption("kde-special-mimetype",conf.readEntry("Mimetype")); printer->setOption("kde-special-require",conf.readEntry("Require")); printer->setPixmap(conf.readEntry("Icon","unknown")); printer->setType(KMPrinter::Special); if ( !KdeprintChecker::check( &conf ) || !KXmlCommandManager::self()->checkCommand( printer->option( "kde-special-command" ), KXmlCommandManager::None, KXmlCommandManager::None, 0 ) ) printer->addType(KMPrinter::Invalid); printer->setState(KMPrinter::Idle); printer->setAcceptJobs(true); m_mgr->addPrinter(printer); } return true; }
void KMMainView::slotConfigure() { if(m_current) { KMTimer::self()->hold(); bool needRefresh(false); if(m_current->isSpecial()) { KMSpecialPrinterDlg dlg(this); dlg.setPrinter(m_current); if(dlg.exec()) { KMPrinter *prt = dlg.printer(); if(prt->name() != m_current->name()) m_manager->removeSpecialPrinter(m_current); m_manager->createSpecialPrinter(prt); needRefresh = true; } } else { DrMain *driver = m_manager->loadPrinterDriver(m_current, true); if(driver) { KMDriverDialog dlg(this); dlg.setCaption(i18n("Configure %1").arg(m_current->printerName())); dlg.setDriver(driver); // disable OK button for remote printer (read-only dialog) if(m_current->isRemote()) dlg.enableButtonOK(false); if(dlg.exec()) if(!m_manager->savePrinterDriver(m_current, driver)) showErrorMsg(i18n("Unable to modify settings of printer %1.").arg(m_current->printerName())); delete driver; } else showErrorMsg(i18n("Unable to load a valid driver for printer %1.").arg(m_current->printerName())); } KMTimer::self()->release(needRefresh); } }