epoc32/include/app/cntitem.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
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@4
     4
// under the terms of "Eclipse Public License v1.0"
williamr@2
     5
// which accompanies this distribution, and is available
williamr@4
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.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
#if !defined(__CNTITEM_H__)
williamr@2
    19
#define __CNTITEM_H__
williamr@2
    20
williamr@2
    21
#if !defined(__E32BASE_H__)
williamr@2
    22
#include <e32base.h>
williamr@2
    23
#endif
williamr@2
    24
williamr@2
    25
#if !defined(__CNTDEF_H__)
williamr@2
    26
#include <cntdef.h>
williamr@2
    27
#endif
williamr@2
    28
williamr@2
    29
#if !defined(__CNTFIELD_H__)
williamr@2
    30
#include <cntfield.h>
williamr@2
    31
#endif
williamr@2
    32
williamr@2
    33
#include <cntdb.h>
williamr@2
    34
williamr@4
    35
/** Maximum length of UID string.
williamr@4
    36
@publishedAll
williamr@4
    37
@released
williamr@4
    38
*/
williamr@4
    39
const TInt KUidStringLength =244;
williamr@2
    40
williamr@4
    41
/** UID string separator character
williamr@4
    42
@publishedAll
williamr@4
    43
@released
williamr@4
    44
*/
williamr@2
    45
#define KUidStringSeparator '-'
williamr@4
    46
williamr@4
    47
#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
williamr@4
    48
/** Constant used by vCard import/export.
williamr@4
    49
@internalComponent
williamr@4
    50
*/
williamr@4
    51
#define KContactMaxFieldNumber 32
williamr@4
    52
#endif
williamr@4
    53
williamr@2
    54
class CContactItemField;
williamr@2
    55
class CContactItemViewDef;
williamr@2
    56
class CContactItem;
williamr@2
    57
williamr@4
    58
/** Constant to indicate that all fields in the fieldset should be searched.
williamr@4
    59
@publishedAll
williamr@4
    60
@released
williamr@4
    61
*/
williamr@2
    62
const TInt KContactFieldSetSearchAll=-1;
williamr@4
    63
williamr@2
    64
class CContactItemFieldSet : public CBase
williamr@4
    65
/** A contact item's field set. The field set owns an array of contact item fields
williamr@4
    66
(CContactItemFields). The field set is owned by a contact item, and can be
williamr@4
    67
retrieved using CContactItem::CardFields(). Use functions in class
williamr@2
    68
CContactItem to add and remove fields to/from the field set.
williamr@2
    69
williamr@4
    70
A field set can contain more than one field of the same type, but this is
williamr@4
    71
not advisable as it may cause problems when synchronising the contacts database.
williamr@2
    72
@publishedAll
williamr@2
    73
@released
williamr@2
    74
*/
williamr@2
    75
	{
williamr@2
    76
	friend class CContactItemField;
williamr@2
    77
	friend class CContactDatabase;
williamr@2
    78
	friend class CContactTables;
williamr@2
    79
	friend class RPplContactTable;
williamr@2
    80
    friend class TCntPersistenceUtility;
williamr@4
    81
williamr@2
    82
public:
williamr@2
    83
	IMPORT_C static CContactItemFieldSet* NewL();
williamr@2
    84
	IMPORT_C static CContactItemFieldSet* NewLC();
williamr@2
    85
	IMPORT_C ~CContactItemFieldSet();
williamr@2
    86
	inline const CContactItemField& operator[](TInt aIndex) const;
williamr@2
    87
	inline CContactItemField& operator[](TInt aIndex);
williamr@2
    88
	inline TInt Find(TFieldType aFieldType) const; // will only find the first such occurence
williamr@2
    89
	inline TInt Find(TFieldType aFieldType,TUid aMapping) const;
williamr@2
    90
	IMPORT_C TInt FindNext(TFieldType aFieldType,TInt aStartPos=KContactFieldSetSearchAll) const;
williamr@2
    91
	IMPORT_C TInt FindNext(TFieldType aFieldType,TUid aMapping,TInt aStartPos=KContactFieldSetSearchAll) const;
williamr@2
    92
	inline TInt Count() const;
williamr@2
    93
	inline void Reset();
williamr@2
    94
	IMPORT_C void UpdateFieldL(const CContactItemField& aField, TInt aMatchCount);
williamr@2
    95
	IMPORT_C void UpdateFieldSyncL(const CContactItemField& aField, TInt aMatchCount);
williamr@2
    96
	IMPORT_C CContactItemFieldSet& AddL(CContactItemField& aField);
williamr@2
    97
	IMPORT_C void Remove(TInt aIndex);
williamr@2
    98
	IMPORT_C void InsertL(TInt aIndex,CContactItemField& aField);
williamr@2
    99
	IMPORT_C void Move(TInt aFrom, TInt aTo);
williamr@2
   100
	IMPORT_C TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore);
