diff -r f742655b05bf -r d38647835c2e voipplugins/accountcreationplugin/src/acpproviderlistcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/accountcreationplugin/src/acpproviderlistcontainer.cpp Wed Sep 01 12:29:57 2010 +0100 @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2007-2008 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: Implements CAcpProviderListContainer methods +* +*/ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "acpcontroller.h" +#include "acpproviderlistcontainer.h" +#include "accountcreationpluginlogger.h" +#include "accountcreationpluginconstants.h" + + +const TInt KComponentControlCount = 1; + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::CAcpProviderListContainer +// --------------------------------------------------------------------------- +// +CAcpProviderListContainer::CAcpProviderListContainer( + CAcpController& aController ) + : iController( aController ) + { + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::ConstructL +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::ConstructL( const TRect& aRect ) + { + ACPLOG( "CAcpProviderListContainer::ConstructL begin" ); + + CreateWindowL(); + ConstructListBoxL(); + SetRect( aRect ); + ActivateL(); + + ACPLOG( "CAcpProviderListContainer::ConstructL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::NewL +// --------------------------------------------------------------------------- +// +CAcpProviderListContainer* CAcpProviderListContainer::NewL( + CAcpController& aController, + const TRect& aRect ) + { + CAcpProviderListContainer* self = + CAcpProviderListContainer::NewLC( aController, aRect ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::NewLC +// --------------------------------------------------------------------------- +// +CAcpProviderListContainer* CAcpProviderListContainer::NewLC( + CAcpController& aController, + const TRect& aRect ) + { + CAcpProviderListContainer* self = + new ( ELeave ) CAcpProviderListContainer( aController ); + CleanupStack::PushL( self ); + self->ConstructL( aRect ); + return self; + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::~CAcpProviderListContainer +// --------------------------------------------------------------------------- +// +CAcpProviderListContainer::~CAcpProviderListContainer() + { + ACPLOG( "CAcpProviderListContainer::~CAcpProviderListContainer begin" ); + delete iListBox; + ACPLOG( "CAcpProviderListContainer::~CAcpProviderListContainer end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::AddProvidersToListboxL +// Adds and updates listbox with providers. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::AddProvidersToListboxL( ) + { + ACPLOG( "CAcpProviderListContainer::AddProvidersToListboxL begin" ); + + CTextListBoxModel* model = iListBox->Model(); + MDesCArray* textArray = model->ItemTextArray(); + CDesCArray* listBoxItems = static_cast( textArray ); + + if ( !listBoxItems->Count() ) + { + TInt count = iController.CountOfProviders(); // Amount of provider. + + LoadProviderIconsL( count ); // Load icons of providers. + + for ( TInt i = 0; i < count; i++ ) + { + // Entry for listbox. + TBuf listBoxItemText( KNullDesC ); + // Get provider name for adding it to the list later on. + TPtrC namePtr = iController.ProviderNameFromIndexL( i ); + // Formats the listbox entry with the index and the provider name. + listBoxItemText.Format( KListFormat, i,&namePtr ); + // Add the entry to the list. + listBoxItems->AppendL( listBoxItemText ); + } + + iListBox->HandleItemAdditionL(); + iListBox->SetCurrentItemIndexAndDraw( 0 ); + } + + ACPLOG( "CAcpProviderListContainer::AddProvidersToListboxL end" ); + + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::ListBox +// Returns handle to the listbox. +// --------------------------------------------------------------------------- +// +CAknSingleLargeStyleListBox* CAcpProviderListContainer::ListBox() + { + return iListBox; + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::CurrentItemIndex +// Returns index of selected listbox item. +// --------------------------------------------------------------------------- +// +TInt CAcpProviderListContainer::CurrentItemIndex() const + { + return iListBox->CurrentItemIndex(); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::LoadDefaultIconsL +// Loads default icons. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::LoadProviderIconsL( TInt aCount ) + { + ACPLOG( "CAcpProviderListContainer::LoadProviderIconsL begin" ); + + if ( aCount > 0 ) + { + // Delete previous icon array. + CArrayPtr* oldArray = iListBox->ItemDrawer()->ColumnData()-> + IconArray(); + if ( oldArray ) + { + iListBox->ItemDrawer()->ColumnData()->SetIconArray( NULL ); + delete oldArray; + } + + // Create a new icon array. + CAknIconArray* iconArray = new( ELeave ) CAknIconArray( aCount ); + + for ( TInt i = 0; i < aCount; i++ ) + { + // Try to get bitmap and mask for provider. + CFbsBitmap* bitmap( NULL ); + CFbsBitmap* mask( NULL ); + + iController.ProviderBitmapsFromIndexL( i, bitmap, mask ); + + if ( !bitmap ) // Mask can be NULL. + { + // Default icon. + LoadDefaultIconsL( iconArray ); + } + else + { + // Provider icon. + CGulIcon* providerIcon = CGulIcon::NewL( bitmap, mask ); + + // Owned by provider. + providerIcon->SetBitmapsOwnedExternally( ETrue ); + + CleanupStack::PushL( providerIcon ); + // Insert into icon array. + iconArray->AppendL( providerIcon ); + CleanupStack::Pop( providerIcon ); + } + } + + // Set an icon array to the listbox. + iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconArray ); + } + + ACPLOG( "CAcpProviderListContainer::LoadProviderIconsL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::ResetListBox +// Resets the listbox. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::ResetListBox() + { + ACPLOG( "CAcpProviderListContainer::ResetListBox begin" ); + + CDesCArrayFlat* array = static_cast( + iListBox->Model()->ItemTextArray() ); + + if ( array ) + { + array->Reset(); + } + + iListBox->SetCurrentItemIndexAndDraw( 0 ); + + ACPLOG( "CAcpProviderListContainer::ResetListBox end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::ConstructListBoxL +// Creates listbox item for provider list items. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::ConstructListBoxL() + { + ACPLOG( "CAcpProviderListContainer::ConstructListBoxL begin" ); + + // Create listbox and array for listbox items. + iListBox = new( ELeave ) CAknSingleLargeStyleListBox; + iListBox->SetContainerWindowL( *this ); + iListBox->ConstructL( this, EAknGenericListBoxFlags ); + iListBox->CreateScrollBarFrameL( ETrue ); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, + CEikScrollBarFrame::EAuto ); + iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray ); + + CDesCArrayFlat* array = new ( ELeave ) CDesCArrayFlat( KArrayGranuality ); + iListBox->Model()->SetItemTextArray( array ); + + // Set listbox background data when there are no providers available. + HBufC* empty = StringLoader::LoadLC( R_ACP_PROVIDER_LIST_NO_PROVIDERS ); + iListBox->View()->SetListEmptyTextL( *empty ); + CleanupStack::PopAndDestroy( empty ); + + ACPLOG( "CAcpProviderListContainer::ConstructListBoxL end" ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::LoadDefaultIconsL +// Loads default icons. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::LoadDefaultIconsL( + CArrayPtr* aIconArray ) + { + ACPLOG( "CAcpProviderListContainer::LoadDefaultIconsL begin" ); + + // This when going to ROM (PhoneMemoryRootPath is used only for testing). + TFileName fileName = + TParsePtrC( PathInfo::RomRootPath() ).Drive(); + fileName.Append( KDC_APP_BITMAP_DIR ); + fileName.Append( KIconFileName ); + + // Just one icon for providers which does not have own icon. + MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance(); + + CGulIcon* defaultIcon( NULL ); + TRAPD( err, defaultIcon = AknsUtils::CreateGulIconL( + skinInstance, + KAknsIIDDefault, + fileName, + EMbmAcpiconsQgn_prop_set_conn_voip, + EMbmAcpiconsQgn_prop_set_conn_voip ) ); + + if ( KErrNone != err ) + { + ACPLOG2( "CreateGulIconL error: %d", err ); + } + + CleanupStack::PushL( defaultIcon ); + aIconArray->AppendL( defaultIcon ); + CleanupStack::Pop( defaultIcon ); + + ACPLOG( "CAcpProviderListContainer::LoadDefaultIconsL end"); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::ComponentControl +// From class CoeControl +// --------------------------------------------------------------------------- +// +CCoeControl* CAcpProviderListContainer::ComponentControl( + TInt /*aIndex*/ ) const + { + return iListBox; + } + +// --------------------------------------------------------------------------- +// From class CoeControl +// CAcpProviderListContainer::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CAcpProviderListContainer::OfferKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType ) + { + return iListBox->OfferKeyEventL( aKeyEvent, aType ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::CountComponentControls +// From class CoeControl. +// --------------------------------------------------------------------------- +// +TInt CAcpProviderListContainer::CountComponentControls() const + { + return KComponentControlCount; + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::SizeChanged +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::SizeChanged() + { + iListBox->SetRect( Rect() ); + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::FocusChanged +// From class CoeControl. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::FocusChanged( TDrawNow aDrawNow ) + { + CCoeControl::FocusChanged( aDrawNow ); + + if ( iListBox ) + { + iListBox->SetFocus( IsFocused() ); + } + } + +// --------------------------------------------------------------------------- +// CAcpProviderListContainer::HandleResourceChange +// From class CCoeControl. +// Called by framework when layout is changed. +// --------------------------------------------------------------------------- +// +void CAcpProviderListContainer::HandleResourceChange( TInt aType ) + { + CCoeControl::HandleResourceChange(aType); + + // ***************************** + // ADDED FOR SCALABLE UI SUPPORT + // ***************************** + if ( KEikDynamicLayoutVariantSwitch == aType ) + { + TRect rect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, rect ); + SetRect( rect ); + } + } + +// End of file.