// CNTFLDST.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__CNTFLDST_H__)
#define __CNTFLDST_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__BAMDESCA_H__)
#include <bamdesca.h>
#endif

#if !defined(__S32STD_H__)
#include <s32std.h>
#endif

#if !defined(__CNTDEF_H__)
#include <cntdef.h>
#endif

class CStreamStore;

class CContactFieldStorage : public CBase
	{
public:
    virtual void InternalizeL(RReadStream& aStream)=0;
    virtual void ExternalizeL(RWriteStream& aStream) const=0;
	virtual TStreamId StoreL(CStreamStore& aStore) const=0;
	virtual void RestoreL(CStreamStore& aStore,RReadStream& aStream)=0;
	virtual TBool IsFull() const=0;
	};

class CContactTextField : public CContactFieldStorage
	{
public:
	IMPORT_C ~CContactTextField();
public: 
	void InternalizeL(RReadStream& aStream);
    void ExternalizeL(RWriteStream& aStream) const;
	TStreamId StoreL(CStreamStore& aStore) const;
	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
	IMPORT_C void SetTextL(const TDesC& aText);
	IMPORT_C void SetText(HBufC *aHbuf);
	IMPORT_C void SetTextArray(MDesCArray* anArray);
	IMPORT_C TPtrC Text() const;
	TBool IsFull() const;
	TPtrC StandardTextLC() const;
	void SetStandardTextL(const TDesC& aText);
	void SetStandardTextArray(MDesCArray* anArray);
private:
	HBufC *EncodeL(const TDesC& aText,TUid aConversion) const;
private:
	HBufC* iText;
	};

class CContactStoreField : public CContactFieldStorage
	{
public:
	~CContactStoreField();
	TStreamId StoreL(CStreamStore& aStore) const;
	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
	IMPORT_C void SetThingL(MDesCArray* anArray);
	IMPORT_C void SetThingL(const TDesC& aDes);
	IMPORT_C void SetThingL(CBufBase * abuf);
	IMPORT_C CBufBase* Thing() const; 
	void InternalizeL(RReadStream& aStream);
    void ExternalizeL(RWriteStream& aStream) const;
	TBool IsFull() const;
private:
	CBufBase* iThing;
	};

class CContactAgentField : public CContactFieldStorage
	{
public:
	TStreamId StoreL(CStreamStore& aStore) const;
	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
	IMPORT_C void SetAgentId(TContactItemId aId);
	IMPORT_C TContactItemId Value() const;
	void InternalizeL(RReadStream& aStream);
    void ExternalizeL(RWriteStream& aStream) const;
	TBool IsFull() const;
private:
	TContactItemId iAgentId;
	};

class CContactDateField : public CContactFieldStorage
	{
public:
	CContactDateField();
	TStreamId StoreL(CStreamStore& aStore) const;
	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
	IMPORT_C void SetTime(TTime atime);
	IMPORT_C void SetTime(TDateTime aDateTime);
	IMPORT_C TTime Time() const;
	void InternalizeL(RReadStream& aStream);
    void ExternalizeL(RWriteStream& aStream) const;
	TBool IsFull() const;
private:
	TTime iTime;
	};

class CContactNumberField : public CContactFieldStorage
    {
public:
	TStreamId StoreL(CStreamStore& aStore) const;
	void RestoreL(CStreamStore& aStore,RReadStream& aStream);
	IMPORT_C void SetNumber(TInt aNumber);
	IMPORT_C TInt Value() const;
	void InternalizeL(RReadStream& aStream);
    void ExternalizeL(RWriteStream& aStream) const;
	TBool IsFull() const;
private:
    TInt iNumber;
    };

#endif