williamr@2
   101
	TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore,CContactTables* aTables);
williamr@2
   102
	IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,RReadStream& aReadStream);
williamr@2
   103
	IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, HBufC* aTextBuf);
williamr@2
   104
	TInt FieldText(TFieldType aFieldType, TDes &aText, TInt aStartPosition) const;
williamr@2
   105
	CArrayFix<TFieldHeader>* ConstructFieldHeaderArrayLC(RWriteStream& aTextStream, CStreamStore& aBlobStore);
williamr@2
   106
	TInt FieldTypeCount(const CContactItemFieldSet& aSystemTemplateFields, TInt aStartIndex, const CContactItemField& aField) const;
williamr@2
   107
	TBool ContainsFieldTypeMapping(const CContentType& aBaseFieldContentType, const TFieldType& aContactFieldType) const;
williamr@2
   108
	void ExternalizeL(RWriteStream& aStream) const;
williamr@4
   109
	void InternalizeL(RReadStream& aStream);
williamr@4
   110
williamr@2
   111
private:
williamr@2
   112
	CContactItemFieldSet();
williamr@2
   113
	void ConstructL();
williamr@2
   114
	void SetFieldId(CContactItemField& aField);
williamr@2
   115
	const CContactItemField* FindById(TInt aId) const;
williamr@2
   116
	IMPORT_C TStreamId StoreL(CStreamStore& aStore,const CContactItem* aTemplate,RWriteStream& aStream,CStreamStore& aBlobStore,CContactTables* aTables);
williamr@2
   117
	void RestoreL(CStreamStore& aStore, TStreamId anId, CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate,RReadStream& aReadStream,CContactTables* aContactsTable, RArray<TInt>* aEmailIdArray);
williamr@2
   118
	void RestoreAndAddTemplateL(CStreamStore& aStore, TStreamId aId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, RReadStream& aReadStream,CContactTables* aContactsTable,RArray<TInt>* aEmailIdArray);
williamr@2
   119
	TInt MatchTemplateField(const CContentType& aContentType,TUint aUserFlags,TBool &aExactMatch) const;
williamr@2
   120
	static HBufC* LoadTextStreamLC(RReadStream& aStream);
williamr@2
   121
	void NonZeroFieldText(TFieldType aFieldType, TDes &aText) const;
williamr@2
   122
williamr@2
   123
private:
williamr@2
   124
	CArrayPtr<CContactItemField>* iFields;
williamr@2
   125
	};
williamr@2
   126
williamr@2
   127
class CContactDatabase;
williamr@2
   128
class RCntModel;
williamr@2
   129
class CContactItem : public CBase
williamr@4
   130
