// EIKPRTPV.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#include <eikenv.h>
#include <eikprtpv.h>
#include <eikmnbut.h>
#include <eikbtpan.h>
#include <eikmfne.h>
#include <eikscbut.h>
#include <barsread.h>
#include <basched.h>
#include <prnsetup.h>
#include <eikpriv.hrh>
#include <eikdialg.hrh>
#include <eikpanic.h>
#include <eikprtdg.h>
#include <eikchkbx.h>
#include <eikpprob.h>
#include <eiklbbut.h>
#include <eikrutil.h>
#include <eikon.rsg>

const TInt KEikAlertMaxMsgLength=80;
 
//
// class CEikPrintPreviewDialog
//


const TUid KUidPreviewMarginsFlag={268435736};
const TUid KUidNumOfPreviewPages={268435747};

const TInt KPanelGutter=5;
const TInt KShadowWidth=2;
const TInt KLabelFontHeight=12;
const TInt KMaxNumPagesToView=4; //In PRINT, it is hard wire for not more than 4 pages
const TInt KDefaultNumPagesToView=2;
const TInt KFirstPage=0;


EXPORT_C CEikPrintPreviewDialog::CEikPrintPreviewDialog(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,TInt& aNumPagesInDoc,MPrintPreviewDialogObserver* aObserver,TInt aNumBands)
	{
	__DECLARE_NAME(_S("CEikPrintPreviewDialog"));

	iPrintSetup=&aPrintSetup;
	iBodyPrinter=&aBodyPrinter;
	iNumPagesInDoc=aNumPagesInDoc;
	iFirstPageToDisplay=KFirstPage;
	//	there will be a system wide TPrintPreviewFormat and will be supplied by Eikon
	TBuf<KMaxTypefaceNameLength> typafaceName;
	CCoeEnv::Static()->ReadResource(typafaceName,R_EIK_PRINTPREV_DLG_PREV_FONT_NAME);
	TFontSpec fontSpec(typafaceName,KLabelFontHeight);
	iPrintPreviewFormat.iLabelFontSpecInPixels=fontSpec;
	iPrintPreviewFormat.iMinPanelGutterInPixels=TSize(KPanelGutter,KPanelGutter);
	iPrintPreviewFormat.iPanelShadowWidthInPixels=KShadowWidth;
	iPrintPreviewFormat.iPanelShadowColor=KRgbDarkGray;
	iPrintPreviewFormat.iPanelMarginColor=KRgbGray;
	iPrintPreviewFormat.iLabelOffsetInPixels=5;
	iObserver=aObserver;
	iNumBands=aNumBands;
	}

EXPORT_C CEikPrintPreviewDialog::~CEikPrintPreviewDialog()
	{
	}

void CEikPrintPreviewDialog::PreLayoutDynInitL()
    {
	__ASSERT_DEBUG(iObserver,Panic(EEikPanicNullPointer));

	CEikCommandButtonBase* button=ButtonPanel()->ButtonById(EEikBidSetup);
	STATIC_CAST(CEikMenuButton*,button)->SetButtonLayout(CEikCommandButton::ETextLeftPictureRight);				
	
	CDictionaryStore* iniFile=CDictionaryFileStore::SystemLC(iEikonEnv->FsSession());
	if (iniFile->IsPresentL(KUidNumOfPreviewPages))
		{
		RDictionaryReadStream stream;
		stream.OpenLC(*iniFile,KUidNumOfPreviewPages);
		iNumPagesToView=stream.ReadInt32L();
		CleanupStack::PopAndDestroy(); // stream
		}
	else
		iNumPagesToView=KDefaultNumPagesToView;

	if (iniFile->IsPresentL(KUidPreviewMarginsFlag))
		{
		RDictionaryReadStream stream;
		stream.OpenLC(*iniFile,KUidPreviewMarginsFlag);
		stream>> iMarginState;
		CleanupStack::PopAndDestroy(); // stream
		}
	else
		iMarginState=CPrintPreviewImage::EShowMargins;
	CleanupStack::PopAndDestroy(); //iniFile

	if (iNumPagesToView>iNumPagesInDoc)
		iNumPagesToView=iNumPagesInDoc;

	CEikPrintPreview* printPrev=(CEikPrintPreview*)Control(EEikCidPrintPrev);
	printPrev->InitializeFormat(*iPrintSetup,*iBodyPrinter,iPrintPreviewFormat,iNumPagesInDoc,iFirstPageToDisplay,iNumPagesToView,iMarginState);
	DrawGoToButton();
	printPrev->SetNumBands(iNumBands);
	}

