epoc32/include/cntfield.h
author William Roberts <williamr@symbian.org>
Tue, 16 Mar 2010 16:12:26 +0000
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
permissions -rw-r--r--
Final list of Symbian^2 public API header files
williamr@2
     1
// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     2
// All rights reserved.
williamr@2
     3
// This component and the accompanying materials are made available
williamr@2
     4
// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2
     5
// which accompanies this distribution, and is available
williamr@2
     6
// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2
     7
//
williamr@2
     8
// Initial Contributors:
williamr@2
     9
// Nokia Corporation - initial contribution.
williamr@2
    10
//
williamr@2
    11
// Contributors:
williamr@2
    12
//
williamr@2
    13
// Description:
williamr@2
    14
// Persistence layer exports
williamr@2
    15
// 
williamr@2
    16
//
williamr@2
    17
williamr@2
    18
williamr@2
    19
williamr@2
    20
#if !defined(__CNTFIELD_H__)
williamr@2
    21
#define __CNTFIELD_H__
williamr@2
    22
williamr@2
    23
#include <cntdef.h>
williamr@2
    24
williamr@2
    25
williamr@2
    26
williamr@2
    27
const TInt KNullFieldId=-1;
williamr@2
    28
williamr@2
    29
//const TInt KIntContactFieldHint???=0x01;
williamr@2
    30
const TInt KIntContactHintIsPhone=0x02;
williamr@2
    31
const TInt KIntContactHintIsMsg=0x04;
williamr@2
    32
const TInt KIntContactHintIsCompanyName=0x08;
williamr@2
    33
const TInt KIntContactHintIsFamilyName=0x10;
williamr@2
    34
const TInt KIntContactHintIsGivenName=0x20;
williamr@2
    35
const TInt KIntContactHintIsAddress=0x40;
williamr@2
    36
const TInt KIntContactHintIsAdditionalName=0x80;
williamr@2
    37
const TInt KIntContactHintIsSuffixName=0x100;
williamr@2
    38
const TInt KIntContactHintIsPrefixName=0x200;
williamr@2
    39
const TInt KIntContactHintStorageInline=0x400;
williamr@2
    40
const TInt KIntContactHintIsEmail=0x4000;
williamr@2
    41
const TInt KIntContactHintIsPronunciation=0x800;
williamr@2
    42
const TInt KIntContactHintIsCompanyNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsCompanyName;
williamr@2
    43
const TInt KIntContactHintIsGivenNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsGivenName;
williamr@2
    44
const TInt KIntContactHintIsFamilyNamePronunciation=KIntContactHintIsPronunciation|KIntContactHintIsFamilyName;
williamr@2
    45
williamr@2
    46
const TInt KHintTypeMask = 0x1FFFFF;
williamr@2
    47
williamr@2
    48
#ifdef __SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
    49
const TInt KHintAdditionalMask    = 0x7F000000; //Number of additional type ids.
williamr@2
    50
const TInt KHintVCardMappingMask  = 0x80000000; //bit flag to show if there is a vCard mapping uid.
williamr@2
    51
const TInt KHintTemplateFieldMask = 0x7FFFFFFF; //Template field mask in low hint value.
williamr@2
    52
williamr@2
    53
const TInt KHintAdditionalMaskShift = 24;
williamr@2
    54
williamr@2
    55
#else //_SYMBIAN_USE_SQLITE__
williamr@2
    56
williamr@2
    57
const TInt KHintAdditionalMask = 0x200000;
williamr@2
    58
const TInt KHintIdMask = 0xFFC00000;
williamr@2
    59
williamr@2
    60
#endif //_SYMBIAN_USE_SQLITE__
williamr@2
    61
williamr@2
    62
williamr@2
    63
class RWriteStream;
williamr@2
    64
class RReadStream;
williamr@2
    65
class CContactFieldStorage;
williamr@2
    66
class CContactTextField;
williamr@2
    67
class CContactStoreField;
williamr@2
    68
class CContactAgentField;
williamr@2
    69
class CContactDateField;
williamr@2
    70
class TFieldHeader;
williamr@2
    71
class CContactItemField;
williamr@2
    72
class CContactItemFieldDef;
williamr@2
    73
class CContactItemFieldSet;
williamr@2
    74
class CContactItem;
williamr@2
    75
williamr@2
    76
class CContentType : public CBase
williamr@2
    77
