apengine/apsettingshandlerui/src/ApSelPopupList.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:12:51 +0200
branchRCL_3
changeset 8 2e6c4614c58e
parent 4 77415202bfc8
child 36 04408506c6e0
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* Copyright (c) 2002 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: 
*     Defines CApSelPopupList for access point selection.
*
*/


// INCLUDE FILES
#include "APSettingsHandlerUIVariant.hrh"

#include <ApListItem.h>
#include <apsetui.rsg>
#include <featmgr.h>

#include <csxhelp/cp.hlp.hrh>


#include "ApSelectorListBoxModel.h"
#include "ApSettingsModel.h"
#include "ApSettingsHandlerUI.hrh"
#include "ApSelPopupList.h"
#include "ApsettingshandleruiImpl.h"


#include "ApSettingsHandlerLogger.h"

#include <ApProtHandler.h>  // for protection of settings

#include <AknsUtils.h>
#include <apsettings.mbg>
#include <data_caging_path_literals.hrh>


// CONSTANTS
// Drive and file name of the MBM file containing icons for Protection
_LIT( KFileIcons, "z:ApSettings.mbm" );


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

// ---------------------------------------------------------
// CApSelPopupList::NewL
// ---------------------------------------------------------
//
CApSelPopupList* CApSelPopupList::NewL( CApSettingsModel& aModel,
                                       CApSettingsHandlerImpl& aHandler,
                                       TInt& aCurrentSelectionIndex,
                                       TInt& aPreferredUid,
                                       TSelectionMenuType aSelMenuType,
                                       TInt aIspFilter, TInt aBearerFilter,
                                       TInt aSortType, TUint32& aEventStore,
                                       CDesCArrayFlat* aItemArray,
                                       TBool aNeedsNone,
                                       TBool aNoEdit,
                                       TInt aReqIpvType,
                                       TVpnFilterType aVpnFilterType
                                       )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::NewL")
    CApSelPopupList* self = 
        new ( ELeave ) CApSelPopupList( aModel, aHandler,
                                        aCurrentSelectionIndex,
                                        aPreferredUid, aSelMenuType,
                                        aIspFilter, aBearerFilter,
                                        aSortType, aItemArray,
                                        aEventStore, aNeedsNone,
                                        aNoEdit,
                                        aReqIpvType,
                                        aVpnFilterType
                                        );
//  till that point, object is only partially constructed!
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::NewL")
    return self;
    }





// ---------------------------------------------------------
// CApSelPopupList::NewL
// ---------------------------------------------------------
//
CApSelPopupList* CApSelPopupList::NewL( CApSettingsModel& aModel,
                                       CApSettingsHandlerImpl& aHandler,
                                       TInt& aCurrentSelectionIndex,
                                       TInt& aPreferredUid,
                                       TSelectionMenuType aSelMenuType,
                                       TInt aIspFilter, TInt aBearerFilter,
                                       TInt aSortType, TUint32& aEventStore,
                                       CDesCArrayFlat* aItemArray,
                                       TBool aNeedsNone,
                                       TInt aReqIpvType,
                                       TVpnFilterType aVpnFilterType,
                                       TBool aIncludeEasyWlan,
                                       TBool aNoEdit
                                       )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::NewL2")
    
    CApSelPopupList* self = 
        new ( ELeave ) CApSelPopupList( aModel, aHandler,
                                        aCurrentSelectionIndex,
                                        aPreferredUid, aSelMenuType,
                                        aIspFilter, aBearerFilter,
                                        aSortType, aItemArray,
                                        aEventStore, aNeedsNone,
                                        aReqIpvType,
                                        aVpnFilterType,
                                        aIncludeEasyWlan,
                                        aNoEdit
                                        );
//  till that point, object is only partially constructed!
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::NewL2")
    return self;
    }
    
    

