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: williamr@2: williamr@2: #if !defined(__CNTFIELD_H__) williamr@2: #define __CNTFIELD_H__ williamr@2: williamr@2: #include williamr@2: williamr@2: williamr@2: williamr@4: /** Null field ID. williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@2: const TInt KNullFieldId=-1; williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsPhone=0x02; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsMsg=0x04; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsCompanyName=0x08; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsFamilyName=0x10; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsGivenName=0x20; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsAddress=0x40; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsAdditionalName=0x80; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsSuffixName=0x100; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsPrefixName=0x200; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintStorageInline=0x400; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsEmail=0x4000; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsPronunciation=0x800; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsCompanyNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsCompanyName; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsGivenNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsGivenName; williamr@4: /** @internalComponent */ williamr@2: const TInt KIntContactHintIsFamilyNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsFamilyName; williamr@2: williamr@4: /** @internalComponent */ williamr@2: const TInt KHintTypeMask = 0x1FFFFF; williamr@2: williamr@2: #ifdef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: williamr@4: /** Number of additional type ids. williamr@4: @internalComponent williamr@4: */ williamr@4: const TInt KHintAdditionalMask = 0x7F000000; williamr@4: /** Bit flag to show if there is a vCard mapping uid. williamr@4: @internalComponent williamr@4: */ williamr@4: const TInt KHintVCardMappingMask = 0x80000000; williamr@4: /** Template field mask in low hint value. williamr@4: @internalComponent williamr@4: */ williamr@4: const TInt KHintTemplateFieldMask = 0x7FFFFFFF; williamr@4: williamr@4: /** @internalComponent */ williamr@2: const TInt KHintAdditionalMaskShift = 24; williamr@2: williamr@2: #else //_SYMBIAN_USE_SQLITE__ williamr@2: williamr@4: /** @internalComponent */ williamr@2: const TInt KHintAdditionalMask = 0x200000; williamr@4: /** @internalComponent */ williamr@2: const TInt KHintIdMask = 0xFFC00000; williamr@2: williamr@2: #endif //_SYMBIAN_USE_SQLITE__ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@2: class RWriteStream; williamr@2: class RReadStream; williamr@2: class CContactFieldStorage; williamr@2: class CContactTextField; williamr@2: class CContactStoreField; williamr@2: class CContactAgentField; williamr@2: class CContactDateField; williamr@2: class TFieldHeader; williamr@2: class CContactItemField; williamr@2: class CContactItemFieldDef; williamr@2: class CContactItemFieldSet; williamr@2: class CContactItem; williamr@2: williamr@2: class CContentType : public CBase williamr@2: /** The content type for a contact item field. williamr@2: williamr@2: The content type identifies the field's type and the vCard property which williamr@2: the field maps to. It is owned by the field. Field types are defined as UIDs williamr@2: in cntdef.h. williamr@2: williamr@2: The vCard mapping is optional. It should be specified if the field type alone williamr@2: is not enough to identify the mapping. The possible values for the vCard williamr@2: mapping are defined as UIDs in cntdef.h. williamr@2: williamr@2: Each field is uniquely identified by the combination of UIDs contained in williamr@2: the content type. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C ~CContentType(); williamr@2: IMPORT_C static CContentType* NewL(); williamr@2: IMPORT_C static CContentType* NewL(TFieldType aFieldType,TUid aMapping=KNullUid); williamr@2: IMPORT_C static CContentType* NewL(const CContentType &aContentType); williamr@2: static CContentType* NewLC(RReadStream& aStream); williamr@2: IMPORT_C void SetMapping(TUid aMapping); williamr@2: IMPORT_C void AddFieldTypeL(TFieldType aFieldType); williamr@2: IMPORT_C void RemoveFieldType(TFieldType aFieldType); williamr@2: IMPORT_C TFieldType FieldType(TInt aIndex) const; williamr@2: IMPORT_C TInt FieldTypeCount() const; williamr@2: IMPORT_C TUid Mapping() const; williamr@2: IMPORT_C TBool ContainsFieldType(TFieldType aFieldType) const; williamr@2: IMPORT_C TBool SupportsMultipleLines() const; williamr@2: IMPORT_C TBool operator==(const CContentType &aType) const; williamr@2: IMPORT_C TBool IsEqualForSyncUpdate(const CContentType& aType) const; williamr@2: IMPORT_C TBool IsEqual(const CContentType& aType) const; williamr@2: void Reset(); williamr@2: void InternalizeAdditionalUidsL(TInt aCount,RReadStream& aStream); williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: private: williamr@2: CContentType(); williamr@2: CContentType(TUid aMapping); williamr@2: void ConstructL(); williamr@2: void CloneL(const CContentType &aContentType); williamr@2: private: williamr@2: TUid iMapping; williamr@2: CArrayFix* iFieldTypes; williamr@2: }; williamr@2: williamr@2: class CContactItemField : public CBase williamr@2: /** A field in a contact item. williamr@2: williamr@2: Fields are grouped into a field set (CContactItemFieldSet), which is owned by williamr@2: the contact item. williamr@2: williamr@2: The contact item field stores the field data. The data may be text, a date/time williamr@2: value, or an agent, as indicated by the storage type (TStorageType). The storage williamr@2: type is also owned by the field. Note that numeric field data is not supported. williamr@2: All numbers, for instance telephone or fax numbers are stored as text. williamr@2: williamr@2: Fields also have a content type, attributes and a label. The label is a string williamr@2: which identifies the field to a user e.g. First name, Last name. williamr@2: williamr@2: The following attributes are supported: williamr@2: williamr@2: - hidden: the field is not displayed if the view definition masks hidden williamr@2: fields williamr@2: williamr@2: - disabled: the field cannot be deleted from the original template and thus williamr@2: is marked as disabled williamr@2: williamr@2: - read only: the field cannot be written to williamr@2: williamr@2: - synchronise: used by Connectivity applications; set by default for all williamr@2: contact item fields williamr@2: williamr@2: - user added: the field was added by the user and was not taken from the williamr@2: template williamr@2: williamr@2: - template: indicates that the field is part of a template. Template fields williamr@2: differ from other fields in that they are persisted when they do not contain williamr@2: any data. williamr@2: williamr@2: - speed dial: the field contains a telephone number which maps to one of williamr@2: the nine possible speed dial positions. williamr@2: williamr@2: These attributes can be set using member functions of this class, but they williamr@2: are normally set automatically by other functions, for instance when williamr@2: setting a speed dial field, CContactDatabase automatically sets the field's williamr@2: speed dial attribute. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: private: williamr@2: friend class TFieldHeader; williamr@2: friend class CContactItemFieldSet; williamr@2: friend class CContactDatabase; williamr@2: friend class CContactTables; williamr@2: friend class RPplContactTable; williamr@2: friend class CPackagerTests; williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: class THint; williamr@4: #else williamr@2: class THint williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: THint(); williamr@2: THint(TInt aValue); williamr@2: TBool operator==(const THint& aHint) const; williamr@2: TBool operator!=(const THint& aHint) const; williamr@2: TInt HintType() const; williamr@2: inline void SetIsMatchAll(); williamr@2: inline void SetIsPhone(); williamr@2: inline void SetIsMsg(); williamr@2: inline void SetIsCompanyName(); williamr@2: inline void SetIsFamilyName(); williamr@2: inline void SetIsGivenName(); williamr@2: inline void SetIsCompanyNamePronunciation(); williamr@2: inline void SetIsFamilyNamePronunciation(); williamr@2: inline void SetIsGivenNamePronunciation(); williamr@2: inline void SetIsAddress(); williamr@2: inline void SetIsAdditionalName(); williamr@2: inline void SetIsSuffixName(); williamr@2: inline void SetIsPrefixName(); williamr@2: inline void SetStorageIsInline(); williamr@2: inline void SetIsEmail(); williamr@2: inline TBool IsMatchAll() const; williamr@2: inline TBool IsDefault() const; williamr@2: inline TBool IsPhone() const; williamr@2: inline TBool IsMsg() const; williamr@2: inline TBool IsCompanyName() const; williamr@2: inline TBool IsFamilyName() const; williamr@2: inline TBool IsGivenName() const; williamr@2: inline TBool IsCompanyNamePronunciation() const; williamr@2: inline TBool IsFamilyNamePronunciation() const; williamr@2: inline TBool IsGivenNamePronunciation() const; williamr@2: inline TBool IsAddress() const; williamr@2: inline TBool IsAdditionalName() const; williamr@2: inline TBool IsSuffixName() const; williamr@2: inline TBool IsPrefixName() const; williamr@2: inline TBool IsStorageInline() const; williamr@2: inline TBool IsEmail() const; williamr@2: inline TBool Contains(const THint& aHint) const; williamr@2: williamr@2: #ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: inline void SetHasAdditionalUids(); williamr@2: TBool HasAdditionalUids() const; williamr@2: williamr@2: TInt FieldId() const; williamr@2: void SetFieldId(TInt aId); williamr@2: williamr@2: #else //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: TInt TemplateFieldId() const; williamr@2: void SetTemplateFieldId(TInt aTemplateFieldId); williamr@2: williamr@2: inline void SetHasVCardMappingUid(); williamr@2: inline TBool HasVCardMappingUid() const; williamr@2: williamr@2: inline TInt AdditionalUidsNum() const; williamr@2: inline void SetAdditionalUidsNum(TInt aNumber); williamr@2: #endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: public: williamr@2: TInt iHintValue; williamr@2: williamr@2: }; williamr@4: #endif williamr@2: williamr@2: public: williamr@2: IMPORT_C static CContactItemField* NewLC(); williamr@2: IMPORT_C static CContactItemField* NewL(TStorageType aType); williamr@2: IMPORT_C static CContactItemField* NewLC(TStorageType aType); williamr@2: IMPORT_C static CContactItemField* NewL(TStorageType aType, TFieldType aFieldType); williamr@2: IMPORT_C static CContactItemField* NewLC(TStorageType aType, TFieldType aFieldType); williamr@2: IMPORT_C static CContactItemField* NewL(const CContactItemField &aField); williamr@2: IMPORT_C static CContactItemField* NewLC(const CContactItemField &aField); williamr@2: IMPORT_C static CContactItemField* NewL(TStorageType aType, const CContentType &aContentType); williamr@2: IMPORT_C static CContactItemField* NewLC(TStorageType aType, const CContentType &aContentType); williamr@2: IMPORT_C ~CContactItemField(); williamr@2: williamr@2: IMPORT_C TStorageType StorageType() const; williamr@2: IMPORT_C const CContentType &ContentType() const; williamr@2: inline TBool IsHidden() const; williamr@2: inline TBool IsReadOnly() const; williamr@2: inline TBool IsDisabled() const; williamr@2: inline TBool IsTemplate() const; williamr@2: inline TBool IsPrivate() const; williamr@2: inline TBool IsSpeedDial() const; williamr@2: inline TBool DoSynchronize() const; williamr@2: inline TBool OverRidesLabel() const; williamr@2: inline TBool HasExtraStream() const; williamr@2: inline TBool UsesTemplateTypes() const; williamr@2: inline TBool LabelUnspecified() const; williamr@2: inline TBool UserAddedField() const; williamr@2: inline TBool IsCustomFilterable() const; williamr@2: IMPORT_C void SetHintType(TInt aType); williamr@2: IMPORT_C TPtrC Label() const; williamr@2: IMPORT_C void ResetStore(); williamr@2: IMPORT_C CContactFieldStorage* Storage() const; williamr@2: IMPORT_C CContactTextField * TextStorage() const; williamr@2: IMPORT_C CContactStoreField * StoreStorage() const; williamr@2: IMPORT_C CContactAgentField * AgentStorage() const; williamr@2: IMPORT_C CContactDateField * DateTimeStorage() const; williamr@2: IMPORT_C void AddFieldTypeL(TFieldType aFieldType); williamr@2: IMPORT_C void RemoveFieldType(TFieldType aFieldType); williamr@2: IMPORT_C void SetMapping(TUid aMapping); williamr@2: IMPORT_C void SetHidden(TBool aHidden); williamr@2: IMPORT_C void SetReadOnly(TBool aReadOnly); williamr@2: IMPORT_C void SetSynchronize(TBool aSynchronize); williamr@2: IMPORT_C void SetDisabled(TBool aDisabled); williamr@2: IMPORT_C void SetLabelL(const TDesC& aLabel); williamr@2: IMPORT_C void SetLabel(HBufC* aLabel); williamr@2: IMPORT_C void SetUserAddedField(TBool aUserAddedField); williamr@2: IMPORT_C void SetTemplateField(TBool aTemplateField); williamr@2: IMPORT_C void SetPrivate(TBool aTemplateField); williamr@2: IMPORT_C void SetSpeedDial(TBool aSpeedDialField); williamr@2: IMPORT_C void SetId(TInt aId); williamr@2: IMPORT_C TInt Id() const; williamr@2: IMPORT_C TUint UserFlags() const; williamr@2: IMPORT_C void SetUserFlags(TUint aFlags); williamr@2: IMPORT_C static TBool IsValidLabel(const TDesC& aLabel,TInt& aInvalidPos); williamr@2: IMPORT_C TBool IsTemplateLabelField() const; williamr@2: IMPORT_C void GetFieldText(TDes &aText) const; williamr@2: IMPORT_C void RestoreHeaderL(RReadStream& aStream, const CContactItemFieldSet *aSystemTemplateFields); williamr@2: IMPORT_C TStreamId RestoreFieldTypesL(RReadStream &aRootStream, const CContactItemFieldSet *aSystemTemplateFields); williamr@2: IMPORT_C void RestoreTextL(HBufC *aTextStream,TInt aTextFieldIndex); williamr@2: IMPORT_C TBool RestoreIfMatchL(RReadStream& aStream,const CContactItemFieldDef *aFieldDef, const CContactItemFieldSet *aSystemTemplateFields,HBufC *aTextStream,TInt aTextIndex); williamr@2: williamr@2: public: williamr@2: IMPORT_C void SetCustomFilterable(EContactFieldFlags aContactFilterType); williamr@2: IMPORT_C void Reset(); williamr@2: void SetUsesTemplateTypes(TBool aUsesTemplateTypes); williamr@2: void SetOverRidesLabel(TBool aValue); williamr@2: TInt TemplateFieldId() const; williamr@2: void SetDeleted(TBool aDeleted); williamr@2: inline TBool IsDeleted() const; williamr@2: void CopyStorageL(const CContactItemField &aField); williamr@2: void UpdateFieldFlags(const CContactItemFieldSet& aTemplateFieldSet); williamr@2: void PopulateStoreL(RStoreWriteStream& aRootStream, TInt aCount, CArrayFix& aFieldHeaderArray) const; williamr@2: void PrepareFieldAsTemplateL(CContactItemFieldSet& aSystemTemplateFieldSet); williamr@2: IMPORT_C TBool HasCustomFilter(EContactFieldFlags& contactFieldFlag) const; williamr@2: TBool RestoreIfMatchL(RReadStream& aStream,TFieldType aFieldType, const CContactItemFieldSet *aSystemTemplateFields,HBufC *aTextStream,TInt aTextIndex); williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: protected: williamr@2: void UsesTemplateData(TInt aTemplateFieldId); williamr@2: private: williamr@2: void UsesTemplateLabel(); williamr@2: void SetLabelUnspecified(TBool aUnspecified); williamr@2: const CContentType &TemplateContentType(const CContactItemFieldSet &aSystemTemplateFields) const; williamr@2: TFieldHeader StoreL(RWriteStream& aTextStream,CStreamStore& aBlobStore,TInt aTextFieldIndex); williamr@2: TStreamId StoreAdditionalUidsL(CStreamStore& aStore,TStreamId aId, CArrayFixFlat *aAdditionalFields); williamr@2: TStreamId StoreDataL(CStreamStore& aStore); williamr@2: williamr@2: void RestoreL(CStreamStore& aStore,RReadStream& aStream); williamr@2: void RestoreDataL(CStreamStore& aStore,TStreamId aId); williamr@2: williamr@2: TStreamId RestoreHintL(CStreamStore& aStore,RReadStream& aStream); williamr@2: TBool AddFieldToHint(TFieldType aFieldType, CContactItemField::THint &aHint) const; williamr@2: void MapHintsToFieldTypesL(THint aHint); williamr@2: CContactItemField(); williamr@2: CContactItemField(TStorageType aType); williamr@2: void CloneL(const CContactItemField &aField); williamr@2: void ConstructStorageL(); williamr@2: private: williamr@2: enum {EUserMaskShift=4}; williamr@2: enum // er5 hard coded enum most of which have been used but not documented ;o( williamr@2: { williamr@2: EHidden =0x00000001, williamr@2: EReadOnly =0x00000002, williamr@2: ESynchronize =0x00000004, williamr@2: EDisabled =0x00000008, williamr@2: /* 0x00000010,-> 0x00000080 are used for williamr@2: the user defined attribs / categories like work / williamr@2: Personal / Other / None - used in er5 UI */ williamr@2: EUserMask =0x000000F0, williamr@2: ETemplateMask =EUserMask|ESynchronize|EReadOnly|EHidden, williamr@2: EOverRidesLabel =0x00000100, williamr@2: EUsesTemplateData =0x00000200, williamr@2: EUserAddedField =0x00000400, williamr@2: ETemplate =0x00000800, williamr@2: /* 0x00001000,-> 0x0000F000 are used for williamr@2: the storage type of the contact field */ williamr@2: ELabelUnspecified =0x40000000, williamr@2: EDeleted =0x80000000 williamr@2: }; williamr@2: enum williamr@2: // new extended enum to allow cntmodel to have williamr@2: // more attributes per field williamr@2: { williamr@2: EPrivate =0x00000001, williamr@2: ESpeedDial =0x00000002, williamr@2: EUserDefinedFilter =0x00000004, williamr@2: EUserDefinedFilter1 =0x00000008, williamr@2: EUserDefinedFilter2 =0x00000010, williamr@2: EUserDefinedFilter3 =0x00000020, williamr@2: EUserDefinedFilter4 =0x00000040 williamr@2: }; williamr@2: williamr@2: private: williamr@2: CContentType *iContentType; williamr@2: TStorageType iStorageType; williamr@2: HBufC* iLabel; williamr@2: TInt iId; williamr@2: TUint32 iAttributes; williamr@2: TUint32 iExtendedAttributes; williamr@2: CContactFieldStorage* iStorage; williamr@2: TInt iTemplateFieldId; williamr@2: }; williamr@2: williamr@2: class CContactItemFieldDef : public CArrayFixFlat williamr@2: /** A field definition. williamr@2: williamr@2: This is an array of field types. Field definitions are used by williamr@2: CContactDatabase to specify a subset of fields when searching. williamr@2: williamr@2: The CContactItemFieldDef class is derived from CArrayFixFlat so all williamr@2: relevant functions can be used, e.g. to add and remove elements. It adds no williamr@2: functions other than a constructor. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline CContactItemFieldDef() : CArrayFixFlat(8) williamr@2: /** Constructs the CContactItemFieldDef object, with an array granularity of 8. */ williamr@2: {}; williamr@2: }; williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: class TContactFieldAtts williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: inline TContactFieldAtts() : iStorage(0) williamr@2: {}; williamr@2: williamr@2: void SetAttribs(TUint32 aAttribs); williamr@2: void SetExtendedAttribs(TUint32 aExtendedAttribs); williamr@2: void SetType(TStorageType aType); williamr@2: TUint32 Attribs() const; williamr@2: TUint32 ExtendedAttribs() const; williamr@2: TStorageType Type() const; williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: #ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: TInt Count() const; williamr@2: void SetCount(TInt aCount); williamr@2: TInt TemplateFieldId() const; williamr@2: void SetTemplateFieldId(TInt aId); williamr@2: #endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: williamr@2: williamr@2: private: williamr@2: TUint32 iStorage; williamr@2: williamr@2: #ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: TUint32 iExtendedAttribs; williamr@2: #endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: }; williamr@2: williamr@2: williamr@2: class TFieldHeader williamr@2: /** williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: #ifdef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: williamr@2: { williamr@2: public: williamr@2: TFieldHeader(); williamr@2: TFieldHeader(TContactFieldAtts aAtts, TUint32 aFieldUid, TStreamId aId); williamr@2: williamr@2: inline TContactFieldAtts FieldAtts() const; williamr@2: inline void SetFieldAtts(TContactFieldAtts aAtts); williamr@2: williamr@2: inline TInt FieldId() const; williamr@2: inline void SetFieldId(TInt aId); williamr@2: williamr@2: inline TStreamId StreamId() const; williamr@2: inline void SetStreamId(TStreamId aId); williamr@2: williamr@2: private: williamr@2: TContactFieldAtts iAtts; williamr@2: TInt iFieldUid; williamr@2: TStreamId iStreamId; williamr@2: }; williamr@2: williamr@2: #else //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: williamr@2: { williamr@2: public: williamr@2: inline TFieldHeader(TStreamId aId,TContactFieldAtts aAtts); williamr@2: williamr@2: public: williamr@2: TStreamId iStreamId; williamr@2: TContactFieldAtts iAtts; williamr@2: }; williamr@2: williamr@2: inline TFieldHeader::TFieldHeader(TStreamId aId,TContactFieldAtts aAtts) williamr@2: { iStreamId=aId; iAtts=aAtts; } williamr@2: #endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@2: inline TBool CContactItemField::IsHidden() const williamr@2: /** Gets the value of the field's hidden attribute. williamr@2: williamr@2: @return ETrue if hidden attribute is set, EFalse if not set. */ williamr@2: { return iAttributes&EHidden; } williamr@2: williamr@2: inline TBool CContactItemField::IsReadOnly() const williamr@2: /** Gets the value of the field's read only attribute. williamr@2: williamr@2: @return ETrue if read only attribute set, EFalse if not set. */ williamr@2: { return iAttributes&EReadOnly; } williamr@2: williamr@2: inline TBool CContactItemField::IsDisabled() const williamr@2: /** Gets the value of the field's disabled attribute. williamr@2: williamr@2: @return ETrue if disabled attribute set, EFalse if not set. */ williamr@2: { return iAttributes&EDisabled; } williamr@2: williamr@2: inline TBool CContactItemField::IsTemplate() const williamr@2: /** Tests whether the field is in a template, as set by SetTemplateField(). williamr@2: williamr@2: @return ETrue if field is a template field. EFalse if not. */ williamr@2: { return iAttributes&ETemplate; } williamr@2: williamr@2: inline TBool CContactItemField::IsPrivate() const williamr@2: /** Tests whether the field's private attribute is set. williamr@2: williamr@2: @return True if the field's private attribute is set, false if not. */ williamr@2: { return iExtendedAttributes&EPrivate; } williamr@2: williamr@2: inline TBool CContactItemField::IsSpeedDial() const williamr@2: /** Tests whether the field is a speed dial field. williamr@2: williamr@2: @return True if the field is a speed dial field, false if not. */ williamr@2: { return iExtendedAttributes&ESpeedDial; } williamr@2: williamr@2: inline TBool CContactItemField::DoSynchronize() const williamr@2: /** Gets the value of the field's synchronise attribute. williamr@2: williamr@2: @return ETrue if synchronise attribute is set, EFalse if not set. */ williamr@2: { return iAttributes&ESynchronize; } williamr@2: williamr@2: inline TBool CContactItemField::IsDeleted() const williamr@2: /** Gets the value of the field's deleted attribute. williamr@2: williamr@2: @return ETrue if the field is deleted, otherwise EFalse. */ williamr@2: { return iAttributes&EDeleted; } williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: inline void CContactItemField::THint::SetIsPhone() williamr@2: {iHintValue|=KIntContactHintIsPhone;} williamr@2: inline void CContactItemField::THint::SetIsMsg() williamr@2: {iHintValue|=KIntContactHintIsMsg;} williamr@2: // turn off Pronunciation bit too? williamr@2: inline void CContactItemField::THint::SetIsCompanyName() williamr@2: {iHintValue|=KIntContactHintIsCompanyName;} williamr@2: inline void CContactItemField::THint::SetIsFamilyName() williamr@2: {iHintValue|=KIntContactHintIsFamilyName;} williamr@2: inline void CContactItemField::THint::SetIsGivenName() williamr@2: {iHintValue|=KIntContactHintIsGivenName;} williamr@2: inline void CContactItemField::THint::SetIsCompanyNamePronunciation() williamr@2: {iHintValue|=KIntContactHintIsCompanyName|KIntContactHintIsPronunciation;} williamr@2: inline void CContactItemField::THint::SetIsFamilyNamePronunciation() williamr@2: {iHintValue|=KIntContactHintIsFamilyName|KIntContactHintIsPronunciation;} williamr@2: inline void CContactItemField::THint::SetIsGivenNamePronunciation() williamr@2: {iHintValue|=KIntContactHintIsGivenName|KIntContactHintIsPronunciation;} williamr@2: inline void CContactItemField::THint::SetIsAddress() williamr@2: {iHintValue|=KIntContactHintIsAddress;} williamr@2: inline void CContactItemField::THint::SetIsAdditionalName() williamr@2: {iHintValue|=KIntContactHintIsAdditionalName;} williamr@2: inline void CContactItemField::THint::SetIsSuffixName() williamr@2: {iHintValue|=KIntContactHintIsSuffixName;} williamr@2: inline void CContactItemField::THint::SetIsPrefixName() williamr@2: {iHintValue|=KIntContactHintIsPrefixName;} williamr@2: inline void CContactItemField::THint::SetStorageIsInline() williamr@2: {iHintValue|=KIntContactHintStorageInline;} williamr@2: inline void CContactItemField::THint::SetIsEmail() williamr@2: {iHintValue|=KIntContactHintIsEmail;} williamr@2: inline TBool CContactItemField::THint::IsPhone() const williamr@2: {return (iHintValue&KIntContactHintIsPhone);} williamr@2: inline TBool CContactItemField::THint::IsMsg() const williamr@2: {return (iHintValue&KIntContactHintIsMsg);} williamr@2: inline TBool CContactItemField::THint::IsCompanyName() const williamr@2: {return ((iHintValue&KIntContactHintIsCompanyNamePronunciation) == KIntContactHintIsCompanyName);} williamr@2: inline TBool CContactItemField::THint::IsFamilyName() const williamr@2: {return ((iHintValue&KIntContactHintIsFamilyNamePronunciation)==KIntContactHintIsFamilyName);} williamr@2: inline TBool CContactItemField::THint::IsGivenName() const williamr@2: {return ((iHintValue&KIntContactHintIsGivenNamePronunciation)==KIntContactHintIsGivenName);} williamr@2: inline TBool CContactItemField::THint::IsCompanyNamePronunciation() const williamr@2: {return ((iHintValue&KIntContactHintIsCompanyNamePronunciation) == KIntContactHintIsCompanyNamePronunciation);} williamr@2: inline TBool CContactItemField::THint::IsFamilyNamePronunciation() const williamr@2: {return ((iHintValue&KIntContactHintIsFamilyNamePronunciation)==KIntContactHintIsFamilyNamePronunciation);} williamr@2: inline TBool CContactItemField::THint::IsGivenNamePronunciation() const williamr@2: {return ((iHintValue&KIntContactHintIsGivenNamePronunciation)==KIntContactHintIsGivenNamePronunciation);} williamr@2: inline TBool CContactItemField::THint::IsAddress() const williamr@2: {return (iHintValue&KIntContactHintIsAddress);} williamr@2: inline TBool CContactItemField::THint::IsAdditionalName() const williamr@2: {return (iHintValue&KIntContactHintIsAdditionalName);} williamr@2: inline TBool CContactItemField::THint::IsSuffixName() const williamr@2: {return (iHintValue&KIntContactHintIsSuffixName);} williamr@2: inline TBool CContactItemField::THint::IsPrefixName() const williamr@2: {return (iHintValue&KIntContactHintIsPrefixName);} williamr@2: inline TBool CContactItemField::THint::IsStorageInline() const williamr@2: {return (iHintValue&KIntContactHintStorageInline);} williamr@2: inline TBool CContactItemField::THint::IsEmail() const williamr@2: {return (iHintValue&KIntContactHintIsEmail);} williamr@2: williamr@2: #ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: inline void CContactItemField::THint::SetHasAdditionalUids() williamr@2: {iHintValue|=KHintAdditionalMask;} williamr@2: #endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ williamr@2: inline TBool CContactItemField::THint::Contains(const THint& aHint) const williamr@2: {return (iHintValue&aHint.iHintValue);} williamr@4: #endif williamr@2: inline TBool CContactItemField::OverRidesLabel() const williamr@2: /** Tests whether the field's label (as set by SetLabel()) overrides the label williamr@2: specified in the field's template. williamr@2: williamr@2: @return True if the field's label overrides the label specified in the template; williamr@2: false if not. */ williamr@2: {return iAttributes&EOverRidesLabel;} williamr@2: williamr@2: inline TBool CContactItemField::HasExtraStream() const williamr@2: /** Tests whether the field needs an extra stream to store information not contained williamr@2: in the template. This is the case if the field's content type is not based williamr@2: on a template, or if the field has a label which overrides the label specified williamr@2: in the template. williamr@2: williamr@2: @return True if the field uses an extra stream; false if not. */ williamr@2: {return(!(iAttributes&EUsesTemplateData) || iAttributes&EOverRidesLabel);} williamr@2: williamr@2: inline TBool CContactItemField::UsesTemplateTypes() const williamr@2: /** Tests whether or not the field's content type is based on a template. williamr@2: williamr@2: @return True if the field's content type is based on a template; false if not. */ williamr@2: {return iAttributes&EUsesTemplateData;} williamr@2: williamr@2: inline TBool CContactItemField::LabelUnspecified() const williamr@2: /** Tests whether the field's label has been set, either by a call to SetLabel() williamr@2: or by inheriting a label specified in the template. williamr@2: williamr@2: @return True if the field's label has been set, false if not. */ williamr@2: {return iAttributes&ELabelUnspecified;} williamr@2: williamr@2: inline TBool CContactItemField::UserAddedField() const williamr@2: /** Gets the value of the user added field attribute. williamr@2: williamr@2: @return ETrue if the user added attribute is set, EFalse if not. */ williamr@2: {return iAttributes&EUserAddedField;} williamr@2: williamr@2: inline TBool CContactItemField::IsCustomFilterable() const williamr@2: /** Tests the value of the user defined filter attribute. williamr@2: williamr@2: @return ETrue if the user defined filter attribute is set, EFalse if not. */ williamr@2: { williamr@2: return (iExtendedAttributes&EUserDefinedFilter || iExtendedAttributes&EUserDefinedFilter1 || williamr@2: iExtendedAttributes&EUserDefinedFilter2 || iExtendedAttributes&EUserDefinedFilter3 williamr@2: || iExtendedAttributes&EUserDefinedFilter4); williamr@2: } williamr@2: williamr@2: #endif