/** The abstract base class for contact cards, templates and groups. All contact
williamr@4
   131
items are identified by a contact ID, (TContactItemId), have a last modified
williamr@4
   132
date/time and own one or more fields (the field set). Contact items also
williamr@4
   133
have an access count and attributes (e.g. hidden). Note that fields in a contact
williamr@4
   134
item also have attributes. Attribute values specified in the contact item
williamr@4
   135
override those in the contained fields. The access count is a record of the
williamr@4
   136
number of objects referencing a contact item. A contact item cannot be fully
williamr@4
   137
deleted until its access count is zero.
williamr@2
   138
@publishedAll
williamr@2
   139
@released
williamr@2
   140
*/
williamr@2
   141
	{
williamr@2
   142
	friend class CContactCardTemplate;
williamr@2
   143
	friend class CContactItemPlusGroup;
williamr@2
   144
	friend class CContactCard;
williamr@2
   145
	friend class CContactTemplate;
williamr@2
   146
	friend class CContactGroup;
williamr@2
   147
	friend class CContactOwnCard;
williamr@2
   148
	friend class CVCardToContactsAppConverter;
williamr@2
   149
	friend class CContactICCEntry;
williamr@2
   150
	friend class RPplContactTable;
williamr@2
   151
	friend class RPplIdentityTable;
williamr@2
   152
	friend class RPplPreferencesTable;
williamr@2
   153
	friend class CPackagerTests; //Comparison test
williamr@2
   154
	friend class CPackagerCntComparator;
williamr@2
   155
	friend class CContactDatabase;
williamr@2
   156
	friend class CPplContactItemManager;
williamr@2
   157
public:
williamr@2
   158
	IMPORT_C ~CContactItem();
williamr@2
   159
	/** Gets the contact item's type.
williamr@4
   160
williamr@2
   161
	@return The contact item's type. */
williamr@2
   162
	virtual TUid Type() const=0;
williamr@2
   163
	static CContactItem* NewLC(RReadStream& aStream);
williamr@4
   164
	IMPORT_C static CContactItem* NewLC(TUid aType);
williamr@2
   165
	IMPORT_C TContactItemId Id() const;
williamr@2
   166
	IMPORT_C TContactItemId TemplateRefId() const;
williamr@2
   167
	IMPORT_C TTime LastModified() const;
williamr@2
   168
	IMPORT_C void SetLastModified(const TTime& aLastModified);
williamr@2
   169
	IMPORT_C void AddFieldL(CContactItemField& aField);
williamr@2
   170
	IMPORT_C void RemoveField(TInt aFieldPos);
williamr@2
   171
	IMPORT_C void InsertFieldL(CContactItemField& aField,TInt aFieldPos);
williamr@2
   172
	IMPORT_C CContactItemFieldSet& CardFields() const;
williamr@2
   173
	IMPORT_C void SetHidden(TBool aHidden);
williamr@4
   174
	IMPORT_C void SetSystem(TBool aSystem);
williamr@2
   175
	IMPORT_C TBool IsHidden();
williamr@4
   176
	IMPORT_C TBool IsSystem();
williamr@2
   177
	IMPORT_C void UpdateFieldSet(CContactItemFieldSet* aNewFieldSet);
williamr@2
   178
	IMPORT_C void SetDeleted(TBool aDeleted);
williamr@2
   179
	IMPORT_C TBool IsDeleted() const;
williamr@2
   180
	IMPORT_C void SetTemplateRefId(TContactItemId aUid);
williamr@2
   181
	TContactItemId Agent();
williamr@2
   182
	inline TBool IsDeletable();
williamr@2
   183
	inline void IncAccessCount();
williamr@2
   184
	inline void DecAccessCount();
williamr@2
   185
	inline TInt AccessCount() const;
williamr@2
   186
	IMPORT_C void SetUidStringL(TDesC& aString);
williamr@2
   187
	IMPORT_C TPtrC UidStringL(TInt64 aMachineUniqueId) const;
williamr@2
   188
	TStreamId PopulateStoreL(CStreamStore& aStore, CArrayFix<TFieldHeader>& aFieldHeaderArray) const;
williamr@2
   189
	void AddLabelFieldL();
williamr@2
   190
	IMPORT_C void RestoreTemplateFieldsL(const CContactItemFieldSet& aSystemTemplateFields, const CContactItemFieldSet& aTemplateFields, const CContactItemViewDef& aViewDef);
williamr@2
   191
	void ClearFieldContent();
williamr@2
   192
	inline TPtrC Guid();
williamr@2
   193
	virtual void ExternalizeL(RWriteStream& aStream) const;
williamr@4
   194
	virtual void InternalizeL(RReadStream& aStream);
williamr@2
   195
williamr@2
   196
	IMPORT_C void SetId(TContactItemId aId);
williamr@2
   197
	IMPORT_C TUint32 Attributes() const;
williamr@2
   198
	IMPORT_C void SetAttributes(TUint32 aAttributes);
williamr@2
   199
	IMPORT_C void SetAccessCount(TUint32 aAccessCount);
williamr@2
   200
	IMPORT_C void SetCreationDate(const TTime& aTime);
williamr@2
   201
williamr@2
   202
public:
williamr@4
   203
	/** Contact item's attribute flags
williamr@4
   204
williamr@4
   205
	These flags can be used to set the various attributes of a contact item. */
williamr@4
   206
	enum
williamr@2
   207
	{
williamr@4
   208
	/** To set the contact item's system attribute. */
williamr@4
   209
	ESystem=0x01,
williamr@4
   210
	/** To set the contact item's hidden attribute. */
williamr@4
   211
	EHidden=0x02,
williamr@4
   212
	/** To set the contact item's hidden attribute. */
williamr@4
   213
	ECompressedGuid=0x04,
williamr@4
   214
	/** To set the contact item's Is deleted attribute. */
williamr@4
   215
	EDeleted=0x08
williamr@2
   216
	};
williamr@4
   217
williamr@2
   218
private:
williamr@2
   219
	CContactItem();
williamr@2
   220
	void ConstructL();
williamr@2
   221
	void ConstructL(const CContactItem *aTemplate);
williamr@2
   222
	void MakeUidStringL(TInt64 aMachineUniqueId);
williamr@2
   223
	IMPORT_C void SetHasCompressedGuid(TBool aCompressed);
williamr@2
   224
	TBool GuidIsCompressed() const;
williamr@2
   225
	TInt NumberOfFieldsToStore() const;
williamr@2
   226
williamr@2
   227
private:
williamr@2
   228
	CContactItemFieldSet* iFieldSet;
williamr@2
   229
	TUint32 iAttributes;
williamr@2
   230
	TContactItemId iId;
williamr@2
   231
	TContactItemId iTemplateRefId;
williamr@2
   232
	TTime iLastModified;
williamr@2
   233
	TTime iCreationDate;
williamr@2
   234
	TUint32 iAccessCount;
williamr@2
   235
	HBufC* iGuid;
williamr@2
   236
	};
