phonebookui/Phonebook2/CommonUI/src/CPbk2IconInfoContainer.cpp
changeset 0 e686773b3f54
--- /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