diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/UIControls/src/Pbk2TitlePanePictureFactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/UIControls/src/Pbk2TitlePanePictureFactory.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,151 @@ +/* +* Copyright (c) 2005-2007 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: Phonebook 2 title pane picture factory. +* +*/ + + +#include "Pbk2TitlePanePictureFactory.h" + +// Phonebook 2 +#include "CPbk2UIExtensionManager.h" +#include "MPbk2UIExtensionIconSupport.h" +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include +#include +#include +#include +#include + +// System includes +#include +#include +#include +#include +#include +#include + + +/// Unnamed namespace for local definitions +namespace { + +/** + * Creates icon array. + * + * @return Icon array. + */ +CPbk2IconArray* CreateIconArrayLC() + { + CPbk2IconArray* iconArray = NULL; + TResourceReader reader; + CCoeEnv::Static()-> + CreateResourceReaderLC( reader, R_PBK2_CONTACT_LIST_ICONS ); + + // Create icon array + iconArray = CPbk2IconArray::NewL( reader ); + CleanupStack::PopAndDestroy(); // reader + CleanupStack::PushL( iconArray ); + + // Add icons from UI extensions + CPbk2UIExtensionManager* extManager = + CPbk2UIExtensionManager::InstanceL(); + extManager->PushL(); + extManager->IconSupportL().AppendExtensionIconsL( *iconArray ); + + CleanupStack::PopAndDestroy( extManager ); + + return iconArray; + } + +} /// namespace + + +// -------------------------------------------------------------------------- +// Pbk2TitlePanePictureFactory::CreateTitlePanePictureL +// -------------------------------------------------------------------------- +// +EXPORT_C CEikImage* Pbk2TitlePanePictureFactory::CreateTitlePanePictureLC + ( const MVPbkStoreContact* aContact, + CPbk2StorePropertyArray& aStoreProperties ) + { + CEikImage* image = new ( ELeave ) CEikImage; + CleanupStack::PushL( image ); + + CPbk2IconArray* iconArray = CreateIconArrayLC(); + + // Get icon index + TInt index = KErrNotFound; + TVPbkContactStoreUriPtr uri = + aContact->ParentStore().StoreProperties().Uri(); + const CPbk2StoreProperty* + storeProperty = aStoreProperties.FindProperty( uri ); + + if( storeProperty ) + { + TArray + views = storeProperty->Views(); + TInt count = views.Count(); + TInt i = 0; + for( i = 0; i < count && index == KErrNotFound; i++ ) + { + if( views[i]->ViewDefinition().Type() == EVPbkContactsView ) + { + const TPbk2IconId& id = views[i]->ViewItemIconId(); + index = iconArray->FindIcon( id ); + } + } + } + + if( index >= 0 ) + { + // Get pointers to bitmaps in array + CFbsBitmap* bitmap = iconArray->At( index )->Bitmap(); + CFbsBitmap* mask = iconArray->At( index )->Mask(); + + // Calculate icon size + TRect mainPane; + AknLayoutUtils::LayoutMetricsRect( + AknLayoutUtils::ETitlePane, mainPane ); + TAknLayoutRect titleIconPaneLayoutRect; + titleIconPaneLayoutRect.LayoutRect( + mainPane, + AknLayoutScalable_Avkon::title_pane_g2( 0 ).LayoutLine() ); + TSize iconSize = titleIconPaneLayoutRect.Rect().Size(); + User::LeaveIfError( AknIconUtils::SetSize( bitmap, iconSize ) ); + + // Create duplicates of the icon to be used + CFbsBitmap* pBitmap = new( ELeave ) CFbsBitmap(); + CleanupStack::PushL( pBitmap ); + User::LeaveIfError( pBitmap->Duplicate( bitmap->Handle() ) ); + CFbsBitmap* pMask = new( ELeave ) CFbsBitmap(); + CleanupStack::PushL( pMask ); + User::LeaveIfError( pMask->Duplicate( mask->Handle() ) ); + CleanupStack::Pop( 2 ); // pBitmap, pMask + + // Transfer ownership to the image + image->SetBitmap( pBitmap ); + image->SetMask( pMask ); + } + + CleanupStack::PopAndDestroy( iconArray ); + return image; + } + +// End of File