00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <klocale.h>
00023 #include <kconfig.h>
00024 #include <kglobal.h>
00025
00026 #include "field.h"
00027 #include "address.h"
00028
00029 using namespace KABC;
00030
00031 class Field::FieldImpl
00032 {
00033 public:
00034 FieldImpl( int fieldId, int category = 0,
00035 const QString &label = QString::null,
00036 const QString &key = QString::null,
00037 const QString &app = QString::null )
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 private:
00092 int mFieldId;
00093 int mCategory;
00094
00095 QString mLabel;
00096 QString mKey;
00097 QString mApp;
00098 };
00099
00100
00101 Field::List Field::mAllFields;
00102 Field::List Field::mDefaultFields;
00103 Field::List Field::mCustomFields;
00104
00105
00106 Field::Field( FieldImpl *impl )
00107 {
00108 mImpl = impl;
00109 }
00110
00111 Field::~Field()
00112 {
00113 delete mImpl;
00114 }
00115
00116 QString Field::label()
00117 {
00118 switch ( mImpl->fieldId() ) {
00119 case FieldImpl::FormattedName:
00120 return Addressee::formattedNameLabel();
00121 case FieldImpl::FamilyName:
00122 return Addressee::familyNameLabel();
00123 case FieldImpl::GivenName:
00124 return Addressee::givenNameLabel();
00125 case FieldImpl::AdditionalName:
00126 return Addressee::additionalNameLabel();
00127 case FieldImpl::Prefix:
00128 return Addressee::prefixLabel();
00129 case FieldImpl::Suffix:
00130 return Addressee::suffixLabel();
00131 case FieldImpl::NickName:
00132 return Addressee::nickNameLabel();
00133 case FieldImpl::Birthday:
00134 return Addressee::birthdayLabel();
00135 case FieldImpl::HomeAddressStreet:
00136 return Addressee::homeAddressStreetLabel();
00137 case FieldImpl::HomeAddressPostOfficeBox:
00138 return Addressee::homeAddressPostOfficeBoxLabel();
00139 case FieldImpl::HomeAddressLocality:
00140 return Addressee::homeAddressLocalityLabel();
00141 case FieldImpl::HomeAddressRegion:
00142 return Addressee::homeAddressRegionLabel();
00143 case FieldImpl::HomeAddressPostalCode:
00144 return Addressee::homeAddressPostalCodeLabel();
00145 case FieldImpl::HomeAddressCountry:
00146 return Addressee::homeAddressCountryLabel();
00147 case FieldImpl::HomeAddressLabel:
00148 return Addressee::homeAddressLabelLabel();
00149 case FieldImpl::BusinessAddressStreet:
00150 return Addressee::businessAddressStreetLabel();
00151 case FieldImpl::BusinessAddressPostOfficeBox:
00152 return Addressee::businessAddressPostOfficeBoxLabel();
00153 case FieldImpl::BusinessAddressLocality:
00154 return Addressee::businessAddressLocalityLabel();
00155 case FieldImpl::BusinessAddressRegion:
00156 return Addressee::businessAddressRegionLabel();
00157 case FieldImpl::BusinessAddressPostalCode:
00158 return Addressee::businessAddressPostalCodeLabel();
00159 case FieldImpl::BusinessAddressCountry:
00160 return Addressee::businessAddressCountryLabel();
00161 case FieldImpl::BusinessAddressLabel:
00162 return Addressee::businessAddressLabelLabel();
00163 case FieldImpl::HomePhone:
00164 return Addressee::homePhoneLabel();
00165 case FieldImpl::BusinessPhone:
00166 return Addressee::businessPhoneLabel();
00167 case FieldImpl::MobilePhone:
00168 return Addressee::mobilePhoneLabel();
00169 case FieldImpl::HomeFax:
00170 return Addressee::homeFaxLabel();
00171 case FieldImpl::BusinessFax:
00172 return Addressee::businessFaxLabel();
00173 case FieldImpl::CarPhone:
00174 return Addressee::carPhoneLabel();
00175 case FieldImpl::Isdn:
00176 return Addressee::isdnLabel();
00177 case FieldImpl::Pager:
00178 return Addressee::pagerLabel();
00179 case FieldImpl::Email:
00180 return Addressee::emailLabel();
00181 case FieldImpl::Mailer:
00182 return Addressee::mailerLabel();
00183 case FieldImpl::Title:
00184 return Addressee::titleLabel();
00185 case FieldImpl::Role:
00186 return Addressee::roleLabel();
00187 case FieldImpl::Organization:
00188 return Addressee::organizationLabel();
00189 case FieldImpl::Department:
00190 return Addressee::departmentLabel();
00191 case FieldImpl::Note:
00192 return Addressee::noteLabel();
00193 case FieldImpl::Url:
00194 return Addressee::urlLabel();
00195 case FieldImpl::CustomField:
00196 return mImpl->label();
00197 default:
00198 return i18n("Unknown Field");
00199 }
00200 }
00201
00202 int Field::category()
00203 {
00204 return mImpl->category();
00205 }
00206
00207 QString Field::categoryLabel( int category )
00208 {
00209 switch ( category ) {
00210 case All:
00211 return i18n("All");
00212 case Frequent:
00213 return i18n("Frequent");
00214 case Address:
00215 return i18n("street/postal","Address");
00216 case Email:
00217 return i18n("Email");
00218 case Personal:
00219 return i18n("Personal");
00220 case Organization:
00221 return i18n("Organization");
00222 case CustomCategory:
00223 return i18n("Custom");
00224 default:
00225 return i18n("Undefined");
00226 }
00227 }
00228
00229 QString Field::value( const KABC::Addressee &a )
00230 {
00231 switch ( mImpl->fieldId() ) {
00232 case FieldImpl::FormattedName:
00233 return a.formattedName();
00234 case FieldImpl::FamilyName:
00235 return a.familyName();
00236 case FieldImpl::GivenName:
00237 return a.givenName();
00238 case FieldImpl::AdditionalName:
00239 return a.additionalName();
00240 case FieldImpl::Prefix:
00241 return a.prefix();
00242 case FieldImpl::Suffix:
00243 return a.suffix();
00244 case FieldImpl::NickName:
00245 return a.nickName();
00246 case FieldImpl::Mailer:
00247 return a.mailer();
00248 case FieldImpl::Title:
00249 return a.title();
00250 case FieldImpl::Role:
00251 return a.role();
00252 case FieldImpl::Organization:
00253 return a.organization();
00254 case FieldImpl::Department:
00255 return a.department();
00256 case FieldImpl::Note:
00257 return a.note();
00258 case FieldImpl::Email:
00259 return a.preferredEmail();
00260 case FieldImpl::Birthday:
00261 if ( a.birthday().isValid() )
00262 return a.birthday().date().toString( Qt::ISODate );
00263 else
00264 return QString::null;
00265 case FieldImpl::Url:
00266 return a.url().prettyURL();
00267 case FieldImpl::HomePhone:
00268 {
00269 PhoneNumber::List::ConstIterator it;
00270
00271 {
00272
00273 const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
00274 for ( it = list.begin(); it != list.end(); ++it )
00275 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00276 return (*it).number();
00277 }
00278
00279 {
00280
00281 const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Home );
00282 for ( it = list.begin(); it != list.end(); ++it )
00283 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
00284 return (*it).number();
00285 }
00286
00287 return QString::null;
00288 }
00289 case FieldImpl::BusinessPhone:
00290 {
00291 PhoneNumber::List::ConstIterator it;
00292
00293 {
00294
00295 const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
00296 for ( it = list.begin(); it != list.end(); ++it )
00297 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00298 return (*it).number();
00299 }
00300
00301 {
00302
00303 const PhoneNumber::List list = a.phoneNumbers( PhoneNumber::Work );
00304 for ( it = list.begin(); it != list.end(); ++it )
00305 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
00306 return (*it).number();
00307 }
00308
00309 return QString::null;
00310 }
00311 case FieldImpl::MobilePhone:
00312 return a.phoneNumber( PhoneNumber::Cell ).number();
00313 case FieldImpl::HomeFax:
00314 return a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax ).number();
00315 case FieldImpl::BusinessFax:
00316 return a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax ).number();
00317 case FieldImpl::CarPhone:
00318 return a.phoneNumber( PhoneNumber::Car ).number();
00319 case FieldImpl::Isdn:
00320 return a.phoneNumber( PhoneNumber::Isdn ).number();
00321 case FieldImpl::Pager:
00322 return a.phoneNumber( PhoneNumber::Pager ).number();
00323 case FieldImpl::HomeAddressStreet:
00324 return a.address( Address::Home ).street();
00325 case FieldImpl::HomeAddressPostOfficeBox:
00326 return a.address( Address::Home ).postOfficeBox();
00327 case FieldImpl::HomeAddressLocality:
00328 return a.address( Address::Home ).locality();
00329 case FieldImpl::HomeAddressRegion:
00330 return a.address( Address::Home ).region();
00331 case FieldImpl::HomeAddressPostalCode:
00332 return a.address( Address::Home ).postalCode();
00333 case FieldImpl::HomeAddressCountry:
00334 return a.address( Address::Home ).country();
00335 case FieldImpl::HomeAddressLabel:
00336 return a.address( Address::Home ).label();
00337 case FieldImpl::BusinessAddressStreet:
00338 return a.address( Address::Work ).street();
00339 case FieldImpl::BusinessAddressPostOfficeBox:
00340 return a.address( Address::Work ).postOfficeBox();
00341 case FieldImpl::BusinessAddressLocality:
00342 return a.address( Address::Work ).locality();
00343 case FieldImpl::BusinessAddressRegion:
00344 return a.address( Address::Work ).region();
00345 case FieldImpl::BusinessAddressPostalCode:
00346 return a.address( Address::Work ).postalCode();
00347 case FieldImpl::BusinessAddressCountry:
00348 return a.address( Address::Work ).country();
00349 case FieldImpl::BusinessAddressLabel:
00350 return a.address( Address::Work ).label();
00351 case FieldImpl::CustomField:
00352 return a.custom( mImpl->app(), mImpl->key() );
00353 default:
00354 return QString::null;
00355 }
00356 }
00357
00358 bool Field::setValue( KABC::Addressee &a, const QString &value )
00359 {
00360 switch ( mImpl->fieldId() ) {
00361 case FieldImpl::FormattedName:
00362 a.setFormattedName( value );
00363 return true;
00364 case FieldImpl::FamilyName:
00365 a.setFamilyName( value );
00366 return true;
00367 case FieldImpl::GivenName:
00368 a.setGivenName( value );
00369 return true;
00370 case FieldImpl::AdditionalName:
00371 a.setAdditionalName( value );
00372 return true;
00373 case FieldImpl::Prefix:
00374 a.setPrefix( value );
00375 return true;
00376 case FieldImpl::Suffix:
00377 a.setSuffix( value );
00378 return true;
00379 case FieldImpl::NickName:
00380 a.setNickName( value );
00381 return true;
00382 case FieldImpl::Mailer:
00383 a.setMailer( value );
00384 return true;
00385 case FieldImpl::Title:
00386 a.setTitle( value );
00387 return true;
00388 case FieldImpl::Role:
00389 a.setRole( value );
00390 return true;
00391 case FieldImpl::Organization:
00392 a.setOrganization( value );
00393 return true;
00394 case FieldImpl::Department:
00395 a.setDepartment( value );
00396 return true;
00397 case FieldImpl::Note:
00398 a.setNote( value );
00399 return true;
00400 case FieldImpl::MobilePhone:
00401 {
00402 PhoneNumber number = a.phoneNumber( PhoneNumber::Cell );
00403 number.setNumber( value );
00404 a.insertPhoneNumber( number );
00405 return true;
00406 }
00407 case FieldImpl::HomeFax:
00408 {
00409 PhoneNumber number = a.phoneNumber( PhoneNumber::Home | PhoneNumber::Fax );
00410 number.setNumber( value );
00411 a.insertPhoneNumber( number );
00412 return true;
00413 }
00414 case FieldImpl::BusinessFax:
00415 {
00416 PhoneNumber number = a.phoneNumber( PhoneNumber::Work | PhoneNumber::Fax );
00417 number.setNumber( value );
00418 a.insertPhoneNumber( number );
00419 return true;
00420 }
00421 case FieldImpl::CarPhone:
00422 {
00423 PhoneNumber number = a.phoneNumber( PhoneNumber::Car );
00424 number.setNumber( value );
00425 a.insertPhoneNumber( number );
00426 return true;
00427 }
00428 case FieldImpl::Isdn:
00429 {
00430 PhoneNumber number = a.phoneNumber( PhoneNumber::Isdn );
00431 number.setNumber( value );
00432 a.insertPhoneNumber( number );
00433 return true;
00434 }
00435 case FieldImpl::Pager:
00436 {
00437 PhoneNumber number = a.phoneNumber( PhoneNumber::Pager );
00438 number.setNumber( value );
00439 a.insertPhoneNumber( number );
00440 return true;
00441 }
00442 case FieldImpl::HomeAddressStreet:
00443 {
00444 KABC::Address address = a.address( Address::Home );
00445 address.setStreet( value );
00446 a.insertAddress( address );
00447 return true;
00448 }
00449 case FieldImpl::HomeAddressPostOfficeBox:
00450 {
00451 KABC::Address address = a.address( Address::Home );
00452 address.setPostOfficeBox( value );
00453 a.insertAddress( address );
00454 return true;
00455 }
00456 case FieldImpl::HomeAddressLocality:
00457 {
00458 KABC::Address address = a.address( Address::Home );
00459 address.setLocality( value );
00460 a.insertAddress( address );
00461 return true;
00462 }
00463 case FieldImpl::HomeAddressRegion:
00464 {
00465 KABC::Address address = a.address( Address::Home );
00466 address.setRegion( value );
00467 a.insertAddress( address );
00468 return true;
00469 }
00470 case FieldImpl::HomeAddressPostalCode:
00471 {
00472 KABC::Address address = a.address( Address::Home );
00473 address.setPostalCode( value );
00474 a.insertAddress( address );
00475 return true;
00476 }
00477 case FieldImpl::HomeAddressCountry:
00478 {
00479 KABC::Address address = a.address( Address::Home );
00480 address.setCountry( value );
00481 a.insertAddress( address );
00482 return true;
00483 }
00484 case FieldImpl::HomeAddressLabel:
00485 {
00486 KABC::Address address = a.address( Address::Home );
00487 address.setLabel( value );
00488 a.insertAddress( address );
00489 return true;
00490 }
00491 case FieldImpl::BusinessAddressStreet:
00492 {
00493 KABC::Address address = a.address( Address::Work );
00494 address.setStreet( value );
00495 a.insertAddress( address );
00496 return true;
00497 }
00498 case FieldImpl::BusinessAddressPostOfficeBox:
00499 {
00500 KABC::Address address = a.address( Address::Work );
00501 address.setPostOfficeBox( value );
00502 a.insertAddress( address );
00503 return true;
00504 }
00505 case FieldImpl::BusinessAddressLocality:
00506 {
00507 KABC::Address address = a.address( Address::Work );
00508 address.setLocality( value );
00509 a.insertAddress( address );
00510 return true;
00511 }
00512 case FieldImpl::BusinessAddressRegion:
00513 {
00514 KABC::Address address = a.address( Address::Work );
00515 address.setRegion( value );
00516 a.insertAddress( address );
00517 return true;
00518 }
00519 case FieldImpl::BusinessAddressPostalCode:
00520 {
00521 KABC::Address address = a.address( Address::Work );
00522 address.setPostalCode( value );
00523 a.insertAddress( address );
00524 return true;
00525 }
00526 case FieldImpl::BusinessAddressCountry:
00527 {
00528 KABC::Address address = a.address( Address::Work );
00529 address.setCountry( value );
00530 a.insertAddress( address );
00531 return true;
00532 }
00533 case FieldImpl::BusinessAddressLabel:
00534 {
00535 KABC::Address address = a.address( Address::Work );
00536 address.setLabel( value );
00537 a.insertAddress( address );
00538 return true;
00539 }
00540 case FieldImpl::Birthday:
00541 a.setBirthday( QDate::fromString( value, Qt::ISODate ) );
00542 return true;
00543 case FieldImpl::CustomField:
00544 a.insertCustom( mImpl->app(), mImpl->key(), value );
00545 return true;
00546 default:
00547 return false;
00548 }
00549 }
00550
00551 QString Field::sortKey( const KABC::Addressee &a )
00552 {
00553 switch ( mImpl->fieldId() ) {
00554 case FieldImpl::FormattedName:
00555 return a.formattedName();
00556 case FieldImpl::FamilyName:
00557 return a.familyName();
00558 case FieldImpl::GivenName:
00559 return a.givenName();
00560 case FieldImpl::AdditionalName:
00561 return a.additionalName();
00562 case FieldImpl::Prefix:
00563 return a.prefix();
00564 case FieldImpl::Suffix:
00565 return a.suffix();
00566 case FieldImpl::NickName:
00567 return a.nickName();
00568 case FieldImpl::Mailer:
00569 return a.mailer();
00570 case FieldImpl::Title:
00571 return a.title();
00572 case FieldImpl::Role:
00573 return a.role();
00574 case FieldImpl::Organization:
00575 return a.organization();
00576 case FieldImpl::Department:
00577 return a.department();
00578 case FieldImpl::Note:
00579 return a.note();
00580 case FieldImpl::Birthday:
00581 if ( a.birthday().isValid() ) {
00582 QDate date = a.birthday().date();
00583 QString key;
00584 key.sprintf( "%02d-%02d", date.month(), date.day() );
00585 return key;
00586 } else
00587 return QString( "00-00" );
00588 default:
00589 return value( a ).lower();
00590 }
00591 }
00592
00593 bool Field::isCustom()
00594 {
00595 return mImpl->fieldId() == FieldImpl::CustomField;
00596 }
00597
00598 Field::List Field::allFields()
00599 {
00600 if ( mAllFields.isEmpty() ) {
00601 createField( FieldImpl::FormattedName, Frequent );
00602 createField( FieldImpl::FamilyName, Frequent );
00603 createField( FieldImpl::GivenName, Frequent );
00604 createField( FieldImpl::AdditionalName );
00605 createField( FieldImpl::Prefix );
00606 createField( FieldImpl::Suffix );
00607 createField( FieldImpl::NickName, Personal );
00608 createField( FieldImpl::Birthday, Personal );
00609 createField( FieldImpl::HomeAddressStreet, Address|Personal );
00610 createField( FieldImpl::HomeAddressPostOfficeBox, Address|Personal );
00611 createField( FieldImpl::HomeAddressLocality, Address|Personal );
00612 createField( FieldImpl::HomeAddressRegion, Address|Personal );
00613 createField( FieldImpl::HomeAddressPostalCode, Address|Personal );
00614 createField( FieldImpl::HomeAddressCountry, Address|Personal );
00615 createField( FieldImpl::HomeAddressLabel, Address|Personal );
00616 createField( FieldImpl::BusinessAddressStreet, Address|Organization );
00617 createField( FieldImpl::BusinessAddressPostOfficeBox, Address|Organization );
00618 createField( FieldImpl::BusinessAddressLocality, Address|Organization );
00619 createField( FieldImpl::BusinessAddressRegion, Address|Organization );
00620 createField( FieldImpl::BusinessAddressPostalCode, Address|Organization );
00621 createField( FieldImpl::BusinessAddressCountry, Address|Organization );
00622 createField( FieldImpl::BusinessAddressLabel, Address|Organization );
00623 createField( FieldImpl::HomePhone, Personal|Frequent );
00624 createField( FieldImpl::BusinessPhone, Organization|Frequent );
00625 createField( FieldImpl::MobilePhone, Frequent );
00626 createField( FieldImpl::HomeFax );
00627 createField( FieldImpl::BusinessFax );
00628 createField( FieldImpl::CarPhone );
00629 createField( FieldImpl::Isdn );
00630 createField( FieldImpl::Pager );
00631 createField( FieldImpl::Email, Email|Frequent );
00632 createField( FieldImpl::Mailer, Email );
00633 createField( FieldImpl::Title, Organization );
00634 createField( FieldImpl::Role, Organization );
00635 createField( FieldImpl::Organization, Organization );
00636 createField( FieldImpl::Department, Organization );
00637 createField( FieldImpl::Note );
00638 createField( FieldImpl::Url );
00639 }
00640
00641 return mAllFields;
00642 }
00643
00644 Field::List Field::defaultFields()
00645 {
00646 if ( mDefaultFields.isEmpty() ) {
00647 createDefaultField( FieldImpl::FormattedName );
00648 createDefaultField( FieldImpl::Email );
00649 }
00650
00651 return mDefaultFields;
00652 }
00653
00654 void Field::createField( int id, int category )
00655 {
00656 mAllFields.append( new Field( new FieldImpl( id, category ) ) );
00657 }
00658
00659 void Field::createDefaultField( int id, int category )
00660 {
00661 mDefaultFields.append( new Field( new FieldImpl( id, category ) ) );
00662 }
00663
00664 void Field::deleteFields()
00665 {
00666 Field::List::ConstIterator it;
00667
00668 for ( it = mAllFields.constBegin(); it != mAllFields.constEnd(); ++it ) {
00669 delete (*it);
00670 }
00671 mAllFields.clear();
00672
00673 for ( it = mDefaultFields.constBegin(); it != mDefaultFields.constEnd(); ++it ) {
00674 delete (*it);
00675 }
00676 mDefaultFields.clear();
00677
00678 for ( it = mCustomFields.constBegin(); it != mCustomFields.constEnd(); ++it ) {
00679 delete (*it);
00680 }
00681 mCustomFields.clear();
00682 }
00683
00684 void Field::saveFields( const QString &identifier,
00685 const Field::List &fields )
00686 {
00687 KConfig *cfg = KGlobal::config();
00688 KConfigGroupSaver( cfg, "KABCFields" );
00689
00690 saveFields( cfg, identifier, fields );
00691 }
00692
00693 void Field::saveFields( KConfig *cfg, const QString &identifier,
00694 const Field::List &fields )
00695 {
00696 QValueList<int> fieldIds;
00697
00698 int custom = 0;
00699 Field::List::ConstIterator it;
00700 for( it = fields.begin(); it != fields.end(); ++it ) {
00701 fieldIds.append( (*it)->mImpl->fieldId() );
00702 if( (*it)->isCustom() ) {
00703 QStringList customEntry;
00704 customEntry << (*it)->mImpl->label();
00705 customEntry << (*it)->mImpl->key();
00706 customEntry << (*it)->mImpl->app();
00707 cfg->writeEntry( "KABC_CustomEntry_" + identifier + "_" +
00708 QString::number( custom++ ), customEntry );
00709 }
00710 }
00711
00712 cfg->writeEntry( identifier, fieldIds );
00713 }
00714
00715 Field::List Field::restoreFields( const QString &identifier )
00716 {
00717 KConfig *cfg = KGlobal::config();
00718 KConfigGroupSaver( cfg, "KABCFields" );
00719
00720 return restoreFields( cfg, identifier );
00721 }
00722
00723 Field::List Field::restoreFields( KConfig *cfg, const QString &identifier )
00724 {
00725 const QValueList<int> fieldIds = cfg->readIntListEntry( identifier );
00726
00727 Field::List fields;
00728
00729 int custom = 0;
00730 QValueList<int>::ConstIterator it;
00731 for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
00732 FieldImpl *f = 0;
00733 if ( (*it) == FieldImpl::CustomField ) {
00734 QStringList customEntry = cfg->readListEntry( "KABC_CustomEntry_" +
00735 identifier + "_" +
00736 QString::number( custom++ ) );
00737 f = new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
00738 customEntry[ 1 ], customEntry[ 2 ] );
00739 } else {
00740 f = new FieldImpl( *it );
00741 }
00742 fields.append( new Field( f ) );
00743 }
00744
00745 return fields;
00746 }
00747
00748 bool Field::equals( Field *field )
00749 {
00750 bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
00751
00752 if ( !sameId ) return false;
00753
00754 if ( mImpl->fieldId() != FieldImpl::CustomField ) return true;
00755
00756 return mImpl->key() == field->mImpl->key();
00757 }
00758
00759 Field *Field::createCustomField( const QString &label, int category,
00760 const QString &key, const QString &app )
00761 {
00762 Field *field = new Field( new FieldImpl( FieldImpl::CustomField,
00763 category | CustomCategory,
00764 label, key, app ) );
00765 mCustomFields.append( field );
00766
00767 return field;
00768 }