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