// ---------------------------------------------------------
// CApSelPopupList::ConstructL
// ---------------------------------------------------------
//
void CApSelPopupList::ConstructL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::ConstructL")

    FeatureManager::InitializeLibL();
    iHelpSupported = FeatureManager::FeatureSupported( KFeatureIdHelp );
    iProtectionSupported = FeatureManager::FeatureSupported( 
                                           KFeatureIdSettingsProtection );
    FeatureManager::UnInitializeLib();
    
    CAknRadioButtonSettingPage::ConstructL();
    iList = ListBoxControl();
    iModel = new( ELeave )CApSelectorListboxModel(
                          CApSelectorListboxModel::EGraphicOnOff );
    iList->Model()->SetItemTextArray( iModel );
    if ( iProtectionSupported )
        {
        TInt offset = LoadIconsL();
        iModel->SetOwnIconOffset( offset );
        }
    FillListBoxWithDataL();
    iDataModel->Database()->AddObserverL( this );
        
    if ( !iModel->Count() )
        {
        // no ap defined, ask query if editable,
        // show note if not
        if ( iNoEdit )
            {
            // show note first, 
            ShowNoteL( R_APUI_VIEW_NO_IAP_DEFINED_INFO );
            // then simply go back:
            iDoExit = ETrue;
            }
        else
            {
            if ( !AskQueryL( R_APUI_IAP_CREATE_NEW ) )
                { // do not create, simply go back
                iDoExit = ETrue;
                }
            else
                { // create new AP
                // just ket it pass, later in it will be handled in CheckIfEmptyL()
                }                        
            }
        }    
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::ConstructL")
    }



// Destructor
CApSelPopupList::~CApSelPopupList()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::~CApSelPopupList")
    
    if ( iDataModel )
        {
        if ( iDataModel->Database() )
            {
            // must remove observer here as there is a chance that we do not exit
            // through the standard way but through Leave(KErrLeaveWithoutAlert)...
            iDataModel->Database()->RemoveObserver( this );
            }
        }

    if ( iModel )
        {
        iModel->ResetAndDestroy();
        delete iModel;
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::~CApSelPopupList")
    }



// Constructor
CApSelPopupList::CApSelPopupList(
                                 CApSettingsModel& aModel,
                                 CApSettingsHandlerImpl& aHandler,
                                 TInt& aIndex, TInt& aPreferredUid,
                                 TSelectionMenuType aSelMenuType,
                                 TInt aIspFilter, TInt aBearerFilter,
                                 TInt aSortType, CDesCArrayFlat* aItemArray,
                                 TUint32& aEventStore, TBool aNeedsNone,
                                 TBool aNoEdit,
                                 TInt aReqIpvType,
                                 TVpnFilterType aVpnFilterType
                                 )
:CAknRadioButtonSettingPage( R_POPUP_LIST_SETTING_PAGE,
                             aIndex, aItemArray ),
iDataModel( &aModel ),
iSelected( &aPreferredUid ),
iBearerFilter( aBearerFilter ),
iIspFilter( aIspFilter ),
iSortType( aSortType ),
iSelMenuType( aSelMenuType ),
iHandler( &aHandler ),
iEventStore( &aEventStore ),
iPreferredUid( aPreferredUid ),
iNeedsNone( aNeedsNone ),
iNeedUnlock( EFalse ),
iReqIpvType( aReqIpvType ),
iVpnFilterType( aVpnFilterType ),
iVariant( aHandler.iExt->iVariant ),
iIncludeEasyWlan( EFalse ),
iNoEdit( aNoEdit )
    {
    }




CApSelPopupList::CApSelPopupList(
                                 CApSettingsModel& aModel,
                                 CApSettingsHandlerImpl& aHandler,
                                 TInt& aIndex, TInt& aPreferredUid,
                                 TSelectionMenuType aSelMenuType,
                                 TInt aIspFilter, TInt aBearerFilter,
                                 TInt aSortType, CDesCArrayFlat* aItemArray,
                                 TUint32& aEventStore, TBool aNeedsNone,
                                 TInt aReqIpvType,
                                 TVpnFilterType aVpnFilterType,
                                 TBool aIncludeEasyWlan,
                                 TBool aNoEdit
                                 )
:CAknRadioButtonSettingPage( R_POPUP_LIST_SETTING_PAGE,
                             aIndex, aItemArray ),
iDataModel( &aModel ),
iSelected( &aPreferredUid ),
iBearerFilter( aBearerFilter ),
iIspFilter( aIspFilter ),
iSortType( aSortType ),
iSelMenuType( aSelMenuType ),
iHandler( &aHandler ),
iEventStore( &aEventStore ),
iPreferredUid( aPreferredUid ),
iNeedsNone( aNeedsNone ),
iNeedUnlock( EFalse ),
iReqIpvType( aReqIpvType ),
iVpnFilterType( aVpnFilterType ),
iVariant( aHandler.iExt->iVariant ),
iIncludeEasyWlan( aIncludeEasyWlan ),
iInitialised( EFalse ),
iNoEdit( aNoEdit )
    {
    }




