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