uifw/EikStd/coctlsrc/smileyimagedata.cpp
changeset 0 2f259fa3e83a
--- /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 );       
+            }
+        }
+    }
+
+