void CEikPrintPreviewDialog::PostLayoutDynInitL()
	{
	CEikPrintPreview* printPrev=(CEikPrintPreview*)Control(EEikCidPrintPrev);
	printPrev->SetPreviewImageObserver(this);
	}

void CEikPrintPreviewDialog::SetEmphasis(CCoeControl* /*aMenuControl*/,TBool /*aEmphasis*/)
	{
	}


TBool CEikPrintPreviewDialog::OkToExitL(TInt aButtonId)
	{
	switch (aButtonId)
		{
	case EEikBidSetup:
		{
		CEikCommandButtonBase* button=ButtonPanel()->ButtonById(EEikBidSetup);
		STATIC_CAST(CEikMenuButton*,button)->LaunchPopupMenuL(this);				
		return EFalse;
		}
	case EEikBidPrintPrevGoToPageBut:
		{
		RunDialogsL(ETrue);
		return EFalse;
		}
	case EEikBidOk:	// start print
		break;
		}
	return ETrue;
	}

void CEikPrintPreviewDialog::ProcessCommandL(TInt aCommand)
	{
	CEikPrintPreview* printPrev=(CEikPrintPreview*)Control(EEikCidPrintPrev);
	printPrev->SetDrawFlag(EFalse);
	switch (aCommand)
		{
	case EEikCmdPageSetup:	
		{
		TBool ok=ETrue;
		CEikPageSetupDialog* dialog=new(ELeave) CEikPageSetupDialog(iPrintSetup);
		TRAPD(ret,ok=dialog->ExecuteLD(R_EIK_DIALOG_PAGE_SPEC));
		if (ret==KErrNone)
			{
			if (!ok)
				return;
			TInt numPagesInDoc=iNumPagesInDoc;
			TBool exit=EFalse;
			TRAP(ret,exit=iObserver->PageSetupChangedL(iPrintSetup,numPagesInDoc));
			if (ret==KErrNone)
				{//if true caller has cancelled pagination
				if (exit)
					{
					delete this;
					return;
					}
				printPrev->SetDrawFlag(ETrue);
				}
			else
				printPrev->SetDrawFlag(EFalse);
			if (ret==KErrNone && (iNumPagesInDoc!=numPagesInDoc))
				{
				iNumPagesInDoc=numPagesInDoc;
				SetNumPagesInDoc();
				}
			}
		else
			printPrev->SetDrawFlag(EFalse);
		if (ret==KErrNone)
			{
			printPrev->SetFormatAndDrawL(iFirstPageToDisplay,iNumPagesToView);
			DrawGoToButton();
			}
		break;
		}
	case EEikCmdPrinterSetup:
		{
		TInt numPagesInDoc=iNumPagesInDoc;
		TBool exit=EFalse;
		TRAPD(ret,exit=iObserver->RunPrintRangeDialogL(iPrintSetup,numPagesInDoc));
		if (ret==KErrNone)
			{
			if (exit)
				{
				delete this;
				return;
				}
			printPrev->SetDrawFlag(ETrue);
			}
		else
			printPrev->SetDrawFlag(EFalse);
		if (ret==KErrNone && (iNumPagesInDoc!=numPagesInDoc))
			{
			iNumPagesInDoc=numPagesInDoc;
			SetNumPagesInDoc();
			}
		if (ret==KErrNone)
			{
			printPrev->SetFormatAndDrawL(iFirstPageToDisplay,iNumPagesToView);
			DrawGoToButton();
			}
		break;
		}
	case EEikCmdPreviewSetup:
		printPrev->SetDrawFlag(ETrue);
		RunDialogsL(EFalse);
		break;
		}
	}

void CEikPrintPreviewDialog::SetNumPagesInDoc()
	{
	if (iNumPagesToView>iNumPagesInDoc)
		iNumPagesToView=iNumPagesInDoc;
	iFirstPageToDisplay=KFirstPage;
	CEikPrintPreview* printPrev=(CEikPrintPreview*)Control(EEikCidPrintPrev);
	printPrev->SetNumPagesInDoc(iNumPagesInDoc,iFirstPageToDisplay,iNumPagesToView);
	}

