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::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 Logo
This file is part of the documentation for kabc Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 23:27:21 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003