/** The content type for a contact item field. 
williamr@2
    78
williamr@2
    79
The content type identifies the field's type and the vCard property which 
williamr@2
    80
the field maps to. It is owned by the field. Field types are defined as UIDs 
williamr@2
    81
in cntdef.h.
williamr@2
    82
williamr@2
    83
The vCard mapping is optional. It should be specified if the field type alone 
williamr@2
    84
is not enough to identify the mapping. The possible values for the vCard 
williamr@2
    85
mapping are defined as UIDs in cntdef.h.
williamr@2
    86
williamr@2
    87
Each field is uniquely identified by the combination of UIDs contained in 
williamr@2
    88
the content type. 
williamr@2
    89
@publishedAll
williamr@2
    90
@released
williamr@2
    91
*/
williamr@2
    92
    {
williamr@2
    93
public:
williamr@2
    94
    IMPORT_C ~CContentType();
williamr@2
    95
	IMPORT_C static CContentType* NewL();
williamr@2
    96
	IMPORT_C static CContentType* NewL(TFieldType aFieldType,TUid aMapping=KNullUid);
williamr@2
    97
	IMPORT_C static CContentType* NewL(const CContentType &aContentType);
williamr@2
    98
	static CContentType* NewLC(RReadStream& aStream);
williamr@2
    99
	IMPORT_C void SetMapping(TUid aMapping);
williamr@2
   100
	IMPORT_C void AddFieldTypeL(TFieldType aFieldType);
williamr@2
   101
	IMPORT_C void RemoveFieldType(TFieldType aFieldType);
williamr@2
   102
    IMPORT_C TFieldType FieldType(TInt aIndex) const;
williamr@2
   103
    IMPORT_C TInt FieldTypeCount() const;
williamr@2
   104
    IMPORT_C TUid Mapping() const;
williamr@2
   105
	IMPORT_C TBool ContainsFieldType(TFieldType aFieldType) const;
williamr@2
   106
	IMPORT_C TBool SupportsMultipleLines() const;
williamr@2
   107
	IMPORT_C TBool operator==(const CContentType &aType) const;
williamr@2
   108
	IMPORT_C TBool IsEqualForSyncUpdate(const CContentType& aType) const;
williamr@2
   109
	IMPORT_C TBool IsEqual(const CContentType& aType) const;
williamr@2
   110
	void Reset(); 
williamr@2
   111
	void InternalizeAdditionalUidsL(TInt aCount,RReadStream& aStream);
williamr@2
   112
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   113
	void InternalizeL(RReadStream& aStream);		
williamr@2
   114
private:
williamr@2
   115
    CContentType();
williamr@2
   116
	CContentType(TUid aMapping);
williamr@2
   117
	void ConstructL();
williamr@2
   118
	void CloneL(const CContentType &aContentType);
williamr@2
   119
private:
williamr@2
   120
    TUid iMapping;
williamr@2
   121
	CArrayFix<TUid>* iFieldTypes;
williamr@2
   122
    };
williamr@2
   123
williamr@2
   124
class CContactItemField : public CBase
williamr@2
   125