void CEikPrintPreviewDialog::RunDialogsL(TBool aGoto)
	{
	CEikPrintPreview* printPrev=(CEikPrintPreview*)Control(EEikCidPrintPrev);
	TInt oldFirstPageToDisplay=iFirstPageToDisplay;
	TInt oldNumPagesToView=iNumPagesToView;
	TInt number=iFirstPageToDisplay+1;
	if (aGoto)
		{
		CEikDialog* dialog=new(ELeave) CEikPreviewGotoDialog(number,iNumPagesInDoc);
		if (dialog->ExecuteLD(R_EIK_DIALOG_PREVIEW_GOTO))
			{
			__ASSERT_DEBUG(number>=0,Panic(EEikPanicInvalidPreviewPageNumber));
			number--; //because display index starts from 0
			if (number>iNumPagesInDoc-iNumPagesToView)
				number = iNumPagesInDoc-iNumPagesToView;
			iFirstPageToDisplay = number;
			}
		}
	else  // previewpage
		{
		TInt maxPagesToView=KMaxNumPagesToView;
		if (iNumPagesInDoc<KMaxNumPagesToView)
			maxPagesToView = iNumPagesInDoc;
		number=iNumPagesToView;
		CEikDialog* dialog=new(ELeave) CEikPreviewSetupDialog(number,maxPagesToView,iMarginState);
		if (dialog->ExecuteLD(R_EIK_DIALOG_PREVIEW_SETUP))
			{ // number of pages to display have been changed
			printPrev->SetMarginAndDrawL(iMarginState);
			iNumPagesToView=number;
			if (iFirstPageToDisplay+number>iNumPagesInDoc)
				iFirstPageToDisplay=iNumPagesInDoc-iNumPagesToView;
			}
		}											
	if (oldFirstPageToDisplay!=iFirstPageToDisplay || oldNumPagesToView!=iNumPagesToView)
		{
		printPrev->SetFormatAndDrawL(iFirstPageToDisplay,iNumPagesToView);
		DrawGoToButton();
		}
	}

void CEikPrintPreviewDialog::DrawGoToButton()
	{
	TBool visible=ETrue;
	if ((iNumPagesToView==iNumPagesInDoc || iNumPagesInDoc==1))
		visible=EFalse;
	ButtonPanel()->LabeledButtonById(EEikBidPrintPrevGoToPageBut)->MakeVisible(visible);
	ButtonPanel()->LabeledButtonById(EEikBidPrintPrevGoToPageBut)->DrawNow();
	}

void CEikPrintPreviewDialog::NotifyBandPrinted(TInt /*aPercentageOfPagePrinted*/, TInt /*aCurrentPageNum*/, TInt /*aCurrentCopyNum*/)
    {
	} 


void CEikPrintPreviewDialog::NotifyPrintStarted(TPrintParameters /*aPrintParams*/)
	{
	}

void CEikPrintPreviewDialog::NotifyPrintEnded(TInt anErrorCode)
	// ignore any errors before fully initialised
    {
	if (anErrorCode!=KErrNone && anErrorCode!=KErrCancel && IsReadyToDraw())
		{
		TBuf<80> previewError;
		if (anErrorCode==KErrNoMemory)
			iCoeEnv->ReadResource(previewError,R_EIK_TBUF_NOT_ENOUGH_MEMORY);
		else
			iCoeEnv->ReadResource(previewError,R_EIK_TBUF_PREVIEW_ERROR);
		iEikonEnv->AlertWin(previewError);
		delete this;
		CBaActiveScheduler::LeaveNoAlert(); // safe to leave here
		}
	}



////////////////////////////////////
// CEikPrintPreview
////////////////////////////////////

const TInt KScrollButtonWidth=20;

EXPORT_C CEikPrintPreview::CEikPrintPreview()
	: CEikBorderedControl(TEikBorder(TEikBorder::ESingleGray))
 	{
	__DECLARE_NAME(_S("CEikPrintPreview"));
	}

EXPORT_C CEikPrintPreview::~CEikPrintPreview()
	{
//	if (iPreview)
//		{
//		iPreview->SetObserver(NULL);
		delete iPreview;
//		}
	delete iButton[0];
	delete iButton[1];
	}


EXPORT_C void CEikPrintPreview::SetPreviewImageObserver(MPrintProcessObserver* aObserver)
	{
	__ASSERT_DEBUG(iPreview,Panic(EEikPanicNullPointer));
	iPreview->SetObserver(*aObserver);
	}

EXPORT_C void CEikPrintPreview::ConstructL(const CCoeControl* aParent)
	{
//	CreateWindowL(aParent);
	CreateBackedUpWindowL(*aParent->DrawableWindow(), EGray4);
	EnableDragEvents();
	Window().SetPointerGrab(ETrue);
	CreateScrollButtonsL();
	}

