diff -r 000000000000 -r 72b543305e3a messagingappbase/msgeditor/mediacontrolsrc/MsgIconControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/msgeditor/mediacontrolsrc/MsgIconControl.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,255 @@ +/* +* Copyright (c) 2005-2006 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: +* MsgEditor icon control +* +*/ + + + +// INCLUDE FILES +#include "MsgIconControl.h" + +#include +#include +#include +#include +#include + +// ========================================================== + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CMsgIconControl::CMsgIconControl +// +// Constructor +// --------------------------------------------------------- +// +CMsgIconControl::CMsgIconControl() : + iFileBitmapId( KErrNotFound ), + iFileMaskId( KErrNotFound ) + { + } + +// --------------------------------------------------------- +// CMsgIconControl::ConstructL +// +// Constructor +// --------------------------------------------------------- +// +void CMsgIconControl::ConstructL( const CCoeControl& aParent ) + { + SetContainerWindowL( aParent ); + MakeVisible( EFalse ); + } + +// --------------------------------------------------------- +// CMsgIconControl::NewL +// +// Constructor +// --------------------------------------------------------- +// +CMsgIconControl* CMsgIconControl::NewL( const CCoeControl& aParent ) + { + CMsgIconControl* self = new( ELeave ) CMsgIconControl; + + CleanupStack::PushL( self ); + self->ConstructL( aParent ); + CleanupStack::Pop( self ); + + return self; + } + +// --------------------------------------------------------- +// CMsgIconControl::NewL +// +// Destructor +// --------------------------------------------------------- +// +CMsgIconControl::~CMsgIconControl() + { + delete iIcon; + delete iFileName; + } + +// --------------------------------------------------------- +// CMsgIconControl::SetIcon +// --------------------------------------------------------- +// +void CMsgIconControl::SetIcon( CGulIcon* aIcon ) + { + delete iIcon; + iIcon = aIcon; + + if ( iIcon == NULL ) + { + iFileBitmapId = KErrNotFound; + iFileMaskId = KErrNotFound; + } + } + +// --------------------------------------------------------- +// CMsgIconControl::LoadIconL +// --------------------------------------------------------- +// +void CMsgIconControl::LoadIconL( const TAknsItemID& aId, + const TDesC& aFileName, + const TInt aFileBitmapId, + const TInt aFileMaskId ) + { + delete iIcon; + iIcon = NULL; + + iIcon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), + aId, + aFileName, + aFileBitmapId, + aFileMaskId ); + + if ( aFileBitmapId != iFileBitmapId ) + { + delete iFileName; + iFileName = NULL; + + iFileName = aFileName.AllocL(); + + iSkinId = aId; + + iFileBitmapId = aFileBitmapId; + iFileMaskId = aFileMaskId; + + // New bitmap. Force size setting. Not propably needed by kept here + // so that functionality would be the same. + SetSize( TSize() ); + } + else + { + // Icon reloaded. Set old size. + SetBitmapSizeL( iSize ); + } + } + + + +// --------------------------------------------------------- +// CMsgIconControl::BitmapSize +// +// Return the size of the icon +// --------------------------------------------------------- +// +void CMsgIconControl::SetBitmapSizeL( const TSize& aSize ) + { + if ( iIcon ) + { + User::LeaveIfError( AknIconUtils::SetSize( iIcon->Bitmap(), aSize ) ); + SetSize( aSize ); + } + } + +// --------------------------------------------------------- +// CMsgIconControl::BitmapSize +// +// Return the size of the icon +// --------------------------------------------------------- +// +TSize CMsgIconControl::BitmapSize() + { + TSize size( 0, 0 ); + if ( iIcon ) + { + size = iIcon->Bitmap()->SizeInPixels(); + } + return size; + } + +// --------------------------------------------------------- +// CMsgIconControl::IconBitmapId +// --------------------------------------------------------- +// +TInt CMsgIconControl::IconBitmapId() const + { + return iFileBitmapId; + } + +// --------------------------------------------------------- +// CMsgIconControl::IconBitmapId +// --------------------------------------------------------- +// +void CMsgIconControl::HandleResourceChange( TInt aType ) + { + if ( aType == KAknsMessageSkinChange ) + { + // Reload the current icon. + TRAP_IGNORE( LoadIconL( iSkinId, + *iFileName, + iFileBitmapId, + iFileMaskId ) ); + } + } + +// --------------------------------------------------------- +// CMsgIconControl::Draw +// +// Draw the icon +// --------------------------------------------------------- +// +void CMsgIconControl::Draw( const TRect& aRect ) const + { + if ( iIcon && iIcon->Bitmap() ) + { + //Intersection of the drawing rect and icon rect + TRect i = Rect(); + i.Intersection( aRect ); + + //Top left corner of the intersection + TPoint tL2 = i.iTl; + + //The relative part of the icon rect to be drawn + i.Move( -Position().iX, -Position().iY ); + + if ( iIcon->Mask() ) + { + SystemGc().BitBltMasked( + tL2, + iIcon->Bitmap(), + i, + iIcon->Mask(), + ETrue ); + } + else + { + SystemGc().BitBlt( + tL2, + iIcon->Bitmap(), + i ); + } + } + } + +// End of File