// ---------------------------------------------------------
// CApSelPopupList::SetHighlighted()
// called when needs to change the highlighting
// ---------------------------------------------------------
//
void CApSelPopupList::SetHighlighted()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::SetHighlighted")
    
    TInt err( KErrNone );
    TInt idx = iModel->Item4Uid( iPreferredUid, err );
    
    // if UID exists, set as current, else set 0 as current.
    iList->SetCurrentItemIndexAndDraw( err == KErrNone ? idx : 0);
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::SetHighlighted")
    }


// ---------------------------------------------------------
// CApSelPopupList::GetHelpContext()
// ---------------------------------------------------------
//
void CApSelPopupList::GetHelpContext(TCoeHelpContext& aContext) const
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::GetHelpContext")
    
    aContext.iMajor = iHandler->iHelpMajor;
    // help no longer available for user, use dummy ID
    aContext.iContext = KSET_HLP_AP_SETTING_GPRS;
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::GetHelpContext")
    }


// ---------------------------------------------------------
// CApSelPopupList::HandleApDbEventL
// called by the active access point framework
// ---------------------------------------------------------
//
void CApSelPopupList::HandleApDbEventL( TEvent anEvent )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::HandleApDbEventL")
    
    switch ( anEvent )
        {
        case EDbChanged:
            {
            FillListBoxWithDataL();
            break;
            }
        case EDbClosing:
            {
            break;
            }
        case EDbAvailable:
            {
            if ( iNeedUnlock )
                {
                FillListBoxWithDataL();
                }
            break;
            }
        default:
            {
            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
            break;
            }
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::HandleApDbEventL")
    }


// ---------------------------------------------------------
// CApSelPopupList::ActivateL()
// called after the dialog is shown
// used to handle empty list - query
// ---------------------------------------------------------
//
void CApSelPopupList::ActivateL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::ActivateL")
    
    CAknRadioButtonSettingPage::ActivateL();

    if (iDoExit)
        {
        User::Leave(KErrNone);
        return;
        }

    // put empty list checking & required actions here.
    CheckIfEmptyL();
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::ActivateL")
    }



// ---------------------------------------------------------
// CApSelPopupList::SelectCurrentItemL()
// called after the setting had been changed
// ---------------------------------------------------------
//
void CApSelPopupList::SelectCurrentItemL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::SelectCurrentItemL")
    
    CAknRadioButtonSettingPage::SelectCurrentItemL();
    TInt idx = iList->CurrentItemIndex();
    if ( idx >= 0 )
        {
        *iSelected = iModel->At( idx )->Uid();
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::SelectCurrentItemL")
    }



// ---------------------------------------------------------
// CApSelPopupList::OkToExitL( TInt aButtonId )
// called by framework when the OK button is pressed
// ---------------------------------------------------------
//
TBool CApSelPopupList::OkToExitL( TInt aButtonId )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::OkToExitL")
    
    // Translate the button presses into commands for the appui & current
    // view to handle.
    // This is a very good thing, that aButtonId is a TInt,
    // but the caller ( CAknSettingPage ) simply uses a TBool.
    // The value of ETrue means the button usually for Yes, Ok, Options, etc
    // and EFalse means Back, Cancel, etc.
    // so we must act according to a boolean value and not
    // according to the real button id...
    TBool IsAccepted = aButtonId;

    if ( IsAccepted )
        {
        TInt idx = iList->CurrentItemIndex();
        if ( idx >= 0 )
            {
            *iSelected = iModel->At( idx )->Uid();
            }
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::OkToExitL")
    return ETrue;
    }



