field.cpp

00001 /*** Warning! This file has been generated by the script makeaddressee ***/
00002 /*
00003     This file is part of libkabc.
00004     Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include <klocale.h>
00023 #include <kconfig.h>
00024 #include <kglobal.h>
00025 
00026 #include "field.h"
00027 #include "address.h"
00028 
00029 using namespace KABC;
00030 
00031 class Field::FieldImpl
00032 {
00033   public:
00034     FieldImpl( int fieldId, int category = 0,
00035                const QString &label = QString::null,
00036                const QString &key = QString::null,
00037                const QString &app = QString::null )
00038       : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
00039         mKey( key ), mApp( app ) {}
00040   
00041     enum FieldId
00042     {
00043       CustomField,
00044       FormattedName,
00045       FamilyName,
00046       GivenName,
00047       AdditionalName,
00048       Prefix,
00049       Suffix,
00050       NickName,
00051       Birthday,
00052       HomeAddressStreet,
00053       HomeAddressLocality,
00054       HomeAddressRegion,
00055       HomeAddressPostalCode,
00056       HomeAddressCountry,
00057       HomeAddressLabel,
00058       BusinessAddressStreet,
00059       BusinessAddressLocality,
00060       BusinessAddressRegion,
00061       BusinessAddressPostalCode,
00062       BusinessAddressCountry,
00063       BusinessAddressLabel,
00064       HomePhone,
00065       BusinessPhone,
00066       MobilePhone,
00067       HomeFax,
00068       BusinessFax,
00069       CarPhone,
00070       Isdn,
00071       Pager,
00072       Email,
00073       Mailer,
00074       Title,
00075       Role,
00076       Organization,
00077       Note,
00078       Url
00079     };
00080 
00081     int fieldId() { return mFieldId; }
00082     int category() { return mCategory; }
00083     
00084     QString label() { return mLabel; }
00085     QString key() { return mKey; }
00086     QString app() { return mApp; }
00087     
00088   private:
00089     int mFieldId;
00090     int mCategory;
00091 
00092     QString mLabel;
00093     QString mKey;
00094     QString mApp;
00095 };
00096 
00097 
00098 Field::List Field::mAllFields;
00099 Field::List Field::mDefaultFields;
00100 Field::List Field::mCustomFields;
00101 
00102 
00103 Field::Field( FieldImpl *impl )
00104 {
00105   mImpl = impl;
00106 }
00107 
00108 Field::~Field()
00109 {
00110   delete mImpl;
00111 }
00112 
00113 QString Field::label()
00114 {
00115   switch ( mImpl->fieldId() ) {
00116     case FieldImpl::FormattedName:
00117       return Addressee::formattedNameLabel();
00118     case FieldImpl::FamilyName:
00119       return Addressee::familyNameLabel();
00120     case FieldImpl::GivenName:
00121       return Addressee::givenNameLabel();
00122     case FieldImpl::AdditionalName:
00123       return Addressee::additionalNameLabel();
00124     case FieldImpl::Prefix:
00125       return Addressee::prefixLabel();
00126     case FieldImpl::Suffix:
00127       return Addressee::suffixLabel();
00128     case FieldImpl::NickName:
00129       return Addressee::nickNameLabel();
00130     case FieldImpl::Birthday:
00131       return Addressee::birthdayLabel();
00132     case FieldImpl::HomeAddressStreet:
00133       return Addressee::homeAddressStreetLabel();
00134     case FieldImpl::HomeAddressLocality:
00135       return Addressee::homeAddressLocalityLabel();
00136     case FieldImpl::HomeAddressRegion:
00137       return Addressee::homeAddressRegionLabel();
00138     case FieldImpl::HomeAddressPostalCode:
00139       return Addressee::homeAddressPostalCodeLabel();
00140     case FieldImpl::HomeAddressCountry:
00141       return Addressee::homeAddressCountryLabel();
00142     case FieldImpl::HomeAddressLabel:
00143       return Addressee::homeAddressLabelLabel();
00144     case FieldImpl::BusinessAddressStreet:
00145       return Addressee::businessAddressStreetLabel();
00146     case FieldImpl::BusinessAddressLocality:
00147       return Addressee::businessAddressLocalityLabel();
00148     case FieldImpl::BusinessAddressRegion:
00149       return Addressee::businessAddressRegionLabel();
00150     case FieldImpl::BusinessAddressPostalCode:
00151       return Addressee::businessAddressPostalCodeLabel();
00152     case FieldImpl::BusinessAddressCountry:
00153       return Addressee::businessAddressCountryLabel();
00154     case FieldImpl::BusinessAddressLabel:
00155       return Addressee::businessAddressLabelLabel();
00156     case FieldImpl::HomePhone:
00157       return Addressee::homePhoneLabel();
00158     case FieldImpl::BusinessPhone:
00159       return Addressee::businessPhoneLabel();
00160     case FieldImpl::MobilePhone:
00161       return Addressee::mobilePhoneLabel();
00162     case FieldImpl::HomeFax:
00163       return Addressee::homeFaxLabel();
00164     case FieldImpl::BusinessFax:
00165       return Addressee::businessFaxLabel();
00166     case FieldImpl::CarPhone:
00167       return Addressee::carPhoneLabel();
00168     case FieldImpl::Isdn:
00169       return Addressee::isdnLabel();
00170     case FieldImpl::Pager:
00171       return Addressee::pagerLabel();
00172     case FieldImpl::Email:
00173       return Addressee::emailLabel();
00174     case FieldImpl::Mailer:
00175       return Addressee::mailerLabel();
00176     case FieldImpl::Title:
00177       return Addressee::titleLabel();
00178     case FieldImpl::Role:
00179       return Addressee::roleLabel();
00180     case FieldImpl::Organization:
00181       return Addressee::organizationLabel();
00182     case FieldImpl::Note:
00183       return Addressee::noteLabel();
00184     case FieldImpl::Url:
00185       return Addressee::urlLabel();
00186     case FieldImpl::CustomField:
00187       return mImpl->label();
00188     default:
00189       return i18n("Unknown Field");
00190   }
00191 }
00192 
00193 int Field::category()
00194 {
00195   return mImpl->category();
00196 }
00197 
00198 QString Field::categoryLabel( int category )
00199 {
00200   switch ( category ) {
00201     case All:
00202       return i18n("All");
00203     case Frequent:
00204       return i18n("Frequent");
00205     case Address:
00206       return i18n("street/postal","Address");
00207     case Email:
00208       return i18n("Email");
00209     case Personal:
00210       return i18n("Personal");
00211     case Organization:
00212       return i18n("Organization");
00213     case CustomCategory:
00214       return i18n("Custom");
00215     default:
00216       return i18n("Undefined");
00217   }
00218 }
00219 
00220 QString Field::value( const KABC::Addressee &a )
00221 {
00222   switch ( mImpl->fieldId() ) {
00223     case FieldImpl::FormattedName:
00224       return a.formattedName();
00225     case FieldImpl::FamilyName:
00226       return a.familyName();
00227     case FieldImpl::GivenName:
00228       return a.givenName();
00229     case FieldImpl::AdditionalName:
00230       return a.additionalName();
00231     case FieldImpl::Prefix:
00232       return a.prefix();
00233     case FieldImpl::Suffix:
00234       return a.suffix();
00235     case FieldImpl::NickName:
00236       return a.nickName();
00237     case FieldImpl::Mailer:
00238       return a.mailer();
00239     case FieldImpl::Title:
00240       return a.title();
00241     case FieldImpl::Role:
00242       return a.role();
00243     case FieldImpl::Organization:
00244       return a.organization();
00245     case FieldImpl::Note:
00246       return a.note();
00247     case FieldImpl::Email:
00248       return a.preferredEmail();
00249     case FieldImpl::Birthday:
00250       if ( a.birthday().isValid() )
00251         return a.birthday().date().toString( Qt::ISODate );
00252       else
00253         return QString::null;
00254     case FieldImpl::Url:
00255       return a.url().prettyURL();
00256     case FieldImpl::HomePhone:
00257     {
00258       PhoneNumber::List::ConstIterator it;
00259 
00260       {
00261         // check for preferred number
00262         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
00263         for ( it = list.begin(); it != list.end(); ++it )
00264           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00265             return (*it).number();
00266       }
00267 
00268       {
00269         // check for normal home number
00270         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home );
00271         for ( it = list.begin(); it != list.end(); ++it )
00272           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00273             return (*it).number();
00274       }
00275 
00276       return QString::null;
00277     }
00278     case FieldImpl::BusinessPhone:
00279     {
00280       PhoneNumber::List::ConstIterator it;
00281 
00282       {
00283         // check for preferred number
00284         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
00285         for ( it = list.begin(); it != list.end(); ++it )
00286           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00287             return (*it).number();
00288       }
00289 
00290       {
00291         // check for normal work number
00292         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work );
00293         for ( it = list.begin(); it != list.end(); ++it )
00294           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00295             return (*it).number();
00296       }
00297 
00298       return QString::null;
00299     }
00300     case FieldImpl::MobilePhone:
00301       return a.phoneNumber( PhoneNumber::Cell ).number();
00302     case FieldImpl::HomeFax:
00303       return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
00304     case FieldImpl::BusinessFax:
00305       return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
00306     case FieldImpl::CarPhone:
00307       return a.phoneNumber( PhoneNumber::Car ).number();
00308     case FieldImpl::Isdn:
00309       return a.phoneNumber( PhoneNumber::Isdn ).number();
00310     case FieldImpl::Pager:
00311       return a.phoneNumber( PhoneNumber::Pager ).number();
00312     case FieldImpl::HomeAddressStreet:
00313       return a.address( Address::Home ).street();
00314     case FieldImpl::HomeAddressLocality:
00315       return a.address( Address::Home ).locality();
00316     case FieldImpl::HomeAddressRegion:
00317       return a.address( Address::Home ).region();
00318     case FieldImpl::HomeAddressPostalCode:
00319       return a.address( Address::Home ).postalCode();
00320     case FieldImpl::HomeAddressCountry:
00321       return a.address( Address::Home ).country();
00322     case FieldImpl::HomeAddressLabel:
00323       return a.address( Address::Home ).label();
00324     case FieldImpl::BusinessAddressStreet:
00325       return a.address( Address::Work ).street();
00326     case FieldImpl::BusinessAddressLocality:
00327       return a.address( Address::Work ).locality();
00328     case FieldImpl::BusinessAddressRegion:
00329       return a.address( Address::Work ).region();
00330     case FieldImpl::BusinessAddressPostalCode:
00331       return a.address( Address::Work ).postalCode();
00332     case FieldImpl::BusinessAddressCountry:
00333       return a.address( Address::Work ).country();
00334     case FieldImpl::BusinessAddressLabel:
00335       return a.address( Address::Work ).label();
00336     case FieldImpl::CustomField:
00337       return a.custom( mImpl->app(), mImpl->key() );
00338     default:
00339       return QString::null;
00340   }
00341 }
00342 
00343 bool Field::setValue( KABC::Addressee &a, const QString &value )
00344 {
00345   switch ( mImpl->fieldId() ) {
00346     case FieldImpl::FormattedName:
00347       a.setFormattedName( value );
00348       return true;
00349     case FieldImpl::FamilyName:
00350       a.setFamilyName( value );
00351       return true;
00352     case FieldImpl::GivenName:
00353       a.setGivenName( value );
00354       return true;
00355     case FieldImpl::AdditionalName:
00356       a.setAdditionalName( value );
00357       return true;
00358     case FieldImpl::Prefix:
00359       a.setPrefix( value );
00360       return true;
00361     case FieldImpl::Suffix:
00362       a.setSuffix( value );
00363       return true;
00364     case FieldImpl::NickName:
00365       a.setNickName( value );
00366       return true;
00367     case FieldImpl::Mailer:
00368       a.setMailer( value );
00369       return true;
00370     case FieldImpl::Title:
00371       a.setTitle( value );
00372       return true;
00373     case FieldImpl::Role:
00374       a.setRole( value );
00375       return true;
00376     case FieldImpl::Organization:
00377       a.setOrganization( value );
00378       return true;
00379     case FieldImpl::Note:
00380       a.setNote( value );
00381       return true;
00382     case FieldImpl::MobilePhone:
00383       {
00384         PhoneNumber number = a.phoneNumber( PhoneNumber::Cell );
00385         number.setNumber( value );
00386         a.insertPhoneNumber( number );
00387         return true;
00388       }
00389     case FieldImpl::HomeFax:
00390       {
00391         PhoneNumber number = a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
00392         number.setNumber( value );
00393         a.insertPhoneNumber( number );
00394         return true;
00395       }
00396     case FieldImpl::BusinessFax:
00397       {
00398         PhoneNumber number = a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
00399         number.setNumber( value );
00400         a.insertPhoneNumber( number );
00401         return true;
00402       }
00403     case FieldImpl::CarPhone:
00404       {
00405         PhoneNumber number = a.phoneNumber( PhoneNumber::Car );
00406         number.setNumber( value );
00407         a.insertPhoneNumber( number );
00408         return true;
00409       }
00410     case FieldImpl::Isdn:
00411       {
00412         PhoneNumber number = a.phoneNumber( PhoneNumber::Isdn );
00413         number.setNumber( value );
00414         a.insertPhoneNumber( number );
00415         return true;
00416       }
00417     case FieldImpl::Pager:
00418       {
00419         PhoneNumber number = a.phoneNumber( PhoneNumber::Pager );
00420         number.setNumber( value );
00421         a.insertPhoneNumber( number );
00422         return true;
00423       }
00424     case FieldImpl::HomeAddressStreet:
00425       {
00426         KABC::Address address = a.address( Address::Home );
00427         address.setStreet( value );
00428         a.insertAddress( address );
00429         return true;
00430       }
00431     case FieldImpl::HomeAddressLocality:
00432       {
00433         KABC::Address address = a.address( Address::Home );
00434         address.setLocality( value );
00435         a.insertAddress( address );
00436         return true;
00437       }
00438     case FieldImpl::HomeAddressRegion:
00439       {
00440         KABC::Address address = a.address( Address::Home );
00441         address.setRegion( value );
00442         a.insertAddress( address );
00443         return true;
00444       }
00445     case FieldImpl::HomeAddressPostalCode:
00446       {
00447         KABC::Address address = a.address( Address::Home );
00448         address.setPostalCode( value );
00449         a.insertAddress( address );
00450         return true;
00451       }
00452     case FieldImpl::HomeAddressCountry:
00453       {
00454         KABC::Address address = a.address( Address::Home );
00455         address.setCountry( value );
00456         a.insertAddress( address );
00457         return true;
00458       }
00459     case FieldImpl::HomeAddressLabel:
00460       {
00461         KABC::Address address = a.address( Address::Home );
00462         address.setLabel( value );
00463         a.insertAddress( address );
00464         return true;
00465       }
00466     case FieldImpl::BusinessAddressStreet:
00467       {
00468         KABC::Address address = a.address( Address::Work );
00469         address.setStreet( value );
00470         a.insertAddress( address );
00471         return true;
00472       }
00473     case FieldImpl::BusinessAddressLocality:
00474       {
00475         KABC::Address address = a.address( Address::Work );
00476         address.setLocality( value );
00477         a.insertAddress( address );
00478         return true;
00479       }
00480     case FieldImpl::BusinessAddressRegion:
00481       {
00482         KABC::Address address = a.address( Address::Work );
00483         address.setRegion( value );
00484         a.insertAddress( address );
00485         return true;
00486       }
00487     case FieldImpl::BusinessAddressPostalCode:
00488       {
00489         KABC::Address address = a.address( Address::Work );
00490         address.setPostalCode( value );
00491         a.insertAddress( address );
00492         return true;
00493       }
00494     case FieldImpl::BusinessAddressCountry:
00495       {
00496         KABC::Address address = a.address( Address::Work );
00497         address.setCountry( value );
00498         a.insertAddress( address );
00499         return true;
00500       }
00501     case FieldImpl::BusinessAddressLabel:
00502       {
00503         KABC::Address address = a.address( Address::Work );
00504         address.setLabel( value );
00505         a.insertAddress( address );
00506         return true;
00507       }
00508     case FieldImpl::Birthday:
00509       a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
00510       return true;
00511     case FieldImpl::CustomField:
00512       a.insertCustom( mImpl->app(), mImpl->key(), value );
00513       return true;
00514     default:
00515       return false;
00516   }
00517 }
00518 
00519 QString Field::sortKey( const KABC::Addressee &a )
00520 {
00521   switch ( mImpl->fieldId() ) {
00522     case FieldImpl::FormattedName:
00523       return a.formattedName();
00524     case FieldImpl::FamilyName:
00525       return a.familyName();
00526     case FieldImpl::GivenName:
00527       return a.givenName();
00528     case FieldImpl::AdditionalName:
00529       return a.additionalName();
00530     case FieldImpl::Prefix:
00531       return a.prefix();
00532     case FieldImpl::Suffix:
00533       return a.suffix();
00534     case FieldImpl::NickName:
00535       return a.nickName();
00536     case FieldImpl::Mailer:
00537       return a.mailer();
00538     case FieldImpl::Title:
00539       return a.title();
00540     case FieldImpl::Role:
00541       return a.role();
00542     case FieldImpl::Organization:
00543       return a.organization();
00544     case FieldImpl::Note:
00545       return a.note();
00546     case FieldImpl::Birthday:
00547       if ( a.birthday().isValid() ) {
00548         QDate date = a.birthday().date();
00549         QString key;
00550         key.sprintf( "%02d-%02d", date.month(), date.day() );
00551         return key;
00552       } else
00553         return QString( "00-00" );
00554     default:
00555       return value( a ).lower();
00556   }
00557 }
00558 
00559 bool Field::isCustom()
00560 {
00561   return mImpl->fieldId() == FieldImpl::CustomField;
00562 }
00563 
00564 Field::List Field::allFields()
00565 {
00566   if ( mAllFields.isEmpty() ) {
00567     createField( FieldImpl::FormattedName, Frequent );
00568     createField( FieldImpl::FamilyName, Frequent );
00569     createField( FieldImpl::GivenName, Frequent );
00570     createField( FieldImpl::AdditionalName );
00571     createField( FieldImpl::Prefix );
00572     createField( FieldImpl::Suffix );
00573     createField( FieldImpl::NickName, Personal );
00574     createField( FieldImpl::Birthday, Personal );
00575     createField( FieldImpl::HomeAddressStreet, Address|Personal );
00576     createField( FieldImpl::HomeAddressLocality, Address|Personal );
00577     createField( FieldImpl::HomeAddressRegion, Address|Personal );
00578     createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
00579     createField( FieldImpl::HomeAddressCountry, Address|Personal );
00580     createField( FieldImpl::HomeAddressLabel, Address|Personal );
00581     createField( FieldImpl::BusinessAddressStreet, Address|Organization );
00582     createField( FieldImpl::BusinessAddressLocality, Address|Organization );
00583     createField( FieldImpl::BusinessAddressRegion, Address|Organization );
00584     createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
00585     createField( FieldImpl::BusinessAddressCountry, Address|Organization );
00586     createField( FieldImpl::BusinessAddressLabel, Address|Organization );
00587     createField( FieldImpl::HomePhone, Personal|Frequent );
00588     createField( FieldImpl::BusinessPhone, Organization|Frequent );
00589     createField( FieldImpl::MobilePhone, Frequent );
00590     createField( FieldImpl::HomeFax );
00591     createField( FieldImpl::BusinessFax );
00592     createField( FieldImpl::CarPhone );
00593     createField( FieldImpl::Isdn );
00594     createField( FieldImpl::Pager );
00595     createField( FieldImpl::Email, Email|Frequent );
00596     createField( FieldImpl::Mailer, Email );
00597     createField( FieldImpl::Title, Organization );
00598     createField( FieldImpl::Role, Organization );
00599     createField( FieldImpl::Organization, Organization );
00600     createField( FieldImpl::Note );
00601     createField( FieldImpl::Url );
00602   }
00603 
00604   return mAllFields;
00605 }
00606 
00607 Field::List Field::defaultFields()
00608 {
00609   if ( mDefaultFields.isEmpty() ) {
00610     createDefaultField( FieldImpl::FormattedName );
00611     createDefaultField( FieldImpl::Email );
00612   }
00613 
00614   return mDefaultFields;
00615 }
00616 
00617 void Field::createField( int id, int category )
00618 {
00619   mAllFields.append( new Field( new FieldImpl( id, category ) ) );
00620 }
00621 
00622 void Field::createDefaultField( int id, int category )
00623 {
00624   mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
00625 }
00626 
00627 void Field::deleteFields()
00628 {
00629   Field::List::ConstIterator it;
00630 
00631   for ( it = mAllFields.constBegin(); it != mAllFields.constEnd(); ++it ) {
00632     delete (*it);
00633   }
00634   mAllFields.clear();
00635 
00636   for ( it = mDefaultFields.constBegin(); it != mDefaultFields.constEnd(); ++it ) {
00637     delete (*it);
00638   }
00639   mDefaultFields.clear();
00640 
00641   for ( it = mCustomFields.constBegin(); it != mCustomFields.constEnd(); ++it ) {
00642     delete (*it);
00643   }
00644   mCustomFields.clear();
00645 }
00646 
00647 void Field::saveFields( const QString &identifier,
00648                         const Field::List &fields )
00649 {
00650   KConfig *cfg = KGlobal::config();
00651   KConfigGroupSaver( cfg, "KABCFields" );
00652 
00653   saveFields( cfg, identifier, fields );
00654 }
00655 
00656 void Field::saveFields( KConfig *cfg, const QString &identifier,
00657                         const Field::List &fields )
00658 {
00659   QValueList<int> fieldIds;
00660   
00661   int custom = 0;
00662   Field::List::ConstIterator it;
00663   for( it = fields.begin(); it != fields.end(); ++it ) {
00664     fieldIds.append( (*it)->mImpl->fieldId() );
00665     if( (*it)->isCustom() ) {
00666       QStringList customEntry;
00667       customEntry << (*it)->mImpl->label();
00668       customEntry << (*it)->mImpl->key();
00669       customEntry << (*it)->mImpl->app();
00670       cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
00671                        QString::number( custom++ ), customEntry );
00672     }
00673   }
00674   
00675   cfg->writeEntry( identifier, fieldIds );
00676 }
00677 
00678 Field::List Field::restoreFields( const QString &identifier )
00679 {
00680   KConfig *cfg = KGlobal::config();
00681   KConfigGroupSaver( cfg, "KABCFields" );
00682  
00683   return restoreFields( cfg, identifier );
00684 }
00685 
00686 Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
00687 {
00688   const QValueList<int> fieldIds = cfg->readIntListEntry( identifier );
00689 
00690   Field::List fields;
00691 
00692   int custom = 0;
00693   QValueList<int>::ConstIterator it;
00694   for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
00695     FieldImpl *f = 0;
00696     if ( (*it) == FieldImpl::CustomField ) {
00697       QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
00698                                                  identifier + "_" +
00699                                                  QString::number( custom++ ) );
00700       f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
00701                          customEntry[ 1 ], customEntry[ 2 ] );
00702     } else {
00703       f = new FieldImpl( *it );
00704     }
00705     fields.append( new Field( f ) );
00706   }
00707   
00708   return fields;
00709 }
00710 
00711 bool Field::equals( Field *field )
00712 {
00713   bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
00714 
00715   if ( !sameId ) return false;
00716 
00717   if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
00718   
00719   return mImpl->key() == field->mImpl->key();
00720 }
00721 
00722 Field *Field::createCustomField( const QString &label, int category,
00723                                  const QString &key, const QString &app )
00724 {
00725   Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
00726                                            category | CustomCategory,
00727                                            label, key, app ) );
00728   mCustomFields.append( field );
00729 
00730   return field;
00731 }
KDE Home | KDE Accessibility Home | Description of Access Keys