// FXPROP.H
//
// Copyright (C) Symbian Ltd 1998
//

// MODULE - Fax print (rendering) operation

#if !defined(__FXPROP_H__)
#define __FXPROP_H__

#if !defined(__MSVAPI_H__)
#include <MSVAPI.H>
#endif

#if !defined(__PRNINF_H__)
#include <prninf.H>// MPrintProcessObserver
#endif

#if !defined(__TXTMRTSR_H__)
#include <txtmrtsr.H>// MRichTextStoreResolver
#endif

#if !defined(__FAXDEFN_H__)
#include <faxdefn.h>
#endif

// Forward declarations
class CPrintSetup;
class CTextPaginator;
class CTextPageRegionPrinter;
//

class TFaxRenderOperationProgress
	{
public:
	TInt iId;
	enum TRenderStage
		{
		EInitialising,
		EPaginating,
		EPrinting,
		ESettingCompleteFlag,	
		EDone
		}						iStage;
	TInt8						iPercentDone;
	enum TRenderErrors
		{
		EProblemInitialisingEntry				=-900,
		EProblemInitialisingStore				=EProblemInitialisingEntry-1,
		EProblemInitialisingRestoringBodyText	=EProblemInitialisingEntry-2,
		EProblemInitialisingOutOfMemory			=EProblemInitialisingEntry-3,
		EProblemInitialisingGettingBinaryFile	=EProblemInitialisingEntry-4,
		EProblemInitialisingPrintObjects		=EProblemInitialisingEntry-5,
		EProblemPaginatingOutOfMemory			=EProblemInitialisingEntry-6,
		EProblemPaginatingCompletion			=EProblemInitialisingEntry-7,
		EProblemPaginating						=EProblemInitialisingEntry-8,
		EProblemPrintingOutOfMemory				=EProblemInitialisingEntry-9,
		EProblemPrintingInitialisation			=EProblemInitialisingEntry-10,
		EProblemSettingCompleteFlag				=EProblemInitialisingEntry-11
		};
	TInt						iError;
	};

class CFaxRenderOperation : public CMsvOperation, public MPrintProcessObserver, public MRichTextStoreResolver
	{
public:
	// --- Construction ---
	CFaxRenderOperation(CMsvSession& aMsvSession, TMsvId aFaxId, TInt aPriority, TRequestStatus& aObserverRequestStatus);
	//
	// --- Progress ---
	TFaxRenderOperationProgress RenderProgress() const;
	//
	// --- Destruction ---
	~CFaxRenderOperation();

private:
	// --- From MRichTextStoreResolver ---
	virtual const CStreamStore& StreamStoreL(TInt aPos) const;
	//
	// --- Construction ---
	void InitialiseL();
	//
	// --- Rendering ---
	void DoRenderStepL();
	void StartPrintingL();
	void PaginationStepL();
	void SetCompleteFlagL();
	//
	// --- Completion handling ---
	void Complete(TInt aError);
	void NextStep();
	//
	// --- From CMsvOperation ---
	virtual const TDesC8& ProgressL();
	//
	// --- From CActive ---
	virtual void DoCancel();
	virtual void RunL();
	//
	// --- From MPrintProcessObserver ---
	virtual void NotifyPrintStarted(TPrintParameters aPrintParams);
	virtual void NotifyBandPrinted(TInt aPercentageOfPagePrinted, TInt aCurrentPageNum, TInt aCurrentCopyNum);
	virtual void NotifyPrintEnded(TInt anErrorCode);

	//	Informational 
	TFaxResolution GetDefaultResolution();
	TFaxResolution DoGetDefaultResolutionL();

private:
	// --- Data ---
	TMsvId								iFaxId;
	CMsvSession&						iSession;
	TFaxRenderOperationProgress			iProgress;
	TPckg<TFaxRenderOperationProgress>	iProgressBuffer;
	CPrintSetup*						iSetup;
	TPrintParameters					iPrintParameters;
	CTextPageRegionPrinter*				iRichTextPrinter;
	CRichText*							iRichText;
	CParaFormatLayer*					iParaFormatLayer;
	CCharFormatLayer*					iCharFormatLayer;
	CArrayFixFlat<TInt>*				iPageList;
	CTextPaginator*						iPaginator;
	TInt								iPaginationDocPos;
	CEmbeddedStore*						iEmbeddedStore;	
	TBool								iEntryIsComplete;
	CMsvOperation*						iCompleteFlagOperation;
	TBool								iAlterEntryResolution;
	TFaxResolution						iRenderResolution;
	};

#endif // __FXPROP_H__
