kabc Library API Documentation

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., 59 Temple Place - Suite 330,
00019     Boston, MA 02111-1307, USA.
00020 */
00021 
00022 #include <klocale.h>
00023 #include <kconfig.h>
00024 #include <kglobal.h>
00025 
00026 #include "field.h"
00027 
00028 using namespace KABC;
00029 
00030 class Field::FieldImpl
00031 {
00032   public:
00033     FieldImpl( int fieldId, int category = 0,
00034                const QString &label = QString::null,
00035                const QString &key = QString::null,
00036                const QString &app = QString::null )
00037       : mFieldId( fieldId ), mCategory( category ), mLabel( label ),
00038         mKey( key ), mApp( app ) {}
00039   
00040     enum FieldId
00041     {
00042       CustomField,
00043       FormattedName,
00044       FamilyName,
00045       GivenName,
00046       AdditionalName,
00047       Prefix,
00048       Suffix,
00049       NickName,
00050       Birthday,
00051       HomeAddressStreet,
00052       HomeAddressLocality,
00053       HomeAddressRegion,
00054       HomeAddressPostalCode,
00055       HomeAddressCountry,
00056       HomeAddressLabel,
00057       BusinessAddressStreet,
00058       BusinessAddressLocality,
00059       BusinessAddressRegion,
00060       BusinessAddressPostalCode,
00061       BusinessAddressCountry,
00062       BusinessAddressLabel,
00063       HomePhone,
00064       BusinessPhone,
00065       MobilePhone,
00066       HomeFax,
00067       BusinessFax,
00068       CarPhone,
00069       Isdn,
00070       Pager,
00071       Email,
00072       Mailer,
00073       Title,
00074       Role,
00075       Organization,
00076       Note,
00077       Url
00078     };
00079 
00080     int fieldId() { return mFieldId; }
00081     int category() { return mCategory; }
00082     
00083     QString label() { return mLabel; }
00084     QString key() { return mKey; }
00085     QString app() { return mApp; }
00086     
00087   private:
00088     int mFieldId;
00089     int mCategory;
00090 
00091     QString mLabel;
00092     QString mKey;
00093     QString mApp;
00094 };
00095 
00096 
00097 Field::List Field::mAllFields;
00098 Field::List Field::mDefaultFields;
00099 Field::List Field::mCustomFields;
00100 
00101 
00102 Field::Field( FieldImpl *impl )
00103 {
00104   mImpl = impl;
00105 }
00106 
00107 Field::~Field()
00108 {
00109   delete mImpl;
00110 }
00111 
00112 QString Field::label()
00113 {
00114   switch ( mImpl->fieldId() ) {
00115     case FieldImpl::FormattedName:
00116       return Addressee::formattedNameLabel();
00117     case FieldImpl::FamilyName:
00118       return Addressee::familyNameLabel();
00119     case FieldImpl::GivenName:
00120       return Addressee::givenNameLabel();
00121     case FieldImpl::AdditionalName:
00122       return Addressee::additionalNameLabel();
00123     case FieldImpl::Prefix:
00124       return Addressee::prefixLabel();
00125     case FieldImpl::Suffix:
00126       return Addressee::suffixLabel();
00127     case FieldImpl::NickName:
00128       return Addressee::nickNameLabel();
00129     case FieldImpl::Birthday:
00130       return Addressee::birthdayLabel();
00131     case FieldImpl::HomeAddressStreet:
00132       return Addressee::homeAddressStreetLabel();
00133     case FieldImpl::HomeAddressLocality:
00134       return Addressee::homeAddressLocalityLabel();
00135     case FieldImpl::HomeAddressRegion:
00136       return Addressee::homeAddressRegionLabel();
00137     case FieldImpl::HomeAddressPostalCode:
00138       return Addressee::homeAddressPostalCodeLabel();
00139     case FieldImpl::HomeAddressCountry:
00140       return Addressee::homeAddressCountryLabel();
00141     case FieldImpl::HomeAddressLabel:
00142       return Addressee::homeAddressLabelLabel();
00143     case FieldImpl::BusinessAddressStreet:
00144       return Addressee::businessAddressStreetLabel();
00145     case FieldImpl::BusinessAddressLocality:
00146       return Addressee::businessAddressLocalityLabel();
00147     case FieldImpl::BusinessAddressRegion:
00148       return Addressee::businessAddressRegionLabel();
00149     case FieldImpl::BusinessAddressPostalCode:
00150       return Addressee::businessAddressPostalCodeLabel();
00151     case FieldImpl::BusinessAddressCountry:
00152       return Addressee::businessAddressCountryLabel();
00153     case FieldImpl::BusinessAddressLabel:
00154       return Addressee::businessAddressLabelLabel();
00155     case FieldImpl::HomePhone:
00156       return Addressee::homePhoneLabel();
00157     case FieldImpl::BusinessPhone:
00158       return Addressee::businessPhoneLabel();
00159     case FieldImpl::MobilePhone:
00160       return Addressee::mobilePhoneLabel();
00161     case FieldImpl::HomeFax:
00162       return Addressee::homeFaxLabel();
00163     case FieldImpl::BusinessFax:
00164       return Addressee::businessFaxLabel();
00165     case FieldImpl::CarPhone:
00166       return Addressee::carPhoneLabel();
00167     case FieldImpl::Isdn:
00168       return Addressee::isdnLabel();
00169     case FieldImpl::Pager:
00170       return Addressee::pagerLabel();
00171     case FieldImpl::Email:
00172       return Addressee::emailLabel();
00173     case FieldImpl::Mailer:
00174       return Addressee::mailerLabel();
00175     case FieldImpl::Title:
00176       return Addressee::titleLabel();
00177     case FieldImpl::Role:
00178       return Addressee::roleLabel();
00179     case FieldImpl::Organization:
00180       return Addressee::organizationLabel();
00181     case FieldImpl::Note:
00182       return Addressee::noteLabel();
00183     case FieldImpl::Url:
00184       return Addressee::urlLabel();
00185     case FieldImpl::CustomField:
00186       return mImpl->label();
00187     default:
00188       return i18n("Unknown Field");
00189   }
00190 }
00191 
00192 int Field::category()
00193 {
00194   return mImpl->category();
00195 }
00196 
00197 QString Field::categoryLabel( int category )
00198 {
00199   switch ( category ) {
00200     case All:
00201       return i18n("All");
00202     case Frequent:
00203       return i18n("Frequent");
00204     case Address:
00205       return i18n("Address");
00206     case Email:
00207       return i18n("Email");
00208     case Personal:
00209       return i18n("Personal");
00210     case Organization:
00211       return i18n("Organization");
00212     case CustomCategory:
00213       return i18n("Custom");
00214     default:
00215       return i18n("Undefined");
00216   }
00217 }
00218 
00219 QString Field::value( const KABC::Addressee &a )
00220 {
00221   switch ( mImpl->fieldId() ) {
00222     case FieldImpl::FormattedName:
00223       return a.formattedName();
00224     case FieldImpl::FamilyName:
00225       return a.familyName();
00226     case FieldImpl::GivenName:
00227       return a.givenName();
00228     case FieldImpl::AdditionalName:
00229       return a.additionalName();
00230     case FieldImpl::Prefix:
00231       return a.prefix();
00232     case FieldImpl::Suffix:
00233       return a.suffix();
00234     case FieldImpl::NickName:
00235       return a.nickName();
00236     case FieldImpl::Mailer:
00237       return a.mailer();
00238     case FieldImpl::Title:
00239       return a.title();
00240     case FieldImpl::Role:
00241       return a.role();
00242     case FieldImpl::Organization:
00243       return a.organization();
00244     case FieldImpl::Note:
00245       return a.note();
00246     case FieldImpl::Email:
00247       return a.preferredEmail();
00248     case FieldImpl::Birthday:
00249       if ( a.birthday().isValid() )
00250         return a.birthday().date().toString( Qt::ISODate );
00251       else
00252         return QString::null;
00253     case FieldImpl::Url:
00254       return a.url().prettyURL();
00255     case FieldImpl::HomePhone:
00256       return a.phoneNumber( PhoneNumber::Home ).number();
00257     case FieldImpl::BusinessPhone:
00258       return a.phoneNumber( PhoneNumber::Work ).number();
00259     case FieldImpl::MobilePhone:
00260       return a.phoneNumber( PhoneNumber::Cell ).number();
00261     case FieldImpl::HomeFax:
00262       return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
00263     case FieldImpl::BusinessFax:
00264       return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
00265     case FieldImpl::CarPhone:
00266       return a.phoneNumber( PhoneNumber::Car ).number();
00267     case FieldImpl::Isdn:
00268       return a.phoneNumber( PhoneNumber::Isdn ).number();
00269     case FieldImpl::Pager:
00270       return a.phoneNumber( PhoneNumber::Pager ).number();
00271     case FieldImpl::HomeAddressStreet:
00272       return a.address( Address::Home ).street();
00273     case FieldImpl::HomeAddressLocality:
00274       return a.address( Address::Home ).locality();
00275     case FieldImpl::HomeAddressRegion:
00276       return a.address( Address::Home ).region();
00277     case FieldImpl::HomeAddressPostalCode:
00278       return a.address( Address::Home ).postalCode();
00279     case FieldImpl::HomeAddressCountry:
00280       return a.address( Address::Home ).country();
00281     case FieldImpl::BusinessAddressStreet:
00282       return a.address( Address::Work ).street();
00283     case FieldImpl::BusinessAddressLocality:
00284       return a.address( Address::Work ).locality();
00285     case FieldImpl::BusinessAddressRegion:
00286       return a.address( Address::Work ).region();
00287     case FieldImpl::BusinessAddressPostalCode:
00288       return a.address( Address::Work ).postalCode();
00289     case FieldImpl::BusinessAddressCountry:
00290       return a.address( Address::Work ).country();
00291     case FieldImpl::CustomField:
00292       return a.custom( mImpl->app(), mImpl->key() );
00293     default:
00294       return QString::null;
00295   }
00296 }
00297 
00298 bool Field::setValue( KABC::Addressee &a, const QString &value )
00299 {
00300   switch ( mImpl->fieldId() ) {
00301     case FieldImpl::FormattedName:
00302       a.setFormattedName( value );
00303       return true;
00304     case FieldImpl::FamilyName:
00305       a.setFamilyName( value );
00306       return true;
00307     case FieldImpl::GivenName:
00308       a.setGivenName( value );
00309       return true;
00310     case FieldImpl::AdditionalName:
00311       a.setAdditionalName( value );
00312       return true;
00313     case FieldImpl::Prefix:
00314       a.setPrefix( value );
00315       return true;
00316     case FieldImpl::Suffix:
00317       a.setSuffix( value );
00318       return true;
00319     case FieldImpl::NickName:
00320       a.setNickName( value );
00321       return true;
00322     case FieldImpl::Mailer:
00323       a.setMailer( value );
00324       return true;
00325     case FieldImpl::Title:
00326       a.setTitle( value );
00327       return true;
00328     case FieldImpl::Role:
00329       a.setRole( value );
00330       return true;
00331     case FieldImpl::Organization:
00332       a.setOrganization( value );
00333       return true;
00334     case FieldImpl::Note:
00335       a.setNote( value );
00336       return true;
00337     case FieldImpl::Birthday:
00338       a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
00339     case FieldImpl::CustomField:
00340       a.insertCustom( mImpl->app(), mImpl->key(), value );
00341     default:
00342       return false;
00343   }
00344 }
00345 
00346 QString Field::sortKey( const KABC::Addressee &a )
00347 {
00348   switch ( mImpl->fieldId() ) {
00349     case FieldImpl::FormattedName:
00350       return a.formattedName();
00351     case FieldImpl::FamilyName:
00352       return a.familyName();
00353     case FieldImpl::GivenName:
00354       return a.givenName();
00355     case FieldImpl::AdditionalName:
00356       return a.additionalName();
00357     case FieldImpl::Prefix:
00358       return a.prefix();
00359     case FieldImpl::Suffix:
00360       return a.suffix();
00361     case FieldImpl::NickName:
00362       return a.nickName();
00363     case FieldImpl::Mailer:
00364       return a.mailer();
00365     case FieldImpl::Title:
00366       return a.title();
00367     case FieldImpl::Role:
00368       return a.role();
00369     case FieldImpl::Organization:
00370       return a.organization();
00371     case FieldImpl::Note:
00372       return a.note();
00373     case FieldImpl::Birthday:
00374       if ( a.birthday().isValid() ) {
00375         QDate date = a.birthday().date();
00376         QString key;
00377         key.sprintf( "%02d-%02d", date.month(), date.day() );
00378         return key;
00379       } else
00380         return QString( "00-00" );
00381     default:
00382       return value( a ).lower();
00383   }
00384 }
00385 
00386 bool Field::isCustom()
00387 {
00388   return mImpl->fieldId() == FieldImpl::CustomField;
00389 }
00390 
00391 Field::List Field::allFields()
00392 {
00393   if ( mAllFields.isEmpty() ) {
00394     createField( FieldImpl::FormattedName, Frequent );
00395     createField( FieldImpl::FamilyName, Frequent );
00396     createField( FieldImpl::GivenName, Frequent );
00397     createField( FieldImpl::AdditionalName );
00398     createField( FieldImpl::Prefix );
00399     createField( FieldImpl::Suffix );
00400     createField( FieldImpl::NickName, Personal );
00401     createField( FieldImpl::Birthday, Personal );
00402     createField( FieldImpl::HomeAddressStreet, Address|Personal );
00403     createField( FieldImpl::HomeAddressLocality, Address|Personal );
00404     createField( FieldImpl::HomeAddressRegion, Address|Personal );
00405     createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
00406     createField( FieldImpl::HomeAddressCountry, Address|Personal );
00407     createField( FieldImpl::HomeAddressLabel, Address|Personal );
00408     createField( FieldImpl::BusinessAddressStreet, Address|Organization );
00409     createField( FieldImpl::BusinessAddressLocality, Address|Organization );
00410     createField( FieldImpl::BusinessAddressRegion, Address|Organization );
00411     createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
00412     createField( FieldImpl::BusinessAddressCountry, Address|Organization );
00413     createField( FieldImpl::BusinessAddressLabel, Address|Organization );
00414     createField( FieldImpl::HomePhone, Personal|Frequent );
00415     createField( FieldImpl::BusinessPhone, Organization|Frequent );
00416     createField( FieldImpl::MobilePhone, Frequent );
00417     createField( FieldImpl::HomeFax );
00418     createField( FieldImpl::BusinessFax );
00419     createField( FieldImpl::CarPhone );
00420     createField( FieldImpl::Isdn );
00421     createField( FieldImpl::Pager );
00422     createField( FieldImpl::Email, Email|Frequent );
00423     createField( FieldImpl::Mailer, Email );
00424     createField( FieldImpl::Title, Organization );
00425     createField( FieldImpl::Role, Organization );
00426     createField( FieldImpl::Organization, Organization );
00427     createField( FieldImpl::Note );
00428     createField( FieldImpl::Url );
00429   }
00430 
00431   return mAllFields;
00432 }
00433 
00434 Field::List Field::defaultFields()
00435 {
00436   if ( mDefaultFields.isEmpty() ) {
00437     createDefaultField( FieldImpl::GivenName );
00438     createDefaultField( FieldImpl::FamilyName );
00439     createDefaultField( FieldImpl::Email );
00440   }
00441 
00442   return mDefaultFields;
00443 }
00444 
00445 void Field::createField( int id, int category )
00446 {
00447   mAllFields.append( new Field( new FieldImpl( id, category ) ) );
00448 }
00449 
00450 void Field::createDefaultField( int id, int category )
00451 {
00452   mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
00453 }
00454 
00455 void Field::deleteFields()
00456 {
00457   Field::List::ConstIterator it;
00458 
00459   for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) {
00460     delete (*it);
00461   }
00462   mAllFields.clear();
00463 
00464   for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) {
00465     delete (*it);
00466   }
00467   mDefaultFields.clear();
00468 
00469   for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) {
00470     delete (*it);
00471   }
00472   mCustomFields.clear();
00473 }
00474 
00475 void Field::saveFields( const QString &identifier,
00476                         const Field::List &fields )
00477 {
00478   KConfig *cfg = KGlobal::config();
00479   KConfigGroupSaver( cfg, "KABCFields" );
00480 
00481   saveFields( cfg, identifier, fields );
00482 }
00483 
00484 void Field::saveFields( KConfig *cfg, const QString &identifier,
00485                         const Field::List &fields )
00486 {
00487   QValueList<int> fieldIds;
00488   
00489   int custom = 0;
00490   Field::List::ConstIterator it;
00491   for( it = fields.begin(); it != fields.end(); ++it ) {
00492     fieldIds.append( (*it)->mImpl->fieldId() );
00493     if( (*it)->isCustom() ) {
00494       QStringList customEntry;
00495       customEntry << (*it)->mImpl->label();
00496       customEntry << (*it)->mImpl->key();
00497       customEntry << (*it)->mImpl->app();
00498       cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
00499                        QString::number( custom++ ), customEntry );
00500     }
00501   }
00502   
00503   cfg->writeEntry( identifier, fieldIds );
00504 }
00505 
00506 Field::List Field::restoreFields( const QString &identifier )
00507 {
00508   KConfig *cfg = KGlobal::config();
00509   KConfigGroupSaver( cfg, "KABCFields" );
00510  
00511   return restoreFields( cfg, identifier );
00512 }
00513 
00514 Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
00515 {
00516   QValueList<int> fieldIds = cfg->readIntListEntry( identifier );
00517 
00518   Field::List fields;
00519 
00520   int custom = 0;
00521   QValueList<int>::ConstIterator it;
00522   for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
00523     FieldImpl *f = 0;
00524     if ( (*it) == FieldImpl::CustomField ) {
00525       QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
00526                                                  identifier + "_" +
00527                                                  QString::number( custom++ ) );
00528       f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
00529                          customEntry[ 1 ], customEntry[ 2 ] );
00530     } else {
00531       f = new FieldImpl( *it );
00532     }
00533     fields.append( new Field( f ) );
00534   }
00535   
00536   return fields;
00537 }
00538 
00539 bool Field::equals( Field *field )
00540 {
00541   bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
00542 
00543   if ( !sameId ) return false;
00544 
00545   if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
00546   
00547   return mImpl->key() == field->mImpl->key();
00548 }
00549 
00550 Field *Field::createCustomField( const QString &label, int category,
00551                                  const QString &key, const QString &app )
00552 {
00553   Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
00554                                            category | CustomCategory,
00555                                            label, key, app ) );
00556   mCustomFields.append( field );
00557 
00558   return field;
00559 }
KDE Logo
This file is part of the documentation for kabc Library Version 3.2.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Feb 4 12:36:43 2004 by doxygen 1.2.18 written by Dimitri van Heesch, © 1997-2003