williamr@2
   237
williamr@2
   238
class CContactItemPlusGroup : public CContactItem
williamr@2
   239
/** Abstract base class for CContactGroup, CContactCard and CContactOwnCard.
williamr@2
   240
williamr@4
   241
The purpose of this class is to avoid duplication of group functionality
williamr@4
   242
in its derived classes.
williamr@2
   243
@publishedAll
williamr@2
   244
@released
williamr@2
   245
*/
williamr@2
   246
	{
williamr@2
   247
public:
williamr@2
   248
	IMPORT_C const CContactIdArray* GroupsJoined() const;
williamr@2
   249
	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
williamr@2
   250
protected:
williamr@2
   251
	CContactItemPlusGroup();
williamr@2
   252
	IMPORT_C ~CContactItemPlusGroup();
williamr@2
   253
public:
williamr@2
   254
	virtual void ExternalizeL(RWriteStream& aStream) const;
williamr@4
   255
	virtual void InternalizeL(RReadStream& aStream);
williamr@2
   256
williamr@2
   257
	IMPORT_C void ResetGroups();
williamr@2
   258
	IMPORT_C void SetGroups(CContactIdArray* aGroups);
williamr@2
   259
williamr@2
   260
private:
williamr@2
   261
	CContactIdArray* iGroups;
williamr@2
   262
	friend class CContactDatabase;
williamr@2
   263
	friend class RPplLookupGroupsTable;
williamr@2
   264
	friend class RPplGroupMembershipTable;
williamr@2
   265
	};
williamr@2
   266
williamr@2
   267
class CContactGroup : public CContactItemPlusGroup
williamr@2
   268