// ---------------------------------------------------------
// CApSelPopupList::FillListBoxWithDataL()
// called when listbox needs to be filled with data
// ---------------------------------------------------------
//
void CApSelPopupList::FillListBoxWithDataL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::FillListBoxWithDataL")
    
    iPreferredLine = iList->CurrentItemIndex();
    if ( iPreferredLine < 0 )
        {
        iPreferredLine = 0;
        }

    TBool isLocked(EFalse);
    iNeedUnlock = EFalse;
    iDataModel->AllListItemDataL( isLocked, *iModel, iIspFilter, 
                                  iBearerFilter, iSortType, iReqIpvType,
                                  iVpnFilterType, iIncludeEasyWlan );
    if ( isLocked )
        {
        iNeedUnlock = ETrue;
        }

    iList->View()->SetDisableRedraw( ETrue );

    if ( iNeedsNone )
        {
        HBufC* buf = iEikonEnv->AllocReadResourceLC( R_APUI_VIEW_AP_NONE );
        CApListItem* NoneItem = CApListItem::NewLC
                        (
                        EIspTypeInternetAndWAP, KApNoneUID,
                        *buf,
                        EApBearerTypeHSCSD
                        );
        iModel->InsertL( 0, NoneItem );
        // as InsertL passes ownership of item to array,
        // remove from cleanupstack
        CleanupStack::Pop(); // NoneItem, as ownership is passed to array
        CleanupStack::PopAndDestroy(); // buf, as item has copied it...
        }

    iList->HandleItemAdditionL();

    iList->View()->SetDisableRedraw( EFalse );
    iList->HandleItemAdditionL();

    SetSelectedL();
    iPreferredUid = *iSelected;
    
    SetHighlighted();

    SizeChanged();
    DrawNow();
    
    CheckAndSetDataValidity();
    UpdateCbaL();
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::FillListBoxWithDataL")
    }


// ---------------------------------------------------------
// CApSelPopupList::SetSelectedL()
// ---------------------------------------------------------
//
void CApSelPopupList::SetSelectedL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::SetSelectedL")
    
    TInt i( 0 );
    TInt idx( 0 );//set something that does no harm...
    TInt count = iModel->Count(); 
    for( i=0; i<count; i++ )
        {
        if ( iModel->At( i )->Uid() == TUint32( *iSelected ) )
            {
            idx = i;
            i = count;
            }
        }
    iList->SetCurrentItemIndexAndDraw( idx );
    SelectCurrentItemL();
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::SetSelectedL")
    }


// ---------------------------------------------------------
// CApSelPopupList::CheckIfEmptyL()
// ---------------------------------------------------------
//
void CApSelPopupList::CheckIfEmptyL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::CheckIfEmptyL")
    
    if ( !iModel->Count() )
        {
        // no ap defined, create new AP
        ProcessCommandL( EApSelCmdNewBlank );
        }
    iInitialised = ETrue;
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::CheckIfEmptyL")
    }



// ---------------------------------------------------------
// CApSelPopupList::DynInitMenuPaneL
// ---------------------------------------------------------
//
void CApSelPopupList::DynInitMenuPaneL( TInt aResourceId,
                                        CEikMenuPane* aMenuPane )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::DynInitMenuPaneL")
    
    CAknSettingPage::DynInitMenuPaneL( aResourceId, aMenuPane );

    TInt itemCount = iList->Model()->NumberOfItems();
    TInt idx = iList->CurrentItemIndex();
    TUint32 itemUid(0);
    if ( itemCount )
        {
        itemUid = iModel->At( idx )->Uid();
        }

    if ( iHandler->iModel->Need2DeleteSelect( aResourceId, itemCount ) )
        {
        aMenuPane->DeleteMenuItem( EApSelCmdSelect );
        }

    if ( iHandler->iModel->Need2DeleteOpen( aResourceId, itemCount, 
                                            itemUid, iNeedsNone ) )
        {
        aMenuPane->DeleteMenuItem( EApSelCmdOpen );
        }
    if ( iHandler->iModel->Need2DeleteDeleteL( aResourceId, itemCount, 
                                              itemUid, iNeedsNone ) )
        {
        aMenuPane->DeleteMenuItem( EApSelCmdDelete );
        }

    if ( iHandler->iModel->Need2DeleteNewUseExisting( 
                        aResourceId, itemCount ) )
        {
        aMenuPane->DeleteMenuItem( EApSelCmdNewUseExisting );
        }
    if ( iHandler->iModel->Need2DeleteNewL( aResourceId ) )
        {
        aMenuPane->DeleteMenuItem( EApSelCmdNewBlank );
        }

    if ( iHandler->iModel->Need2DeleteHelp( aResourceId ) )
        {
        aMenuPane->DeleteMenuItem( EAknCmdHelp );                
        }

    if ( aResourceId == R_APSETTINGSUI_MENU_SELECT_NORMAL )
        {
        if ( iSelMenuType == EApSettingsSelMenuSelectOnly )
            {
            // Disallow other menues by deleting them
            aMenuPane->DeleteMenuItem( EApSelCmdExit );
            }
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::DynInitMenuPaneL")
    }


