/*
* Copyright (c) 2009 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:  Implementation for mrui dynamic item selection list
*
*/


// INCLUDE FILES
#include "emailtrace.h"
#include "cesmrdynamicitemselectionlist.h"

#include <aknlists.h>
#include <aknPopup.h>
#include <bautils.h>
#include <esmrgui.rsg>
#include <data_caging_path_literals.hrh>

#include "esmrhelper.h"//locateresourcefile

// CONSTANTS
// Unnamed namespace for local definitions
namespace { // codescanner::namespace

#ifdef _DEBUG
    _LIT( KESMRDynamicItemSelectionListPanicTxt, "ESMRDYNAMICITEMSELECTIONLIST" );
    /** Enumeration for panic codes */
    enum TESMRDynamicItemSelectionListPanicCode
        {
        // Errors
        EESMRDynamicItemSelectioListInvalidListType = 0
        };

    void Panic( TESMRDynamicItemSelectionListPanicCode aPanic )
        {
        User::Panic ( KESMRDynamicItemSelectionListPanicTxt, aPanic );
        }
#endif
    
// resource file:
_LIT( KResourceFileName, "esmrgui.rsc" );

} // namespace

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

// -----------------------------------------------------------------------------
// CESMRAddressSelectionQuery::CESMRAddressSelectionQuery
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CESMRDynamicItemSelectionList::CESMRDynamicItemSelectionList()
    {
    FUNC_LOG;
    // Do nothing
    }

// -----------------------------------------------------------------------------
// CESMRDynamicItemSelectionList::~CESMRDynamicItemSelectionList
// -----------------------------------------------------------------------------
//
CESMRDynamicItemSelectionList::~CESMRDynamicItemSelectionList()
    {
    FUNC_LOG;
    iEnv->DeleteResourceFile( iResourceOffset );
    }

// -----------------------------------------------------------------------------
// CESMRDynamicItemSelectionList::NewL
// -----------------------------------------------------------------------------
//
CESMRDynamicItemSelectionList* CESMRDynamicItemSelectionList::NewL()
    {
    FUNC_LOG;
    CESMRDynamicItemSelectionList* self = 
                            new (ELeave) CESMRDynamicItemSelectionList();
    CleanupStack::PushL( self );
    self->ConstructL( );
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CESMRDynamicItemSelectionList::ConstructL
// -----------------------------------------------------------------------------
//
void CESMRDynamicItemSelectionList::ConstructL()
    {
    FUNC_LOG;
    TFileName filename;

    iEnv = CEikonEnv::Static();  // codescanner::eikonenvstatic

    ESMRHelper::LocateResourceFile(
            KResourceFileName,
            KDC_RESOURCE_FILES_DIR,
            filename,
            &iEnv->FsSession() );

    //for localization
    BaflUtils::NearestLanguageFile(iEnv->FsSession(),filename); 
    iResourceOffset = iEnv->AddResourceFileL(filename);
    }

// -----------------------------------------------------------------------------
// CESMRDynamicItemSelectionList::ExecuteL
// -----------------------------------------------------------------------------
//
TInt CESMRDynamicItemSelectionList::ExecuteL( // codescanner::intleaves
        const RPointerArray<HBufC>& aItemArray,
        const TESMRSelectionListType aType )
    {
    FUNC_LOG;
    CPtrCArray* array = new (ELeave) CPtrCArray( 1 );
    CleanupStack::PushL( array );
    array->SetReserveL( aItemArray.Count() );
    
    for ( TInt i = 0; i < aItemArray.Count(); ++i )
        {
        array->AppendL( *aItemArray[i] );
        }
    
    TInt retVal = ExecuteL( *array, aType );
    CleanupStack::PopAndDestroy( array );
    return retVal;
    }

// -----------------------------------------------------------------------------
// CESMRDynamicItemSelectionList::ExecuteL
// -----------------------------------------------------------------------------
//
TInt CESMRDynamicItemSelectionList::ExecuteL( // codescanner::intleaves
		MDesCArray& aItemArray,
		const TESMRSelectionListType aType )
    {
    FUNC_LOG;
    TInt response( KErrCancel );
    
    CEikFormattedCellListBox* listBox = NULL;
    CAknPopupList* popupList = NULL;
    
    switch( aType )
        {
        case EESMRAddressSelectionList:
            {
            listBox = new( ELeave )CAknDoublePopupMenuStyleListBox;
            CleanupStack::PushL( listBox );
            
            popupList = CAknPopupList::NewL( listBox,
                    R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
                    AknPopupLayouts::EMenuDoubleWindow );
            CleanupStack::PushL( popupList );
            
            popupList->SetTitleL( 
                    *iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_LOC_ADDRESS_SELECTION_TITLE ) );
            CleanupStack::PopAndDestroy(); // Resource string //codescanner::cleanup
            break;
            }
        case EESMRRecentLocationList:
            {
            listBox = new( ELeave )CAknSinglePopupMenuStyleListBox;
            CleanupStack::PushL( listBox );
            
            popupList = CAknPopupList::NewL( listBox,
                    R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
                    AknPopupLayouts::EMenuWindow );
            CleanupStack::PushL( popupList );
            
            popupList->SetTitleL( 
                    *iEnv->AllocReadResourceAsDes16LC(
                            R_QTN_MEET_REQ_RECENT_LOCATIONS_SELECTION_TITLE ) ); 
            CleanupStack::PopAndDestroy(); // Resource string //codescanner::cleanup
            break;
            }
        default:
            {
            __ASSERT_DEBUG( 
                    EFalse, Panic( EESMRDynamicItemSelectioListInvalidListType ));
            break;
            }
        }
    
    listBox->ConstructL( popupList, EAknListBoxMenuList );
    listBox->CreateScrollBarFrameL( ETrue );
    listBox->ScrollBarFrame()->SetScrollBarVisibilityL( 
            CEikScrollBarFrame::EOff, 
            CEikScrollBarFrame::EOn );
    
    listBox->Model()->SetItemTextArray( &aItemArray );
    listBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
    
    // Show popup list
    TBool popupOk = popupList->ExecuteLD();
    if ( popupOk )
        {
        response = listBox->CurrentItemIndex();
        }

    CleanupStack::Pop( popupList );
    CleanupStack::PopAndDestroy( listBox );
    
    return response;
    }

//  End of File