EXPORT_C void CEikPrintPreview::SetContainerWindowL(const CCoeControl& aParent)
	{
//	CreateWindowL(&aParent);
	CreateBackedUpWindowL(*aParent.DrawableWindow(), EGray4);
	EnableDragEvents();
	Window().SetPointerGrab(ETrue);
	}

EXPORT_C void CEikPrintPreview::Reserved_1()	//reserved by coecontrol
	{
	}									  

EXPORT_C void CEikPrintPreview::Reserved_2()	//reserved by coecontrol
	{
	}									  

EXPORT_C void CEikPrintPreview::ConstructFromResourceL(TResourceReader& aReader)
	{
	iSize.iWidth=aReader.ReadInt16();
	iSize.iHeight=aReader.ReadInt16();
	CreateScrollButtonsL();
	}

void CEikPrintPreview::CreateScrollButtonsL()
    {
    iButton[0]=new(ELeave) CEikScrollButton(CEikScrollButton::ENudgeLeft);
    iButton[0]->SetContainerWindowL(*this);
    iButton[0]->SetObserver(this);
    iButton[1]=new(ELeave) CEikScrollButton(CEikScrollButton::ENudgeRight);
    iButton[1]->SetContainerWindowL(*this);
    iButton[1]->SetObserver(this);
	}

EXPORT_C void CEikPrintPreview::ActivateL()
	{
	DrawButtons();
	CCoeControl::ActivateL();
	}

EXPORT_C void CEikPrintPreview::InitializeFormat(CPrintSetup& aPrintSetup,MPageRegionPrinter& aBodyPrinter,TPrintPreviewFormat& aFormat,TInt& aNumPagesInDoc,TInt& aFirstPageToDisplay,TInt aNumPagesToView,CPrintPreviewImage::TMarginState& aMarginState)
	{
	iPrintSetup=&aPrintSetup;
	iBodyPrinter=&aBodyPrinter;
	iPrintPreviewFormat=&aFormat;
	iFirstPageToDisplay=&aFirstPageToDisplay;
	iNumPagesInDoc=aNumPagesInDoc;
	iNumPagesToView=aNumPagesToView;
	iMarginState=aMarginState;
	}

EXPORT_C void CEikPrintPreview::SetNumBands(TInt aNumBands)
	{
	iNumBands=aNumBands;
	if (iPreview)
		iPreview->SetNumBands(aNumBands);
	}

EXPORT_C void CEikPrintPreview::SizeChangedL()
	// can't recover if CPrintPreviewImage::NewL() fails !!
	{
	iPreviewDraw=ETrue;
	delete iPreview;
	iPreview=NULL;
	iDisplayRect=iBorder.InnerRect(Rect());
	iDisplayRect.Shrink(KScrollButtonWidth,0);
	iPreview=CPrintPreviewImage::NewL(*iPrintSetup,*iBodyPrinter,iEikonEnv->WsSession(),Window(),
										iDisplayRect.Size(),*iPrintPreviewFormat);
	iPreview->SetNumBands(iNumBands);
	iPreview->FormatL(iNumPagesInDoc,*iFirstPageToDisplay,iNumPagesToView);
	iPreview->SetMargins(iMarginState);
	TRect buttonRect(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iBr.iY-KScrollButtonWidth),
					TSize(KScrollButtonWidth,KScrollButtonWidth));
	iButton[0]->SetRectL(buttonRect);
	buttonRect.Move(iDisplayRect.Width()+KScrollButtonWidth,0);
	iButton[1]->SetRectL(buttonRect);
	}

EXPORT_C void CEikPrintPreview::Draw(const TRect& aRect) const
	{
	if (!iPreviewDraw)
		return;
//	DrawButtons();
	CWindowGc& gc=SystemGc();
	iBorder.Draw(gc,Rect());  
	gc.SetPenStyle(CGraphicsContext::ENullPen);
	gc.SetBrushColor(KRgbWhite);
	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
	TRect rectAboveButton(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iTl.iY),TSize(KScrollButtonWidth,iDisplayRect.Height()-(iButton[0]->IsVisible()? KScrollButtonWidth : 0)));
    gc.DrawRect(rectAboveButton);
	rectAboveButton=(TPoint(iDisplayRect.iTl.iX-KScrollButtonWidth,iDisplayRect.iTl.iY),TSize(KScrollButtonWidth,iDisplayRect.Height()-(iButton[1]->IsVisible()? KScrollButtonWidth : 0)));
	rectAboveButton.Move(iDisplayRect.Width()+KScrollButtonWidth+1,1); // why are the 1s needed???
    gc.DrawRect(rectAboveButton);
	gc.SetPenStyle(CGraphicsContext::ESolidPen);
	CONST_CAST(CEikPrintPreview*,this)->DrawPreview(aRect);  // cast away constness
	}

