--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/EikStd/coctlsrc/smileyimagedata.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2008 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: smiely engine class
+*
+*/
+
+#include <fbs.h>
+#include <bitdev.h>
+#include <bitstd.h>
+#include <AknIconUtils.h>
+#include <coeutils.h>
+#include <AknIconObserver.h>
+
+#include "smileymodel.h"
+#include "smileybmpobserver.h"
+#include "smileyiconrecord.h"
+#include "smileyimagedata.h"
+
+// ======== MEMBER FUNCTIONS ========
+// ---------------------------------------------------------------------------
+// CSmileyImageData::CSmileyImageData
+// ---------------------------------------------------------------------------
+//
+CSmileyImageData::CSmileyImageData( CSmileyBmpObserver* aObserver ) :
+ iObserver( aObserver )
+ {
+ if ( iObserver )
+ {
+ iObserver->SetImageData( this );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::~CSmileyImageData
+// ---------------------------------------------------------------------------
+//
+CSmileyImageData::~CSmileyImageData()
+ {
+ AknIconUtils::SetObserver( iBmp, NULL );
+ delete iBmp;
+ delete iMask;
+ delete iStaticBmp;
+ delete iStaticMask;
+ for ( TInt i( 0 ); i < iRefArray.Count(); i++ )
+ {
+ iRefArray[i]->SetImageData( NULL );
+ }
+ iRefArray.Reset();
+ iRefArray.Close();
+ delete iObserver;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::Bitmap
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CSmileyImageData::Bitmap()
+ {
+ return iBmp;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::Mask
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CSmileyImageData::Mask()
+ {
+ return iMask;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::CreateImageL
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::CreateImageL( const TDesC& aIconFileName, TImageInfo& aInfo )
+ {
+ DeleteImage();
+ CreateBmpAndMaskL( aIconFileName, aInfo );
+ if ( !iStaticBmp )
+ {
+ CreateStaticBmpAndMaskForAnimationL( aIconFileName, aInfo );
+ }
+ SetBitmapSize( iBmpSize, ETrue );
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::DeleteImage
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::DeleteImage()
+ {
+ AknIconUtils::SetObserver( iBmp, NULL );
+ delete iBmp;
+ iBmp = NULL;
+ delete iMask;
+ iMask = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::RefArrayCount
+// ---------------------------------------------------------------------------
+//
+TInt CSmileyImageData::RefArrayCount()
+ {
+ return iRefArray.Count();
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::AddToRefArray
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::AddToRefArray( CSmileyIcon* aNode )
+ {
+ for ( TInt i( 0 ); i < iRefArray.Count(); i++ )
+ {
+ if ( iRefArray[i] == aNode )
+ {
+ return;
+ }
+ }
+ iRefArray.Append( aNode );
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::RemoveFromaRefArray
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::RemoveFromRefArray( CSmileyIcon* aNode )
+ {
+ for ( TInt i( 0 ); i < iRefArray.Count(); i++ )
+ {
+ if ( iRefArray[i] == aNode )
+ {
+ iRefArray.Remove( i );
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::RefIcon
+// ---------------------------------------------------------------------------
+//
+CSmileyIcon* CSmileyImageData::RefIcon( TInt aIndex )
+ {
+ CSmileyIcon* icon( NULL );
+ if ( aIndex >= 0 && aIndex < iRefArray.Count() )
+ {
+ icon = iRefArray[aIndex];
+ }
+ return icon;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::Code
+// ---------------------------------------------------------------------------
+//
+TText CSmileyImageData::Code()
+ {
+ return iCode;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::SetCode
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::SetCode( TText aCode )
+ {
+ iCode = aCode;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::BitmapSize
+// ---------------------------------------------------------------------------
+//
+TSize CSmileyImageData::BitmapSize()
+ {
+ return iBmpSize;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::BitmapSize
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::SetBitmapSize( TSize aBmpSize, TBool aForceSet )
+ {
+ TBool sizeChanged = ( iBmpSize != aBmpSize );
+ iBmpSize = aBmpSize;
+ if ( sizeChanged || aForceSet )
+ {
+ if ( iBmp )
+ {
+ AknIconUtils::SetSize( iBmp, iBmpSize );
+ }
+ if ( iStaticBmp )
+ {
+ AknIconUtils::SetSize( iStaticBmp, iBmpSize );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::IsAnimationFinished
+// ---------------------------------------------------------------------------
+//
+TBool CSmileyImageData::IsAnimationFinished()
+ {
+ return ( iIsAnimation && iBmp == NULL );
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::IsAnimation
+// ---------------------------------------------------------------------------
+//
+TBool CSmileyImageData::IsAnimation()
+ {
+ return iIsAnimation;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::StoredBmp
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CSmileyImageData::StaticBmp()
+ {
+ return iStaticBmp;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::StoredMask
+// ---------------------------------------------------------------------------
+//
+CFbsBitmap* CSmileyImageData::StaticMask()
+ {
+ return iStaticMask;
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::CreateBmpAndMaskL
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::CreateBmpAndMaskL( const TDesC& aIconFileName,
+ TImageInfo& aInfo )
+ {
+ iIsAnimation = aInfo.iIsAnimation;
+ if ( aInfo.iMaskId != 0 )
+ {
+ AknIconUtils::CreateIconL( iBmp, iMask, aIconFileName, aInfo.iBmpId,
+ aInfo.iMaskId );
+ }
+ else
+ {
+ AknIconUtils::CreateIconL( iBmp, iMask, aIconFileName, aInfo.iBmpId,
+ aInfo.iBmpId );
+ }
+ if ( iIsAnimation )
+ {
+ AknIconUtils::SetObserver( iBmp, iObserver );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CSmileyImageData::CreateStaticBmpAndMaskForAnimationL
+// ---------------------------------------------------------------------------
+//
+void CSmileyImageData::CreateStaticBmpAndMaskForAnimationL(
+ const TDesC& aIconFileName, TImageInfo& aInfo )
+ {
+ if ( aInfo.iIsAnimation )
+ {
+ if ( aInfo.iStaticMaskId != 0 )
+ {
+ AknIconUtils::CreateIconL( iStaticBmp, iStaticMask, aIconFileName,
+ aInfo.iStaticBmpId, aInfo.iStaticMaskId );
+ }
+ else
+ {
+ AknIconUtils::CreateIconL( iStaticBmp, iStaticMask, aIconFileName,
+ aInfo.iStaticBmpId, aInfo.iStaticBmpId );
+ }
+ }
+ }
+
+