/** A contact group.
williamr@2
   269
williamr@4
   270
A contact group is a contact item which holds a set of associated contact
williamr@4
   271
item IDs. The members of the group may be contact cards, own cards, or even
williamr@4
   272
other groups. The group has a label which identifies the group to users, e.g.
williamr@4
   273
"family", or "colleagues". The type of a contact group is KUidContactGroup,
williamr@2
   274
as returned by Type().
williamr@2
   275
williamr@4
   276
Objects of this class are constructed using CContactDatabase::CreateContactGroupL()
williamr@4
   277
or CreateContactGroupLC(). These functions create the group, optionally with
williamr@2
   278
a label, add it to the database, and return a pointer to it.
williamr@2
   279
williamr@4
   280
To create an association between a card and a group, use CContactDatabase::AddContactToGroupL()
williamr@4
   281
and to remove the association, use RemoveContactFromGroupL(). To find out
williamr@2
   282
which groups a card belongs to, use CContactCard::GroupsJoinedLC() or CContactOwnCard::GroupsJoinedLC().
williamr@2
   283
williamr@4
   284
The function CContactDatabase::GetGroupIdListL() may be used to retrieve a
williamr@4
   285
list of IDs for all groups in the database.
williamr@2
   286
@publishedAll
williamr@2
   287
@released
williamr@2
   288
*/
williamr@2
   289
	{
williamr@2
   290
public:
williamr@2
   291
	IMPORT_C static CContactGroup* NewL();
williamr@2
   292
	IMPORT_C static CContactGroup* NewLC();
williamr@2
   293
	IMPORT_C ~CContactGroup();
williamr@2
   294
public: // from CContactItem
williamr@2
   295
	IMPORT_C TUid Type() const;
williamr@2
   296
public:
williamr@2
   297
	// default sorted item array is ascending
williamr@2
   298
	IMPORT_C CContactIdArray* ItemsContainedLC() const;
williamr@2
   299
	IMPORT_C const CContactIdArray* ItemsContained() const;
williamr@2
   300
	IMPORT_C TBool IsSystem() const;
williamr@2
   301
	IMPORT_C void SetSystem(TBool aSystem);
williamr@2
   302
	IMPORT_C TBool ContainsItem(TContactItemId aContactId);
williamr@2
   303
	IMPORT_C void SetGroupLabelL(const TDesC& aLabel);
williamr@2
   304
	IMPORT_C TPtrC GetGroupLabelL();
williamr@2
   305
	IMPORT_C TBool HasItemLabelField();
williamr@2
   306
	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
williamr@4
   307
williamr@2
   308
	IMPORT_C void AddContactL(TContactItemId aContactId);
williamr@2
   309
	IMPORT_C void RemoveContactL(TContactItemId aContactId);
williamr@2
   310
	virtual void ExternalizeL(RWriteStream& aStream) const;
williamr@2
   311
	virtual void InternalizeL(RReadStream& aStream);
williamr@2
   312
williamr@2
   313
	IMPORT_C void ResetItems();
williamr@4
   314
	IMPORT_C void SetItems(CContactIdArray* aItems);
williamr@2
   315
williamr@2
   316
private:
williamr@2
   317
	CContactGroup();
williamr@4
   318
williamr@2
   319
private:
williamr@2
   320
	CContactIdArray* iItems;
williamr@2
   321
	friend class CContactDatabase;
williamr@2
   322
	friend class RPplGroupMembershipTable;
williamr@2
   323
	};
williamr@2
   324
williamr@2
   325
class CContactCardTemplate : public CContactItem
williamr@2
   326
