// EIKFINDD.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//


#include <eikfindd.h>
#include <eikchkbx.h>
#include <eikcmbox.h>
#include <eikhopbt.h>
#include <eikenv.h>
#include <eikgted.h>
#include <eikdialg.hrh>
#include <eikpriv.hrh>
#include <badesca.h>
#include <eikon.rsg>


EXPORT_C CEikEdwinFindDialog::CEikEdwinFindDialog(SEdwinFindModel* aModel,CDesCArray* aFindList)
	{
	iModel=aModel;
	iFindList=aFindList;
	}

void CEikEdwinFindDialog::PreLayoutDynInitL()
	{
	// array
	CEikComboBox* comboBox=(CEikComboBox*)Control(EEikCidFindStringEd);
	comboBox->SetArray(iFindList,CEikComboBox::EArrayExternalOwner);//,EEikChlistArrayExternalOwner);
	comboBox->SetTextL(&iModel->iText);
	// set option buttons
    TInt radioButId=EEikCidFindDownRb;
	if ((iModel->iFlags&CEikEdwin::EFindDirectionUp))
        radioButId=EEikCidFindUpRb;
	((CEikHorOptionButtonList*)Control(EEikCidFindDirectionRbGp))->SetButtonById(radioButId);
	//set match whole word check box
	CEikButtonBase::TState button=CEikButtonBase::EClear;
	if ((iModel->iFlags&CEikEdwin::EFindWholeWord))
		button=CEikButtonBase::ESet;		
	((CEikCheckBox*)Control(EEikCidFindWholeWordTkBx))->SetState(button);
	// set case sen box 
	button=CEikButtonBase::EClear;
	if (iModel->iFlags&CEikEdwin::EFindCaseSensitive)
		button=CEikButtonBase::ESet;								   
	((CEikCheckBox*)Control(EEikCidFindCaseSenTkBx))->SetState(button);
	}  

TBool CEikEdwinFindDialog::OkToExitL(TInt /*aButtonId*/)
	{
	CEikButtonBase::TState button=CEikButtonBase::EClear;

	CEikComboBox* comboBox=(CEikComboBox*)Control(EEikCidFindStringEd);
	TBuf<EEikEdwinFindStringMaxLen> temp;
	comboBox->GetText(temp);
    if (!temp.Length())
        {
	    iEikonEnv->InfoMsg(R_EIK_TBUF_NOTHING_TO_FIND);
	    return(EFalse);
        }
    iModel->iText=temp;
	comboBox->InsertTextIntoArrayL();
    
	iModel->iFlags=0;
	TInt optionButtonId;
	optionButtonId=((CEikHorOptionButtonList*)Control(EEikCidFindDirectionRbGp))->LabeledButtonId();
	if (optionButtonId==EEikCidFindUpRb)
        iModel->iFlags=CEikEdwin::EFindDirectionUp;

	button=((CEikCheckBox*)Control(EEikCidFindCaseSenTkBx))->State();
	if (button==CEikButtonBase::ESet)
        iModel->iFlags|=CEikEdwin::EFindCaseSensitive;
	
	button=((CEikCheckBox*)Control(EEikCidFindWholeWordTkBx))->State();
	if (button==CEikButtonBase::ESet)
        iModel->iFlags|=CEikEdwin::EFindWholeWord;
    return(ETrue);
	}	

//
//Replace dialog
//

EXPORT_C CEikEdwinReplaceDialog::CEikEdwinReplaceDialog(SEdwinFindModel* aModel,CDesCArray* aFindList,CDesCArray* aReplaceList)
	{
	iModel=aModel;
	iFindList=aFindList;
	iReplaceList=aReplaceList;
	}

void CEikEdwinReplaceDialog::PreLayoutDynInitL()
	{

	CEikComboBox* comboBox=(CEikComboBox*)Control(EEikCidFindStringEd);
	comboBox->SetArray(iFindList,CEikComboBox::EArrayExternalOwner);
	comboBox->SetTextL(&iModel->iText);
	//

	CEikComboBox* comboBoxReplace=(CEikComboBox*)Control(EEikCidReplaceStringEd);
	comboBoxReplace->SetArray(iReplaceList,CEikComboBox::EArrayExternalOwner);
	comboBoxReplace->SetTextL(&iModel->iReplaceText);
	//
	// set option buttons
    TInt radioButId=EEikCidFindDownRb;
	if ((iModel->iFlags&CEikEdwin::EFindDirectionUp))
        radioButId=EEikCidFindUpRb;
	((CEikHorOptionButtonList*)Control(EEikCidFindDirectionRbGp))->SetButtonById(radioButId);
	//set match whole word check box
	CEikButtonBase::TState button=CEikButtonBase::EClear;
	if (iModel->iFlags&CEikEdwin::EFindWholeWord)
		button=CEikButtonBase::ESet;		
	((CEikCheckBox*)Control(EEikCidFindWholeWordTkBx))->SetState(button);
	// set case sen box 
	button=CEikButtonBase::EClear;
	if (iModel->iFlags&CEikEdwin::EFindCaseSensitive)
		button=CEikButtonBase::ESet;								   
	((CEikCheckBox*)Control(EEikCidFindCaseSenTkBx))->SetState(button);
	}  