EXPORT_C void CEikPrintPreview::SetDrawFlag(TBool aDraw)
	{
	iPreviewDraw=aDraw;
	}

EXPORT_C TBool CEikPrintPreview::DrawFlag()
	{
	return iPreviewDraw;
	}

EXPORT_C void CEikPrintPreview::SetFormatAndDrawL(TInt& aFirstPageToDisplay,TInt& aNumPagesToView)
	{
	iPreview->FormatL(iNumPagesInDoc,aFirstPageToDisplay,aNumPagesToView);
	*iFirstPageToDisplay=aFirstPageToDisplay;
	iNumPagesToView=aNumPagesToView;
	DrawButtons();
	DrawNow();
	}

EXPORT_C void CEikPrintPreview::SetMarginAndDrawL(CPrintPreviewImage::TMarginState aMarginState)
	{
	iPreview->SetMargins(aMarginState);
	iMarginState=aMarginState;
	DrawNow();
	}

EXPORT_C void CEikPrintPreview::SetNumPagesInDoc(TInt aNumPagesInDoc,TInt aFirstPageToDisplay,TInt aNumPagesToView)
	{
	iNumPagesInDoc=aNumPagesInDoc;
	*iFirstPageToDisplay=aFirstPageToDisplay;
	iNumPagesToView=aNumPagesToView;
	}

void CEikPrintPreview::DrawPreview(const TRect& aRect)
	{
	TRAPD(err,iPreview->DrawL(iDisplayRect.iTl,aRect));
	if (err)
		{
		SystemGc().Clear(iDisplayRect);
		iEikonEnv->NotifyIdleErrorWhileRedrawing(err);
		}
	}

EXPORT_C TKeyResponse CEikPrintPreview::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
    {
	TInt newFirstPageToDisplay=*iFirstPageToDisplay;
	switch (aKeyEvent.iCode)
		{
	case EKeyLeftArrow:
	case EKeyPageUp:
    	newFirstPageToDisplay--;
		break;
	case EKeyRightArrow:
	case EKeyPageDown:
    	newFirstPageToDisplay++;
		break;
	case EKeyHome:
    	newFirstPageToDisplay=KFirstPage;
		break;
	case EKeyEnd:
    	newFirstPageToDisplay=iNumPagesInDoc-iNumPagesToView;
		break;
	default:
		return(EKeyWasNotConsumed);
		break;
		}
	SwitchFirstPageToDisplayL(newFirstPageToDisplay);
    return(EKeyWasConsumed);
	}

void CEikPrintPreview::SwitchFirstPageToDisplayL(TInt& aNewFirstPageToDisplay)
	{
	if (aNewFirstPageToDisplay<KFirstPage)
		aNewFirstPageToDisplay=KFirstPage;
	if (aNewFirstPageToDisplay>iNumPagesInDoc-iNumPagesToView)
		aNewFirstPageToDisplay=iNumPagesInDoc-iNumPagesToView;
	if (aNewFirstPageToDisplay!=*iFirstPageToDisplay)
		SetFormatAndDrawL(aNewFirstPageToDisplay,iNumPagesToView);
	}

EXPORT_C TInt CEikPrintPreview::CountComponentControls() const
    {
    return(2);
    }

EXPORT_C CCoeControl* CEikPrintPreview::ComponentControl(TInt aIndex) const
    {
	CCoeControl* control=NULL;
    switch (aIndex)
        {
    case 0:
		control=iButton[0];
		break;
    case 1:
		control=iButton[1];
		break;
        }					  
	return(control);
    }

EXPORT_C void CEikPrintPreview::HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType)
    {
	if (aEventType!=EEventStateChanged)
		return;
	TInt newFirstPageToDisplay=*iFirstPageToDisplay;
	if (aControl==iButton[0])
    	newFirstPageToDisplay--;
	else if (aControl==iButton[1])
    	newFirstPageToDisplay++;
	SwitchFirstPageToDisplayL(newFirstPageToDisplay);
	}

