williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Persistence layer exports williamr@2: // williamr@2: // williamr@2: williamr@2: #if !defined(__CNTITEM_H__) williamr@2: #define __CNTITEM_H__ williamr@2: williamr@2: #if !defined(__E32BASE_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__CNTDEF_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #if !defined(__CNTFIELD_H__) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #include williamr@2: williamr@4: /** Maximum length of UID string. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: const TInt KUidStringLength =244; williamr@2: williamr@4: /** UID string separator character williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: #define KUidStringSeparator '-' williamr@4: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** Constant used by vCard import/export. williamr@4: @internalComponent williamr@4: */ williamr@4: #define KContactMaxFieldNumber 32 williamr@4: #endif williamr@4: williamr@2: class CContactItemField; williamr@2: class CContactItemViewDef; williamr@2: class CContactItem; williamr@2: williamr@4: /** Constant to indicate that all fields in the fieldset should be searched. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: const TInt KContactFieldSetSearchAll=-1; williamr@4: williamr@2: class CContactItemFieldSet : public CBase williamr@4: /** A contact item's field set. The field set owns an array of contact item fields williamr@4: (CContactItemFields). The field set is owned by a contact item, and can be williamr@4: retrieved using CContactItem::CardFields(). Use functions in class williamr@2: CContactItem to add and remove fields to/from the field set. williamr@2: williamr@4: A field set can contain more than one field of the same type, but this is williamr@4: not advisable as it may cause problems when synchronising the contacts database. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: friend class CContactItemField; williamr@2: friend class CContactDatabase; williamr@2: friend class CContactTables; williamr@2: friend class RPplContactTable; williamr@2: friend class TCntPersistenceUtility; williamr@4: williamr@2: public: williamr@2: IMPORT_C static CContactItemFieldSet* NewL(); williamr@2: IMPORT_C static CContactItemFieldSet* NewLC(); williamr@2: IMPORT_C ~CContactItemFieldSet(); williamr@2: inline const CContactItemField& operator[](TInt aIndex) const; williamr@2: inline CContactItemField& operator[](TInt aIndex); williamr@2: inline TInt Find(TFieldType aFieldType) const; // will only find the first such occurence williamr@2: inline TInt Find(TFieldType aFieldType,TUid aMapping) const; williamr@2: IMPORT_C TInt FindNext(TFieldType aFieldType,TInt aStartPos=KContactFieldSetSearchAll) const; williamr@2: IMPORT_C TInt FindNext(TFieldType aFieldType,TUid aMapping,TInt aStartPos=KContactFieldSetSearchAll) const; williamr@2: inline TInt Count() const; williamr@2: inline void Reset(); williamr@2: IMPORT_C void UpdateFieldL(const CContactItemField& aField, TInt aMatchCount); williamr@2: IMPORT_C void UpdateFieldSyncL(const CContactItemField& aField, TInt aMatchCount); williamr@2: IMPORT_C CContactItemFieldSet& AddL(CContactItemField& aField); williamr@2: IMPORT_C void Remove(TInt aIndex); williamr@2: IMPORT_C void InsertL(TInt aIndex,CContactItemField& aField); williamr@2: IMPORT_C void Move(TInt aFrom, TInt aTo); williamr@2: IMPORT_C TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore); williamr@2: TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore,CContactTables* aTables); williamr@2: IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,RReadStream& aReadStream); williamr@2: IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, HBufC* aTextBuf); williamr@2: TInt FieldText(TFieldType aFieldType, TDes &aText, TInt aStartPosition) const; williamr@2: CArrayFix* ConstructFieldHeaderArrayLC(RWriteStream& aTextStream, CStreamStore& aBlobStore); williamr@2: TInt FieldTypeCount(const CContactItemFieldSet& aSystemTemplateFields, TInt aStartIndex, const CContactItemField& aField) const; williamr@2: TBool ContainsFieldTypeMapping(const CContentType& aBaseFieldContentType, const TFieldType& aContactFieldType) const; williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@4: void InternalizeL(RReadStream& aStream); williamr@4: williamr@2: private: williamr@2: CContactItemFieldSet(); williamr@2: void ConstructL(); williamr@2: void SetFieldId(CContactItemField& aField); williamr@2: const CContactItemField* FindById(TInt aId) const; williamr@2: IMPORT_C TStreamId StoreL(CStreamStore& aStore,const CContactItem* aTemplate,RWriteStream& aStream,CStreamStore& aBlobStore,CContactTables* aTables); williamr@2: void RestoreL(CStreamStore& aStore, TStreamId anId, CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate,RReadStream& aReadStream,CContactTables* aContactsTable, RArray* aEmailIdArray); williamr@2: void RestoreAndAddTemplateL(CStreamStore& aStore, TStreamId aId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, RReadStream& aReadStream,CContactTables* aContactsTable,RArray* aEmailIdArray); williamr@2: TInt MatchTemplateField(const CContentType& aContentType,TUint aUserFlags,TBool &aExactMatch) const; williamr@2: static HBufC* LoadTextStreamLC(RReadStream& aStream); williamr@2: void NonZeroFieldText(TFieldType aFieldType, TDes &aText) const; williamr@2: williamr@2: private: williamr@2: CArrayPtr* iFields; williamr@2: }; williamr@2: williamr@2: class CContactDatabase; williamr@2: class RCntModel; williamr@2: class CContactItem : public CBase williamr@4: /** The abstract base class for contact cards, templates and groups. All contact williamr@4: items are identified by a contact ID, (TContactItemId), have a last modified williamr@4: date/time and own one or more fields (the field set). Contact items also williamr@4: have an access count and attributes (e.g. hidden). Note that fields in a contact williamr@4: item also have attributes. Attribute values specified in the contact item williamr@4: override those in the contained fields. The access count is a record of the williamr@4: number of objects referencing a contact item. A contact item cannot be fully williamr@4: deleted until its access count is zero. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: friend class CContactCardTemplate; williamr@2: friend class CContactItemPlusGroup; williamr@2: friend class CContactCard; williamr@2: friend class CContactTemplate; williamr@2: friend class CContactGroup; williamr@2: friend class CContactOwnCard; williamr@2: friend class CVCardToContactsAppConverter; williamr@2: friend class CContactICCEntry; williamr@2: friend class RPplContactTable; williamr@2: friend class RPplIdentityTable; williamr@2: friend class RPplPreferencesTable; williamr@2: friend class CPackagerTests; //Comparison test williamr@2: friend class CPackagerCntComparator; williamr@2: friend class CContactDatabase; williamr@2: friend class CPplContactItemManager; williamr@2: public: williamr@2: IMPORT_C ~CContactItem(); williamr@2: /** Gets the contact item's type. williamr@4: williamr@2: @return The contact item's type. */ williamr@2: virtual TUid Type() const=0; williamr@2: static CContactItem* NewLC(RReadStream& aStream); williamr@4: IMPORT_C static CContactItem* NewLC(TUid aType); williamr@2: IMPORT_C TContactItemId Id() const; williamr@2: IMPORT_C TContactItemId TemplateRefId() const; williamr@2: IMPORT_C TTime LastModified() const; williamr@2: IMPORT_C void SetLastModified(const TTime& aLastModified); williamr@2: IMPORT_C void AddFieldL(CContactItemField& aField); williamr@2: IMPORT_C void RemoveField(TInt aFieldPos); williamr@2: IMPORT_C void InsertFieldL(CContactItemField& aField,TInt aFieldPos); williamr@2: IMPORT_C CContactItemFieldSet& CardFields() const; williamr@2: IMPORT_C void SetHidden(TBool aHidden); williamr@4: IMPORT_C void SetSystem(TBool aSystem); williamr@2: IMPORT_C TBool IsHidden(); williamr@4: IMPORT_C TBool IsSystem(); williamr@2: IMPORT_C void UpdateFieldSet(CContactItemFieldSet* aNewFieldSet); williamr@2: IMPORT_C void SetDeleted(TBool aDeleted); williamr@2: IMPORT_C TBool IsDeleted() const; williamr@2: IMPORT_C void SetTemplateRefId(TContactItemId aUid); williamr@2: TContactItemId Agent(); williamr@2: inline TBool IsDeletable(); williamr@2: inline void IncAccessCount(); williamr@2: inline void DecAccessCount(); williamr@2: inline TInt AccessCount() const; williamr@2: IMPORT_C void SetUidStringL(TDesC& aString); williamr@2: IMPORT_C TPtrC UidStringL(TInt64 aMachineUniqueId) const; williamr@2: TStreamId PopulateStoreL(CStreamStore& aStore, CArrayFix& aFieldHeaderArray) const; williamr@2: void AddLabelFieldL(); williamr@2: IMPORT_C void RestoreTemplateFieldsL(const CContactItemFieldSet& aSystemTemplateFields, const CContactItemFieldSet& aTemplateFields, const CContactItemViewDef& aViewDef); williamr@2: void ClearFieldContent(); williamr@2: inline TPtrC Guid(); williamr@2: virtual void ExternalizeL(RWriteStream& aStream) const; williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: IMPORT_C void SetId(TContactItemId aId); williamr@2: IMPORT_C TUint32 Attributes() const; williamr@2: IMPORT_C void SetAttributes(TUint32 aAttributes); williamr@2: IMPORT_C void SetAccessCount(TUint32 aAccessCount); williamr@2: IMPORT_C void SetCreationDate(const TTime& aTime); williamr@2: williamr@2: public: williamr@4: /** Contact item's attribute flags williamr@4: williamr@4: These flags can be used to set the various attributes of a contact item. */ williamr@4: enum williamr@2: { williamr@4: /** To set the contact item's system attribute. */ williamr@4: ESystem=0x01, williamr@4: /** To set the contact item's hidden attribute. */ williamr@4: EHidden=0x02, williamr@4: /** To set the contact item's hidden attribute. */ williamr@4: ECompressedGuid=0x04, williamr@4: /** To set the contact item's Is deleted attribute. */ williamr@4: EDeleted=0x08 williamr@2: }; williamr@4: williamr@2: private: williamr@2: CContactItem(); williamr@2: void ConstructL(); williamr@2: void ConstructL(const CContactItem *aTemplate); williamr@2: void MakeUidStringL(TInt64 aMachineUniqueId); williamr@2: IMPORT_C void SetHasCompressedGuid(TBool aCompressed); williamr@2: TBool GuidIsCompressed() const; williamr@2: TInt NumberOfFieldsToStore() const; williamr@2: williamr@2: private: williamr@2: CContactItemFieldSet* iFieldSet; williamr@2: TUint32 iAttributes; williamr@2: TContactItemId iId; williamr@2: TContactItemId iTemplateRefId; williamr@2: TTime iLastModified; williamr@2: TTime iCreationDate; williamr@2: TUint32 iAccessCount; williamr@2: HBufC* iGuid; williamr@2: }; williamr@2: williamr@2: class CContactItemPlusGroup : public CContactItem williamr@2: /** Abstract base class for CContactGroup, CContactCard and CContactOwnCard. williamr@2: williamr@4: The purpose of this class is to avoid duplication of group functionality williamr@4: in its derived classes. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C const CContactIdArray* GroupsJoined() const; williamr@2: IMPORT_C CContactIdArray* GroupsJoinedLC() const; williamr@2: protected: williamr@2: CContactItemPlusGroup(); williamr@2: IMPORT_C ~CContactItemPlusGroup(); williamr@2: public: williamr@2: virtual void ExternalizeL(RWriteStream& aStream) const; williamr@4: virtual void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: IMPORT_C void ResetGroups(); williamr@2: IMPORT_C void SetGroups(CContactIdArray* aGroups); williamr@2: williamr@2: private: williamr@2: CContactIdArray* iGroups; williamr@2: friend class CContactDatabase; williamr@2: friend class RPplLookupGroupsTable; williamr@2: friend class RPplGroupMembershipTable; williamr@2: }; williamr@2: williamr@2: class CContactGroup : public CContactItemPlusGroup williamr@2: /** A contact group. williamr@2: williamr@4: A contact group is a contact item which holds a set of associated contact williamr@4: item IDs. The members of the group may be contact cards, own cards, or even williamr@4: other groups. The group has a label which identifies the group to users, e.g. williamr@4: "family", or "colleagues". The type of a contact group is KUidContactGroup, williamr@2: as returned by Type(). williamr@2: williamr@4: Objects of this class are constructed using CContactDatabase::CreateContactGroupL() williamr@4: or CreateContactGroupLC(). These functions create the group, optionally with williamr@2: a label, add it to the database, and return a pointer to it. williamr@2: williamr@4: To create an association between a card and a group, use CContactDatabase::AddContactToGroupL() williamr@4: and to remove the association, use RemoveContactFromGroupL(). To find out williamr@2: which groups a card belongs to, use CContactCard::GroupsJoinedLC() or CContactOwnCard::GroupsJoinedLC(). williamr@2: williamr@4: The function CContactDatabase::GetGroupIdListL() may be used to retrieve a williamr@4: list of IDs for all groups in the database. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CContactGroup* NewL(); williamr@2: IMPORT_C static CContactGroup* NewLC(); williamr@2: IMPORT_C ~CContactGroup(); williamr@2: public: // from CContactItem williamr@2: IMPORT_C TUid Type() const; williamr@2: public: williamr@2: // default sorted item array is ascending williamr@2: IMPORT_C CContactIdArray* ItemsContainedLC() const; williamr@2: IMPORT_C const CContactIdArray* ItemsContained() const; williamr@2: IMPORT_C TBool IsSystem() const; williamr@2: IMPORT_C void SetSystem(TBool aSystem); williamr@2: IMPORT_C TBool ContainsItem(TContactItemId aContactId); williamr@2: IMPORT_C void SetGroupLabelL(const TDesC& aLabel); williamr@2: IMPORT_C TPtrC GetGroupLabelL(); williamr@2: IMPORT_C TBool HasItemLabelField(); williamr@2: IMPORT_C CContactIdArray* GroupsJoinedLC() const; williamr@4: williamr@2: IMPORT_C void AddContactL(TContactItemId aContactId); williamr@2: IMPORT_C void RemoveContactL(TContactItemId aContactId); williamr@2: virtual void ExternalizeL(RWriteStream& aStream) const; williamr@2: virtual void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: IMPORT_C void ResetItems(); williamr@4: IMPORT_C void SetItems(CContactIdArray* aItems); williamr@2: williamr@2: private: williamr@2: CContactGroup(); williamr@4: williamr@2: private: williamr@2: CContactIdArray* iItems; williamr@2: friend class CContactDatabase; williamr@2: friend class RPplGroupMembershipTable; williamr@2: }; williamr@2: williamr@2: class CContactCardTemplate : public CContactItem williamr@2: /** A contact card template. williamr@2: williamr@4: This is a contact item containing a set of fields on which new contact items can williamr@4: be based. Templates have a label which is a string which identifies the template williamr@4: to a user. For instance, 'work template' could indicate a template used williamr@4: to create contact cards in the style of a work colleague. Contact card templates williamr@2: have a type of KUidContactCardTemplate, as returned by Type(). williamr@2: williamr@4: Objects of this class cannot be constructed directly because its constructors williamr@4: are protected. Instead, use either CContactDatabase::CreateContactCardTemplateL() williamr@4: or CreateContactCardTemplateLC(). These functions create a contact card template, williamr@2: add it to the database, and return a pointer to it. williamr@2: williamr@4: The function CContactDatabase::GetCardTemplateIdListL() gets a list of the williamr@4: IDs of all contact card templates in the database. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: friend class CContactDatabase; williamr@2: friend class CContactTables; williamr@2: friend class RPplContactTable; williamr@2: friend class CContactItem; williamr@2: public: williamr@2: IMPORT_C void SetTemplateLabelL(const TDesC& aLabel); williamr@2: IMPORT_C TPtrC GetTemplateLabelL(); williamr@2: protected: williamr@2: IMPORT_C static CContactCardTemplate* NewL(); williamr@2: IMPORT_C static CContactCardTemplate* NewLC(); williamr@2: IMPORT_C static CContactCardTemplate* NewL(const CContactItem *aTemplate); williamr@2: IMPORT_C static CContactCardTemplate* NewLC(const CContactItem *aTemplate); williamr@2: IMPORT_C TBool HasItemLabelField(); williamr@4: williamr@4: /** Intended usage: Reserved to preserve future BC */ williamr@2: IMPORT_C void ReservedFunction1(); williamr@4: /** Intended usage: Reserved to preserve future BC */ williamr@2: IMPORT_C void ReservedFunction2(); williamr@2: williamr@2: protected: // from CContactItem williamr@2: IMPORT_C TUid Type() const; williamr@4: williamr@2: private: williamr@2: CContactCardTemplate(); williamr@2: }; williamr@2: williamr@2: class CContactCard : public CContactItemPlusGroup williamr@4: /** A contact card. williamr@2: williamr@4: Implements the Type() function declared in class CContactItem. williamr@4: Contact cards may optionally be constructed from a template. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CContactCard(); williamr@2: IMPORT_C static CContactCard* NewL(); williamr@2: IMPORT_C static CContactCard* NewLC(); williamr@2: IMPORT_C static CContactCard* NewL(const CContactItem *aTemplate); williamr@2: IMPORT_C static CContactCard* NewLC(const CContactItem *aTemplate); williamr@2: public: // from CContactItem williamr@2: IMPORT_C TUid Type() const; williamr@2: public: williamr@2: IMPORT_C CContactIdArray* GroupsJoinedLC() const; williamr@2: private: williamr@2: CContactCard(); williamr@2: private: williamr@2: friend class CContactDatabase; williamr@2: }; williamr@2: williamr@2: class CContactOwnCard : public CContactItemPlusGroup williamr@4: /** Own card. williamr@2: williamr@4: An own card is a contact card which contains information about the device's williamr@4: owner. This can be sent to another compatible electronic device as a vCard. williamr@4: The contact database recognises a single own card, referred to as the williamr@4: current own card; its ID is returned by CContactDatabase::OwnCardId(). Like williamr@4: a contact card, an own card can be a member of one or more contact card groups. williamr@2: The own card type is identified by a UID of KUidContactOwnCard. williamr@2: williamr@4: Own cards can be constructed using either CContactDatabase::CreateOwnCardLC() williamr@4: or CreateOwnCardL(). These functions create an own card, based on the system williamr@4: template, add it to the database, set it as the database's current own card williamr@4: and return a pointer to it. To change the database's current own card, use williamr@4: CContactDatabase::SetOwnCardL(). williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CContactOwnCard(); williamr@2: IMPORT_C static CContactOwnCard* NewL(); williamr@2: IMPORT_C static CContactOwnCard* NewLC(); williamr@2: IMPORT_C static CContactOwnCard* NewL(const CContactItem *aTemplate); williamr@2: IMPORT_C static CContactOwnCard* NewLC(const CContactItem *aTemplate); williamr@2: public: // from CContactItem williamr@2: IMPORT_C TUid Type() const; williamr@2: public: williamr@2: IMPORT_C CContactIdArray* GroupsJoinedLC() const; williamr@2: private: williamr@2: CContactOwnCard(); williamr@2: private: williamr@2: friend class CContactDatabase; williamr@2: }; williamr@2: williamr@2: class CContactTemplate : public CContactItem williamr@4: /** A contact item template. williamr@2: williamr@4: This is a contact item which is used to seed the initial field set for williamr@2: other contact items. williamr@2: williamr@4: Non-system (i.e. user-defined) templates are implemented williamr@4: by the CContactCardTemplate class. CContactCardTemplate should be williamr@4: used in preference to CContactTemplate. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CContactTemplate* NewL(); williamr@2: IMPORT_C static CContactTemplate* NewLC(); williamr@2: IMPORT_C static CContactTemplate* NewL(const CContactItem *aTemplate); williamr@2: IMPORT_C static CContactTemplate* NewLC(const CContactItem *aTemplate); williamr@2: public: // from CContactItem williamr@2: IMPORT_C TUid Type() const; williamr@2: private: williamr@2: CContactTemplate(); williamr@2: }; williamr@2: williamr@2: williamr@2: class CContactICCEntry : public CContactItemPlusGroup williamr@4: /** A contact ICC entry. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CContactICCEntry(); williamr@2: IMPORT_C static CContactICCEntry* NewL(const CContactItem& aTemplate); williamr@2: static CContactICCEntry* NewL(); williamr@2: public: //from CContactItem williamr@2: TUid Type() const; williamr@2: private: williamr@2: CContactICCEntry(); williamr@2: }; williamr@2: williamr@2: williamr@2: class ContactGuid williamr@2: /** A globally unique identifier enquiry utility. williamr@2: williamr@4: Each contact item has a unique identifier, stored as a descriptor. It is williamr@4: referred to as the 'UID string'. This is a combination of the unique williamr@4: identifier of the database in which the contact item was created, the williamr@4: contact item ID and the date/time of the contact item's creation. ContactGuid williamr@4: provides a single static exported function to enquire whether an item was williamr@4: created in a specified database. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TContactItemId IsLocalContactUidString(const TDesC& aString, TInt64 aMachineUniqueId); williamr@2: IMPORT_C static TBool GetCreationDate(TDes& aString, TInt64 aMachineUniqueId); williamr@2: static HBufC* CreateGuidLC(const TDesC& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId); williamr@2: static HBufC* CreateGuidLC(const TTime& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId); williamr@2: static HBufC* CreateGuidLC(TContactItemId aId, TInt64 aMachineUniqueId); williamr@2: }; williamr@2: williamr@2: inline const CContactItemField& CContactItemFieldSet::operator[](TInt aIndex) const williamr@4: /** Gets the field located at a specified position in the field set. williamr@2: williamr@4: @param aIndex The position of the field in the field set. This is relative to zero. williamr@4: It must be non-negative and less than the number of objects in the array, otherwise williamr@2: the operator raises a panic. williamr@2: williamr@2: @return A const reference to an element in the array. */ williamr@2: { return *(*iFields)[aIndex]; } williamr@2: williamr@2: inline CContactItemField& CContactItemFieldSet::operator[](TInt aIndex) williamr@4: /** Gets the field located at a specified position in the field set. williamr@2: williamr@4: @param aIndex The position of the field in the field set. This is relative to zero. williamr@4: It must be non-negative and less than the number of objects in the array, otherwise williamr@2: the operator raises a panic. williamr@2: williamr@2: @return A non-const reference to an element in the array. */ williamr@2: { return *(*iFields)[aIndex]; } williamr@2: williamr@2: inline TInt CContactItemFieldSet::Find(TFieldType aFieldType) const williamr@2: /** Finds the first field in the field set with the specified field type. williamr@2: williamr@2: @param aFieldType The field type of interest. williamr@4: @return If found, the index of the field within the field set, or KErrNotFound williamr@2: if not found. */ williamr@2: { return FindNext(aFieldType,KContactFieldSetSearchAll); } williamr@2: williamr@2: inline TInt CContactItemFieldSet::Find(TFieldType aFieldType,TUid aMapping) const williamr@4: /** Finds the first field in the field set containing both the content type mapping williamr@2: and the field type specified. williamr@2: williamr@2: @param aFieldType The field type of interest. williamr@2: @param aMapping The content type mapping of interest. williamr@4: @return If found, the index of the field within the field set, or KErrNotFound williamr@2: if not found. */ williamr@2: { return FindNext(aFieldType,aMapping,KContactFieldSetSearchAll); } williamr@2: williamr@2: inline TInt CContactItemFieldSet::Count() const williamr@2: /** Gets the number of fields in the field set. williamr@2: williamr@2: @return The number of fields in the field set. */ williamr@2: { return iFields->Count(); } williamr@2: williamr@2: inline void CContactItemFieldSet::Reset() williamr@2: /** Deletes all fields in the field set. */ williamr@2: { iFields->ResetAndDestroy(); } williamr@2: williamr@2: inline TBool CContactItem::IsDeletable() williamr@4: /** Tests whether the contact item is deletable. williamr@2: williamr@2: This is true if the item's access count is zero. williamr@2: williamr@2: @return ETrue if deletable, EFalse if not deletable. */ williamr@2: {return (iAccessCount == 0);} williamr@2: williamr@2: inline void CContactItem::IncAccessCount() williamr@2: /** Increments the contact item's access count. */ williamr@2: {iAccessCount++;} williamr@2: williamr@2: inline void CContactItem::DecAccessCount() williamr@2: /** Decrements the contact item's access count. */ williamr@2: {if(iAccessCount) iAccessCount--;} williamr@2: williamr@2: inline TInt CContactItem::AccessCount() const williamr@2: /** Gets the contact item's access count. williamr@2: williamr@2: @return The item's access count. */ williamr@2: {return(iAccessCount);} williamr@2: williamr@4: inline TPtrC CContactItem::Guid() williamr@4: /** Accessor function for Contact Guid. williamr@2: * This is used to cache contact items that are added during a sync. williamr@2: @return Guid */ williamr@2: { return iGuid ? *iGuid : TPtrC(KNullDesC); } williamr@2: williamr@2: #endif