// From MEikCommandObserver
// ---------------------------------------------------------
// CApSelPopupList::ProcessCommandL
// ---------------------------------------------------------
//
void CApSelPopupList::ProcessCommandL( TInt aCommandId )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::ProcessCommandL")
    
    if ( MenuShowing() )
        {
        HideMenu();
        }

    switch ( aCommandId )
        {
        case EAknSoftkeyOptions:
            {
            DisplayMenuL();
            break;
            }
        case EAknSoftkeyBack:
            {
            AttemptExitL( EFalse );
            break;
            }
        case EAknSoftkeyCancel:
            {
            *iEventStore |= KApUiEventShutDownRequested;
            AttemptExitL( EFalse );
            break;
            }
        case EAknSoftkeyOk:
        case EApSelCmdSelect:
            {
            *iEventStore |= KApUiEventSelected;
            
            TUint32 currUid = iModel->At( iList->CurrentItemIndex() )->Uid();
            if( iPreferredUid != currUid )
                {
                iPreferredUid = currUid;
                SetHighlighted();
                }

            CAknRadioButtonSettingPage::SelectCurrentItemL();
            AttemptExitL( ETrue );
            break;
            }
        case EApSelCmdOpen:
            {// as we must be standing on an item, it must exist...
            // So no problem on iModel->At( ...)
            iPreferredUid = iModel->At( iList->CurrentItemIndex() )->Uid();
            iHandler->DoRunViewerL( iPreferredUid );
            SetHighlighted();
            break;
            }
        case EApSelCmdNew:
            {
            break; // starts a submenu, nothing to do here
            }
        case EApSelCmdNewBlank:
            {
            iPreferredUid = iHandler->HandleApBlankNewL(
                                            iBearerFilter, iIspFilter );
            SetHighlighted();
            break;
            }
        case EApSelCmdNewUseExisting:
            {
            TUint32 currid = iModel->At( iList->CurrentItemIndex() )->Uid();
            iPreferredUid = iHandler->HandleDuplicateL( currid );
            SetHighlighted();
            break;
            }
        case EApSelCmdDelete:
            {
            // As it might have been started by the Clear key,
            // we must check if there is any...
            TInt cnt = iModel->Count();
            if ( ( iNeedsNone & ( cnt > 1 ) ) || ( !iNeedsNone && cnt ) )
                {
                // as we must be standing on an item, it must exists...
                // So no problem on iModel->At( ...)
                if ( iList->CurrentItemIndex() < ( iModel->Count()-1 ) )
                    {// move to next one if possible
                    iPreferredUid = iModel->At(
                            iList->CurrentItemIndex()+1 )->Uid();
                    }
                else
                    { // if it is the last, move to previous if possible.
                    // if not, set to 0
                    if ( iModel->Count()> 1 )
                        {// move to prev. one if possible
                        iPreferredUid = iModel->At(
                            iList->CurrentItemIndex()-1 )->Uid();
                        }
                    else
                        {
                        iPreferredUid = 0;
                        }
                    }
                iHandler->HandleApDeleteCmdL(
                            iModel->At( iList->CurrentItemIndex() )->Uid(),
                            iModel->Count() == (1+iNeedsNone) );
                }
            break;
            }
        case EAknCmdHelp:
            {
			if ( iHelpSupported )
				{
            	iDataModel->LaunchHelpL();
				}
            break;
            }
        default:
            {
            // silently ignore it
            break;
            }
        }
    // check if user wants to Exit....
    if ( *iEventStore & KApUiEventExitRequested )
        {
        if ( iInitialised )
            {                        
            AttemptExitL( EFalse );
            }
        else
            {
            *iEventStore |= KApUiEventInternal;
            User::Leave(KLeaveWithoutAlert);
            }            
        }
    else
        {
        switch ( aCommandId )
            {
            case EApSelCmdExit:
                {
                *iEventStore |= KApUiEventExitRequested;
                AttemptExitL( EFalse );
                break;
                }
            case EEikCmdExit:
                {
                *iEventStore |= KApUiEventShutDownRequested;
                AttemptExitL( EFalse );
                break;
                }
            default:
                {
                break;
                }
            }
        }
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::ProcessCommandL")
    }


    // From MEikListBoxObserver
