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     {
00257       // check for preferred number
00258       PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
00259       PhoneNumber::List::Iterator it;
00260       for ( it = list.begin(); it != list.end(); ++it )
00261         if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00262           return (*it).number();
00263 
00264       // check for normal home number
00265       list = a.phoneNumbers( PhoneNumber::Home );
00266       for ( it = list.begin(); it != list.end(); ++it )
00267         if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00268           return (*it).number();
00269 
00270       return QString::null;
00271     }
00272     case FieldImpl::BusinessPhone:
00273     {
00274       // check for preferred number
00275       PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
00276       PhoneNumber::List::Iterator it;
00277       for ( it = list.begin(); it != list.end(); ++it )
00278         if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00279           return (*it).number();
00280 
00281       // check for normal work number
00282       list = a.phoneNumbers( PhoneNumber::Work );
00283       for ( it = list.begin(); it != list.end(); ++it )
00284         if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00285           return (*it).number();
00286       return QString::null;
00287     }
00288     case FieldImpl::MobilePhone:
00289       return a.phoneNumber( PhoneNumber::Cell ).number();
00290     case FieldImpl::HomeFax:
00291       return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
00292     case FieldImpl::BusinessFax:
00293       return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
00294     case FieldImpl::CarPhone:
00295       return a.phoneNumber( PhoneNumber::Car ).number();
00296     case FieldImpl::Isdn:
00297       return a.phoneNumber( PhoneNumber::Isdn ).number();
00298     case FieldImpl::Pager:
00299       return a.phoneNumber( PhoneNumber::Pager ).number();
00300     case FieldImpl::HomeAddressStreet:
00301       return a.address( Address::Home ).street();
00302     case FieldImpl::HomeAddressLocality:
00303       return a.address( Address::Home ).locality();
00304     case FieldImpl::HomeAddressRegion:
00305       return a.address( Address::Home ).region();
00306     case FieldImpl::HomeAddressPostalCode:
00307       return a.address( Address::Home ).postalCode();
00308     case FieldImpl::HomeAddressCountry:
00309       return a.address( Address::Home ).country();
00310     case FieldImpl::BusinessAddressStreet:
00311       return a.address( Address::Work ).street();
00312     case FieldImpl::BusinessAddressLocality:
00313       return a.address( Address::Work ).locality();
00314     case FieldImpl::BusinessAddressRegion:
00315       return a.address( Address::Work ).region();
00316     case FieldImpl::BusinessAddressPostalCode:
00317       return a.address( Address::Work ).postalCode();
00318     case FieldImpl::BusinessAddressCountry:
00319       return a.address( Address::Work ).country();
00320     case FieldImpl::CustomField:
00321       return a.custom( mImpl->app(), mImpl->key() );
00322     default:
00323       return QString::null;
00324   }
00325 }
00326 
00327 bool Field::setValue( KABC::Addressee &a, const QString &value )
00328 {
00329   switch ( mImpl->fieldId() ) {
00330     case FieldImpl::FormattedName:
00331       a.setFormattedName( value );
00332       return true;
00333     case FieldImpl::FamilyName:
00334       a.setFamilyName( value );
00335       return true;
00336     case FieldImpl::GivenName:
00337       a.setGivenName( value );
00338       return true;
00339     case FieldImpl::AdditionalName:
00340       a.setAdditionalName( value );
00341       return true;
00342     case FieldImpl::Prefix:
00343       a.setPrefix( value );
00344       return true;
00345     case FieldImpl::Suffix:
00346       a.setSuffix( value );
00347       return true;
00348     case FieldImpl::NickName:
00349       a.setNickName( value );
00350       return true;
00351     case FieldImpl::Mailer:
00352       a.setMailer( value );
00353       return true;
00354     case FieldImpl::Title:
00355       a.setTitle( value );
00356       return true;
00357     case FieldImpl::Role:
00358       a.setRole( value );
00359       return true;
00360     case FieldImpl::Organization:
00361       a.setOrganization( value );
00362       return true;
00363     case FieldImpl::Note:
00364       a.setNote( value );
00365       return true;
00366     case FieldImpl::Birthday:
00367       a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
00368     case FieldImpl::CustomField:
00369       a.insertCustom( mImpl->app(), mImpl->key(), value );
00370     default:
00371       return false;
00372   }
00373 }
00374 
00375 QString Field::sortKey( const KABC::Addressee &a )
00376 {
00377   switch ( mImpl->fieldId() ) {
00378     case FieldImpl::FormattedName:
00379       return a.formattedName();
00380     case FieldImpl::FamilyName:
00381       return a.familyName();
00382     case FieldImpl::GivenName:
00383       return a.givenName();
00384     case FieldImpl::AdditionalName:
00385       return a.additionalName();
00386     case FieldImpl::Prefix:
00387       return a.prefix();
00388     case FieldImpl::Suffix:
00389       return a.suffix();
00390     case FieldImpl::NickName:
00391       return a.nickName();
00392     case FieldImpl::Mailer:
00393       return a.mailer();
00394     case FieldImpl::Title:
00395       return a.title();
00396     case FieldImpl::Role:
00397       return a.role();
00398     case FieldImpl::Organization:
00399       return a.organization();
00400     case FieldImpl::Note:
00401       return a.note();
00402     case FieldImpl::Birthday:
00403       if ( a.birthday().isValid() ) {
00404         QDate date = a.birthday().date();
00405         QString key;
00406         key.sprintf( "%02d-%02d", date.month(), date.day() );
00407         return key;
00408       } else
00409         return QString( "00-00" );
00410     default:
00411       return value( a ).lower();
00412   }
00413 }
00414 
00415 bool Field::isCustom()
00416 {
00417   return mImpl->fieldId() == FieldImpl::CustomField;
00418 }
00419 
00420 Field::List Field::allFields()
00421 {
00422   if ( mAllFields.isEmpty() ) {
00423     createField( FieldImpl::FormattedName, Frequent );
00424     createField( FieldImpl::FamilyName, Frequent );
00425     createField( FieldImpl::GivenName, Frequent );
00426     createField( FieldImpl::AdditionalName );
00427     createField( FieldImpl::Prefix );
00428     createField( FieldImpl::Suffix );
00429     createField( FieldImpl::NickName, Personal );
00430     createField( FieldImpl::Birthday, Personal );
00431     createField( FieldImpl::HomeAddressStreet, Address|Personal );
00432     createField( FieldImpl::HomeAddressLocality, Address|Personal );
00433     createField( FieldImpl::HomeAddressRegion, Address|Personal );
00434     createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
00435     createField( FieldImpl::HomeAddressCountry, Address|Personal );
00436     createField( FieldImpl::HomeAddressLabel, Address|Personal );
00437     createField( FieldImpl::BusinessAddressStreet, Address|Organization );
00438     createField( FieldImpl::BusinessAddressLocality, Address|Organization );
00439     createField( FieldImpl::BusinessAddressRegion, Address|Organization );
00440     createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
00441     createField( FieldImpl::BusinessAddressCountry, Address|Organization );
00442     createField( FieldImpl::BusinessAddressLabel, Address|Organization );
00443     createField( FieldImpl::HomePhone, Personal|Frequent );
00444     createField( FieldImpl::BusinessPhone, Organization|Frequent );
00445     createField( FieldImpl::MobilePhone, Frequent );
00446     createField( FieldImpl::HomeFax );
00447     createField( FieldImpl::BusinessFax );
00448     createField( FieldImpl::CarPhone );
00449     createField( FieldImpl::Isdn );
00450     createField( FieldImpl::Pager );
00451     createField( FieldImpl::Email, Email|Frequent );
00452     createField( FieldImpl::Mailer, Email );
00453     createField( FieldImpl::Title, Organization );
00454     createField( FieldImpl::Role, Organization );
00455     createField( FieldImpl::Organization, Organization );
00456     createField( FieldImpl::Note );
00457     createField( FieldImpl::Url );
00458   }
00459 
00460   return mAllFields;
00461 }
00462 
00463 Field::List Field::defaultFields()
00464 {
00465   if ( mDefaultFields.isEmpty() ) {
00466     createDefaultField( FieldImpl::GivenName );
00467     createDefaultField( FieldImpl::FamilyName );
00468     createDefaultField( FieldImpl::Email );
00469   }
00470 
00471   return mDefaultFields;
00472 }
00473 
00474 void Field::createField( int id, int category )
00475 {
00476   mAllFields.append( new Field( new FieldImpl( id, category ) ) );
00477 }
00478 
00479 void Field::createDefaultField( int id, int category )
00480 {
00481   mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
00482 }
00483 
00484 void Field::deleteFields()
00485 {
00486   Field::List::ConstIterator it;
00487 
00488   for( it = mAllFields.begin(); it != mAllFields.end(); ++it ) {
00489     delete (*it);
00490   }
00491   mAllFields.clear();
00492 
00493   for( it = mDefaultFields.begin(); it != mDefaultFields.end(); ++it ) {
00494     delete (*it);
00495   }
00496   mDefaultFields.clear();
00497 
00498   for( it = mCustomFields.begin(); it != mCustomFields.end(); ++it ) {
00499     delete (*it);
00500   }
00501   mCustomFields.clear();
00502 }
00503 
00504 void Field::saveFields( const QString &identifier,
00505                         const Field::List &fields )
00506 {
00507   KConfig *cfg = KGlobal::config();
00508   KConfigGroupSaver( cfg, "KABCFields" );
00509 
00510   saveFields( cfg, identifier, fields );
00511 }
00512 
00513 void Field::saveFields( KConfig *cfg, const QString &identifier,
00514                         const Field::List &fields )
00515 {
00516   QValueList<int> fieldIds;
00517   
00518   int custom = 0;
00519   Field::List::ConstIterator it;
00520   for( it = fields.begin(); it != fields.end(); ++it ) {
00521     fieldIds.append( (*it)->mImpl->fieldId() );
00522     if( (*it)->isCustom() ) {
00523       QStringList customEntry;
00524       customEntry << (*it)->mImpl->label();
00525       customEntry << (*it)->mImpl->key();
00526       customEntry << (*it)->mImpl->app();
00527       cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
00528                        QString::number( custom++ ), customEntry );
00529     }
00530   }
00531   
00532   cfg->writeEntry( identifier, fieldIds );
00533 }
00534 
00535 Field::List Field::restoreFields( const QString &identifier )
00536 {
00537   KConfig *cfg = KGlobal::config();
00538   KConfigGroupSaver( cfg, "KABCFields" );
00539  
00540   return restoreFields( cfg, identifier );
00541 }
00542 
00543 Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
00544 {
00545   QValueList<int> fieldIds = cfg->readIntListEntry( identifier );
00546 
00547   Field::List fields;
00548 
00549   int custom = 0;
00550   QValueList<int>::ConstIterator it;
00551   for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
00552     FieldImpl *f = 0;
00553     if ( (*it) == FieldImpl::CustomField ) {
00554       QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
00555                                                  identifier + "_" +
00556                                                  QString::number( custom++ ) );
00557       f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
00558                          customEntry[ 1 ], customEntry[ 2 ] );
00559     } else {
00560       f = new FieldImpl( *it );
00561     }
00562     fields.append( new Field( f ) );
00563   }
00564   
00565   return fields;
00566 }
00567 
00568 bool Field::equals( Field *field )
00569 {
00570   bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
00571 
00572   if ( !sameId ) return false;
00573 
00574   if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
00575   
00576   return mImpl->key() == field->mImpl->key();
00577 }
00578 
00579 Field *Field::createCustomField( const QString &label, int category,
00580                                  const QString &key, const QString &app )
00581 {
00582   Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
00583                                            category | CustomCategory,
00584                                            label, key, app ) );
00585   mCustomFields.append( field );
00586 
00587   return field;
00588 }
KDE Logo
This file is part of the documentation for kabc Library Version 3.3.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Jul 22 10:18:11 2005 by doxygen 1.3.6 written by Dimitri van Heesch, © 1997-2003