/** A contact card template.
williamr@2
   327
williamr@4
   328
This is a contact item containing a set of fields on which new contact items can
williamr@4
   329
be based. Templates have a label which is a string which identifies the template
williamr@4
   330
to a user. For instance, 'work template' could indicate a template used
williamr@4
   331
to create contact cards in the style of a work colleague. Contact card templates
williamr@2
   332
have a type of KUidContactCardTemplate, as returned by Type().
williamr@2
   333
williamr@4
   334
Objects of this class cannot be constructed directly because its constructors
williamr@4
   335
are protected. Instead, use either CContactDatabase::CreateContactCardTemplateL()
williamr@4
   336
or CreateContactCardTemplateLC(). These functions create a contact card template,
williamr@2
   337
add it to the database, and return a pointer to it.
williamr@2
   338
williamr@4
   339
The function CContactDatabase::GetCardTemplateIdListL() gets a list of the
williamr@4
   340
IDs of all contact card templates in the database.
williamr@2
   341
@publishedAll
williamr@2
   342
@released
williamr@2
   343
*/
williamr@2
   344
	{
williamr@2
   345
	friend class CContactDatabase;
williamr@2
   346
	friend class CContactTables;
williamr@2
   347
	friend class RPplContactTable;
williamr@2
   348
	friend class CContactItem;
williamr@2
   349
public:
williamr@2
   350
	IMPORT_C void SetTemplateLabelL(const TDesC& aLabel);
williamr@2
   351
	IMPORT_C TPtrC GetTemplateLabelL();
williamr@2
   352
protected:
williamr@2
   353
	IMPORT_C static CContactCardTemplate* NewL();
williamr@2
   354
	IMPORT_C static CContactCardTemplate* NewLC();
williamr@2
   355
	IMPORT_C static CContactCardTemplate* NewL(const CContactItem *aTemplate);
williamr@2
   356
	IMPORT_C static CContactCardTemplate* NewLC(const CContactItem *aTemplate);
williamr@2
   357
	IMPORT_C TBool HasItemLabelField();
williamr@4
   358
williamr@4
   359
/** Intended usage: Reserved to preserve future BC */
williamr@2
   360
	IMPORT_C void ReservedFunction1();
williamr@4
   361
/** Intended usage: Reserved to preserve future BC */
williamr@2
   362
	IMPORT_C void ReservedFunction2();
williamr@2
   363
williamr@2
   364
protected: // from CContactItem
williamr@2
   365
	IMPORT_C TUid Type() const;
williamr@4
   366
williamr@2
   367
private:
williamr@2
   368
	CContactCardTemplate();
williamr@2
   369
	};
williamr@2
   370
williamr@2
   371
class CContactCard : public CContactItemPlusGroup
williamr@4
   372
/** A contact card.
williamr@2
   373
williamr@4
   374
Implements the Type() function declared in class CContactItem.
williamr@4
   375
Contact cards may optionally be constructed from a template.
williamr@2
   376
@publishedAll
williamr@2
   377
@released
williamr@2
   378
*/
williamr@2
   379
	{
williamr@2
   380
public:
williamr@2
   381
	IMPORT_C ~CContactCard();
williamr@2
   382
	IMPORT_C static CContactCard* NewL();
williamr@2
   383
	IMPORT_C static CContactCard* NewLC();
williamr@2
   384
	IMPORT_C static CContactCard* NewL(const CContactItem *aTemplate);
williamr@2
   385
	IMPORT_C static CContactCard* NewLC(const CContactItem *aTemplate);
williamr@2
   386
public: // from CContactItem
williamr@2
   387
	IMPORT_C TUid Type() const;
williamr@2
   388
public:
williamr@2
   389
	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
williamr@2
   390
private:
williamr@2
   391
	CContactCard();
williamr@2
   392
private:
williamr@2
   393
	friend class CContactDatabase;
williamr@2
   394
	};
williamr@2
   395
williamr@2
   396
class CContactOwnCard : public CContactItemPlusGroup
williamr@4
   397
/** Own card.
williamr@2
   398
williamr@4
   399
An own card is a contact card which contains information about the device's
williamr@4
   400
owner. This can be sent to another compatible electronic device as a vCard.
williamr@4
   401
The contact database recognises a single own card, referred to as the
williamr@4
   402
current own card; its ID is returned by CContactDatabase::OwnCardId(). Like
williamr@4
   403
a contact card, an own card can be a member of one or more contact card groups.
williamr@2
   404
The own card type is identified by a UID of KUidContactOwnCard.
williamr@2
   405
williamr@4
   406
Own cards can be constructed using either CContactDatabase::CreateOwnCardLC()
williamr@4
   407
or CreateOwnCardL(). These functions create an own card, based on the system
williamr@4
   408
template, add it to the database, set it as the database's current own card
williamr@4
   409
and return a pointer to it. To change the database's current own card, use
williamr@4
   410
CContactDatabase::SetOwnCardL().
williamr@2
   411
@publishedAll
williamr@2
   412
@released
williamr@2
   413
*/
williamr@2
   414
	{
williamr@2
   415
public:
williamr@2
   416
	IMPORT_C ~CContactOwnCard();
williamr@2
   417
	IMPORT_C static CContactOwnCard* NewL();
williamr@2
   418
	IMPORT_C static CContactOwnCard* NewLC();
williamr@2
   419
	IMPORT_C static CContactOwnCard* NewL(const CContactItem *aTemplate);
williamr@2
   420
	IMPORT_C static CContactOwnCard* NewLC(const CContactItem *aTemplate);
williamr@2
   421
public: // from CContactItem
williamr@2
   422
	IMPORT_C TUid Type() const;
williamr@2
   423
public:
williamr@2
   424
	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
williamr@2
   425
private:
williamr@2
   426
	CContactOwnCard();
williamr@2
   427
private:
williamr@2
   428
	friend class CContactDatabase;
williamr@2
   429
	};
