// TXFSEL.CPP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

// EIKONNG test code for unified file selector
//

#include <eikenv.h>
#include <basched.h>
#include <badesca.h>
#include <coecntrl.h>
#include <coeutils.h>
#include <eikfutil.h>
#include <eikappui.h>
#include <e32keys.h>
#include <eikdef.h>
#include <eikmenup.h>
#include <eikdialg.h>
#include <eikmenu.hrh>
#include <eikdialg.hrh>
#include <eikcmds.hrh>
#include <eikdclbx.h>
#include <eikdclbm.h>
#include <eikon.rsg>
#include <eikapp.h>
#include <eikdoc.h>
#include <eikufsel.h>
#include <eikctrls.hrh>
#include <eikfctry.h>
#include <txfsel.rsg>
#include "txfsel.hrh" 

//
// CTestFileOpenDialog
//

class CTestFileOpenDialog : public CEikDialog
	{
public:
	CTestFileOpenDialog(TFileName& aTemplateFileName, TUidType aUid, TBool aInROM);
protected: // from CEikDialog
	TBool OkToExitL(TInt aButtonId);
	void PreLayoutDynInitL();
private:
	TFileName& iFileName;
	TUidType iUid;
	TBool iROM;
	};


CTestFileOpenDialog::CTestFileOpenDialog(TFileName& aFileName, TUidType aUid, TBool aIncludeROM)
	: iFileName(aFileName), iUid(aUid), iROM(aIncludeROM)
	{
	}

TBool CTestFileOpenDialog::OkToExitL(TInt /*aButtonId*/)
	{
	CEikUnifiedFileNameSelector* fileNameSel = (CEikUnifiedFileNameSelector*) (Control(EEikCtUnifiedFileSel));
	iFileName = fileNameSel->FullName();
	return ETrue;
	}

void CTestFileOpenDialog::PreLayoutDynInitL()
	{
	CEikUnifiedFileNameSelector* fileNameSel = (CEikUnifiedFileNameSelector*) (Control(EEikCtUnifiedFileSel));
	fileNameSel->SetUidType(iUid);
	fileNameSel->SetROMIncluded(iROM);
	fileNameSel->SetFullNameL(iFileName);
	}

//
// CTestMultiFileOpenDialog
//

class CTestMultiFileOpenDialog : public CEikDialog
	{
public:
	CTestMultiFileOpenDialog(TFileName& aTemplateFileName, CDesCArrayFlat* anArray, TUidType aUid, TBool aInROM);
protected: // from CEikDialog
	TBool OkToExitL(TInt aButtonId);
	void PreLayoutDynInitL();
private: // from CEikForm
	SEikControlInfo CreateCustomControlL(TInt aControlType);
private:
	TFileName& iFileName;
	TUidType iUid;
	TBool iROM;
	CDesCArrayFlat* iArray;
	};


CTestMultiFileOpenDialog::CTestMultiFileOpenDialog(TFileName& aFileName, CDesCArrayFlat* anArray, TUidType aUid, TBool aIncludeROM)
	: iFileName(aFileName), iUid(aUid), iROM(aIncludeROM), iArray(anArray)
	{
	}

TBool CTestMultiFileOpenDialog::OkToExitL(TInt /*aButtonId*/)
	{
	CEikUnifiedFileNameSelector* fileNameSel = (CEikUnifiedFileNameSelector*) (Control(EEikCtUnifiedFileSel));
	fileNameSel->GetFullNamesOfSelectedFilesL(iArray);
	return ETrue;
	}

void CTestMultiFileOpenDialog::PreLayoutDynInitL()
	{
	CEikUnifiedFileNameSelector* fileNameSel = (CEikUnifiedFileNameSelector*) (Control(EEikCtUnifiedFileSel));
	fileNameSel->SetUidType(iUid);
	fileNameSel->SetROMIncluded(iROM);
	fileNameSel->SetMultipleSelectionAllowed(ETrue);
	fileNameSel->SetFullNameL(iFileName);
	}

