// EIKPRTPV.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#if !defined(__EIKPRTPV_H__)
#define __EIKPRTPV_H__

#if !defined(__EIKBCTRL_H__)
#include <eikbctrl.h>
#endif

#if !defined(__COECOBS_H__)
#include <coecobs.h>
#endif

#if !defined(__EIKDIALG_H__)
#include <eikdialg.h>
#endif

#if !defined(__EIKMOBS_H__)
#include <eikmobs.h>
#endif

#if !defined(__PRNPREV_H__)
#include <prnprev.h>
#endif


//
// Class CEikPrintPreview
//

class TResourceReader;
class CPrintSetup;
class MPageRegionPrinter;
class CEikScrollButton;
class MPrintPreviewDialogObserver;

class CEikPrintPreview : public CEikBorderedControl, public MCoeControlObserver
	{
public:
	IMPORT_C CEikPrintPreview();
	IMPORT_C ~CEikPrintPreview();
	IMPORT_C void ConstructL(const CCoeControl* aParent);
    IMPORT_C void InitializeFormat(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,TPrintPreviewFormat& aFormat,TInt& aNumPagesInDoc,TInt& aFirstPageToDisplay,TInt aNumPagesToView,CPrintPreviewImage::TMarginState& aMarginState);
	IMPORT_C void SetFormatAndDrawL(TInt& aFirstPageToDisplay,TInt& aNumPagesToView);
	IMPORT_C void SetMarginAndDrawL(CPrintPreviewImage::TMarginState aMarginState);
	IMPORT_C void SetPreviewImageObserver(MPrintProcessObserver* aObserver);
	IMPORT_C void SetNumBands(TInt aNumBands);
	IMPORT_C void SetNumPagesInDoc(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView);
public: // from CCoeControl
	IMPORT_C TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType);
	IMPORT_C void ConstructFromResourceL(TResourceReader& aReader);
	IMPORT_C void Draw(const TRect& /*aRect*/) const;
	IMPORT_C void SetDrawFlag(TBool aDraw);
	IMPORT_C TBool DrawFlag();
	IMPORT_C void ActivateL();
protected: // from CCoeControl
    IMPORT_C TInt CountComponentControls() const;
    IMPORT_C CCoeControl* ComponentControl(TInt aIndex) const;
	IMPORT_C void SizeChangedL();
private: // from CCoeControl
	IMPORT_C void SetContainerWindowL(const CCoeControl& aParent);
private: // from MCoeControlObserver
	IMPORT_C void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEvent);
private:
	void CreateScrollButtonsL();
	void DrawPreview(const TRect& aRect);
	void SwitchFirstPageToDisplayL(TInt& aNewFirstPageToDisplay);
	void DrawButtons() const;
private: // from CCoeControl
	IMPORT_C void Reserved_1();
	IMPORT_C void Reserved_2();	
private:
    CEikScrollButton* iButton[2];
	CPrintPreviewImage* iPreview;
	CPrintSetup* iPrintSetup;
	MPageRegionPrinter* iBodyPrinter;
	TPrintPreviewFormat* iPrintPreviewFormat;
	TInt* iFirstPageToDisplay;
	TInt iNumPagesInDoc;
	TInt iNumPagesToView;
	TInt iNumBands;
	CPrintPreviewImage::TMarginState iMarginState;
	TRect iDisplayRect;
	TBool iPreviewDraw;
	};	


//
// Class CEikPrintPreviewDialog
//


class CEikPrintPreviewDialog : public CEikDialog, private MEikMenuObserver, private MPrintProcessObserver
    {
public:
    IMPORT_C CEikPrintPreviewDialog(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,TInt& aNumPagesInDoc,MPrintPreviewDialogObserver* aObserver,TInt aNumBands);
    IMPORT_C ~CEikPrintPreviewDialog();
private: // from CEikDialog
	void PreLayoutDynInitL();
	void PostLayoutDynInitL();
	TBool OkToExitL(TInt aButtonId);
	//from menuobserver
	void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis);
private: // from MEikCommandObserver
	void ProcessCommandL(TInt aCommand);
private:  // from MPrintProcessObserver 
	void NotifyPrintStarted(TPrintParameters aPrintParams);
	void NotifyPrintEnded(TInt anErrorCode);
	void NotifyBandPrinted(TInt aPercentageOfPagePrinted, TInt aCurrentPageNum, TInt aCurrentCopyNum);
private:
//	void RunPrinterSetupDialogL();
	void RunDialogsL(TBool aGoto);
	void DrawGoToButton();
	void SetNumPagesInDoc();
private:
	CPrintSetup* iPrintSetup;
	MPageRegionPrinter* iBodyPrinter;
	TPrintParameters iParameters;
	TPrintPreviewFormat iPrintPreviewFormat;
	TInt iNumPagesInDoc;
	TInt iFirstPageToDisplay;
	TInt iNumPagesToView;
	TInt iNumBands;
	CPrintPreviewImage::TMarginState iMarginState;
    MPrintPreviewDialogObserver* iObserver;
	};

//
//CEikPreviewSetupDialog
//
class CEikPreviewSetupDialog : public CEikDialog
    {
public:
    IMPORT_C CEikPreviewSetupDialog(TInt& aNumber,TInt aMax,CPrintPreviewImage::TMarginState& aMarginState);
private: // inherited and overridden
	void PreLayoutDynInitL();
    TBool OkToExitL(TInt aButtonId);
private:
	TInt& iNumber;
	TInt iMax;
	CPrintPreviewImage::TMarginState& iMarginState;
    };

//
//CEikPreviewGotoDialog
//
class CEikPreviewGotoDialog : public CEikDialog
    {
public:
    IMPORT_C CEikPreviewGotoDialog(TInt& aNumber, TInt aMax);
private: // inherited and overridden
	void PreLayoutDynInitL();
    TBool OkToExitL(TInt aButtonId);
private:
	TInt& iNumber;
	TInt iMax;
    };

//
// Class CEikNumDialog
//

class CEikNumDialog : public CEikDialog
    {
public:
    IMPORT_C CEikNumDialog(TInt& aNumber, TInt aMin, TInt aMax, TInt aTitleId, TInt aPromptId);
private: // inherited and overridden
	void PreLayoutDynInitL();
    TBool OkToExitL(TInt aButtonId);
private:
	TInt* iNumber;
	TInt iTitleId;
	TInt iPromptId;
	TInt iMin;
	TInt iMax;
    };					   


#endif