williamr@2
   430
williamr@2
   431
class CContactTemplate : public CContactItem
williamr@4
   432
/** A contact item template.
williamr@2
   433
williamr@4
   434
This is a contact item which is used to seed the initial field set for
williamr@2
   435
other contact items.
williamr@2
   436
williamr@4
   437
Non-system (i.e. user-defined) templates are implemented
williamr@4
   438
by the CContactCardTemplate class. CContactCardTemplate should be
williamr@4
   439
used in preference to CContactTemplate.
williamr@2
   440
@publishedAll
williamr@2
   441
@released
williamr@2
   442
*/
williamr@2
   443
	{
williamr@2
   444
public:
williamr@2
   445
	IMPORT_C static CContactTemplate* NewL();
williamr@2
   446
	IMPORT_C static CContactTemplate* NewLC();
williamr@2
   447
	IMPORT_C static CContactTemplate* NewL(const CContactItem *aTemplate);
williamr@2
   448
	IMPORT_C static CContactTemplate* NewLC(const CContactItem *aTemplate);
williamr@2
   449
public: // from CContactItem
williamr@2
   450
	IMPORT_C TUid Type() const;
williamr@2
   451
private:
williamr@2
   452
	CContactTemplate();
williamr@2
   453
	};
williamr@2
   454
williamr@2
   455
williamr@2
   456
class CContactICCEntry : public CContactItemPlusGroup
williamr@4
   457
/** A contact ICC entry.
williamr@2
   458
@publishedAll
williamr@2
   459
@released
williamr@2
   460
*/
williamr@2
   461
	{
williamr@2
   462
public:
williamr@2
   463
	IMPORT_C ~CContactICCEntry();
williamr@2
   464
	IMPORT_C static CContactICCEntry* NewL(const CContactItem& aTemplate);
williamr@2
   465
	static CContactICCEntry* NewL();
williamr@2
   466
public: //from CContactItem
williamr@2
   467
	TUid Type() const;
williamr@2
   468
private:
williamr@2
   469
	CContactICCEntry();
williamr@2
   470
	};
williamr@2
   471
williamr@2
   472
williamr@2
   473
class ContactGuid
williamr@2
   474