/** A field in a contact item.
williamr@2
   126
williamr@2
   127
Fields are grouped into a field set (CContactItemFieldSet), which is owned by 
williamr@2
   128
the contact item.
williamr@2
   129
williamr@2
   130
The contact item field stores the field data. The data may be text, a date/time 
williamr@2
   131
value, or an agent, as indicated by the storage type (TStorageType). The storage 
williamr@2
   132
type is also owned by the field. Note that numeric field data is not supported. 
williamr@2
   133
All numbers, for instance telephone or fax numbers are stored as text.
williamr@2
   134
williamr@2
   135
Fields also have a content type, attributes and a label. The label is a string 
williamr@2
   136
which identifies the field to a user e.g. First name, Last name.
williamr@2
   137
williamr@2
   138
The following attributes are supported: 
williamr@2
   139
williamr@2
   140
- hidden: the field is not displayed if the view definition masks hidden 
williamr@2
   141
fields
williamr@2
   142
williamr@2
   143
- disabled: the field cannot be deleted from the original template and thus 
williamr@2
   144
is marked as disabled
williamr@2
   145
williamr@2
   146
- read only: the field cannot be written to
williamr@2
   147
williamr@2
   148
- synchronise: used by Connectivity applications; set by default for all 
williamr@2
   149
contact item fields
williamr@2
   150
williamr@2
   151
- user added: the field was added by the user and was not taken from the 
williamr@2
   152
template
williamr@2
   153
williamr@2
   154
- template: indicates that the field is part of a template. Template fields 
williamr@2
   155
differ from other fields in that they are persisted when they do not contain 
williamr@2
   156
any data.
williamr@2
   157
williamr@2
   158
- speed dial: the field contains a telephone number which maps to one of 
williamr@2
   159
the nine possible speed dial positions.
williamr@2
   160
williamr@2
   161
These attributes can be set using member functions of this class, but they 
williamr@2
   162
are normally set automatically by other functions, for instance when 
williamr@2
   163
setting a speed dial field, CContactDatabase automatically sets the field's 
williamr@2
   164
speed dial attribute. 
williamr@2
   165
@publishedAll
williamr@2
   166
@released
williamr@2
   167
*/
williamr@2
   168
	{
williamr@2
   169
private:
williamr@2
   170
	friend class TFieldHeader;
williamr@2
   171
	friend class CContactItemFieldSet;
williamr@2
   172
	friend class CContactDatabase;      
williamr@2
   173
	friend class CContactTables;
williamr@2
   174
	friend class RPplContactTable;
williamr@2
   175
	friend class CPackagerTests;
williamr@2
   176
	class THint
williamr@2
   177
	/**
williamr@2
   178
	@internalComponent
williamr@2
   179
	@released
williamr@2
   180
	*/
williamr@2
   181
		{
williamr@2
   182
	public:
williamr@2
   183
		THint();
williamr@2
   184
		THint(TInt aValue);
williamr@2
   185
		TBool operator==(const THint& aHint) const;
williamr@2
   186
		TBool operator!=(const THint& aHint) const;
williamr@2
   187
		TInt  HintType() const;
williamr@2
   188
		inline void SetIsMatchAll();
williamr@2
   189
		inline void SetIsPhone();
williamr@2
   190
		inline void SetIsMsg();
williamr@2
   191
		inline void SetIsCompanyName();
williamr@2
   192
		inline void SetIsFamilyName();
williamr@2
   193
		inline void SetIsGivenName();
williamr@2
   194
		inline void SetIsCompanyNamePronunciation();
williamr@2
   195
		inline void SetIsFamilyNamePronunciation();
williamr@2
   196
		inline void SetIsGivenNamePronunciation();
williamr@2
   197
		inline void SetIsAddress();
williamr@2
   198
		inline void SetIsAdditionalName();
williamr@2
   199
		inline void SetIsSuffixName();
williamr@2
   200
		inline void SetIsPrefixName();
williamr@2
   201
		inline void SetStorageIsInline();
williamr@2
   202
		inline void SetIsEmail();
williamr@2
   203
		inline TBool IsMatchAll() const;
williamr@2
   204
		inline TBool IsDefault() const;
williamr@2
   205
		inline TBool IsPhone() const;
williamr@2
   206
		inline TBool IsMsg() const;
williamr@2
   207
		inline TBool IsCompanyName() const;
williamr@2
   208
		inline TBool IsFamilyName() const;
williamr@2
   209
		inline TBool IsGivenName() const;
williamr@2
   210
		inline TBool IsCompanyNamePronunciation() const;
williamr@2
   211
		inline TBool IsFamilyNamePronunciation() const;
williamr@2
   212
		inline TBool IsGivenNamePronunciation() const;
williamr@2
   213
		inline TBool IsAddress() const;
williamr@2
   214
		inline TBool IsAdditionalName() const;
williamr@2
   215
		inline TBool IsSuffixName() const;
williamr@2
   216
		inline TBool IsPrefixName() const;
williamr@2
   217
		inline TBool IsStorageInline() const;
williamr@2
   218
		inline TBool IsEmail() const;
williamr@2
   219
		inline TBool Contains(const THint& aHint) const;
williamr@2
   220
		
williamr@2
   221
#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   222
		inline void SetHasAdditionalUids();
williamr@2
   223
		TBool HasAdditionalUids() const;
williamr@2
   224
		
williamr@2
   225
		TInt FieldId() const;
williamr@2
   226
		void SetFieldId(TInt aId);
williamr@2
   227
		
williamr@2
   228
#else //__SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   229
        TInt  TemplateFieldId() const;
williamr@2
   230
        void  SetTemplateFieldId(TInt aTemplateFieldId);
williamr@2
   231
        
williamr@2
   232
        inline void SetHasVCardMappingUid();
williamr@2
   233
        inline TBool HasVCardMappingUid() const;
williamr@2
   234
        
williamr@2
   235
        inline TInt  AdditionalUidsNum() const;
williamr@2
   236
        inline void  SetAdditionalUidsNum(TInt aNumber);
williamr@2
   237
#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__		
williamr@2
   238
	public:
williamr@2
   239
		TInt iHintValue;
williamr@2
   240
williamr@2
   241
		};
williamr@2
   242
		
williamr@2
   243
public:
williamr@2
   244
	IMPORT_C static CContactItemField* NewLC();
williamr@2
   245
	IMPORT_C static CContactItemField* NewL(TStorageType aType);
williamr@2
   246
	IMPORT_C static CContactItemField* NewLC(TStorageType aType);
williamr@2
   247
	IMPORT_C static CContactItemField* NewL(TStorageType aType, TFieldType aFieldType);
williamr@2
   248
	IMPORT_C static CContactItemField* NewLC(TStorageType aType, TFieldType aFieldType);
williamr@2
   249
	IMPORT_C static CContactItemField* NewL(const CContactItemField &aField);
williamr@2
   250
	IMPORT_C static CContactItemField* NewLC(const CContactItemField &aField);
williamr@2
   251
	IMPORT_C static CContactItemField* NewL(TStorageType aType, const CContentType &aContentType);
williamr@2
   252
	IMPORT_C static CContactItemField* NewLC(TStorageType aType, const CContentType &aContentType);
williamr@2
   253
	IMPORT_C ~CContactItemField();
williamr@2
   254
williamr@2
   255
	IMPORT_C TStorageType StorageType() const;
williamr@2
   256
	IMPORT_C const CContentType &ContentType() const;
williamr@2
   257
	inline TBool IsHidden() const;
williamr@2
   258
	inline TBool IsReadOnly() const;
williamr@2
   259
	inline TBool IsDisabled() const;
williamr@2
   260
	inline TBool IsTemplate() const;
williamr@2
   261
	inline TBool IsPrivate() const;
williamr@2
   262
	inline TBool IsSpeedDial() const;
williamr@2
   263
	inline TBool DoSynchronize() const;
williamr@2
   264
	inline TBool OverRidesLabel() const;
williamr@2
   265
	inline TBool HasExtraStream() const;
williamr@2
   266
	inline TBool UsesTemplateTypes() const;
williamr@2
   267
	inline TBool LabelUnspecified() const;
williamr@2
   268
	inline TBool UserAddedField() const;
williamr@2
   269
	inline TBool IsCustomFilterable() const;
williamr@2
   270
	IMPORT_C void SetHintType(TInt aType);
williamr@2
   271
	IMPORT_C TPtrC Label() const;
williamr@2
   272
	IMPORT_C void ResetStore();
williamr@2
   273
	IMPORT_C CContactFieldStorage* Storage() const;
williamr@2
   274
	IMPORT_C CContactTextField * TextStorage() const;
williamr@2
   275
	IMPORT_C CContactStoreField * StoreStorage() const;
williamr@2
   276
	IMPORT_C CContactAgentField * AgentStorage() const;
williamr@2
   277
	IMPORT_C CContactDateField * DateTimeStorage() const;
williamr@2
   278
	IMPORT_C void AddFieldTypeL(TFieldType aFieldType);
williamr@2
   279
	IMPORT_C void RemoveFieldType(TFieldType aFieldType);
williamr@2
   280
	IMPORT_C void SetMapping(TUid aMapping);
williamr@2
   281
	IMPORT_C void SetHidden(TBool aHidden);
williamr@2
   282
	IMPORT_C void SetReadOnly(TBool aReadOnly);
williamr@2
   283
	IMPORT_C void SetSynchronize(TBool aSynchronize);
williamr@2
   284
	IMPORT_C void SetDisabled(TBool aDisabled);
williamr@2
   285
	IMPORT_C void SetLabelL(const TDesC& aLabel);
williamr@2
   286
	IMPORT_C void SetLabel(HBufC* aLabel);
williamr@2
   287
	IMPORT_C void SetUserAddedField(TBool aUserAddedField);
williamr@2
   288
	IMPORT_C void SetTemplateField(TBool aTemplateField);
williamr@2
   289
	IMPORT_C void SetPrivate(TBool aTemplateField);
williamr@2
   290
	IMPORT_C void SetSpeedDial(TBool aSpeedDialField);
williamr@2
   291
	IMPORT_C void SetId(TInt aId);
williamr@2
   292
	IMPORT_C TInt Id() const;
williamr@2
   293
	IMPORT_C TUint UserFlags() const;
williamr@2
   294
	IMPORT_C void SetUserFlags(TUint aFlags);
williamr@2
   295
	IMPORT_C static TBool IsValidLabel(const TDesC& aLabel,TInt& aInvalidPos);
williamr@2
   296
	IMPORT_C TBool IsTemplateLabelField() const;
williamr@2
   297
	IMPORT_C void GetFieldText(TDes &aText) const;
williamr@2
   298
	IMPORT_C void RestoreHeaderL(RReadStream& aStream, const CContactItemFieldSet *aSystemTemplateFields);
williamr@2
   299
	IMPORT_C TStreamId RestoreFieldTypesL(RReadStream &aRootStream, const CContactItemFieldSet *aSystemTemplateFields);
williamr@2
   300
	IMPORT_C void RestoreTextL(HBufC *aTextStream,TInt aTextFieldIndex);
williamr@2
   301
	IMPORT_C TBool RestoreIfMatchL(RReadStream& aStream,const CContactItemFieldDef *aFieldDef, const CContactItemFieldSet *aSystemTemplateFields,HBufC *aTextStream,TInt aTextIndex);
williamr@2
   302
williamr@2
   303
public:
williamr@2
   304
	IMPORT_C void SetCustomFilterable(EContactFieldFlags aContactFilterType);
williamr@2
   305
	IMPORT_C void Reset();
williamr@2
   306
	void SetUsesTemplateTypes(TBool aUsesTemplateTypes);
williamr@2
   307
	void SetOverRidesLabel(TBool aValue);
williamr@2
   308
	TInt TemplateFieldId() const;
williamr@2
   309
	void SetDeleted(TBool aDeleted);
williamr@2
   310
	inline TBool IsDeleted() const;
williamr@2
   311
	void CopyStorageL(const CContactItemField &aField);
williamr@2
   312
	void UpdateFieldFlags(const CContactItemFieldSet& aTemplateFieldSet);
williamr@2
   313
	void PopulateStoreL(RStoreWriteStream& aRootStream, TInt aCount, CArrayFix<TFieldHeader>& aFieldHeaderArray) const;
williamr@2
   314
	void PrepareFieldAsTemplateL(CContactItemFieldSet& aSystemTemplateFieldSet);
williamr@2
   315
	IMPORT_C TBool HasCustomFilter(EContactFieldFlags& contactFieldFlag) const;
williamr@2
   316
	TBool RestoreIfMatchL(RReadStream& aStream,TFieldType aFieldType, const CContactItemFieldSet *aSystemTemplateFields,HBufC *aTextStream,TInt aTextIndex);
williamr@2
   317
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   318
	void InternalizeL(RReadStream& aStream);		
williamr@2
   319
	
williamr@2
   320
protected:
williamr@2
   321
	void UsesTemplateData(TInt aTemplateFieldId);
williamr@2
   322
private:
williamr@2
   323
	void UsesTemplateLabel();
williamr@2
   324
	void SetLabelUnspecified(TBool aUnspecified);
williamr@2
   325
	const CContentType &TemplateContentType(const CContactItemFieldSet &aSystemTemplateFields) const;
williamr@2
   326
	TFieldHeader StoreL(RWriteStream& aTextStream,CStreamStore& aBlobStore,TInt aTextFieldIndex);
williamr@2
   327
	TStreamId StoreAdditionalUidsL(CStreamStore& aStore,TStreamId aId, CArrayFixFlat<TUid> *aAdditionalFields);
williamr@2
   328
  	TStreamId StoreDataL(CStreamStore& aStore);
williamr@2
   329
williamr@2
   330
   	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
williamr@2
   331
    void RestoreDataL(CStreamStore& aStore,TStreamId aId);
williamr@2
   332
	
williamr@2
   333
 	TStreamId RestoreHintL(CStreamStore& aStore,RReadStream& aStream);
williamr@2
   334
	TBool AddFieldToHint(TFieldType aFieldType, CContactItemField::THint &aHint) const;
williamr@2
   335
	void MapHintsToFieldTypesL(THint aHint);
williamr@2
   336
	CContactItemField();
williamr@2
   337
	CContactItemField(TStorageType aType);
williamr@2
   338
	void CloneL(const CContactItemField &aField);
williamr@2
   339
	void ConstructStorageL();
williamr@2
   340
private:
williamr@2
   341
	enum {EUserMaskShift=4};
williamr@2
   342
	enum // er5 hard coded enum most of which have been used but not documented ;o(
williamr@2
   343
		{
williamr@2
   344
		EHidden				=0x00000001,
williamr@2
   345
		EReadOnly			=0x00000002,
williamr@2
   346
		ESynchronize		=0x00000004,
williamr@2
   347
		EDisabled			=0x00000008,
williamr@2
   348
		/* 0x00000010,-> 0x00000080 are used for 
williamr@2
   349
			the user defined attribs / categories like work /
williamr@2
   350
			Personal / Other / None - used in er5 UI */
williamr@2
   351
		EUserMask			=0x000000F0,
williamr@2
   352
		ETemplateMask		=EUserMask|ESynchronize|EReadOnly|EHidden,
williamr@2
   353
		EOverRidesLabel		=0x00000100,
williamr@2
   354
		EUsesTemplateData	=0x00000200,
williamr@2
   355
		EUserAddedField		=0x00000400,
williamr@2
   356
		ETemplate			=0x00000800,
williamr@2
   357
		/* 0x00001000,-> 0x0000F000 are used for 
williamr@2
   358
			the storage type of the contact field */
williamr@2
   359
		ELabelUnspecified	=0x40000000,
williamr@2
   360
		EDeleted			=0x80000000
williamr@2
   361
		};
williamr@2
   362
	enum 
williamr@2
   363
		// new extended enum to allow cntmodel to have
williamr@2
   364
		// more attributes per field
williamr@2
   365
		{
williamr@2
   366
		EPrivate			=0x00000001,
williamr@2
   367
		ESpeedDial			=0x00000002,
williamr@2
   368
		EUserDefinedFilter	=0x00000004,
williamr@2
   369
		EUserDefinedFilter1 =0x00000008,
williamr@2
   370
		EUserDefinedFilter2	=0x00000010,
williamr@2
   371
		EUserDefinedFilter3	=0x00000020,
williamr@2
   372
		EUserDefinedFilter4	=0x00000040
williamr@2
   373
		};
williamr@2
   374
	
williamr@2
   375
private:
williamr@2
   376
	CContentType *iContentType;
williamr@2
   377
	TStorageType iStorageType;
williamr@2
   378
	HBufC* iLabel;
williamr@2
   379
	TInt iId;
williamr@2
   380
	TUint32 iAttributes;
williamr@2
   381
	TUint32 iExtendedAttributes;
williamr@2
   382
	CContactFieldStorage* iStorage;
williamr@2
   383
	TInt iTemplateFieldId;
williamr@2
   384
	};
