/*
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  test case
*
*/


#include <w32std.h>
#include <coecntrl.h>

#include "BCTestCmDlgcase.h"
#include "BCTestCmDlgcontainer.h"
#include "BCTestCmDlg.hrh"
#include "streamlogger.h"

// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
// Symbian 2nd static Constructor
// ---------------------------------------------------------------------------
//
CBCTestCmDlgCase* CBCTestCmDlgCase::NewL()
    {
    CBCTestCmDlgCase* self = new( ELeave ) CBCTestCmDlgCase();
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }
    
// ---------------------------------------------------------------------------
// C++ default constructor
// ---------------------------------------------------------------------------
//
CBCTestCmDlgCase::CBCTestCmDlgCase():iDlg(0)
    {    
    }
    
// ---------------------------------------------------------------------------
// Destructor
// ---------------------------------------------------------------------------
//
CBCTestCmDlgCase::~CBCTestCmDlgCase()
    {  
	delete iDlg;
    }
    
// ---------------------------------------------------------------------------
// Symbian 2nd Constructor
// ---------------------------------------------------------------------------
//
void CBCTestCmDlgCase::ConstructL()
    {    
    BuildScriptL();    
    }
    
// ---------------------------------------------------------------------------
// CBCTestCmDlgCase::BuildScriptL
// ---------------------------------------------------------------------------
//
void CBCTestCmDlgCase::BuildScriptL()
    { 
    // Add script as your need.   
	AddTestL( DELAY(1), TEND);

	for(int i=0; i<EBCTestCmdMemSelDlgEnd - EBCTestCmdMemSelDlgBegin -1; ++i)
		{
		AddTestL( LeftCBA, Right, TEND );
		for(int j=0; j<i; ++j)
			AddTestL( Down, TEND);
		AddTestL( LeftCBA, TEND );	
		AddOKL();
		}
    }
    
void CBCTestCmDlgCase::AddOKL()
	{
	// add dlg response sciprts
	for(int i=0; i<1; ++i)
		AddTestL( WAIT(5), KeyOK, TEND);
	}

void CBCTestCmDlgCase::AddCancelL()
	{
	// add dlg response sciprts
	for(int i=0; i<1; ++i)
		AddTestL( WAIT(5), RightCBA, TEND);
	}

// ---------------------------------------------------------------------------
// CBCTestCmDlgCase::RunL
// ---------------------------------------------------------------------------
//
void CBCTestCmDlgCase::RunL( TInt aCmd )
    {
	SetupL();
	switch(aCmd){
	case EBCTestCmdMemSelDlgCreate:
		TestCreateL();
		break;
	case EBCTestCmdMemSelDlgCreateWithRes:
		TestCreateL(0);		//0 indicate to default res
		break;
	case EBCTestCmdMemSelDlgWithRoot:
		TestWithRootL();
		break;
	case EBCTestCmdMemSelDlgQuick:
		TestQuickCreateL();
		break;
	case EBCTestCmdMemSelDlgQuickTitle:
		TestQuickCreateL(_L("a title"));
		break;
	case EBCTestCmdMemSelDlgQuickRes:
		TestQuickCreateL(0);	//0 means default res
		break;
	case EBCTestCmdMemSelDlgSetting:
		TestSettingsL();
		break;
	default:
		break;
	}

    Teardown();
    }

// ---------------------------------------------------------------------------
// CBCTestCmDlgCase::ReleaseCaseL
// ---------------------------------------------------------------------------
//   
void CBCTestCmDlgCase::Teardown()
    {
	delete iDlg;
	iDlg = NULL;
    }

void CBCTestCmDlgCase::TestCreateL()
	{
    iDlg = CAknMemorySelectionDialog::NewL( ECFDDialogTypeNormal, EFalse );

	AssertNotNullL(iDlg, _L("mem sel dlg created"));
	AssertTrueL(iDlg->ExecuteL( iMemory ), _L("User Hit OK"));
	AssertIntL( CAknMemorySelectionDialog::EPhoneMemory, iMemory, _L("Phone memory created"));
	}