TBool CEikEdwinReplaceDialog::OkToExitL(TInt aButtonId)
	{
	CEikButtonBase::TState button=CEikButtonBase::EClear;
    TBuf<EEikEdwinFindStringMaxLen> temp;
    TBuf<EEikEdwinFindStringMaxLen> rtemp;
	//find combobox
	CEikComboBox* comboBox=(CEikComboBox*)Control(EEikCidFindStringEd);
	comboBox->GetText(temp);
    if (!temp.Length())
        {
	    iEikonEnv->InfoMsg(R_EIK_TBUF_NOTHING_TO_FIND);
	    return(EFalse);
        }
    iModel->iText=temp;
	comboBox->InsertTextIntoArrayL();
	//replace combobox
	CEikComboBox* comboBoxReplace=(CEikComboBox*)Control(EEikCidReplaceStringEd);
	comboBoxReplace->GetText(rtemp);
	iModel->iReplaceText=rtemp;
	comboBoxReplace->InsertTextIntoArrayL();
	//
	iModel->iFlags=0;
	TInt optionButtonId;
	optionButtonId=((CEikHorOptionButtonList*)Control(EEikCidFindDirectionRbGp))->LabeledButtonId();
	if (optionButtonId==EEikCidFindUpRb)
        iModel->iFlags=CEikEdwin::EFindDirectionUp;

	button=((CEikCheckBox*)Control(EEikCidFindCaseSenTkBx))->State();
	if (button==CEikButtonBase::ESet)
        iModel->iFlags|=CEikEdwin::EFindCaseSensitive;
	
	button=((CEikCheckBox*)Control(EEikCidFindWholeWordTkBx))->State();
	if (button==CEikButtonBase::ESet)
        iModel->iFlags|=CEikEdwin::EFindWholeWord;
	iModel->iReplaceOption=EReplaceOnce;

	switch (aButtonId)
		{
	case EEikBidReplaceAll:
 		iModel->iReplaceOption=EReplaceAll;
		break;
	case EEikBidCancel:
		iModel->iReplaceOption=ENoReplace;
		break;
		}
    return(ETrue);
	}	

//
//CEikEdwinReplaceOptionDialog
//

EXPORT_C CEikEdwinReplaceOptionDialog::CEikEdwinReplaceOptionDialog(CEikGlobalTextEditor* aEdwin,SEdwinFindModel* aModel)
	{ 	
	iModel=aModel;
	iEdwin=aEdwin;	 	
	}

void CEikEdwinReplaceOptionDialog::SetSizeAndPositionL(const TSize& aSize)
	{
    SetCornerAndSizeL(EHRightVTop,aSize);
	}


TBool CEikEdwinReplaceOptionDialog::OkToExitL(TInt aButtonId)
	{
	switch(aButtonId)
		{
	case EEikBidOk:
		{
		TBool found=EFalse;
		TRAPD(ret,iEdwin->ReplaceL(iModel));
		if (ret!=KErrNone)
			{
			delete this;
			User::Leave(ret);
			}
		TRAP(ret,found=iEdwin->FindL(&iModel->iText,iModel->iFlags));
		if (ret==KErrNone)
			{
			if (!found)
				return ETrue;
			return EFalse;
			}
		else
			{
			if (iEdwin->SelectionLength())
				iEdwin->ClearSelectionL();
			return ETrue;
			}
		break;
		}
	case EEikBidReplaceSkip:
		{
		TBool found=EFalse;
		iModel->iFlags|=CEikEdwin::EFindAgain;
		TRAPD(ret,found=iEdwin->FindL(&iModel->iText,iModel->iFlags));
		if (ret==KErrNone)
			{
			iModel->iFlags&=(~CEikEdwin::EFindAgain);
			if (!found)
				return ETrue;
			return EFalse;
			}
		else
			{
			if (iEdwin->SelectionLength())
				iEdwin->ClearSelectionL();
			return ETrue;
			}
		break;
		}
	case EEikBidReplaceAll:
		iModel->iReplaceOption=EReplaceAll;
		break;
		}
	return ETrue;
	}

/*
TBool CEikEdwinReplaceOptionDialog::OkToExitL(TInt aButtonId)
	{
	switch(aButtonId)
		{
	case EEikBidReplaceAll:
		iModel->iReplaceOption=EReplaceAll;
		break;
	case EEikBidOk:
		iEdwin->ReplaceL(iModel);
		if (!iEdwin->FindL(&iModel->iText,iModel->iFlags))
			return ETrue;
		return EFalse;
		break;
	case EEikBidReplaceSkip:
		if (!iEdwin->FindL(&iModel->iText,iModel->iFlags))
			return ETrue;
		return EFalse;
		break;
		}
	return ETrue;
	}
*/