williamr@2
   385
williamr@2
   386
class CContactItemFieldDef : public CArrayFixFlat<TUid>
williamr@2
   387
/** A field definition. 
williamr@2
   388
williamr@2
   389
This is an array of field types. Field definitions are used by 
williamr@2
   390
CContactDatabase to specify a subset of fields when searching.
williamr@2
   391
williamr@2
   392
The CContactItemFieldDef class is derived from CArrayFixFlat<TUid> so all 
williamr@2
   393
relevant functions can be used, e.g. to add and remove elements. It adds no 
williamr@2
   394
functions other than a constructor. 
williamr@2
   395
@publishedAll
williamr@2
   396
@released
williamr@2
   397
*/
williamr@2
   398
	{
williamr@2
   399
public:
williamr@2
   400
	inline CContactItemFieldDef() : CArrayFixFlat<TUid>(8) 
williamr@2
   401
	/** Constructs the CContactItemFieldDef object, with an array granularity of 8. */
williamr@2
   402
		{};
williamr@2
   403
	};
williamr@2
   404
williamr@2
   405
class TContactFieldAtts
williamr@2
   406
/**
williamr@2
   407
@internalComponent
williamr@2
   408
@released
williamr@2
   409
*/
williamr@2
   410
	{
williamr@2
   411
public:
williamr@2
   412
	inline TContactFieldAtts() : iStorage(0)
williamr@2
   413
		{};
williamr@2
   414
williamr@2
   415
	void SetAttribs(TUint32 aAttribs);
williamr@2
   416
	void SetExtendedAttribs(TUint32 aExtendedAttribs);
williamr@2
   417
	void SetType(TStorageType aType);
williamr@2
   418
	TUint32 Attribs() const;
williamr@2
   419
	TUint32 ExtendedAttribs() const;
williamr@2
   420
	TStorageType Type() const;
williamr@2
   421
	void InternalizeL(RReadStream& aStream);
williamr@2
   422
	void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   423
williamr@2
   424
#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__	
williamr@2
   425
	TInt Count() const;
williamr@2
   426
	void SetCount(TInt aCount);
williamr@2
   427
	TInt TemplateFieldId() const;
williamr@2
   428
	void SetTemplateFieldId(TInt aId);
williamr@2
   429
#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   430
williamr@2
   431
		
williamr@2
   432
private:
williamr@2
   433
	TUint32 iStorage;
williamr@2
   434
	
williamr@2
   435
#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__	
williamr@2
   436
	TUint32 iExtendedAttribs;
williamr@2
   437
#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   438
	};