void CApSelPopupList::HandleListBoxEventL( CEikListBox* aListBox,
                        MEikListBoxObserver::TListBoxEvent aEventType )
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::HandleListBoxEventL")
    
    switch ( aEventType )
        {
        case EEventEnterKeyPressed:
        case EEventItemDoubleClicked:
        case EEventItemSingleClicked:
            {
            ProcessCommandL( EApSelCmdSelect );
            break;
            }
        case EEventEditingStarted:
            {
            break;
            }
        case EEventEditingStopped:
            {
            break;
            }
        default:
            {
            CAknRadioButtonSettingPage::HandleListBoxEventL( aListBox, aEventType );
            };
        };
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::HandleListBoxEventL")
    }


// From CCoeControl
// ---------------------------------------------------------
// CApSelPopupList::OfferKeyEventL
// ---------------------------------------------------------
//
TKeyResponse CApSelPopupList::OfferKeyEventL( const TKeyEvent& aKeyEvent,
                                              TEventCode aType)
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::OfferKeyEventL")
    
    TKeyResponse retval;
    
    if ( aType == EEventKey )
        {
        if ( ( aKeyEvent.iCode == EKeyDelete ) ||
            ( aKeyEvent.iCode == EKeyBackspace ) )
            {
            if (!iNoEdit)
                {            
                ProcessCommandL( EApSelCmdDelete );
                }
            retval = EKeyWasConsumed;
            }
        else
            {
            if ( ( aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == EKeyEnter ) &&
                ( ( iSelMenuType == EApSettingsSelMenuSelectOnly ) ||
                    ( iSelMenuType == EApSettingsSelMenuSelectNormal ) ) )
                { // process only if command is available...
                ProcessCommandL( EApSelCmdSelect );
                retval = EKeyWasConsumed;
                }
            else
                {
                retval = CAknRadioButtonSettingPage::OfferKeyEventL(
                                        aKeyEvent, aType );
                }
            }
        }
    else
        {
        retval = CAknRadioButtonSettingPage::OfferKeyEventL( aKeyEvent, aType );
        }
        
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::OfferKeyEventL")
    return retval;
    }




// ---------------------------------------------------------
// CApSelPopupList::LoadIconsL
// ---------------------------------------------------------
//
TInt CApSelPopupList::LoadIconsL()
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::LoadIconsL")
    
    CArrayPtr< CGulIcon >* icons = 
                        iList->ItemDrawer()->FormattedCellData()->IconArray();

    TInt count = icons->Count();

    MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();

    TParse mbmFile;
    User::LeaveIfError( mbmFile.Set( KFileIcons, &KDC_APP_BITMAP_DIR, NULL ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWmlGprs,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wml_gprs, 
                            EMbmApsettingsQgn_prop_wml_gprs_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWmlCsd,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wml_csd, 
                            EMbmApsettingsQgn_prop_wml_csd_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWmlHscsd,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wml_hscsd, 
                            EMbmApsettingsQgn_prop_wml_hscsd_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWmlSms,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wml_sms, 
                            EMbmApsettingsQgn_prop_wml_sms_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWlanBearer,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wlan_bearer, 
                            EMbmApsettingsQgn_prop_wlan_bearer_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnPropWlanBearer,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_prop_wlan_easy, 
                            EMbmApsettingsQgn_prop_wlan_easy_mask ) );

    icons->AppendL( AknsUtils::CreateGulIconL( 
                            skinInstance, 
                            KAknsIIDQgnIndiSettProtectedAdd,
                            mbmFile.FullName(), 
                            EMbmApsettingsQgn_indi_sett_protected_add, 
                            EMbmApsettingsQgn_indi_sett_protected_add_mask ) );

    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::LoadIconsL")
    return count;
    }




// ---------------------------------------------------------
// CApSelPopupList::HandleResourceChange
// ---------------------------------------------------------
//
void CApSelPopupList::HandleResourceChange(TInt aType)
    {
    APSETUILOGGER_ENTERFN( EListbox,"SelPopupList::HandleResourceChange")
    
    if ( aType == KAknsMessageSkinChange )
        {
        iList->HandleResourceChange( aType );
        if ( iProtectionSupported )
            {
            TRAP_IGNORE( LoadIconsL() );
            }
        SizeChanged();
        }    
        
    CAknRadioButtonSettingPage::HandleResourceChange( aType );          
    
    APSETUILOGGER_LEAVEFN( EListbox,"SelPopupList::HandleResourceChange")
    }

// End of File