phonebookui/Phonebook/View/src/PbkIconInfo.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/PbkIconInfo.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,301 @@
+/*
+* Copyright (c) 2002 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: 
+*       Provides methods for Phonebook Icon info class.
+*
+*/
+
+
+// INCLUDE FILES
+#include "PbkIconInfo.h"
+#include <barsread.h>
+#include <coemain.h>
+#include <gulicon.h>
+#include <PbkView.rsg>
+#include <AknsUtils.h>
+#include <aknenv.h>
+
+// unnamed namespace
+namespace {
+
+/**
+ * Creates a resource reader.
+ * 
+ * @aReader will contain filled reader
+ * @aResourceId resource to be loaded
+ * @aCoeEnv coe env 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);
+    }
+}
+
+// ==================== MEMBER FUNCTIONS ====================
+
+EXPORT_C TPbkIconId TPbkIconInfo::PbkIconInfoId() const 
+    { 
+    return iPbkIconInfoId; 
+    }
+
+EXPORT_C const TDesC& TPbkIconInfo::MbmFileName() const 
+    { 
+    return *iMbmFileName; 
+    }
+
+EXPORT_C TInt TPbkIconInfo::IconId() const 
+    { 
+    return iIconId;
+    }
+
+EXPORT_C TInt TPbkIconInfo::MaskId() const 
+    { 
+    return iMaskId;
+    }
+
+EXPORT_C TAknsItemID TPbkIconInfo::SkinId() const
+    {
+    return iSkinId;
+    }
+
+TAknsItemID TPbkIconInfo::ColorId() const
+    {
+    return iColorId;
+    }
+
+TInt TPbkIconInfo::ColorIndex() const
+    {
+    return iColorIndex;
+    }
+
+TInt TPbkIconInfo::DefaultColorIndex() const
+    {
+    return iDefaultColorIndex;
+    }
+
+inline TPbkIconInfo::TPbkIconInfo()
+    {
+    // Nothing needs to be intialised here.
+    // All fields are intialised by CPbkIconInfoContainer::ConstructL() before
+    // this object can be used.
+    }
+
+inline TPbkIconInfo::~TPbkIconInfo()
+    {
+    // Destroy() handles releasing resources of this class
+    }
+
+inline void TPbkIconInfo::ReadFromResourceLC(TResourceReader& aReader)
+    {
+    iPbkIconInfoId = static_cast<TPbkIconId>(aReader.ReadInt8());
+	HBufC* buf = aReader.ReadHBufCL();
+    CleanupStack::PushL(buf);
+    iMbmFileName = buf;
+    iIconId = aReader.ReadInt32();
+    iMaskId = aReader.ReadInt32();
+    TInt skinIdMajor = aReader.ReadInt32();
+    TInt skinIdMinor = aReader.ReadInt32();
+    iSkinId.Set(skinIdMajor, skinIdMinor);
+    TInt colorIdMajor = aReader.ReadInt32();
+    TInt colorIdMinor = aReader.ReadInt32();
+    iColorId.Set(colorIdMajor, colorIdMinor);
+    iColorIndex = aReader.ReadInt32();
+    iDefaultColorIndex = aReader.ReadInt32();
+    }
+
+inline void TPbkIconInfo::Destroy()
+    {
+    // delete data members
+    delete iMbmFileName;
+    iMbmFileName = NULL;
+    }
+
+inline CPbkIconInfoContainer::CPbkIconInfoContainer()
+    {
+    // CBase::operator new(TLeave) resets member data
+    }
+
+inline void CPbkIconInfoContainer::ConstructL(TResourceReader& aReader)
+    {
+    DoAppendIconsFromResourceL(aReader);
+    }
+
+EXPORT_C CPbkIconInfoContainer* CPbkIconInfoContainer::NewL
+        (CCoeEnv* aCoeEnv /*=NULL*/)
+    {
+    return NewL(R_PBK_ICON_INFO_ARRAY, aCoeEnv);
+    }
+
+EXPORT_C CPbkIconInfoContainer* CPbkIconInfoContainer::NewL
+        (TResourceReader& aReader)
+    {
+    CPbkIconInfoContainer* self = new(ELeave) CPbkIconInfoContainer;
+    CleanupStack::PushL(self);
+    self->ConstructL(aReader);
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+EXPORT_C CPbkIconInfoContainer* CPbkIconInfoContainer::NewL
+        (TInt aResourceId, CCoeEnv* aCoeEnv /*=NULL*/)
+    {
+    CPbkIconInfoContainer* self = new(ELeave) CPbkIconInfoContainer;
+    CleanupStack::PushL(self);
+    TResourceReader reader;
+    CreateReaderLC(reader, aResourceId, aCoeEnv);
+    self->ConstructL(reader);
+    CleanupStack::PopAndDestroy(); // reader (buffer)
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CPbkIconInfoContainer::~CPbkIconInfoContainer()
+    {
+    // close and delete data members
+    for (TInt i = iIconArray.Count()-1; i >= 0; --i)
+        {
+        iIconArray[i].Destroy();
+        }
+    iIconArray.Close();
+    }
+
+EXPORT_C const TPbkIconInfo* CPbkIconInfoContainer::Find
+        (TPbkIconId aIconId) const
+    {
+    const TInt count = iIconArray.Count();
+    for (TInt i = 0; i < count; ++i)
+        {
+        if (iIconArray[i].iPbkIconInfoId == aIconId)
+            {
+            return &iIconArray[i];
+            }
+        }
+    return NULL;
+    }
+
+EXPORT_C CGulIcon* CPbkIconInfoContainer::LoadBitmapL
+        (TPbkIconId aIconId) const
+    {
+    const TPbkIconInfo* iconInfo = Find(aIconId);
+    if (iconInfo)
+        {
+        CGulIcon* icon = CGulIcon::NewLC();
+        icon->SetBitmapsOwnedExternally(EFalse);
+
+        CFbsBitmap* bitmap = NULL;
+        CFbsBitmap* mask = NULL;
+
+        PbkIconUtils::CreateIconL(AknsUtils::SkinInstance(), bitmap, mask, *iconInfo);
+
+        icon->SetBitmap(bitmap);
+        icon->SetMask(mask);
+
+        CleanupStack::Pop(); // icon
+
+        return icon;
+        }
+    return NULL;
+    }
+
+EXPORT_C void CPbkIconInfoContainer::AppendIconsFromResourceL
+        (TInt aResourceId)
+    {
+    TResourceReader reader;
+    CreateReaderLC(reader, aResourceId);
+    DoAppendIconsFromResourceL(reader);
+    CleanupStack::PopAndDestroy(); // reader
+    }
+
+/**
+ * Appends icon infor to this container.
+ *
+ * @param aReader resource to be added to this info container
+ */
+void CPbkIconInfoContainer::DoAppendIconsFromResourceL
+        (TResourceReader& aReader)
+    {
+    // read from resource
+    TInt count = aReader.ReadInt16();
+    while (count-- > 0)
+        {
+        TPbkIconInfo iconInfo;
+        iconInfo.ReadFromResourceLC(aReader);
+        
+        TPbkIconInfo* info = const_cast<TPbkIconInfo*>
+            (Find(iconInfo.PbkIconInfoId()));
+        if ( !info )
+            {
+            // add if icon is not found
+            User::LeaveIfError(iIconArray.Append(iconInfo));
+            }
+        else
+            {
+            // if icon is found, update the data
+            info->iIconId = iconInfo.iIconId;
+            info->iMaskId = iconInfo.iMaskId;
+            info->iSkinId = iconInfo.iSkinId;
+
+            delete info->iMbmFileName;
+            info->iMbmFileName = iconInfo.iMbmFileName;
+            }
+
+        CleanupStack::Pop(); // iconInfo
+        }
+    }
+
+EXPORT_C void PbkIconUtils::CreateIconL(
+        MAknsSkinInstance* aSkin, 
+        CFbsBitmap*& aBitmap, 
+        CFbsBitmap*& aMask, 
+        const TPbkIconInfo& aIconInfo)
+    {
+    CreateIconLC(aSkin, aBitmap, aMask, aIconInfo);
+    CleanupStack::Pop(2); // bitmap + mask
+    }
+
+EXPORT_C void PbkIconUtils::CreateIconLC(
+        MAknsSkinInstance* aSkin, 
+        CFbsBitmap*& aBitmap, 
+        CFbsBitmap*& aMask, 
+        const TPbkIconInfo& aIconInfo)
+    {
+    if (aIconInfo.ColorId() == KAknsIIDNone)
+        {
+        AknsUtils::CreateIconLC
+            (aSkin, aIconInfo.SkinId(), aBitmap, aMask, 
+             aIconInfo.MbmFileName(), 
+             aIconInfo.IconId(), aIconInfo.MaskId());
+        }
+    else
+        {
+        AknsUtils::CreateColorIconLC
+            (aSkin, aIconInfo.SkinId(), 
+             aIconInfo.ColorId(), aIconInfo.ColorIndex(),
+             aBitmap, aMask, 
+             aIconInfo.MbmFileName(), 
+             aIconInfo.IconId(), aIconInfo.MaskId(),
+             AKN_LAF_COLOR_STATIC(aIconInfo.DefaultColorIndex()));
+        }
+    }
+
+
+// End of File