--- /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 <CPbk2IconInfoContainer.h>
+
+// Phonebook 2
+#include "CPbk2IconInfo.h"
+
+// System includes
+#include <barsread.h>
+#include <coemain.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+// 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