SEikControlInfo CTestMultiFileOpenDialog::CreateCustomControlL(TInt aControlType)
	{
	SEikControlInfo info;
    info.iControl=NULL;
	info.iTrailerTextId=0;
	info.iFlags=EEikControlHasEars;
	if (aControlType==EEikCtUnifiedFileSel)
		info.iControl=new(ELeave) CEikUnifiedFileNameSelector();
	return info;
	}

//
// CSimpleAppUi
//

class CSimpleAppUi : public CEikAppUi
    {
private: // framework
    void HandleCommandL(TInt aCommand);
	void CmdFileOpenDlgL();
    };

void CSimpleAppUi::CmdFileOpenDlgL()
    {
	TFileName fileName(_L("c:\\System\\apps\\Word\\Word.ini"));
    CTestFileOpenDialog* dialog = new(ELeave) CTestFileOpenDialog(fileName, TUidType(), EFalse);
	iEikonEnv->InfoMsg(_L("No ROM"));
    if (dialog->ExecuteLD(R_TXFS_OPENFILE))
        iEikonEnv->InfoMsg(fileName);

	fileName = _L("c:\\System\\apps\\Word\\Word.ini");
	dialog = new(ELeave) CTestFileOpenDialog(fileName, TUidType(), ETrue);
	iEikonEnv->InfoMsg(_L("With ROM"));
    if (dialog->ExecuteLD(R_TXFS_OPENFILE))
        iEikonEnv->InfoMsg(fileName);
	
	fileName = _L("c:\\Documents\\foo");
	dialog = new(ELeave) CTestFileOpenDialog(fileName, TUidType(), EFalse);
    if (dialog->ExecuteLD(R_TXFS_OPENFILE))
        iEikonEnv->InfoMsg(fileName);

	fileName = _L("c:\\Documents\\Non existent directory\\foo");
    dialog = new(ELeave) CTestFileOpenDialog(fileName, TUidType(), EFalse);
    if (dialog->ExecuteLD(R_TXFS_OPENFILE))
        iEikonEnv->InfoMsg(fileName);
	
	fileName = _L("c:\\Documents\\foo");
	CDesCArrayFlat* array = new(ELeave) CDesCArrayFlat(5);
	CleanupStack::PushL(array);
	CTestMultiFileOpenDialog* dialog2 = new(ELeave) CTestMultiFileOpenDialog(fileName, array, TUidType(), EFalse);
	if (dialog2->ExecuteLD(R_TXFS_OPENFILE))
		{
		for(TInt i = 0; i < array->Count(); i++)
			{
			iEikonEnv->InfoMsg((*array)[i]);
			}
		}
	CleanupStack::PopAndDestroy();
    }

void CSimpleAppUi::HandleCommandL(TInt aCommand)
    {
    switch (aCommand)
        {
    case EEikCmdExit:
        CBaActiveScheduler::Exit();
		break;
    case EEikCmdFileOpen:
        CmdFileOpenDlgL();
        break;
        }
    }


//
// CSimpleDocument
//

class CSimpleDocument : public CEikDocument
	{
public:
	CSimpleDocument(CEikApplication& aApp): CEikDocument(aApp) { }
private: // from CApaDocument
	CEikAppUi* CreateAppUiL();
	};

CEikAppUi* CSimpleDocument::CreateAppUiL()
	{
    return(new(ELeave) CSimpleAppUi);
	}


//
// CSimpleApplication
//

class CSimpleApplication : public CEikApplication
	{
private: // from CApaApplication
	CApaDocument* CreateDocumentL();
	TUid AppDllUid() const;
	};

const TUid KUidSimpleApp={243};

TUid CSimpleApplication::AppDllUid() const
	{
	return(KUidSimpleApp);
	}

CApaDocument* CSimpleApplication::CreateDocumentL()
	{
	return(new(ELeave) CSimpleDocument(*this));
	}

//
// EXPORTed functions
//

EXPORT_C CApaApplication* NewApplication()
	{
	return(new CSimpleApplication);
	}

GLDEF_C TInt E32Dll(TDllReason)
	{
	return(KErrNone);
	}


