DrMain *PrinttoolEntry::createDriver() { // create driver DrMain *dr = new DrMain(); dr->setName(m_name); dr->set("description", m_description); dr->set("text", m_description); dr->set("drtype", "printtool"); DrGroup *gr(0); DrListOption *lopt(0); DrStringOption *sopt(0); DrBooleanOption *bopt(0); DrBase *ch(0); if(m_gsdriver != "TEXT") { // create GS group gr = new DrGroup(); gr->set("text", i18n("GhostScript settings")); dr->addGroup(gr); // Pseudo option to have access to GS driver lopt = new DrListOption(); lopt->setName("GSDEVICE"); lopt->set("text", i18n("Driver")); lopt->set("default", m_gsdriver); gr->addOption(lopt); ch = new DrBase(); ch->setName(m_gsdriver); ch->set("text", m_gsdriver); lopt->addChoice(ch); lopt->setValueText(m_gsdriver); // Resolutions if(m_resolutions.count() > 0) { lopt = new DrListOption(); lopt->setName("RESOLUTION"); lopt->set("text", i18n("Resolution")); gr->addOption(lopt); QPtrListIterator< Resolution > it(m_resolutions); for(int i = 0; it.current(); ++it, i++) { ch = new DrBase; ch->setName(QString::fromLatin1("%1x%2").arg(it.current()->xdpi).arg(it.current()->ydpi)); if(it.current()->comment.isEmpty()) ch->set("text", QString::fromLatin1("%1x%2 DPI").arg(it.current()->xdpi).arg(it.current()->ydpi)); else ch->set("text", QString::fromLatin1("%2x%3 DPI (%1)").arg(it.current()->comment).arg(it.current()->xdpi).arg(it.current()->ydpi)); lopt->addChoice(ch); } QString defval = lopt->choices()->first()->name(); lopt->set("default", defval); lopt->setValueText(defval); } // BitsPerPixels if(m_depths.count() > 0) { lopt = new DrListOption(); lopt->setName("COLOR"); lopt->set("text", i18n("Color depth")); gr->addOption(lopt); QPtrListIterator< BitsPerPixel > it(m_depths); for(int i = 0; it.current(); ++it, i++) { ch = new DrBase; if(m_gsdriver != "uniprint") ch->setName(QString::fromLatin1("-dBitsPerPixel=%1").arg(it.current()->bpp)); else ch->setName(it.current()->bpp); if(it.current()->comment.isEmpty()) ch->set("text", it.current()->bpp); else ch->set("text", QString::fromLatin1("%1 - %2").arg(it.current()->bpp).arg(it.current()->comment)); lopt->addChoice(ch); } QString defval = lopt->choices()->first()->name(); lopt->set("default", defval); lopt->setValueText(defval); } // additional GS options sopt = new DrStringOption; sopt->setName("EXTRA_GS_OPTIONS"); sopt->set("text", i18n("Additional GS options")); gr->addOption(sopt); } // General group gr = new DrGroup(); gr->set("text", i18n("General")); dr->addGroup(gr); // Page size lopt = new DrListOption(); lopt->setName("PAPERSIZE"); lopt->set("text", i18n("Page size")); lopt->set("default", "letter"); gr->addOption(lopt); int i(0); while(pt_pagesize[i]) { ch = new DrBase(); ch->setName(pt_pagesize[i++]); ch->set("text", i18n(pt_pagesize[i++])); lopt->addChoice(ch); } lopt->setValueText("letter"); // Nup lopt = new DrListOption(); lopt->setName("NUP"); lopt->set("text", i18n("Pages per sheet")); lopt->set("default", "1"); gr->addOption(lopt); i = 0; while(pt_nup[i] != -1) { ch = new DrBase(); ch->setName(QString::number(pt_nup[i++])); ch->set("text", ch->name()); lopt->addChoice(ch); } lopt->setValueText("1"); // Margins sopt = new DrStringOption(); sopt->setName("RTLFTMAR"); sopt->set("text", i18n("Left/right margin (1/72 in)")); sopt->setValueText("18"); gr->addOption(sopt); sopt = new DrStringOption(); sopt->setName("TOPBOTMAR"); sopt->set("text", i18n("Top/bottom margin (1/72 in)")); sopt->setValueText("18"); gr->addOption(sopt); // Text group gr = new DrGroup(); gr->set("text", i18n("Text options")); dr->addGroup(gr); // Send EOF bopt = new DrBooleanOption(); bopt->setName("TEXT_SEND_EOF"); bopt->set("text", i18n("Send EOF after job to eject page")); gr->addOption(bopt); setupBooleanOption(bopt); bopt->setValueText("NO"); // Fix stair-stepping bopt = new DrBooleanOption(); bopt->setName("CRLFTRANS"); bopt->set("text", i18n("Fix stair-stepping text")); gr->addOption(bopt); setupBooleanOption(bopt); bopt->choices()->first()->setName("1"); bopt->choices()->last()->setName("0"); bopt->setValueText("0"); if(m_gsdriver != "POSTSCRIPT") { // Fast text printing bopt = new DrBooleanOption(); bopt->setName("ASCII_TO_PS"); bopt->set("text", i18n("Fast text printing (non-PS printers only)")); gr->addOption(bopt); setupBooleanOption(bopt); bopt->choices()->first()->setName("NO"); bopt->choices()->last()->setName("YES"); bopt->setValueText("NO"); } return dr; }
DrMain* Foomatic2Loader::buildDriver() const { if ( m_foodata.isEmpty() ) return NULL; QVariant v = m_foodata.find( "VAR" ).data(); if ( !v.isNull() && v.type() == QVariant::Map ) { DrMain *driver = new DrMain; QMap<QString,DrGroup*> groups; driver->set( "manufacturer", v.mapFind( "make" ).data().toString() ); driver->set( "model", v.mapFind( "model" ).data().toString() ); driver->set( "matic_printer", v.mapFind( "id" ).data().toString() ); driver->set( "matic_driver", v.mapFind( "driver" ).data().toString() ); driver->set( "text", QString( "%1 %2 (%3)" ).arg( driver->get( "manufacturer" ) ).arg( driver->get( "model" ) ).arg( driver->get( "matic_driver" ) ) ); if ( m_foodata.contains( "POSTPIPE" ) ) driver->set( "postpipe", m_foodata.find( "POSTPIPE" ).data().toString() ); v = v.mapFind( "args" ).data(); if ( !v.isNull() && v.type() == QVariant::List ) { QValueList<QVariant>::ConstIterator it = v.listBegin(); for ( ; it!=v.listEnd(); ++it ) { if ( ( *it ).type() != QVariant::Map ) continue; DrBase *opt = createOption( ( *it ).toMap() ); if ( opt ) { QString group = DrGroup::groupForOption( opt->name() ); DrGroup *grp = NULL; if ( !groups.contains( group ) ) { grp = new DrGroup; grp->set( "text", group ); driver->addGroup( grp ); groups.insert( group, grp ); } else grp = groups[ group ]; grp->addOption( opt ); if ( opt->name() == "PageSize" ) { // try to add the corresponding page sizes QVariant choices = ( *it ).mapFind( "vals_byname" ).data(); QRegExp re( "(\\d+) +(\\d+)" ); if ( choices.type() == QVariant::Map ) { QMap<QString,QVariant>::ConstIterator it = choices.mapBegin(); for ( ; it!=choices.mapEnd(); ++it ) { QString driverval = ( *it ).mapFind( "driverval" ).data().toString(); if ( re.exactMatch( driverval ) ) { driver->addPageSize( new DrPageSize( it.key(), re.cap( 1 ).toInt(), re.cap( 2 ).toInt(), 36, 24, 36, 24 ) ); } } } } } else kdWarning( 500 ) << "Failed to create option: " << ( *it ).toMap()[ "name" ].toString() << endl; } } return driver; } return NULL; }