--- /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 );
+ }
+ }
+