uifw/AvKon/aknhlist/src/akntreelisticon.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/aknhlist/src/akntreelisticon.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2006, 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:  Implementation for CAknTreeListIcon class.
+*
+*/
+
+
+#include <AknsUtils.h>
+#include <AknIconUtils.h>
+
+#include "akntreelisticon.h"
+
+// Flag definitions.
+enum TAknTreeListIconFlags
+    {
+    EFlagColored, // Icon is color skinned.
+    EFlagReloadable, // Parameters for reloading the icon are stored in class.
+    EFlagBitmapsOwnedExternally
+    };
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon* CAknTreeListIcon::NewLC( TInt aIconId, const TAknsItemID& aId,
+    const TDesC& aFilename, TInt aBitmapId, TInt aMaskId,
+    TScaleMode aScaleMode )
+    {
+    CAknTreeListIcon* self = new ( ELeave ) CAknTreeListIcon( aIconId, aId,
+        aBitmapId, aMaskId, aScaleMode );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFilename );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon* CAknTreeListIcon::NewLC( TInt aIconId, CFbsBitmap* aIcon,
+    CFbsBitmap* aMask, TBool aTransferOwnership, TScaleMode aScaleMode )
+    {
+    CAknTreeListIcon* self = new ( ELeave ) CAknTreeListIcon( aIconId,
+        aIcon, aMask, aTransferOwnership, aScaleMode );
+    CleanupStack::PushL( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon* CAknTreeListIcon::NewLC( TInt aIconId, const TAknsItemID& aId,
+    const TAknsItemID& aColorId, TInt aColorIndex, const TDesC& aFilename,
+    TInt aBitmapId, TInt aMaskId, TRgb aDefaultColor, TScaleMode aScaleMode )
+    {
+    CAknTreeListIcon* self = new ( ELeave ) CAknTreeListIcon( aIconId, aId,
+        aColorId, aColorIndex, aBitmapId, aMaskId, aDefaultColor, aScaleMode );
+    CleanupStack::PushL( self );
+    self->ConstructL( aFilename );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon::~CAknTreeListIcon()
+    {
+    delete iFilename;
+
+    if ( iFlags.IsClear( EFlagBitmapsOwnedExternally ) )
+        {
+        delete iBitmap;
+        delete iMask;
+        }
+
+    iBitmap = NULL;
+    iMask = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Compares given two tree list icons.
+// ---------------------------------------------------------------------------
+//
+TInt CAknTreeListIcon::Compare( const CAknTreeListIcon& aFirst,
+    const CAknTreeListIcon& aSecond )
+    {
+    TInt id = aFirst.Id();
+    return CompareId( &id, aSecond );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Compares icon ID with the one in given tree list icons.
+// ---------------------------------------------------------------------------
+//
+TInt CAknTreeListIcon::CompareId( const TInt* aIconId,
+    const CAknTreeListIcon& aIcon )
+    {
+    TInt value = NULL;
+    TInt id1 = *aIconId;
+    TInt id2 = aIcon.Id();
+
+    if ( id1 < id2 )
+        {
+        value = -1;
+        }
+    else if ( id1 > id2 )
+        {
+        value = 1;
+        }
+
+    return value;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Reconstructs the bitmap and mask for the icon.
+// ---------------------------------------------------------------------------
+//
+void CAknTreeListIcon::ReconstructL()
+    {
+    if ( iFlags.IsSet( EFlagReloadable ) )
+        {
+        CFbsBitmap* bitmap = NULL;
+        CFbsBitmap* mask = NULL;
+
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+        if ( iFlags.IsSet( EFlagColored ) )
+            {
+            AknsUtils::CreateColorIconL( skin, iId, iColorId, iColorIndex,
+                bitmap, mask, *iFilename, iBitmapId, iMaskId, iDefaultColor,
+                iSize, iScaleMode );
+            }
+        else
+            {
+            AknsUtils::CreateIconL( skin, iId, bitmap, mask, *iFilename,
+                iBitmapId, iMaskId );
+            AknIconUtils::SetSize( bitmap, iSize, iScaleMode );
+            }
+
+        delete iBitmap;
+        iBitmap = bitmap;
+
+        delete iMask;
+        iMask = mask;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the ID assigned for the tree list icon.
+// ---------------------------------------------------------------------------
+//
+TInt CAknTreeListIcon::Id() const
+    {
+    return iIconId;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the icon's skin item ID.
+// ---------------------------------------------------------------------------
+//
+const TAknsItemID& CAknTreeListIcon::SkinItemID() const
+    {
+    return iId;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns pointer to the bitmap.
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CAknTreeListIcon::Bitmap()
+    {
+    return iBitmap;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns pointer to the mask.
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CAknTreeListIcon::Mask()
+    {
+    return iMask;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the icon's size.
+// ---------------------------------------------------------------------------
+//
+TSize CAknTreeListIcon::Size() const
+    {
+    return iSize;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the icon's scale mode.
+// ---------------------------------------------------------------------------
+//
+TScaleMode CAknTreeListIcon::ScaleMode() const
+    {
+    return iScaleMode;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Sets new icon size and scale mode.
+// ---------------------------------------------------------------------------
+//
+TInt CAknTreeListIcon::SetSize( const TSize& aSize )
+    {
+    TInt error = KErrNone;
+    if ( iSize != aSize )
+        {
+        iSize = aSize;
+        error = AknIconUtils::SetSize( iBitmap, iSize, iScaleMode );
+        }
+    return error;
+    }
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon::CAknTreeListIcon( TInt aIconId, const TAknsItemID& aId,
+    TInt aBitmapId, TInt aMaskId, TScaleMode aScaleMode )
+    : iIconId( aIconId ),
+      iId( aId ),
+      iBitmapId( aBitmapId ),
+      iMaskId( aMaskId ),
+      iScaleMode( aScaleMode )
+    {
+    iFlags.Set( EFlagReloadable );
+    }
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon::CAknTreeListIcon( TInt aIconId, CFbsBitmap* aIcon,
+    CFbsBitmap* aMask, TBool aTransferOwnership, TScaleMode aScaleMode )
+    : iIconId( aIconId ),
+      iId( KAknsIIDNone ),
+      iBitmap( aIcon ),
+      iMask( aMask ),
+      iScaleMode( aScaleMode )
+    {
+    iFlags.Assign( EFlagBitmapsOwnedExternally, !aTransferOwnership );
+    }
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeListIcon::CAknTreeListIcon( TInt aIconId, const TAknsItemID& aId,
+    const TAknsItemID& aColorId, TInt aColorIndex, TInt aBitmapId,
+    TInt aMaskId, TRgb aDefaultColor, TScaleMode aScaleMode )
+    : iIconId( aIconId ),
+      iId( aId ),
+      iColorId( aColorId ),
+      iColorIndex( aColorIndex ),
+      iBitmapId( aBitmapId ),
+      iMaskId( aMaskId ),
+      iDefaultColor( aDefaultColor ),
+      iScaleMode( aScaleMode )
+    {
+    iFlags.Set( EFlagReloadable );
+    iFlags.Set( EFlagColored );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAknTreeListIcon::ConstructL( const TDesC& aFilename )
+    {
+    iFilename = aFilename.AllocL();
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    if ( iFlags.IsSet( EFlagColored ) )
+        {
+        AknsUtils::CreateColorIconL( skin, iId, iColorId, iColorIndex,
+            iBitmap, iMask, *iFilename, iBitmapId, iMaskId, iDefaultColor );
+        }
+    else
+        {
+        AknsUtils::CreateIconL( skin, iId, iBitmap, iMask, *iFilename,
+            iBitmapId, iMaskId );
+        }
+    }
+