williamr@2
   439
williamr@2
   440
williamr@2
   441
class TFieldHeader
williamr@2
   442
/**
williamr@2
   443
@internalComponent
williamr@2
   444
@released
williamr@2
   445
*/
williamr@2
   446
#ifdef __SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   447
williamr@2
   448
	{
williamr@2
   449
public:
williamr@2
   450
    TFieldHeader();
williamr@2
   451
	TFieldHeader(TContactFieldAtts aAtts, TUint32 aFieldUid, TStreamId aId);
williamr@2
   452
	
williamr@2
   453
	inline TContactFieldAtts FieldAtts() const;
williamr@2
   454
	inline void SetFieldAtts(TContactFieldAtts aAtts);
williamr@2
   455
	
williamr@2
   456
	inline TInt FieldId() const;
williamr@2
   457
    inline void SetFieldId(TInt aId);
williamr@2
   458
    
williamr@2
   459
    inline TStreamId StreamId() const;
williamr@2
   460
    inline void SetStreamId(TStreamId aId);
williamr@2
   461
    
williamr@2
   462
private:
williamr@2
   463
	TContactFieldAtts iAtts;
williamr@2
   464
    TInt      iFieldUid;
williamr@2
   465
	TStreamId iStreamId;
williamr@2
   466
	};
