diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommonUI/src/CPbk2IconInfoContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2IconInfoContainer.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,231 @@ +/* +* 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 icon info container. +* +*/ + + +// INCLUDE FILES +#include + +// Phonebook 2 +#include "CPbk2IconInfo.h" + +// System includes +#include +#include + +// Debugging headers +#include + +// Unnamed namespace for local definitions +namespace { + +/** + * Creates a resource reader. + * + * @param aReader Will contain a filled reader. + * @param aResourceId Id of the resource to be loaded. + * @param aCoeEnv Coe environment to be used for resource reading. + */ +void CreateReaderLC( + TResourceReader& aReader, + TInt aResourceId, + CCoeEnv* aCoeEnv = NULL ) + { + CCoeEnv* coeEnv = aCoeEnv; + + if ( !coeEnv ) + { + coeEnv = CCoeEnv::Static(); + } + + coeEnv->CreateResourceReaderLC( aReader, aResourceId ); + } + +} /// namespace + + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::CPbk2IconInfoContainer +// -------------------------------------------------------------------------- +// +inline CPbk2IconInfoContainer::CPbk2IconInfoContainer() + { + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::~CPbk2IconInfoContainer +// -------------------------------------------------------------------------- +// +CPbk2IconInfoContainer::~CPbk2IconInfoContainer() + { + iInfoArray.ResetAndDestroy(); + delete iMbmFileNames; + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2IconInfoContainer* CPbk2IconInfoContainer::NewL + ( TResourceReader& aReader ) + { + CPbk2IconInfoContainer* self = new( ELeave ) CPbk2IconInfoContainer; + CleanupStack::PushL(self); + self->ConstructL( aReader ); + CleanupStack::Pop(self); + return self; + } + + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2IconInfoContainer* CPbk2IconInfoContainer::NewL + ( TInt aResourceId, CCoeEnv* aCoeEnv /*=NULL*/ ) + { + CPbk2IconInfoContainer* self = new( ELeave ) CPbk2IconInfoContainer; + CleanupStack::PushL(self); + TResourceReader reader; + CreateReaderLC(reader, aResourceId, aCoeEnv); + self->ConstructL( reader ); + CleanupStack::PopAndDestroy(); // reader (buffer) + CleanupStack::Pop(self); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::NewL +// -------------------------------------------------------------------------- +// +EXPORT_C CPbk2IconInfoContainer* CPbk2IconInfoContainer::NewL() + { + CPbk2IconInfoContainer* self = new( ELeave ) CPbk2IconInfoContainer; + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2IconInfoContainer::ConstructL( TResourceReader& aReader ) + { + // Not so many MBM files + const TInt granularity = 4; + iMbmFileNames = new( ELeave ) CDesCArrayFlat( granularity ); + AppendIconsFromResourceL( aReader ); + + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2IconInfoContainer::ConstructL() + { + // Not so many MBM files + const TInt granularity = 4; + iMbmFileNames = new( ELeave ) CDesCArrayFlat( granularity ); + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::Find +// -------------------------------------------------------------------------- +// +EXPORT_C const CPbk2IconInfo* CPbk2IconInfoContainer::Find + ( const TPbk2IconId& aIconId ) const + { + TInt index = FindInfo( aIconId ); + if ( index == KErrNotFound ) + { + return NULL; + } + return iInfoArray[index]; + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::AppendIconsFromResourceL +// -------------------------------------------------------------------------- +// +EXPORT_C void CPbk2IconInfoContainer::AppendIconsFromResourceL + ( TInt aResourceId ) + { + TResourceReader reader; + CreateReaderLC(reader, aResourceId); + AppendIconsFromResourceL(reader); + CleanupStack::PopAndDestroy(); // reader + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::AppendIconsFromResourceL +// -------------------------------------------------------------------------- +// +EXPORT_C void CPbk2IconInfoContainer::AppendIconsFromResourceL + ( TResourceReader& aReader ) + { + // Read from resource + TInt count = aReader.ReadInt16(); + while (count-- > 0) + { + CPbk2IconInfo* iconInfo = + CPbk2IconInfo::NewLC( aReader, *iMbmFileNames ); + AppendIconL( iconInfo ); + CleanupStack::Pop( iconInfo ); + } + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::AppendIconL +// -------------------------------------------------------------------------- +// +EXPORT_C void CPbk2IconInfoContainer::AppendIconL( + CPbk2IconInfo* aIconInfo ) + { + const TInt index = FindInfo( aIconInfo->Pbk2IconId() ); + if ( index != KErrNotFound ) + { + // Delete existing entry in info array + delete iInfoArray[index]; + iInfoArray.Remove( index ); + } + iInfoArray.AppendL( aIconInfo ); + } + +// -------------------------------------------------------------------------- +// CPbk2IconInfoContainer::FindInfo +// -------------------------------------------------------------------------- +// +TInt CPbk2IconInfoContainer::FindInfo( const TPbk2IconId& aIconId ) const + { + TInt ret = KErrNotFound; + + const TInt count = iInfoArray.Count(); + for (TInt i = 0; i < count; ++i) + { + if (iInfoArray[i]->Pbk2IconId() == aIconId ) + { + ret = i; + break; + } + } + + return ret; + } + +// End of File