// EIKDCLBM.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKDCLBM_H__)
#define __EIKDCLBM_H__

#if !defined(__EIKLBM_H__)
#include <eiklbm.h>
#endif

#if !defined (__F32FILE_H__)
#include <f32file.h>
#endif

#if !defined(__BAMDESCA_H__)
#include <bamdesca.h>
#endif

class CDirContentsListBoxModel : public CBase, public MListBoxModel
	{
public:
	class TFileInfo
		{
	public:
		IMPORT_C TFileInfo();
	public:
		TUint iAtt;
		TInt iSize;
		TTime iModified;
		};
public:
	enum TSortOrder
		{
		EOrderByName	=0x00,
		EOrderBySize	=0x01,
		EOrderByDate	=0x02,
		EOrderByType	=0x04
		};
	enum TDisplayFlags
		{
		EShowFilesOnly	=0x08,
		EShowDirsOnly	=0x10,
		EShowSingleExt	=0x20
		};
	enum TContent
		{
		EShowSystem	=0x40,
		EShowHidden	=0x80
		};
public:
	IMPORT_C static CDirContentsListBoxModel* NewL(RFs& aFsSession,TUint aFlags);
	IMPORT_C ~CDirContentsListBoxModel();
	IMPORT_C void UpdateL();
	IMPORT_C void Reset();
	IMPORT_C void SetCurrentPathL(const TDesC& aPath);
	IMPORT_C TDesC& ItemName(TInt aItemIndex) const;
	IMPORT_C TFileInfo ItemInfo(TInt aItemIndex) const;
	IMPORT_C void ChangeToParentDirL();
	IMPORT_C void ChangeToSubDirL(TInt aItemIndex);
	IMPORT_C TFileName ItemFullName(TInt aItemIndex) const;
	IMPORT_C TBool ItemIsParent(TInt aItemIndex) const;
	IMPORT_C TBool ItemIsSubDir(TInt aItemIndex) const;
	IMPORT_C void SetExtensionL(const TDesC& aExt);
	inline TDesC* CurrentPath() const;
	inline TDesC* Extension() const;
	IMPORT_C void SetSortOrder(CDirContentsListBoxModel::TSortOrder aSortOrder);
	IMPORT_C CDirContentsListBoxModel::TSortOrder SortOrder() const;
	inline void SetDisplayFlags(CDirContentsListBoxModel::TDisplayFlags aDisplayFlags);
	inline void ClearDisplayFlags(CDirContentsListBoxModel::TDisplayFlags aDisplayFlags);
	IMPORT_C void SetAllowUid(TBool aAllow);
	IMPORT_C void SetSortAscending(TBool aAscending);
	IMPORT_C TEntry* Item(TInt aItemIndex) const;
	IMPORT_C void SetContent(TUint aContentFlags);
public: // framework
	IMPORT_C TInt NumberOfItems() const;
	inline const MDesCArray* MatchableTextArray() const;
private:
	enum 
		{
		ESortMask		=0x007,
		EAllowUid		=0x100,
		ESortDescending	=0x200
		};
private:
	CDirContentsListBoxModel(RFs& aFsSession,TInt aFlags);
	void ConstructL();
	void CheckForErrorFromFileServerL(TInt aErrorCode);
	void ChangeCurrentPathL(const TDesC& aPath);
private:
	MDesCArray* iItemTextArray;
	HBufC* iCurrentPath;
	HBufC* iExtension;
	HBufC* iParentName;
	RFs iFsSession;
	CDir* iDirList;
	CDir* iFileList;
	TUint iFlags;
	TParse iParse;
	};

class CDirContentsTextArray : public MDesCArray
	{
public:
	CDirContentsTextArray::CDirContentsTextArray(const CDirContentsListBoxModel* aModel);
public: // framework
	TInt MdcaCount() const;
	TPtrC MdcaPoint(TInt aIndex) const;
private:
	const CDirContentsListBoxModel* iModel;
	TBuf<1> iParentIncMatchText;
	};

inline TDesC* CDirContentsListBoxModel::CurrentPath() const
	{ return iCurrentPath; }
inline TDesC* CDirContentsListBoxModel::Extension() const
	{ return iExtension; }
inline void CDirContentsListBoxModel::SetDisplayFlags(CDirContentsListBoxModel::TDisplayFlags aDisplayFlags)
	{ iFlags|=aDisplayFlags; }
inline void CDirContentsListBoxModel::ClearDisplayFlags(CDirContentsListBoxModel::TDisplayFlags aDisplayFlags)
	{ iFlags&=~aDisplayFlags; }
inline const MDesCArray* CDirContentsListBoxModel::MatchableTextArray() const
	{ return iItemTextArray; }

#endif