williamr@2
   467
williamr@2
   468
#else //__SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   469
williamr@2
   470
	{
williamr@2
   471
public:
williamr@2
   472
	inline TFieldHeader(TStreamId aId,TContactFieldAtts aAtts);
williamr@2
   473
	
williamr@2
   474
public:
williamr@2
   475
	TStreamId iStreamId;
williamr@2
   476
	TContactFieldAtts iAtts;
williamr@2
   477
	};
williamr@2
   478
williamr@2
   479
inline TFieldHeader::TFieldHeader(TStreamId aId,TContactFieldAtts aAtts)
williamr@2
   480
	{ iStreamId=aId; iAtts=aAtts; }
williamr@2
   481
#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__
williamr@2
   482
williamr@2
   483
inline TBool CContactItemField::IsHidden() const
williamr@2
   484
/** Gets the value of the field's hidden attribute.
williamr@2
   485
williamr@2
   486
@return ETrue if hidden attribute is set, EFalse if not set. */
williamr@2
   487
    { return iAttributes&EHidden; }
williamr@2
   488
williamr@2
   489
inline TBool CContactItemField::IsReadOnly() const
williamr@2
   490
/** Gets the value of the field's read only attribute.
williamr@2
   491
williamr@2
   492
@return ETrue if read only attribute set, EFalse if not set. */
williamr@2
   493
    { return iAttributes&EReadOnly; }
williamr@2
   494
williamr@2
   495
inline TBool CContactItemField::IsDisabled() const
williamr@2
   496
/** Gets the value of the field's disabled attribute.
williamr@2
   497
williamr@2
   498
@return ETrue if disabled attribute set, EFalse if not set. */
williamr@2
   499
	{ return iAttributes&EDisabled; }
williamr@2
   500
williamr@2
   501
inline TBool CContactItemField::IsTemplate() const
williamr@2
   502
/** Tests whether the field is in a template, as set by SetTemplateField().
williamr@2
   503
williamr@2
   504
@return ETrue if field is a template field. EFalse if not. */
williamr@2
   505
	{ return iAttributes&ETemplate; }
