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

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
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.5.9-20090814
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