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