diff options
Diffstat (limited to 'kdeprint/foomatic2loader.cpp')
-rw-r--r-- | kdeprint/foomatic2loader.cpp | 302 |
1 files changed, 0 insertions, 302 deletions
diff --git a/kdeprint/foomatic2loader.cpp b/kdeprint/foomatic2loader.cpp deleted file mode 100644 index 6add13378..000000000 --- a/kdeprint/foomatic2loader.cpp +++ /dev/null @@ -1,302 +0,0 @@ -/* - * This file is part of the KDE libraries - * Copyright (c) 2001-2003 Michael Goffioul <tdeprint@swing.be> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License version 2 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public License - * along with this library; see the file COPYING.LIB. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - * Boston, MA 02110-1301, USA. - **/ - -#include "foomatic2loader.h" -#include "driver.h" - -#include <tqfile.h> -#include <tqregexp.h> -#include <tqbuffer.h> -#include <kdebug.h> -#include <klocale.h> - -void tdeprint_foomatic2scanner_init( TQIODevice* ); -void tdeprint_foomatic2scanner_terminate(); - -Foomatic2Loader::Foomatic2Loader() -{ -} - -Foomatic2Loader::~Foomatic2Loader() -{ -} - -bool Foomatic2Loader::read( TQIODevice *d ) -{ - bool result = true; - m_foodata.clear(); - tdeprint_foomatic2scanner_init( d ); - if ( tdeprint_foomatic2parse( this ) != 0 ) - result = false; - tdeprint_foomatic2scanner_terminate(); - return result; -} - -bool Foomatic2Loader::readFromFile( const TQString& filename ) -{ - TQFile f( filename ); - m_foodata.clear(); - if ( f.open( IO_ReadOnly ) ) - return read( TQT_TQIODEVICE(&f) ); - return false; -} - -bool Foomatic2Loader::readFromBuffer( const TQString& buffer ) -{ - TQCString buf = buffer.utf8(); - TQBuffer d( buf ); - m_foodata.clear(); - if ( d.open( IO_ReadOnly ) ) - return read( TQT_TQIODEVICE(&d) ); - return false; -} - -DrBase* Foomatic2Loader::createValue( const TQString& name, const TQMap<TQString,TQVariant>& m ) const -{ - DrBase *choice = new DrBase; - choice->setName( name ); - choice->set( "text", m.operator[]( "comment" ).toString() ); - return choice; -} - -DrBase* Foomatic2Loader::createOption( const TQMap<TQString,TQVariant>& m ) const -{ - TQString type = m.operator[]( "type" ).toString(); - DrBase *opt = NULL; - if ( type == "enum" ) - { - DrListOption *lopt = new DrListOption; - TQVariant a = m.operator[]( "vals_byname" ); - TQMap<TQString,TQVariant>::ConstIterator it = a.mapBegin(); - for ( ; it!=a.mapEnd(); ++it ) - { - if ( it.data().type() != TQVariant::Map ) - continue; - DrBase *ch = createValue( it.key(), it.data().toMap() ); - if ( ch ) - lopt->addChoice( ch ); - } - opt = lopt; - } - else if ( type == "int" || type == "float" ) - { - if ( type == "int" ) - opt = new DrIntegerOption; - else - opt = new DrFloatOption; - opt->set( "minval", m.operator[]( "min" ).toString() ); - opt->set( "maxval", m.operator[]( "max" ).toString() ); - } - else if ( type == "bool" ) - { - DrBooleanOption *bopt = new DrBooleanOption; - DrBase *choice; - // choice 1 - choice = new DrBase; - choice->setName( "0" ); - choice->set( "text", m.operator[]( "name_false" ).toString() ); - bopt->addChoice( choice ); - choice = new DrBase; - choice->setName( "1" ); - choice->set( "text", m.operator[]( "name_true" ).toString() ); - bopt->addChoice( choice ); - opt = bopt; - } - else if ( type == "string" ) - { - opt = new DrStringOption; - } - if ( opt ) - { - opt->setName( m.operator[]( "name" ).toString() ); - opt->set( "text", m.operator[]( "comment" ).toString() ); - TQString defval = m.operator[]( "default" ).toString(); - if ( !defval.isEmpty() ) - { - opt->setValueText( defval ); - opt->set( "default", defval ); - } - } - return opt; -} - -DrMain* Foomatic2Loader::buildDriver() const -{ - if ( m_foodata.isEmpty() ) - return NULL; - - TQVariant v = m_foodata.find( "VAR" ).data(); - if ( !v.isNull() && v.type() == TQVariant::Map ) - { - DrMain *driver = new DrMain; - TQMap<TQString,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", TQString( "%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() == TQVariant::List ) - { - TQValueList<TQVariant>::ConstIterator it = v.listBegin(); - for ( ; it!=v.listEnd(); ++it ) - { - if ( ( *it ).type() != TQVariant::Map ) - continue; - DrBase *opt = createOption( ( *it ).toMap() ); - if ( opt ) - { - TQString 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 - TQVariant choices = ( *it ).mapFind( "vals_byname" ).data(); - TQRegExp re( "(\\d+) +(\\d+)" ); - if ( choices.type() == TQVariant::Map ) - { - TQMap<TQString,TQVariant>::ConstIterator it = choices.mapBegin(); - for ( ; it!=choices.mapEnd(); ++it ) - { - TQString 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; -} - -DrMain* Foomatic2Loader::modifyDriver( DrMain *driver ) const -{ - if ( !m_foodata.isEmpty() ) - { - TQValueList<DrBase*> optList; - DrGroup *grp = NULL; - - TQVariant V = m_foodata.find( "VAR" ).data(); - if ( !V.isNull() && V.type() == TQVariant::Map ) - { - TQVariant v = V.mapFind( "args" ).data(); - if ( !v.isNull() && v.type() == TQVariant::List ) - { - TQValueList<TQVariant>::ConstIterator it = v.listBegin(); - for ( ; it!=v.listEnd(); ++it ) - { - if ( ( *it ).type() != TQVariant::Map ) - continue; - DrBase *opt = createOption( ( *it ).toMap() ); - if ( opt ) - optList.append( opt ); - else - kdWarning( 500 ) << "Failed to create option: " << ( *it ).toMap()[ "name" ].toString() << endl; - } - } - else - { - v = V.mapFind( "args_byname" ).data(); - if ( !v.isNull() && v.type() == TQVariant::Map ) - { - TQMap<TQString,TQVariant>::ConstIterator it = v.mapBegin(); - for ( ; it!=v.mapEnd(); ++it ) - { - if ( ( *it ).type() != TQVariant::Map ) - continue; - DrBase *opt = createOption( ( *it ).toMap() ); - if ( opt ) - optList.append( opt ); - else - kdWarning( 500 ) << "Failed to create option: " << ( *it ).toMap()[ "name" ].toString() << endl; - } - } - } - } - - for ( TQValueList<DrBase*>::ConstIterator it=optList.begin(); it!=optList.end(); ++it ) - { - DrBase *opt = ( *it ); - if ( opt ) - { - switch ( opt->type() ) - { - case DrBase::List: - case DrBase::Boolean: - delete opt; - break; - default: - { - if ( !grp ) - { - grp = new DrGroup; - grp->set( "text", i18n( "Adjustments" ) ); - driver->addGroup( grp ); - } - DrBase *oldOpt = driver->findOption( opt->name() ); - if ( oldOpt && oldOpt->type() == DrBase::List ) - { - TQPtrListIterator<DrBase> it( *( static_cast<DrListOption*>( oldOpt )->choices() ) ); - TQString fixedvals; - for ( ; it.current(); ++it ) - { - fixedvals.append( it.current()->name() ); - if ( !it.atLast() ) - fixedvals.append( "|" ); - } - opt->set( "fixedvals", fixedvals ); - } - driver->removeOptionGlobally( opt->name() ); - grp->addOption( opt ); - break; - } - } - } - } - } - return driver; -} - -DrMain* Foomatic2Loader::loadDriver( const TQString& filename ) -{ - Foomatic2Loader loader; - if ( loader.readFromFile( filename ) ) - return loader.buildDriver(); - else - return NULL; -} |