/** A globally unique identifier enquiry utility.
williamr@2
   475
williamr@4
   476
Each contact item has a unique identifier, stored as a descriptor. It is
williamr@4
   477
referred to as the 'UID string'. This is a combination of the unique
williamr@4
   478
identifier of the database in which the contact item was created, the
williamr@4
   479
contact item ID and the date/time of the contact item's creation. ContactGuid
williamr@4
   480
provides a single static exported function to enquire whether an item was
williamr@4
   481
created in a specified database.
williamr@2
   482
@publishedAll
williamr@2
   483
@released
williamr@2
   484
*/
williamr@2
   485
	{
williamr@2
   486
public:
williamr@2
   487
	IMPORT_C static TContactItemId IsLocalContactUidString(const TDesC& aString, TInt64 aMachineUniqueId);
williamr@2
   488
	IMPORT_C static TBool GetCreationDate(TDes& aString, TInt64 aMachineUniqueId);
williamr@2
   489
	static HBufC* CreateGuidLC(const TDesC& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
williamr@2
   490
	static HBufC* CreateGuidLC(const TTime& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
williamr@2
   491
	static HBufC* CreateGuidLC(TContactItemId aId, TInt64 aMachineUniqueId);
williamr@2
   492
	};
williamr@2
   493
williamr@2
   494
inline const CContactItemField& CContactItemFieldSet::operator[](TInt aIndex) const
williamr@4
   495
/** Gets the field located at a specified position in the field set.
williamr@2
   496
williamr@4
   497
@param aIndex The position of the field in the field set. This is relative to zero.
williamr@4
   498
It must be non-negative and less than the number of objects in the array, otherwise
williamr@2
   499
the operator raises a panic.
williamr@2
   500
williamr@2
   501
@return A const reference to an element in the array. */
williamr@2
   502
	{ return *(*iFields)[aIndex]; }
williamr@2
   503
williamr@2
   504
inline CContactItemField& CContactItemFieldSet::operator[](TInt aIndex)
williamr@4
   505
/** Gets the field located at a specified position in the field set.
williamr@2
   506
williamr@4
   507
@param aIndex The position of the field in the field set. This is relative to zero.
williamr@4
   508
It must be non-negative and less than the number of objects in the array, otherwise
williamr@2
   509
the operator raises a panic.
williamr@2
   510
williamr@2
   511
@return A non-const reference to an element in the array. */
williamr@2
   512
	{ return *(*iFields)[aIndex]; }
williamr@2
   513
williamr@2
   514
inline TInt CContactItemFieldSet::Find(TFieldType aFieldType) const
williamr@2
   515
/** Finds the first field in the field set with the specified field type.
williamr@2
   516
williamr@2
   517
@param aFieldType The field type of interest.
williamr@4
   518
@return If found, the index of the field within the field set, or KErrNotFound
williamr@2
   519
if not found. */
williamr@2
   520
	{ return FindNext(aFieldType,KContactFieldSetSearchAll); }
williamr@2
   521
williamr@2
   522
inline TInt CContactItemFieldSet::Find(TFieldType aFieldType,TUid aMapping) const
williamr@4
   523
/** Finds the first field in the field set containing both the content type mapping
williamr@2
   524
and the field type specified.
williamr@2
   525
williamr@2
   526
@param aFieldType The field type of interest.
williamr@2
   527
@param aMapping The content type mapping of interest.
williamr@4
   528
@return If found, the index of the field within the field set, or KErrNotFound
williamr@2
   529
if not found. */
williamr@2
   530
	{ return FindNext(aFieldType,aMapping,KContactFieldSetSearchAll); }
williamr@2
   531
williamr@2
   532
inline TInt CContactItemFieldSet::Count() const
williamr@2
   533
/** Gets the number of fields in the field set.
williamr@2
   534
williamr@2
   535
@return The number of fields in the field set. */
williamr@2
   536
	{ return iFields->Count(); }
williamr@2
   537
williamr@2
   538
inline void CContactItemFieldSet::Reset()
williamr@2
   539
/** Deletes all fields in the field set. */
williamr@2
   540
	{ iFields->ResetAndDestroy(); }
williamr@2
   541
williamr@2
   542
inline TBool CContactItem::IsDeletable()
williamr@4
   543
/** Tests whether the contact item is deletable.
williamr@2
   544
williamr@2
   545
This is true if the item's access count is zero.
williamr@2
   546
williamr@2
   547
@return ETrue if deletable, EFalse if not deletable. */
williamr@2
   548
	{return (iAccessCount == 0);}
williamr@2
   549
williamr@2
   550
inline void CContactItem::IncAccessCount()
williamr@2
   551
/** Increments the contact item's access count. */
williamr@2
   552
	{iAccessCount++;}
williamr@2
   553
williamr@2
   554
inline void CContactItem::DecAccessCount()
williamr@2
   555
/** Decrements the contact item's access count. */
williamr@2
   556
	{if(iAccessCount) iAccessCount--;}
williamr@2
   557
williamr@2
   558
inline TInt CContactItem::AccessCount() const
williamr@2
   559
/** Gets the contact item's access count.
williamr@2
   560
williamr@2
   561
@return The item's access count. */
williamr@2
   562
	{return(iAccessCount);}
williamr@2
   563
williamr@4
   564
inline TPtrC CContactItem::Guid()
williamr@4
   565
/** Accessor function for Contact Guid.
williamr@2
   566
 * This is used to cache contact items that are added during a sync.
williamr@2
   567
 @return Guid    */
williamr@2
   568
 { return iGuid ? *iGuid : TPtrC(KNullDesC); }
williamr@2
   569
williamr@2
   570
#endif