• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • Sitemap
  • Contact Us
 

kabc

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 #include <kconfiggroup.h>
00026 
00027 #include "field.h"
00028 
00029 using namespace KABC;
00030 
00031 class Field::Private
00032 {
00033   public:
00034     Private( int fieldId, int category = 0,
00035              const QString &label = QString(),
00036              const QString &key = QString(),
00037              const QString &app = QString() )
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     static Field::List mAllFields;
00090     static Field::List mDefaultFields;
00091     static Field::List mCustomFields;
00092 
00093   private:
00094     int mFieldId;
00095     int mCategory;
00096 
00097     QString mLabel;
00098     QString mKey;
00099     QString mApp;
00100 };
00101 
00102 Field::List Field::Private::mAllFields;
00103 Field::List Field::Private::mDefaultFields;
00104 Field::List Field::Private::mCustomFields;
00105 
00106 Field::Field( Private *p )
00107   : d( p )
00108 {
00109 }
00110 
00111 Field::~Field()
00112 {
00113   delete d;
00114 }
00115 
00116 QString Field::label()
00117 {
00118   switch ( d->fieldId() ) {
00119     case Private::FormattedName:
00120       return Addressee::formattedNameLabel();
00121     case Private::FamilyName:
00122       return Addressee::familyNameLabel();
00123     case Private::GivenName:
00124       return Addressee::givenNameLabel();
00125     case Private::AdditionalName:
00126       return Addressee::additionalNameLabel();
00127     case Private::Prefix:
00128       return Addressee::prefixLabel();
00129     case Private::Suffix:
00130       return Addressee::suffixLabel();
00131     case Private::NickName:
00132       return Addressee::nickNameLabel();
00133     case Private::Birthday:
00134       return Addressee::birthdayLabel();
00135     case Private::HomeAddressStreet:
00136       return Addressee::homeAddressStreetLabel();
00137     case Private::HomeAddressLocality:
00138       return Addressee::homeAddressLocalityLabel();
00139     case Private::HomeAddressRegion:
00140       return Addressee::homeAddressRegionLabel();
00141     case Private::HomeAddressPostalCode:
00142       return Addressee::homeAddressPostalCodeLabel();
00143     case Private::HomeAddressCountry:
00144       return Addressee::homeAddressCountryLabel();
00145     case Private::HomeAddressLabel:
00146       return Addressee::homeAddressLabelLabel();
00147     case Private::BusinessAddressStreet:
00148       return Addressee::businessAddressStreetLabel();
00149     case Private::BusinessAddressLocality:
00150       return Addressee::businessAddressLocalityLabel();
00151     case Private::BusinessAddressRegion:
00152       return Addressee::businessAddressRegionLabel();
00153     case Private::BusinessAddressPostalCode:
00154       return Addressee::businessAddressPostalCodeLabel();
00155     case Private::BusinessAddressCountry:
00156       return Addressee::businessAddressCountryLabel();
00157     case Private::BusinessAddressLabel:
00158       return Addressee::businessAddressLabelLabel();
00159     case Private::HomePhone:
00160       return Addressee::homePhoneLabel();
00161     case Private::BusinessPhone:
00162       return Addressee::businessPhoneLabel();
00163     case Private::MobilePhone:
00164       return Addressee::mobilePhoneLabel();
00165     case Private::HomeFax:
00166       return Addressee::homeFaxLabel();
00167     case Private::BusinessFax:
00168       return Addressee::businessFaxLabel();
00169     case Private::CarPhone:
00170       return Addressee::carPhoneLabel();
00171     case Private::Isdn:
00172       return Addressee::isdnLabel();
00173     case Private::Pager:
00174       return Addressee::pagerLabel();
00175     case Private::Email:
00176       return Addressee::emailLabel();
00177     case Private::Mailer:
00178       return Addressee::mailerLabel();
00179     case Private::Title:
00180       return Addressee::titleLabel();
00181     case Private::Role:
00182       return Addressee::roleLabel();
00183     case Private::Organization:
00184       return Addressee::organizationLabel();
00185     case Private::Department:
00186       return Addressee::departmentLabel();
00187     case Private::Note:
00188       return Addressee::noteLabel();
00189     case Private::Url:
00190       return Addressee::urlLabel();
00191     case Private::CustomField:
00192       return d->label();
00193     default:
00194       return i18n("Unknown Field");
00195   }
00196 }
00197 
00198 int Field::category()
00199 {
00200   return d->category();
00201 }
00202 
00203 QString Field::categoryLabel( int category )
00204 {
00205   switch ( category ) {
00206     case All:
00207       return i18n("All");
00208     case Frequent:
00209       return i18n("Frequent");
00210     case Address:
00211       return i18nc("street/postal","Address");
00212     case Email:
00213       return i18n("Email");
00214     case Personal:
00215       return i18n("Personal");
00216     case Organization:
00217       return i18n("Organization");
00218     case CustomCategory:
00219       return i18n("Custom");
00220     default:
00221       return i18n("Undefined");
00222   }
00223 }
00224 
00225 QString Field::value( const KABC::Addressee &a )
00226 {
00227   switch ( d->fieldId() ) {
00228     case Private::FormattedName:
00229       return a.formattedName();
00230     case Private::FamilyName:
00231       return a.familyName();
00232     case Private::GivenName:
00233       return a.givenName();
00234     case Private::AdditionalName:
00235       return a.additionalName();
00236     case Private::Prefix:
00237       return a.prefix();
00238     case Private::Suffix:
00239       return a.suffix();
00240     case Private::NickName:
00241       return a.nickName();
00242     case Private::Mailer:
00243       return a.mailer();
00244     case Private::Title:
00245       return a.title();
00246     case Private::Role:
00247       return a.role();
00248     case Private::Organization:
00249       return a.organization();
00250     case Private::Department:
00251       return a.department();
00252     case Private::Note:
00253       return a.note();
00254     case Private::Email:
00255       return a.preferredEmail();
00256     case Private::Birthday:
00257       if ( a.birthday().isValid() )
00258         return a.birthday().date().toString( Qt::ISODate );
00259       else
00260         return QString();
00261     case Private::Url:
00262       return a.url().prettyUrl();
00263     case Private::HomePhone:
00264     {
00265       PhoneNumber::List::ConstIterator it;
00266 
00267       {
00268         // check for preferred number
00269         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
00270         for ( it = list.begin(); it != list.end(); ++it )
00271           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00272             return (*it).number();
00273       }
00274 
00275       {
00276         // check for normal home number
00277         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home );
00278         for ( it = list.begin(); it != list.end(); ++it )
00279           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00280             return (*it).number();
00281       }
00282 
00283       return QString();
00284     }
00285     case Private::BusinessPhone:
00286     {
00287       PhoneNumber::List::ConstIterator it;
00288 
00289       {
00290         // check for preferred number
00291         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
00292         for ( it = list.begin(); it != list.end(); ++it )
00293           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00294             return (*it).number();
00295       }
00296 
00297       {
00298         // check for normal work number
00299         const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work );
00300         for ( it = list.begin(); it != list.end(); ++it )
00301           if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00302             return (*it).number();
00303       }
00304 
00305       return QString();
00306     }
00307     case Private::MobilePhone:
00308       return a.phoneNumber( PhoneNumber::Cell ).number();
00309     case Private::HomeFax:
00310       return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
00311     case Private::BusinessFax:
00312       return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
00313     case Private::CarPhone:
00314       return a.phoneNumber( PhoneNumber::Car ).number();
00315     case Private::Isdn:
00316       return a.phoneNumber( PhoneNumber::Isdn ).number();
00317     case Private::Pager:
00318       return a.phoneNumber( PhoneNumber::Pager ).number();
00319     case Private::HomeAddressStreet:
00320       return a.address( Address::Home ).street();
00321     case Private::HomeAddressLocality:
00322       return a.address( Address::Home ).locality();
00323     case Private::HomeAddressRegion:
00324       return a.address( Address::Home ).region();
00325     case Private::HomeAddressPostalCode:
00326       return a.address( Address::Home ).postalCode();
00327     case Private::HomeAddressCountry:
00328       return a.address( Address::Home ).country();
00329     case Private::BusinessAddressStreet:
00330       return a.address( Address::Work ).street();
00331     case Private::BusinessAddressLocality:
00332       return a.address( Address::Work ).locality();
00333     case Private::BusinessAddressRegion:
00334       return a.address( Address::Work ).region();
00335     case Private::BusinessAddressPostalCode:
00336       return a.address( Address::Work ).postalCode();
00337     case Private::BusinessAddressCountry:
00338       return a.address( Address::Work ).country();
00339     case Private::CustomField:
00340       return a.custom( d->app(), d->key() );
00341     default:
00342       return QString();
00343   }
00344 }
00345 
00346 bool Field::setValue( KABC::Addressee &a, const QString &value )
00347 {
00348   switch ( d->fieldId() ) {
00349     case Private::FormattedName:
00350       a.setFormattedName( value );
00351       return true;
00352     case Private::FamilyName:
00353       a.setFamilyName( value );
00354       return true;
00355     case Private::GivenName:
00356       a.setGivenName( value );
00357       return true;
00358     case Private::AdditionalName:
00359       a.setAdditionalName( value );
00360       return true;
00361     case Private::Prefix:
00362       a.setPrefix( value );
00363       return true;
00364     case Private::Suffix:
00365       a.setSuffix( value );
00366       return true;
00367     case Private::NickName:
00368       a.setNickName( value );
00369       return true;
00370     case Private::Mailer:
00371       a.setMailer( value );
00372       return true;
00373     case Private::Title:
00374       a.setTitle( value );
00375       return true;
00376     case Private::Role:
00377       a.setRole( value );
00378       return true;
00379     case Private::Organization:
00380       a.setOrganization( value );
00381       return true;
00382     case Private::Department:
00383       a.setDepartment( value );
00384       return true;
00385     case Private::Note:
00386       a.setNote( value );
00387       return true;
00388     case Private::Birthday:
00389       a.setBirthday( QDateTime::fromString( value, Qt::ISODate ) );
00390       return true;
00391     case Private::CustomField:
00392       a.insertCustom( d->app(), d->key(), value );
00393       return true;
00394     default:
00395       return false;
00396   }
00397 }
00398 
00399 QString Field::sortKey( const KABC::Addressee &a )
00400 {
00401   switch ( d->fieldId() ) {
00402     case Private::FormattedName:
00403       return a.formattedName();
00404     case Private::FamilyName:
00405       return a.familyName();
00406     case Private::GivenName:
00407       return a.givenName();
00408     case Private::AdditionalName:
00409       return a.additionalName();
00410     case Private::Prefix:
00411       return a.prefix();
00412     case Private::Suffix:
00413       return a.suffix();
00414     case Private::NickName:
00415       return a.nickName();
00416     case Private::Mailer:
00417       return a.mailer();
00418     case Private::Title:
00419       return a.title();
00420     case Private::Role:
00421       return a.role();
00422     case Private::Organization:
00423       return a.organization();
00424     case Private::Department:
00425       return a.department();
00426     case Private::Note:
00427       return a.note();
00428     case Private::Birthday:
00429       if ( a.birthday().isValid() ) {
00430         QDate date = a.birthday().date();
00431         QString key;
00432         key.sprintf( "%02d-%02d", date.month(), date.day() );
00433         return key;
00434       } else
00435         return QString( "00-00" );
00436     default:
00437       return value( a ).toLower();
00438   }
00439 }
00440 
00441 bool Field::isCustom()
00442 {
00443   return d->fieldId() == Private::CustomField;
00444 }
00445 
00446 Field::List Field::allFields()
00447 {
00448   if ( Private::mAllFields.isEmpty() ) {
00449     createField( Private::FormattedName, Frequent );
00450     createField( Private::FamilyName, Frequent );
00451     createField( Private::GivenName, Frequent );
00452     createField( Private::AdditionalName );
00453     createField( Private::Prefix );
00454     createField( Private::Suffix );
00455     createField( Private::NickName, Personal );
00456     createField( Private::Birthday, Personal );
00457     createField( Private::HomeAddressStreet, Address|Personal );
00458     createField( Private::HomeAddressLocality, Address|Personal );
00459     createField( Private::HomeAddressRegion, Address|Personal );
00460     createField( Private::HomeAddressPostalCode, Address|Personal );
00461     createField( Private::HomeAddressCountry, Address|Personal );
00462     createField( Private::HomeAddressLabel, Address|Personal );
00463     createField( Private::BusinessAddressStreet, Address|Organization );
00464     createField( Private::BusinessAddressLocality, Address|Organization );
00465     createField( Private::BusinessAddressRegion, Address|Organization );
00466     createField( Private::BusinessAddressPostalCode, Address|Organization );
00467     createField( Private::BusinessAddressCountry, Address|Organization );
00468     createField( Private::BusinessAddressLabel, Address|Organization );
00469     createField( Private::HomePhone, Personal|Frequent );
00470     createField( Private::BusinessPhone, Organization|Frequent );
00471     createField( Private::MobilePhone, Frequent );
00472     createField( Private::HomeFax );
00473     createField( Private::BusinessFax );
00474     createField( Private::CarPhone );
00475     createField( Private::Isdn );
00476     createField( Private::Pager );
00477     createField( Private::Email, Email|Frequent );
00478     createField( Private::Mailer, Email );
00479     createField( Private::Title, Organization );
00480     createField( Private::Role, Organization );
00481     createField( Private::Organization, Organization );
00482     createField( Private::Department, Organization );
00483     createField( Private::Note );
00484     createField( Private::Url );
00485   }
00486 
00487   return Private::mAllFields;
00488 }
00489 
00490 Field::List Field::defaultFields()
00491 {
00492   if ( Private::mDefaultFields.isEmpty() ) {
00493     createDefaultField( Private::FormattedName );
00494     createDefaultField( Private::Email );
00495   }
00496 
00497   return Private::mDefaultFields;
00498 }
00499 
00500 void Field::createField( int id, int category )
00501 {
00502   Private::mAllFields.append( new Field( new Private( id, category ) ) );
00503 }
00504 
00505 void Field::createDefaultField( int id, int category )
00506 {
00507   Private::mDefaultFields.append( new Field( new Private( id, category ) ) );
00508 }
00509 
00510 void Field::deleteFields()
00511 {
00512   Field::List::ConstIterator it;
00513 
00514   for ( it = Private::mAllFields.constBegin(); it != Private::mAllFields.constEnd(); ++it ) {
00515     delete (*it);
00516   }
00517   Private::mAllFields.clear();
00518 
00519   for ( it = Private::mDefaultFields.constBegin(); it != Private::mDefaultFields.constEnd(); ++it ) {
00520     delete (*it);
00521   }
00522   Private::mDefaultFields.clear();
00523 
00524   for ( it = Private::mCustomFields.constBegin(); it != Private::mCustomFields.constEnd(); ++it ) {
00525     delete (*it);
00526   }
00527   Private::mCustomFields.clear();
00528 }
00529 
00530 void Field::saveFields( const QString &identifier,
00531                         const Field::List &fields )
00532 {
00533   KConfigGroup cg( KGlobal::config(), "KABCFields" );
00534 
00535   saveFields( cg, identifier, fields );
00536 }
00537 
00538 void Field::saveFields( KConfigGroup &cfg, const QString &identifier,
00539                         const Field::List &fields )
00540 {
00541   QList<int> fieldIds;
00542 
00543   int custom = 0;
00544   Field::List::ConstIterator it;
00545   for ( it = fields.begin(); it != fields.end(); ++it ) {
00546     fieldIds.append( (*it)->d->fieldId() );
00547     if ( (*it)->isCustom() ) {
00548       QStringList customEntry;
00549       customEntry << (*it)->d->label();
00550       customEntry << (*it)->d->key();
00551       customEntry << (*it)->d->app();
00552       cfg.writeEntry( "KABC_CustomEntry_" + identifier + '_' +
00553                        QString::number( custom++ ), customEntry );
00554     }
00555   }
00556 
00557   cfg.writeEntry( identifier, fieldIds );
00558 }
00559 
00560 Field::List Field::restoreFields( const QString &identifier )
00561 {
00562   KConfigGroup cg( KGlobal::config(), "KABCFields" );
00563 
00564   return restoreFields( cg, identifier );
00565 }
00566 
00567 Field::List Field::restoreFields( const KConfigGroup &cfg, const QString &identifier )
00568 {
00569   const QList<int> fieldIds = cfg.readEntry( identifier,QList<int>() );
00570 
00571   Field::List fields;
00572 
00573   int custom = 0;
00574   QList<int>::ConstIterator it;
00575   for ( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
00576     Private *f = 0;
00577     if ( (*it) == Private::CustomField ) {
00578       QStringList customEntry = cfg.readEntry( "KABC_CustomEntry_" +
00579                                                  identifier + '_' +
00580                                                  QString::number( custom++ ),QStringList() );
00581       f = new Private( *it, CustomCategory, customEntry[ 0 ],
00582                          customEntry[ 1 ], customEntry[ 2 ] );
00583     } else {
00584       f = new Private( *it );
00585     }
00586     fields.append( new Field( f ) );
00587   }
00588 
00589   return fields;
00590 }
00591 
00592 bool Field::equals( Field *field )
00593 {
00594   bool sameId = ( d->fieldId() == field->d->fieldId() );
00595 
00596   if ( !sameId ) return false;
00597 
00598   if ( d->fieldId() != Private::CustomField ) return true;
00599 
00600   return d->key() == field->d->key();
00601 }
00602 
00603 Field *Field::createCustomField( const QString &label, int category,
00604                                  const QString &key, const QString &app )
00605 {
00606   Field *field = new Field( new Private( Private::CustomField,
00607                                            category | CustomCategory,
00608                                            label, key, app ) );
00609   Private::mCustomFields.append( field );
00610 
00611   return field;
00612 }

kabc

Skip menu "kabc"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  • kabc
  • kblog
  • kcal
  • kimap
  • kioslave
  •   imap4
  •   mbox
  • kldap
  • kmime
  • kpimidentities
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.5.7
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal