williamr@4: /*
williamr@4: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
williamr@4: * All rights reserved.
williamr@4: * This component and the accompanying materials are made available
williamr@4: * under the terms of "Eclipse Public License v1.0"
williamr@4: * which accompanies this distribution, and is available
williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@4: *
williamr@4: * Initial Contributors:
williamr@4: * Nokia Corporation - initial contribution.
williamr@4: *
williamr@4: * Contributors:
williamr@4: *
williamr@4: * Description: 
williamr@4: *     Phonebook Contact item class.
williamr@4: *
williamr@4: */
williamr@4: 
williamr@4: 
williamr@4: #ifndef __CPbkContactItem_H__
williamr@4: #define __CPbkContactItem_H__
williamr@4: 
williamr@4: //  INCLUDES
williamr@4: #include <e32base.h>        // CBase, CArrayFixFlat
williamr@4: #include "MPbkFieldData.h"  // MPbkFieldDataArray
williamr@4: #include "PbkFields.hrh"    // TPbkFieldId
williamr@4: #include "TPbkContactItemField.h"
williamr@4: 
williamr@4: // FORWARD DECLARATIONS
williamr@4: class CPbkFieldsInfo;
williamr@4: class CPbkFieldInfo;
williamr@4: class CContactItemField;
williamr@4: class CContactItem;
williamr@4: class MPbkContactNameFormat;
williamr@4: 
williamr@4: 
williamr@4: // CLASS DECLARATION
williamr@4: 
williamr@4: /**
williamr@4:  * Array of TPbkContactItemField instances.
williamr@4:  */
williamr@4: class CPbkFieldArray : public CArrayFixFlat<TPbkContactItemField>
williamr@4:     {
williamr@4:     public:
williamr@4:         enum
williamr@4:             {
williamr@4:             /// Default array reallocation granularity
williamr@4:             KDefaultGranularity = 8
williamr@4:             };
williamr@4: 
williamr@4:         /** 
williamr@4:          * Constructor.
williamr@4:          */
williamr@4:         inline CPbkFieldArray() 
williamr@4:             : CArrayFixFlat<TPbkContactItemField>(KDefaultGranularity)
williamr@4:             {
williamr@4:             }
williamr@4: 
williamr@4:         /**
williamr@4:          * Constructor.
williamr@4:          * @param aGranularity  Reallocation granularity of this array.
williamr@4:          */
williamr@4:         inline CPbkFieldArray(TInt aGranurality) 
williamr@4:             : CArrayFixFlat<TPbkContactItemField>(aGranurality)
williamr@4:             {
williamr@4:             }
williamr@4:     };
williamr@4: 
williamr@4: 
williamr@4: /**
williamr@4:  * Phonebook Contact item class. Contact items can be read from the contact
williamr@4:  * database by using the Phonebook engine, @see CPbkContactEngine.
williamr@4:  * This class extends Symbian Contacts model class CContactItem capabilities 
williamr@4:  * to better suit Phonebook application's needs.
williamr@4:  */
williamr@4: class CPbkContactItem : 
williamr@4:         public CBase, public MPbkFieldDataArray
williamr@4:     {
williamr@4:     public:  // Constructor and destructor
williamr@4:         /**
williamr@4:          * Creates an instance of this class.
williamr@4:          *
williamr@4:          * @param aItem         Contact item this object wraps. This object 
williamr@4:          *                      takes ownership of aItem. If this function 
williamr@4:          *                      leaves, ownership is not taken.
williamr@4:          * @param aFieldsInfo   Collection of Phonebook field types.
williamr@4:          * @param aNameFormat   Contact name formatter.
williamr@4:          * @return  A new instance of this class.
williamr@4:          */
williamr@4:         IMPORT_C static CPbkContactItem* NewL(
williamr@4:                 CContactItem* aItem, 
williamr@4:                 const CPbkFieldsInfo& aFieldsInfo, 
williamr@4:                 MPbkContactNameFormat& aNameFormat);
williamr@4: 
williamr@4:         /**
williamr@4:          * Destructor.
williamr@4:          */
williamr@4:         ~CPbkContactItem();
williamr@4: 
williamr@4:     public: // CContactItem functions
williamr@4:         /**
williamr@4:          * Returns this contact item's id.
williamr@4:          * @see CContactItem::Id()
williamr@4:          */
williamr@4:         IMPORT_C TContactItemId Id() const;
williamr@4:         
williamr@4:         /**
williamr@4:          * Returns type of this contact item. The contact types are documented in
williamr@4:          * the Symbian Contacts model CContactItem::Type().
williamr@4:          * @return Contact type.
williamr@4:          * @see CContactItem::Type()
williamr@4:          */
williamr@4:         IMPORT_C TUid Type() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Gets the groups this contact belongs to.
williamr@4:          * @return Array of group ids. Caller owns the array.
williamr@4:          * @see CContactItem::GroupsJoinedLC()
williamr@4:          */
williamr@4:         IMPORT_C CContactIdArray* GroupsJoinedLC() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Converts this object to a CContactItem. Use only if this class's API
williamr@4:          * is not enough.
williamr@4:          * @return  The underlying Symbian Contacts model contact item object.
williamr@4:          */
williamr@4:         IMPORT_C CContactItem& ContactItem();
williamr@4: 
williamr@4:         /**
williamr@4:          * Converts this object to a const CContactItem. Use only if this 
williamr@4:          * class's API is not enough.
williamr@4:          * @return  The underlying Symbian Contacts model contact item object.
williamr@4:          */
williamr@4:         IMPORT_C const CContactItem& ContactItem() const;
williamr@4: 
williamr@4:     public:  // Field set operations
williamr@4:         /**
williamr@4:          * Returns the field set of this contact item.
williamr@4:          * @return  Field array of this contact item.
williamr@4:          */
williamr@4:         IMPORT_C CPbkFieldArray& CardFields() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Creates a new field based on aFieldInfo and adds it to this contact.
williamr@4:          *
williamr@4:          * @param aFieldInfo    Type of field to create.
williamr@4:          * @return The created field.
williamr@4:          */
williamr@4:       	IMPORT_C TPbkContactItemField& AddFieldL(CPbkFieldInfo& aFieldInfo);
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns ETrue if data of type aFieldInfo can be added to this 
williamr@4:          * contact.
williamr@4:          * @param aFieldInfo    The field type that we are trying to add.
williamr@4:          * @return  ETrue if the contact can accept this type of data, EFalse
williamr@4:          *          otherwise.
williamr@4:          */
williamr@4:         IMPORT_C TBool CanAcceptDataOfType(CPbkFieldInfo& aFieldInfo) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Finds an unused or creates a new field based on aFieldInfo. An 
williamr@4:          * unused field is a field that is in the contact template, but
williamr@4:          * doesnt contain any data, in other words it is empty. So a unused 
williamr@4:          * field is preferred ad the next field to add user data before 
williamr@4:          * adding a new field to the contact.
williamr@4:          *
williamr@4:          * @param aFieldInfo    Type of field to search or create.
williamr@4:          * @return  Pointer to the found or created field. NULL only if<br>
williamr@4:          *          field exists AND <br>
williamr@4:          *          field is nonempty AND <br>
williamr@4:          *          aFieldInfo.Multiplicity()==EPbkFieldMultiplicityOne.
williamr@4:          */
williamr@4:       	IMPORT_C TPbkContactItemField* AddOrReturnUnusedFieldL
williamr@4:             (CPbkFieldInfo& aFieldInfo);
williamr@4: 
williamr@4:         /**
williamr@4:          * Deletes field at aIndex.
williamr@4:          * @param aIndex    Field index to delete from the contact item.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveField(TInt aIndex);
williamr@4: 
williamr@4:         /**
williamr@4:          * Updates this contacts field set to match the field set of
williamr@4:          * the owned CContactItem. No need to call unless contact item's
williamr@4:          * field set has been manipulated directly. In other words 
williamr@4:          * remaps the field types of this contact item from the underlying
williamr@4:          * Symbian Contacts model contact item.
williamr@4:          * @param aFieldsInfo   The new fields set for this contact.
williamr@4:          */
williamr@4:         IMPORT_C void UpdateFieldSetL(const CPbkFieldsInfo& aFieldsInfo);
williamr@4: 
williamr@4:     public:  // Field searching
williamr@4:         /**
williamr@4:          * Returns first field matching aFieldId.
williamr@4:          *
williamr@4:          * @param aFieldId  Field id to search.
williamr@4:          * @return First field matching aFieldId, NULL if none found.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindField(TPbkFieldId aFieldId) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns first field matching aFieldId starting from aIndex.
williamr@4:          *
williamr@4:          * @param aFieldId  Field id to search.
williamr@4:          * @param aIndex    Input: field index where to start the search from,
williamr@4:          *                  output: index of the found field or -1 if not found.
williamr@4:          * @return Field matching aFieldId, NULL if none found.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindField
williamr@4:             (TPbkFieldId aFieldId, TInt& aIndex) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns first field matching aFieldInfo.
williamr@4:          *
williamr@4:          * @param aFieldInfo    Field type to find from the contact.
williamr@4:          * @return First field matching aFieldInfo, NULL if none found.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindField(const CPbkFieldInfo& aFieldInfo) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns first field matching aFieldInfo starting from aIndex.
williamr@4:          *
williamr@4:          * @param aFieldInfo    Field type to find from the contact.
williamr@4:          * @param aIndex    Input: field index where to start the search from,
williamr@4:          *                  output: index of the found field or -1 if not found.
williamr@4:          * @return Field matching aFieldInfo, NULL if none found.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindField
williamr@4:             (const CPbkFieldInfo& aFieldInfo, TInt& aIndex) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns aField's index from this contact item.
williamr@4:          *
williamr@4:          * @param aField    Field to search for. Field is matched with 
williamr@4:          *                  TPbkContactItemField::IsSame -function.
williamr@4:          * @return  Index of aField in this contact item's field set, 
williamr@4:          *          KErrNotFound if not found.
williamr@4:          * @see TPbkContactItemField::IsSame
williamr@4:          */
williamr@4:         IMPORT_C TInt FindFieldIndex(const TPbkContactItemField& aField) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns aField's index from ContactItem()'s CardFields() or 
williamr@4:          * KErrNotFound if not found.
williamr@4:          * @param aField    The field which index we are querying.
williamr@4:          * @return The fields index in this contact item, KErrNotFound is not found.
williamr@4:          */
williamr@4:         IMPORT_C TInt FindContactItemFieldIndex(const CContactItemField& aField) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Searches phone number fields of this contact for a match.
williamr@4:          * Uses PbkEngUtils::ContainSameDigits to perform the matching.
williamr@4:          *
williamr@4:          * @param aNumber   Phone number to match to.
williamr@4:          * @param aNumberOfDigits   Number of digits to compare from the end 
williamr@4:          *                          of the phone numbers. Full comparison
williamr@4:          *                          performed if 0.
williamr@4:          * @param aIndex    Input: field index where to start the search from,
williamr@4:          *                  output: index of the found field or KErrNotFound if not found.
williamr@4:          * @return The matching field, NULL if not found.
williamr@4:          * @see PbkEngUtils::ContainSameDigits
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindNextFieldWithPhoneNumber
williamr@4:             (const TDesC& aNumber,
williamr@4:             TInt aNumberOfDigits,
williamr@4:             TInt &aIndex) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Searches for a text in this contact's fields. Uses TDesC::FindF()
williamr@4:          * search the text from the fields.
williamr@4:          *
williamr@4:          * @param aIndex    Input: field index from where to start the search,
williamr@4:          *                  Output: index of the found field or KErrNotFound 
williamr@4:          *                  if not found.
williamr@4:          * @return The matching field, NULL if not found.
williamr@4:          * @see TDesC::FindF
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindNextFieldWithText
williamr@4:             (const TDesC& aText,
williamr@4:             TInt& aIndex) const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns field matching aField from this contact item's field set, NULL if
williamr@4:          * not found.
williamr@4:          * @param aField    The field that we a mathing.
williamr@4:          * @return  Matching field or NULL if not found.
williamr@4:          * @postcond !FindSameField(field) || FindSameField(field)->IsSame(field)
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* FindSameField
williamr@4:             (const TPbkContactItemField& aField) const;
williamr@4: 
williamr@4:     public: // Contact presentation
williamr@4:         /**
williamr@4:          * Gets a title text for this contact or localized unnamed text.
williamr@4:          *
williamr@4:          * @return  A buffer containing the title or localized unnamed text if no
williamr@4:          *          title can be generated. Caller is responsible for deleting 
williamr@4:          *          the returned buffer.
williamr@4:          */
williamr@4:         IMPORT_C HBufC* GetContactTitleL() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Gets a title text for this contact.
williamr@4:          *
williamr@4:          * @return  A buffer containing the title text, NULL if title is empty.
williamr@4:          *          Caller is responsible for deleting the returned buffer.
williamr@4:          */
williamr@4:         IMPORT_C HBufC* GetContactTitleOrNullL() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns an Phonebook icon id for a contact. This icon id is the icon
williamr@4:          * of the field that is set as the default number to call.
williamr@4:          *
williamr@4:          * @return  Icon index for this contact, EPbkNullIconId for no icon.
williamr@4:          */
williamr@4:         IMPORT_C TPbkIconId ContactIconIdL() const;
williamr@4: 
williamr@4:     public:  // Defaults
williamr@4:         /**
williamr@4:          * Returns the default phone number field of this contact.
williamr@4:          *
williamr@4:          * @return  Default phone number field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultPhoneNumberField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default phone number field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL phone number
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not a phone number field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultPhoneNumberFieldL
williamr@4:             (TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes phone number default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultPhoneNumberField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultPhoneNumberField();
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns the default video number field of this contact.
williamr@4:          *
williamr@4:          * @return  Default video number field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultVideoNumberField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default video number field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL video number
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  if aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  if aField is not a phone number field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultVideoNumberFieldL
williamr@4:             (TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes video number default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultVideoNumberField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultVideoNumberField();
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns the default SMS field of this contact.
williamr@4:          *
williamr@4:          * @return  Default SMS field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultSmsField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default SMS field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL SMS
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  if aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  if aField is not a phone number field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultSmsFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes SMS field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultSmsField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultSmsField();
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns the default email field of this contact.
williamr@4:          *
williamr@4:          * @return  Default email field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultEmailField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default email address field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL email 
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not an email field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultEmailFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes email field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultEmailField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultEmailField();
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns the default Mms field of this contact.
williamr@4:          *
williamr@4:          * @return  Default Mms field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultMmsField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default MMS address field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL MMS 
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not an email field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultMmsFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes MMS field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultMmsField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultMmsField();
williamr@4: 
williamr@4:         /**
williamr@4:          * Returns the default Poc field of this contact.
williamr@4:          *
williamr@4:          * @return  Default Poc field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultPocField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default POC address field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL POC 
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not an email field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultPocFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes POC field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultPocField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultPocField();
williamr@4:         
williamr@4:         /**
williamr@4:          * Returns the default VOIP field of this contact.
williamr@4:          *
williamr@4:          * @return  Default VOIP field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultVoipField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's default VOIP address field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL VOIP 
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not an email field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultVoipFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes VOIP field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultVoipField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultVoipField();
williamr@4:         
williamr@4:         /**
williamr@4:          * Returns the default EmailOverSms field of this contact.
williamr@4:          *
williamr@4:          * @return  Default EmailOverSms field of this contact, 
williamr@4:          *          NULL if no default set.
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* DefaultEmailOverSmsField() const;
williamr@4:         
williamr@4:         /**
williamr@4:          * Sets this contact's default Sms With Email address field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL Sms With Email 
williamr@4:          *                  default is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not an email field.
williamr@4:          */
williamr@4:         IMPORT_C void SetDefaultEmailOverSmsFieldL(TPbkContactItemField* aField);
williamr@4:         
williamr@4:         /**
williamr@4:          * Removes EmailOverSms field default from this contact.
williamr@4:          *
williamr@4:          * @postcond DefaultEmailOverSmsField()==NULL.
williamr@4:          */
williamr@4:         IMPORT_C void RemoveDefaultEmailOverSmsField();
williamr@4: 
williamr@4:     public:  // Voice tags
williamr@4:         /**
williamr@4:          * Returns the voice tag field of this contact.
williamr@4:          * NOTE: If this function is unable to make a connection to 
williamr@4:          * the voice tag handling system for some reason, this function will 
williamr@4:          * return null.
williamr@4:          *
williamr@4:          * @return  Voice tag field of this contact, 
williamr@4:          *          NULL if no voice tag set.
williamr@4:          * @deprecated
williamr@4:          */
williamr@4:         IMPORT_C TPbkContactItemField* VoiceTagField() const;
williamr@4: 
williamr@4:         /**
williamr@4:          * Sets this contact's voice tag field to aField.
williamr@4:          *
williamr@4:          * @param aField    Field to set as default, if NULL voice tag mark
williamr@4:          *                  is removed. Guaranteed not to leave if
williamr@4:          *                  aField is NULL.
williamr@4:          * @exception KErrNotFound  If aField is not this contact's field.
williamr@4:          * @exception KErrNotSupported  If aField is not a phone number field.
williamr@4:          * @postcond (aField && VoiceTagField()->IsSame(*aField)) || (!aField && !VoiceTagField())
williamr@4:          * @deprecated
williamr@4:          */
williamr@4:         IMPORT_C void SetVoiceTagFieldL(TPbkContactItemField* aField);
williamr@4: 
williamr@4:         /**
williamr@4:          * Removes any voice tag mark from this contact.
williamr@4:          *
williamr@4:          * @postcond VoiceTagField()==NULL.
williamr@4:          * @deprecated
williamr@4:          */
williamr@4:         IMPORT_C void RemoveVoiceTagField();
williamr@4: 
williamr@4:     public:  // from MPbkFieldDataArray
williamr@4:         TInt PbkFieldCount() const;
williamr@4:         MPbkFieldData& PbkFieldAt(TInt aIndex);
williamr@4:         const MPbkFieldData& PbkFieldAt(TInt aIndex) const;
williamr@4: 
williamr@4:     public: // Phonebook internal functions, do not call
williamr@4:         /**
williamr@4:          * @internal
williamr@4:          * Prepares this contact for saving into the contact database.
williamr@4:          * @see PrepareAfterLoad
williamr@4:          * @deprecated
williamr@4:          */
williamr@4:         void PrepareForSaveL();
williamr@4: 
williamr@4:         /**
williamr@4:          * @internal
williamr@4:          * Prepares this contact after loading it from the contact database.
williamr@4:          * @see PrepareForSaveL
williamr@4:          * @deprecated
williamr@4:          */
williamr@4:         void PrepareAfterLoadL();
williamr@4:         
williamr@4:     private: // Implementation
williamr@4:         CPbkContactItem(MPbkContactNameFormat& aNameFormat);
williamr@4:         void ConstructL(CContactItem* aItem, const CPbkFieldsInfo& aFieldsInfo);
williamr@4:         void CreateFieldArrayL(CContactItem& aContactItem, const CPbkFieldsInfo& aFieldsInfo);
williamr@4:         TInt InsertionPos(const TPbkContactItemField& aField) const;
williamr@4:         __DECLARE_TEST;
williamr@4:         typedef CPbkContactItem SelfType;
williamr@4: 
williamr@4:     private:    // Data
williamr@4:         /// Own: Embedded contact item.
williamr@4:         CContactItem* iItem;
williamr@4:         /// Own: array of phonebook contact item fields
williamr@4:         CPbkFieldArray iFields;
williamr@4:         /// Ref: Contact name formatting API
williamr@4:         MPbkContactNameFormat& iNameFormat;
williamr@4: 
williamr@4:     private:  // Friend declarations
williamr@4:         friend IMPORT_C TBool operator==
williamr@4:             (const CPbkContactItem& aLeft, const CPbkContactItem& aRight);
williamr@4:     };
williamr@4: 
williamr@4: 
williamr@4: // FUNCTION DECLARATIONS
williamr@4: 
williamr@4: /**
williamr@4:  * Returns ETrue if aLeft and aRight contents are the same.
williamr@4:  */
williamr@4: IMPORT_C TBool operator==
williamr@4:     (const CPbkContactItem& aLeft, const CPbkContactItem& aRight);
williamr@4: 
williamr@4: /**
williamr@4:  * Returns ETrue if aLeft and aRight contents differ.
williamr@4:  */
williamr@4: inline TBool operator!=
williamr@4:     (const CPbkContactItem& aLeft, const CPbkContactItem& aRight)
williamr@4:     {
williamr@4:     return !(aLeft==aRight);
williamr@4:     }
williamr@4: 
williamr@4: 
williamr@4: #endif // __CPbkContactItem_H__
williamr@4:             
williamr@4: // End of File