williamr@2
   506
williamr@2
   507
inline TBool CContactItemField::IsPrivate() const
williamr@2
   508
/** Tests whether the field's private attribute is set.
williamr@2
   509
williamr@2
   510
@return True if the field's private attribute is set, false if not. */
williamr@2
   511
	{ return iExtendedAttributes&EPrivate; }
williamr@2
   512
williamr@2
   513
inline TBool CContactItemField::IsSpeedDial() const
williamr@2
   514
/** Tests whether the field is a speed dial field.
williamr@2
   515
williamr@2
   516
@return True if the field is a speed dial field, false if not. */
williamr@2
   517
	{ return iExtendedAttributes&ESpeedDial; }
williamr@2
   518
williamr@2
   519
inline TBool CContactItemField::DoSynchronize() const
williamr@2
   520
/** Gets the value of the field's synchronise attribute.
williamr@2
   521
williamr@2
   522
@return ETrue if synchronise attribute is set, EFalse if not set. */
williamr@2
   523
    { return iAttributes&ESynchronize; }
williamr@2
   524
williamr@2
   525
inline TBool CContactItemField::IsDeleted() const
williamr@2
   526
/** Gets the value of the field's deleted  attribute.
williamr@2
   527
williamr@2
   528
@return ETrue if the field is deleted, otherwise EFalse.                            */
williamr@2
   529
	{ return iAttributes&EDeleted; }
williamr@2
   530
williamr@2
   531
inline void CContactItemField::THint::SetIsPhone()
williamr@2
   532
	{iHintValue|=KIntContactHintIsPhone;}
williamr@2
   533
inline void CContactItemField::THint::SetIsMsg()
williamr@2
   534
	{iHintValue|=KIntContactHintIsMsg;}
williamr@2
   535
// turn off Pronunciation bit too?
williamr@2
   536
inline void CContactItemField::THint::SetIsCompanyName()
williamr@2
   537
	{iHintValue|=KIntContactHintIsCompanyName;}
williamr@2
   538
inline void CContactItemField::THint::SetIsFamilyName()
williamr@2
   539
	{iHintValue|=KIntContactHintIsFamilyName;}
williamr@2
   540
inline void CContactItemField::THint::SetIsGivenName()
williamr@2
   541
	{iHintValue|=KIntContactHintIsGivenName;}
williamr@2
   542
inline void CContactItemField::THint::SetIsCompanyNamePronunciation()
williamr@2
   543
	{iHintValue|=KIntContactHintIsCompanyName|KIntContactHintIsPronunciation;}
williamr@2
   544
inline void CContactItemField::THint::SetIsFamilyNamePronunciation()
williamr@2
   545
	{iHintValue|=KIntContactHintIsFamilyName|KIntContactHintIsPronunciation;}
williamr@2
   546
inline void CContactItemField::THint::SetIsGivenNamePronunciation()
williamr@2
   547
	{iHintValue|=KIntContactHintIsGivenName|KIntContactHintIsPronunciation;}
williamr@2
   548
inline void CContactItemField::THint::SetIsAddress()
williamr@2
   549
	{iHintValue|=KIntContactHintIsAddress;}
williamr@2
   550
inline void CContactItemField::THint::SetIsAdditionalName()
williamr@2
   551
	{iHintValue|=KIntContactHintIsAdditionalName;}
williamr@2
   552
inline void CContactItemField::THint::SetIsSuffixName()
williamr@2
   553
	{iHintValue|=KIntContactHintIsSuffixName;}
williamr@2
   554
inline void CContactItemField::THint::SetIsPrefixName()
williamr@2
   555
	{iHintValue|=KIntContactHintIsPrefixName;}
williamr@2
   556
inline void CContactItemField::THint::SetStorageIsInline()
williamr@2
   557
	{iHintValue|=KIntContactHintStorageInline;}
williamr@2
   558
inline void CContactItemField::THint::SetIsEmail()
williamr@2
   559
	{iHintValue|=KIntContactHintIsEmail;}
williamr@2
   560
inline TBool CContactItemField::THint::IsPhone() const
williamr@2
   561
	{return (iHintValue&KIntContactHintIsPhone);}
williamr@2
   562
inline TBool CContactItemField::THint::IsMsg() const
williamr@2
   563
	{return (iHintValue&KIntContactHintIsMsg);}
williamr@2
   564
inline TBool CContactItemField::THint::IsCompanyName() const
williamr@2
   565
	{return ((iHintValue&KIntContactHintIsCompanyNamePronunciation) == KIntContactHintIsCompanyName);}
williamr@2
   566
inline TBool CContactItemField::THint::IsFamilyName() const
williamr@2
   567
	{return ((iHintValue&KIntContactHintIsFamilyNamePronunciation)==KIntContactHintIsFamilyName);}
williamr@2
   568
inline TBool CContactItemField::THint::IsGivenName() const
williamr@2
   569
	{return ((iHintValue&KIntContactHintIsGivenNamePronunciation)==KIntContactHintIsGivenName);}
williamr@2
   570
