Exemple #1
0
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;
}
Exemple #2
0
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;
}