void CBCTestCmDlgCase::TestCreateL(TInt aResID)
{
	iDlg = CAknMemorySelectionDialog::NewL( ECFDDialogTypeNormal, aResID, EFalse );

	AssertNotNullL(iDlg, _L("mem sel dlg with resID created"));
	AssertTrueL(CAknMemorySelectionDialog::RunDlgLD(iMemory), _L("Quick create, User hit OK"));
	AssertIntL( CAknMemorySelectionDialog::EPhoneMemory, iMemory, _L("Phone memroy created"));
}

void CBCTestCmDlgCase::TestQuickCreateL()
	{
	AssertTrueL(CAknMemorySelectionDialog::RunDlgLD(iMemory), _L("Quick create, User hit OK"));
	AssertIntL( CAknMemorySelectionDialog::EPhoneMemory, iMemory, _L("Phone memroy created"));
	}

void CBCTestCmDlgCase::TestQuickCreateL(const TDesC &aTitle)
	{
	AssertTrueL(CAknMemorySelectionDialog::RunDlgLD(iMemory, aTitle), _L("Quick create with title, User hit OK"));
	AssertIntL( CAknMemorySelectionDialog::EPhoneMemory, iMemory, _L("Phone memroy created"));
	}

void CBCTestCmDlgCase::TestQuickCreateL(TInt aResID)
	{
	AssertTrueL(CAknMemorySelectionDialog::RunDlgLD(iMemory, aResID), _L("Quick create with ResID, User hit OK"));
	AssertIntL( CAknMemorySelectionDialog::EPhoneMemory, iMemory, _L("Phone memroy created"));
	}

void CBCTestCmDlgCase::SetupL()
	{
	iMemory = CAknMemorySelectionDialog::EPhoneMemory;
	}

void CBCTestCmDlgCase::TestWithRootL()
{
	_LIT( KRootPath,					"C:\\Nokia\\Images\\" );
	_LIT( KDefaultFileName,				"DynamicFilename.jpg" );
	TFileName rootFileName( KRootPath );
	TFileName defaultFileName( KDefaultFileName );
	iDlg = CAknMemorySelectionDialog::NewL( ECFDDialogTypeNormal, EFalse );
	if(TInt res = iDlg->ExecuteL(iMemory, &rootFileName, &defaultFileName))
	{
		TFileName msg(_L("default root: "));
		msg.Append(rootFileName);
		msg.Append(_L(" default file: "));
		msg.Append(defaultFileName);
		msg.ZeroTerminate();
		AssertTrueL(res, msg);
	}
}

void CBCTestCmDlgCase::TestSettingsL()
{
	iDlg = CAknMemorySelectionDialog::NewL( ECFDDialogTypeNormal, EFalse );

	iDlg->SetObserver(NULL);
	AssertTrueL(ETrue, _L("Null Observer set"));

	iDlg->SetTitleL(_L("a title"));
	AssertTrueL(ETrue, _L("title set"));

	iDlg->SetLeftSoftkeyL(_L("left key"));
	AssertTrueL(ETrue, _L("left key text set"));

	iDlg->SetRightSoftkeyL(_L("right key"));
	AssertTrueL(ETrue, _L("right key text set"));
	if(iDlg->ExecuteL(iMemory))
	{
		//get
		TFileName emptyFileName( KNullDesC );
		iDlg->GetItem( iMemory, emptyFileName );
		TFileName msg(_L("item got: "));
		msg.Append(emptyFileName);
		msg.ZeroTerminate();
		AssertTrueL(ETrue, msg);

		_LIT( KRootPath,					"C:\\Nokia\\Images\\" );
		_LIT( KDefaultFileName,				"DynamicFilename.jpg" );
		TFileName rootFileName( KRootPath );
		TFileName defaultFileName( KDefaultFileName );
		iDlg->GetMemories(iMemory, &rootFileName, &defaultFileName);

		msg = (_L("memory got, root: "));
		msg.Append(rootFileName);
		msg.Append(_L(" default file: "));
		msg.Append(defaultFileName);
		msg.ZeroTerminate();
		AssertTrueL(ETrue, msg);
	}
}

