diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknhlist/src/akntreelisticon.cpp --- /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 +#include + +#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 ); + } + } +