22 #include <tdeconfig.h>
23 #include <tdeglobal.h>
30 class Field::FieldImpl
33 FieldImpl(
int fieldId,
int category = 0,
34 const TQString &label = TQString::null,
35 const TQString &key = TQString::null,
36 const TQString &app = TQString::null )
37 : mFieldId( fieldId ), mCategory( category ), mLabel(
label ),
38 mKey(
key ), mApp( app ) {}
46 int fieldId() {
return mFieldId; }
47 int category() {
return mCategory; }
49 TQString
label() {
return mLabel; }
50 TQString
key() {
return mKey; }
51 TQString app() {
return mApp; }
63 Field::List Field::mAllFields;
64 Field::List Field::mDefaultFields;
65 Field::List Field::mCustomFields;
68 Field::Field( FieldImpl *impl )
78 TQString Field::label()
80 switch ( mImpl->fieldId() ) {
82 case FieldImpl::CustomField:
83 return mImpl->label();
85 return i18n(
"Unknown Field");
91 return mImpl->category();
94 TQString Field::categoryLabel(
int category )
100 return i18n(
"Frequent");
102 return i18n(
"street/postal",
"Address");
104 return i18n(
"Email");
106 return i18n(
"Personal");
108 return i18n(
"Organization");
110 return i18n(
"Custom");
112 return i18n(
"Undefined");
118 switch ( mImpl->fieldId() ) {
120 case FieldImpl::Email:
122 case FieldImpl::Birthday:
123 if ( a.birthday().isValid() )
124 return a.birthday().date().toString( TQt::ISODate );
126 return TQString::null;
128 return a.url().prettyURL();
129 case FieldImpl::HomePhone:
131 PhoneNumber::List::ConstIterator it;
135 const PhoneNumber::List list = a.
phoneNumbers( PhoneNumber::Home | PhoneNumber::Pref );
136 for ( it = list.begin(); it != list.end(); ++it )
137 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
138 return (*it).number();
143 const PhoneNumber::List list = a.
phoneNumbers( PhoneNumber::Home );
144 for ( it = list.begin(); it != list.end(); ++it )
145 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Home )
146 return (*it).number();
149 return TQString::null;
151 case FieldImpl::BusinessPhone:
153 PhoneNumber::List::ConstIterator it;
157 const PhoneNumber::List list = a.
phoneNumbers( PhoneNumber::Work | PhoneNumber::Pref );
158 for ( it = list.begin(); it != list.end(); ++it )
159 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
160 return (*it).number();
165 const PhoneNumber::List list = a.
phoneNumbers( PhoneNumber::Work );
166 for ( it = list.begin(); it != list.end(); ++it )
167 if ( ((*it).type() & ~(PhoneNumber::Pref)) == PhoneNumber::Work )
168 return (*it).number();
171 return TQString::null;
173 case FieldImpl::MobilePhone:
175 case FieldImpl::HomeFax:
177 case FieldImpl::BusinessFax:
179 case FieldImpl::CarPhone:
181 case FieldImpl::Isdn:
183 case FieldImpl::Pager:
185 case FieldImpl::HomeAddressStreet:
187 case FieldImpl::HomeAddressPostOfficeBox:
189 case FieldImpl::HomeAddressLocality:
191 case FieldImpl::HomeAddressRegion:
193 case FieldImpl::HomeAddressPostalCode:
195 case FieldImpl::HomeAddressCountry:
197 case FieldImpl::HomeAddressLabel:
199 case FieldImpl::BusinessAddressStreet:
201 case FieldImpl::BusinessAddressPostOfficeBox:
203 case FieldImpl::BusinessAddressLocality:
205 case FieldImpl::BusinessAddressRegion:
207 case FieldImpl::BusinessAddressPostalCode:
209 case FieldImpl::BusinessAddressCountry:
211 case FieldImpl::BusinessAddressLabel:
213 case FieldImpl::CustomField:
214 return a.
custom( mImpl->app(), mImpl->key() );
216 return TQString::null;
222 switch ( mImpl->fieldId() ) {
224 case FieldImpl::MobilePhone:
231 case FieldImpl::HomeFax:
238 case FieldImpl::BusinessFax:
245 case FieldImpl::CarPhone:
252 case FieldImpl::Isdn:
259 case FieldImpl::Pager:
266 case FieldImpl::HomeAddressStreet:
273 case FieldImpl::HomeAddressPostOfficeBox:
280 case FieldImpl::HomeAddressLocality:
287 case FieldImpl::HomeAddressRegion:
294 case FieldImpl::HomeAddressPostalCode:
301 case FieldImpl::HomeAddressCountry:
308 case FieldImpl::HomeAddressLabel:
315 case FieldImpl::BusinessAddressStreet:
322 case FieldImpl::BusinessAddressPostOfficeBox:
329 case FieldImpl::BusinessAddressLocality:
336 case FieldImpl::BusinessAddressRegion:
343 case FieldImpl::BusinessAddressPostalCode:
350 case FieldImpl::BusinessAddressCountry:
357 case FieldImpl::BusinessAddressLabel:
364 case FieldImpl::Birthday:
365 a.setBirthday( TQDate::fromString( value, TQt::ISODate ) );
367 case FieldImpl::CustomField:
377 switch ( mImpl->fieldId() ) {
379 case FieldImpl::Birthday:
380 if ( a.birthday().isValid() ) {
381 TQDate date = a.birthday().date();
383 key.sprintf(
"%02d-%02d", date.month(), date.day() );
386 return TQString(
"00-00" );
388 return value( a ).lower();
392 bool Field::isCustom()
394 return mImpl->fieldId() == FieldImpl::CustomField;
397 Field::List Field::allFields()
399 if ( mAllFields.isEmpty() ) {
406 Field::List Field::defaultFields()
408 if ( mDefaultFields.isEmpty() ) {
409 createDefaultField( FieldImpl::FormattedName );
410 createDefaultField( FieldImpl::Email );
413 return mDefaultFields;
416 void Field::createField(
int id,
int category )
418 mAllFields.append(
new Field(
new FieldImpl(
id, category ) ) );
421 void Field::createDefaultField(
int id,
int category )
423 mDefaultFields.append(
new Field(
new FieldImpl(
id, category ) ) );
426 void Field::deleteFields()
428 Field::List::ConstIterator it;
430 for ( it = mAllFields.constBegin(); it != mAllFields.constEnd(); ++it ) {
435 for ( it = mDefaultFields.constBegin(); it != mDefaultFields.constEnd(); ++it ) {
438 mDefaultFields.clear();
440 for ( it = mCustomFields.constBegin(); it != mCustomFields.constEnd(); ++it ) {
443 mCustomFields.clear();
446 void Field::saveFields(
const TQString &identifier,
447 const Field::List &fields )
452 saveFields( cfg, identifier, fields );
455 void Field::saveFields(
TDEConfig *cfg,
const TQString &identifier,
456 const Field::List &fields )
458 TQValueList<int> fieldIds;
461 Field::List::ConstIterator it;
462 for( it = fields.begin(); it != fields.end(); ++it ) {
463 fieldIds.append( (*it)->mImpl->fieldId() );
464 if( (*it)->isCustom() ) {
465 TQStringList customEntry;
466 customEntry << (*it)->mImpl->label();
467 customEntry << (*it)->mImpl->key();
468 customEntry << (*it)->mImpl->app();
469 cfg->
writeEntry(
"KABC_CustomEntry_" + identifier +
"_" +
470 TQString::number( custom++ ), customEntry );
477 Field::List Field::restoreFields(
const TQString &identifier )
482 return restoreFields( cfg, identifier );
485 Field::List Field::restoreFields(
TDEConfig *cfg,
const TQString &identifier )
492 TQValueList<int>::ConstIterator it;
493 for( it = fieldIds.begin(); it != fieldIds.end(); ++it ) {
495 if ( (*it) == FieldImpl::CustomField ) {
496 TQStringList customEntry = cfg->
readListEntry(
"KABC_CustomEntry_" +
498 TQString::number( custom++ ) );
499 f =
new FieldImpl( *it, CustomCategory, customEntry[ 0 ],
500 customEntry[ 1 ], customEntry[ 2 ] );
502 f =
new FieldImpl( *it );
504 fields.append(
new Field( f ) );
510 bool Field::equals( Field *field )
512 bool sameId = ( mImpl->fieldId() == field->mImpl->fieldId() );
514 if ( !sameId )
return false;
516 if ( mImpl->fieldId() != FieldImpl::CustomField )
return true;
518 return mImpl->key() == field->mImpl->key();
521 Field *Field::createCustomField(
const TQString &label,
int category,
522 const TQString &key,
const TQString &app )
524 Field *field =
new Field(
new FieldImpl( FieldImpl::CustomField,
525 category | CustomCategory,
527 mCustomFields.append( field );
Postal address information.
TQString street() const
Returns the street.
TQString postOfficeBox() const
Returns the post office box.
void setPostalCode(const TQString &)
Sets the postal code.
TQString country() const
Returns the country.
void setLocality(const TQString &)
Sets the locality, e.g.
TQString postalCode() const
Returns the postal code.
TQString label() const
Returns the delivery label.
void setRegion(const TQString &)
Sets the region, e.g.
void setLabel(const TQString &)
Sets the delivery label.
TQString region() const
Returns the region.
void setStreet(const TQString &)
Sets the street (including number).
TQString locality() const
Returns the locality.
void setCountry(const TQString &)
Sets the country.
void setPostOfficeBox(const TQString &)
Sets the post office box.
void insertPhoneNumber(const PhoneNumber &phoneNumber)
Insert a phone number.
void insertCustom(const TQString &app, const TQString &name, const TQString &value)
Insert custom entry.
Address address(int type) const
Return address, which matches the given type.
void insertAddress(const Address &address)
Insert an address.
PhoneNumber phoneNumber(int type) const
Return phone number, which matches the given type.
TQString custom(const TQString &app, const TQString &name) const
Return value of custom entry, identified by app and entry name.
TQString preferredEmail() const
Return preferred email address.
PhoneNumber::List phoneNumbers() const
Return list of all phone numbers.
TQString number() const
Returns the number.
void setNumber(const TQString &)
Sets the number.
TQValueList< int > readIntListEntry(const TQString &pKey) const
int readListEntry(const TQString &pKey, TQStrList &list, char sep=',') const
void writeEntry(const TQString &pKey, const TQString &pValue, bool bPersistent=true, bool bGlobal=false, bool bNLS=false)
static TDEConfig * config()
static data, shared by ALL addressee objects
TQString label(StdAccel id)