void CEikPrintPreview::DrawButtons() const
	{
	if (iNumPagesToView==iNumPagesInDoc)
		{
		iButton[1]->MakeVisible(EFalse);
		iButton[0]->MakeVisible(EFalse);
		return;
		}
	TBool leftvisible=ETrue;
	TBool rightvisible=ETrue;
	if (*iFirstPageToDisplay==KFirstPage)
		leftvisible=EFalse;
	else
		{
		if (*iFirstPageToDisplay>=iNumPagesInDoc-iNumPagesToView)       
			rightvisible=EFalse;
		}
	iButton[0]->MakeVisible(leftvisible);
	iButton[1]->MakeVisible(rightvisible);
//	iButton[0]->DrawNow();
//	iButton[1]->DrawNow();
	}

//
//CEikPreviewSetupDialog
//

EXPORT_C CEikPreviewSetupDialog::CEikPreviewSetupDialog(TInt& aNumber,TInt aMax, CPrintPreviewImage::TMarginState& aMarginState)
	:iNumber(aNumber),
	iMax(aMax),
	iMarginState(aMarginState)
	{}

void CEikPreviewSetupDialog::PreLayoutDynInitL()
	{
	CEikButtonBase::TState button;
	button=(iMarginState==CPrintPreviewImage::EShowMargins)? CEikButtonBase::ESet : CEikButtonBase::EClear;
	SetCheckBoxState(EEikCidPreviewMarginsTkBx,button);

	CEikNumberEditor* numEd=(CEikNumberEditor*)Control(EEikCidPerviewNoOfPages);
	if (iMax==KFirstPage)
		SetLineDimmedNow(EEikCidPerviewNoOfPages,ETrue);
	else
		numEd->SetMinimumAndMaximum(1,iMax);
	SetNumberEditorValue(EEikCidPerviewNoOfPages,iNumber);
	}

TBool CEikPreviewSetupDialog::OkToExitL(TInt /*aButtonId*/)
	{
	CEikCheckBox* button=(CEikCheckBox*)Control(EEikCidPreviewMarginsTkBx);
	iMarginState=(button->State()==CEikButtonBase::ESet)?  CPrintPreviewImage::EShowMargins : CPrintPreviewImage::EHideMargins;
	iNumber=NumberEditorValue(EEikCidPerviewNoOfPages);
	
	CDictionaryStore* iniFile=CDictionaryFileStore::SystemLC(iEikonEnv->FsSession());
	//store num of preview pages
	RDictionaryWriteStream streamNumPages;
	streamNumPages.AssignLC(*iniFile,KUidNumOfPreviewPages);
	streamNumPages.WriteInt32L(iNumber);
	streamNumPages.CommitL();
	CleanupStack::PopAndDestroy(); // stream
	iniFile->CommitL();
	//store marginstate
	RDictionaryWriteStream stream;
	stream.AssignLC(*iniFile,KUidPreviewMarginsFlag);
	stream<< iMarginState;
	stream.CommitL();
	CleanupStack::PopAndDestroy(); // stream

	iniFile->CommitL();
	CleanupStack::PopAndDestroy(); // iniFile

	return ETrue;
	}


//
//CEikPreviewGotoDialog
//

EXPORT_C CEikPreviewGotoDialog::CEikPreviewGotoDialog(TInt& aNumber, TInt aMax)
	:iNumber(aNumber),
	iMax(aMax)
	{}

void CEikPreviewGotoDialog::PreLayoutDynInitL()
	{
	CEikNumberEditor* numEd=(CEikNumberEditor*)Control(EEikCidPerviewNoOfPages);
	numEd->SetMinimumAndMaximum(1,iMax);
	SetNumberEditorValue(EEikCidPerviewNoOfPages,iNumber);
	}

TBool CEikPreviewGotoDialog::OkToExitL(TInt /*aButtonId*/)
	{
	iNumber=NumberEditorValue(EEikCidPerviewNoOfPages);
	return ETrue;
	}

//
// Class CEikNumDialog
//

EXPORT_C CEikNumDialog::CEikNumDialog(TInt& aNumber, TInt aMin, TInt aMax, TInt aTitleId, TInt aPromptId)
	{
	iNumber=&aNumber;
	iTitleId=aTitleId;
	iPromptId=aPromptId;
	iMin=aMin;
	iMax=aMax;
	}

void CEikNumDialog::PreLayoutDynInitL()
	{
	}

TBool CEikNumDialog::OkToExitL(TInt /*aButtonId*/)
	{
	return ETrue;
	}