inline TBool CContactItemField::THint::IsCompanyNamePronunciation() const
williamr@2
   571
	{return ((iHintValue&KIntContactHintIsCompanyNamePronunciation) == KIntContactHintIsCompanyNamePronunciation);}
williamr@2
   572
inline TBool CContactItemField::THint::IsFamilyNamePronunciation() const
williamr@2
   573
	{return ((iHintValue&KIntContactHintIsFamilyNamePronunciation)==KIntContactHintIsFamilyNamePronunciation);}
williamr@2
   574
inline TBool CContactItemField::THint::IsGivenNamePronunciation() const
williamr@2
   575
	{return ((iHintValue&KIntContactHintIsGivenNamePronunciation)==KIntContactHintIsGivenNamePronunciation);}
williamr@2
   576
inline TBool CContactItemField::THint::IsAddress() const
williamr@2
   577
	{return (iHintValue&KIntContactHintIsAddress);}
williamr@2
   578
inline TBool CContactItemField::THint::IsAdditionalName() const
williamr@2
   579
	{return (iHintValue&KIntContactHintIsAdditionalName);}
williamr@2
   580
inline TBool CContactItemField::THint::IsSuffixName() const
williamr@2
   581
	{return (iHintValue&KIntContactHintIsSuffixName);}
williamr@2
   582
inline TBool CContactItemField::THint::IsPrefixName() const
williamr@2
   583
	{return (iHintValue&KIntContactHintIsPrefixName);}
williamr@2
   584
inline TBool CContactItemField::THint::IsStorageInline() const
williamr@2
   585
	{return (iHintValue&KIntContactHintStorageInline);}
williamr@2
   586
inline TBool CContactItemField::THint::IsEmail() const
williamr@2
   587
	{return (iHintValue&KIntContactHintIsEmail);}
williamr@2
   588
	
williamr@2
   589
#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__	
williamr@2
   590
inline void CContactItemField::THint::SetHasAdditionalUids()
williamr@2
   591
	{iHintValue|=KHintAdditionalMask;}
williamr@2
   592
#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ 
williamr@2
   593
inline TBool CContactItemField::THint::Contains(const THint& aHint) const
williamr@2
   594
	{return (iHintValue&aHint.iHintValue);}
williamr@2
   595
williamr@2
   596
inline TBool CContactItemField::OverRidesLabel() const
williamr@2
   597
/** Tests whether the field's label (as set by SetLabel()) overrides the label 
williamr@2
   598
specified in the field's template.
williamr@2
   599
williamr@2
   600
@return True if the field's label overrides the label specified in the template; 
williamr@2
   601
false if not. */
williamr@2
   602
	{return iAttributes&EOverRidesLabel;}
williamr@2
   603
williamr@2
   604
inline TBool CContactItemField::HasExtraStream() const
williamr@2
   605
/** Tests whether the field needs an extra stream to store information not contained 
williamr@2
   606
in the template. This is the case if the field's content type is not based 
williamr@2
   607
on a template, or if the field has a label which overrides the label specified 
williamr@2
   608
in the template.
williamr@2
   609
williamr@2
   610
@return True if the field uses an extra stream; false if not. */
williamr@2
   611
	{return(!(iAttributes&EUsesTemplateData) || iAttributes&EOverRidesLabel);}
williamr@2
   612
williamr@2
   613
inline TBool CContactItemField::UsesTemplateTypes() const
williamr@2
   614
/** Tests whether or not the field's content type is based on a template.
williamr@2
   615
williamr@2
   616
@return True if the field's content type is based on a template; false if not. */
williamr@2
   617
	{return iAttributes&EUsesTemplateData;}
williamr@2
   618
williamr@2
   619
inline TBool CContactItemField::LabelUnspecified() const
williamr@2
   620
/** Tests whether the field's label has been set, either by a call to SetLabel() 
williamr@2
   621
or by inheriting a label specified in the template.
williamr@2
   622
williamr@2
   623
@return True if the field's label has been set, false if not. */
williamr@2
   624
	{return iAttributes&ELabelUnspecified;}
williamr@2
   625
williamr@2
   626
inline TBool CContactItemField::UserAddedField() const
williamr@2
   627
/** Gets the value of the user added field attribute.
williamr@2
   628
williamr@2
   629
@return ETrue if the user added attribute is set, EFalse if not. */
williamr@2
   630
	{return iAttributes&EUserAddedField;}
williamr@2
   631
williamr@2
   632
inline TBool CContactItemField::IsCustomFilterable() const
williamr@2
   633
/** Tests the value of the user defined filter attribute.
williamr@2
   634
williamr@2
   635
@return ETrue if the user defined filter attribute is set, EFalse if not. */
williamr@2
   636
	{
williamr@2
   637
	return (iExtendedAttributes&EUserDefinedFilter || iExtendedAttributes&EUserDefinedFilter1 ||
williamr@2
   638
	       iExtendedAttributes&EUserDefinedFilter2 || iExtendedAttributes&EUserDefinedFilter3 
williamr@2
   639
	       || iExtendedAttributes&EUserDefinedFilter4);
williamr@2
   640
	}
williamr@2
   641
	
williamr@2
   642
#endif