// AGMSORT.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//



#if !defined __AGNSORT_H__
#define __AGNSORT_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#include <agmdate.h>

class CAgnModel;
class CAgnTodoList;

class TAgnSortKey : public TKeyArrayFix
	{
public:
	TAgnSortKey(const CAgnModel* aModel,TAgnDate aToday);
	virtual TInt Compare(TInt aLeft,TInt aRight) const;
protected:
	TInt OrderByType(TUint aLeft,TUint aRight) const;
	TInt OrderByCrossedOut(TUint aLeft,TUint aRight) const;
	TInt OrderByAppt(TUint aLeft,TUint aRight) const;
	TInt OrderByToDo(TUint aLeft,TUint aRight) const;
	TInt OrderByRepeating(TUint aLeft,TUint aRight) const;
	TInt OrderByDatePriority(TUint aLeft,TUint aRight) const;
	TInt OrderByPriorityDate(TUint aLeft,TUint aRight) const;
	TInt OrderById(TUint aLeft,TUint aRight) const;
	TInt OrderByPriority(TUint aLeft,TUint aRight) const;
	TInt OrderByDate(TUint aLeft,TUint aRight) const;
	const CAgnModel* Model() const { return iModel; }
	TAgnDate Today() const { return iToday; }
private:
	const CAgnModel* iModel;
	TAgnDate iToday;
	};


class TAgnDaySortKey : public TAgnSortKey
	{
public:
	TAgnDaySortKey(const CAgnModel* aModel,TAgnDate aTargetDate,TAgnDate aToday);
	virtual TInt Compare(TInt aLeft,TInt aRight) const;
	void SetTargetDate(TAgnDate aTargetDate);
protected:
	TInt OrderByTime(TUint aLeft,TUint aRight) const;
private:
	TAgnDate iTargetDate;
	};

class TAgnYearSortKey : public TAgnDaySortKey
	{
public:
	TAgnYearSortKey(const CAgnModel* aModel,TAgnDate aTargetDate,TAgnDate aToday);
	virtual TInt Compare(TInt aLeft,TInt aRight) const;
	};

class TAgnTodoSortKey : public TAgnSortKey
	{
public:
//	enum TAgnTodoSortOrder {EDatePri,EPriDate,EUser};
	TAgnTodoSortKey(const CAgnModel* aModel,CAgnTodoList* aTodoList,TAgnDate aToday);
	virtual TInt Compare(TInt aLeft,TInt aRight) const;
private:
	CAgnTodoList* iTodoList;	
	};


#endif
