// PRINTER.H
//
// Copyright (C) Symbian Ltd 1998
//

// MODULE - Text message printer

#if !defined(__PRINTER_H__)
#define __PRINTER_H__

#if !defined(__E32BASE_H__)
#include <e32base.h>
#endif

#if !defined(__EIKPPROB_H__)
#include <eikpprob.h>
#endif

#if !defined(__PRNSETUP_H__)
#include <prnsetup.h>
#endif

// Forwards
class CTextPageRegionPrinter;
class CRichText;
class CEikonEnv;
//

class CMessagePrinter : public CBase, public MPrintPreviewDialogObserver
	{
public:
	IMPORT_C static void PreviewL(CRichText* aText, CPrintSetup& aSetup, TPrintParameters& aParams, TInt aRid);
	IMPORT_C static void PreviewL(MPageRegionPrinter* aPrinter, TInt aNumPages, CPrintSetup& aSetup, TPrintParameters& aParams, TInt aRid);
	IMPORT_C static TBool PrintL(CRichText* aText, CPrintSetup& aSetup, TPrintParameters& aParams, TInt aRid);
	IMPORT_C static TBool PrintL(MPageRegionPrinter* aPrinter, TInt aNumPages, CPrintSetup& aSetup, TPrintParameters& aParams, TInt aRid);
	IMPORT_C ~CMessagePrinter();
		
private:
	TBool DoPrintL(TBool aShowSetupDialog);
	void DoPreviewL();
	void FinishPrint();
	void SetupPageRegionPrinterL(TBool aForPreview);
	void InitialisePageRegionPrinterL(MPageRegionPrinter* aPrinter, TBool aForPreview, CPrintSetup& aSetup) const;
	TBool PrepareToPrintL(CPrintSetup& aSetup);
	TBool PaginateL(CPrintSetup& aSetup) const;
	TInt NumPagesInPrintDocument() const;
	TBool DoPrintL(CPrintSetup& aSetup, TBool aShowSetupDialog);
	TBool LaunchPrintSetupDialogL(TBool aShowPrintButtton);

	CMessagePrinter(CRichText* aText, CPrintSetup& aSetup, TPrintParameters& aParams, TInt aRid);
	void ConstructWithRegionPrinterL(MPageRegionPrinter* aPrinter, TInt aNumPages);
	//
	// --- From MPrintPreviewDialogObserver ---
	TBool PageSetupChangedL(CPrintSetup* aPrintSetup, TInt& aNumPagesInPrintDocument);	//return true if cancelled
	TBool RunPrintRangeDialogL(CPrintSetup* aPrintSetup, TInt& aNumPagesInPrintDocument); //return true if cancelled

private:
	// --- Data ---
	CRichText*					iText;
	MPageRegionPrinter*			iPageRegionPrinter;
	CArrayFix<TInt>*			iCharsPerPage;
	CPrintSetup&				iPrintSetup;
	CEikonEnv*					iEikEnv;
	TInt						iDialogId;
	TPrintParameters&			iParams;
	TBool						iRegionPrinterProvided;
	TInt						iNumPages;
	};
	
#endif // __PRINTER_H__