mulwidgets/mulcoverflowwidget/src/mulbaseelement.cpp
changeset 17 3eca7e70b1b8
parent 3 4526337fb576
--- a/mulwidgets/mulcoverflowwidget/src/mulbaseelement.cpp	Tue Feb 02 00:28:09 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2947 +0,0 @@
-/*
-* Copyright (c) 2007-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:  base element Implementation
- *
-*/
-
-//  Include Files
-// Class Headers
-#include "mulbaseelement.h"
-
-#include <AknUtils.h>
-// Alf Headers
-#include <alf/alfbatchbuffer.h>
-#include <alf/alfbrusharray.h>
-#include <alf/alfgradientbrush.h>
-#include <alf/alfviewportlayout.h>
-#include <alf/alftextvisual.h>
-#include <alf/alfimagevisual.h>
-#include <alf/alfutil.h>
-#include <alf/alftransformation.h>
-
-// Mul Headers
-#include "mul/mulmodelutility.h"
-#include "imulmodelaccessor.h"
-#include <mul/imulsliderwidget.h>
-#include <mul/mulevent.h>
-#include "mulassert.h"
-#include "mulleave.h"
-#include "mullog.h" //for logs
-
-// Local Cover Flow Headers
-#include "mulcoverflowcontrol.h"
-#include "mulcoverflowtemplate.h"
-
-namespace Alf
-    {
-//Internal base element structure implementation
-struct TMulBaseElementImpl
-    {        
-    
-    UString mEmptyText;       // empty text to be displayed when number of items is 0.
-	
-	int mPadding;            //Padding between item 
-    
-  	TMulCoverFlowItem mHighlightItemStruct;
-	TMulCoverFlowItem mItemStruct;
-	int mVisibleCount;
-    int	mScrollAnimationTime; // animation time for highlight transition set by the application.
-	bool mUiOn;    // true if in UiOnMode
-    
-    bool mTextVisible;  // not suppose to be displayed in template 4
-
-	
-	// To keep a pointer of iconFlow layout.Not owned, created at construction. 
-	// The below 4 layouts will never be null. No need to validate before using	
-	CAlfFlowLayout* mIconFlowLayout; 
-	CAlfLayout* mTextLayout;
-    CAlfFlowLayout* mVerticalFlow;
-    CAlfLayout* mSliderLayout ; // stores visual of the slider widget
-    
-    // Can be null when the template doesnt have counter.
-    CAlfTextVisual* mCounterVisual ;
-    CAlfTextVisual* mEmptyTextVisual;
-    
-    //Stores current slider opacity. 
-    float mSliderOpacity;
-    TItemScroll mScrollDir;
-    float mEmptyTextOpacity;
-    // whether to apply default fit mode(fitinside) or not. 
-    // if false apply default fit mode , else based on the image size.
-    bool mFitMode;
-    
-    // different visuals color properties
-    TMulVisualColorProperty mIconBgColor;
-    TMulVisualColorProperty mCounterColor;
-    TMulVisualColorProperty mTextColor;
-    TMulRotationProperty mRotation;
-
-	bool mChangeSize;
-	// whether user has swiped multiple times.
-	TNumberofSwipes mNumSwipes;
-	// total number of digits in counter visual at every highlight.
-	int mNumOfDigitsInCounter;
-	// marquee animation time
-	int mMarqueeAnimTime;
-	// Titletext extents
-	TSize mTitleExt;
-	// Detailtext extents
-	TSize mDetailExt;
-	//Dummy text visual for getting text extents
-	CAlfTextVisual* mDummyVisual;
-	bool mIsMirrored;
-	
-	//Constructor of the structure
-	TMulBaseElementImpl()
-		{
-		//Intialisation
-		mPadding                 = -1;   
-		mNumOfDigitsInCounter    = -1;
-		mVisibleCount            = 0;
-		mScrollAnimationTime     = 200;
-		mEmptyText 	= "";
-		mCounterVisual = NULL;
-		mIconFlowLayout = NULL;
-		mTextLayout = NULL;
-	    mVerticalFlow = NULL;
-	    mSliderLayout = NULL;
-	    mEmptyTextVisual = NULL;
-	    mSliderOpacity = 0.0f;
-	    mTextVisible   = true;
-	    mScrollDir = EItemNoDirection;
-	    mEmptyTextOpacity = 0.0f;
-	    mFitMode = false;
-	    mUiOn = false;
-	    mChangeSize = false;
-	    mNumSwipes = ESingleSwipe;
-	    mMarqueeAnimTime = 0;
-	    mDummyVisual = NULL;
-	    mIsMirrored = false;
-		}
-	~TMulBaseElementImpl()
-		{		
-		}
-    }; //end of the structure
-
-
-// ---------------------------------------------------------------------------
-// MulBaseElement
-// ---------------------------------------------------------------------------
-//
-MulBaseElement::MulBaseElement( CAlfWidgetControl& aControl,
-			                    const char* aName )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MulBaseElement");
-    mData.reset( new (EMM)TMulBaseElementImpl );
-    //Call the base class method      
-    construct( aControl,aName );
-    CreateBaseLayoutStructure();
-    (static_cast<MulCoverFlowControl&>(aControl)).UpdateBaseElement(this);
-    if (AknLayoutUtils::LayoutMirrored())
-    	{
-    	mData->mIsMirrored = true;
-    	}
-    else
-		{
-		mData->mIsMirrored = false;
-		}
-    }
-
-// ---------------------------------------------------------------------------
-// ~MulBaseElement
-// ---------------------------------------------------------------------------
-//	
-MulBaseElement::~MulBaseElement()
-    {
-    // Nothing to delete .
-    }
-
-// ---------------------------------------------------------------------------
-// accept
-// ---------------------------------------------------------------------------
-//	
-bool MulBaseElement::accept( CAlfWidgetControl& /*aControl*/,
-		                     const TAlfEvent& aEvent ) const
-     {
-     MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::accept");
-     uint eventID; 
-     if(!aEvent.IsCustomEvent())
-       {
-       return false;
-       }
-    eventID = aEvent.CustomParameter();
-
-    //Events handled by the base element
-	if( eventID == ETypeHighlight 
-			|| eventID == EEventWidgetInitialized 
-			|| eventID == ETypePrimaryValueChange )
-        {
-        return true;
-        }
-    else
-        {
-        return false;	
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// offerEvent
-// ---------------------------------------------------------------------------
-//	
-AlfEventStatus MulBaseElement::offerEvent( CAlfWidgetControl& aControl,
-			const TAlfEvent& aEvent )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::offerEvent");
-    if ( !accept( aControl, aEvent ) )
-        {
-        //return false;
-		return EEventNotHandled;
-        }
-    
-    uint eventID = aEvent.CustomParameter();
-    
-    MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
-      
-    if( eventID == EEventWidgetInitialized )
-        {
-        // some of the member variable needs to be reset
-        // to support dynamic template change with model change.
-        mData->mNumOfDigitsInCounter = -1;
-        
-        UpdateTextAndCounter();
-        CalculatePadding();
-        ArrangeItems();
-		// Show empty text if coverflow is empty
-	    int totalModelCount = coverflowControl->TotalModelCount();
-	    IMulModelAccessor* model = coverflowControl->ModelAccessor(); 
-	    if( (totalModelCount <= 0) || (model == NULL))
-	        {
-	        ShowEmptyText( true );
-	        return EEventConsumed;
-	        }
-	    else
-	    	{
-	    	ShowEmptyText( false );
-	    	} 		
- 		return EEventConsumed;
-        }
-        
-    else if( eventID == ETypeHighlight )
-        {
-        // Update the text and counter values according to the new highlight
-        int newHighlight = coverflowControl->HighlightIndex(); 
-        int animationTime = aEvent.CustomEventData();
-        animationTime = animationTime > 0 ? animationTime : mData->mScrollAnimationTime;
-
-        if(mData->mScrollDir != EItemNoDirection)
-            {
-            if(coverflowControl->IsFastScrollMode())
-	            {
-	            animationTime = coverflowControl->FastScrollTransitionTime();
-	            SetHighlight(newHighlight,animationTime);   	
-	            }
-            else
-	            {
-	            SetHighlight(newHighlight,animationTime );   	
-	            }
-            }
-        else
-            {
-            //@TODO: update all the items 
-            animationTime = KZeroAnimation;
-            SetHighlight(newHighlight,animationTime);    
-            }
-        
-        UpdateTextAndCounter(animationTime);
-            
-		return EEventConsumed;
-        }
-    else if( eventID == ETypePrimaryValueChange )
-    	{
- 		IMulSliderModel* mulSliderModel = coverflowControl->GetSliderModel();
- 		if( mulSliderModel )
-	        {
-	    	int primaryValue = mulSliderModel->PrimaryValue();
-	  	    coverflowControl->SetHighlightIndex( primaryValue , false);
-    	    }
-		return EEventConsumed;
-    	}
-    	 	
-	return EEventNotHandled;    
-    }
-
-// ---------------------------------------------------------------------------
-// setActiveStates
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::setActiveStates( unsigned int /*aStates*/ )
-    {
-    //No implementation required
-    }
-
-//----------------- Creating the visuals and layout structure ----------------
-
-
-// ---------------------------------------------------------------------------
-// CreateBaseLayoutStructure
-// ---------------------------------------------------------------------------
-//	
-void  MulBaseElement::CreateBaseLayoutStructure()
-	{
-	THROW_IF_LEAVES
-	( 
-	 MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateBaseLayoutStructure");
-	   
-	 CAlfLayout* main = CAlfLayout::AddNewL(control()); 
-    
-     // set this flag, to recieve layout change events ,that are handled 
-	 // by the ovverriden VisualLayoutUpdated method of the alfwidgetcontrol.
-     main->SetFlags( EAlfVisualFlagLayoutUpdateNotification );
-     main->SetTagL( mainlayout );
-     main->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-	 main->SetClipping(ETrue); 
-     
-    CAlfDeckLayout* deckLayout = CAlfDeckLayout::AddNewL( (CAlfControl &)control(),main);
-    deckLayout->SetTagL( decklayout );
-    deckLayout->SetFlag( EAlfVisualFlagManualLayout );
-    
-    CAlfGradientBrush* deckBrush = CAlfGradientBrush::NewL( control().Env() );
-    // Set the brush colour
-    deckBrush->SetColor( KRgbBlack );
-    deckLayout->EnableBrushesL( ETrue );
-    // Apply brush and set the opacity .
-    deckLayout->Brushes()->AppendL( deckBrush, EAlfHasOwnership ); 
-    deckLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-	deckLayout->SetClipping(ETrue);
-    
-    
-    // Create a vertical flow layout which has two horizontal layouts 
-    mData->mVerticalFlow = CAlfFlowLayout::AddNewL((CAlfControl&)control(), deckLayout );
-
-    // Set the Layout Direction
-    mData->mVerticalFlow->SetFlowDirection( CAlfFlowLayout::EFlowVertical );
-    mData->mVerticalFlow->SetFlag( EAlfVisualFlagManualLayout );
-    mData->mVerticalFlow->SetTagL( verticalflowlayout );
-    mData->mVerticalFlow->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-
-    // Create flow layout,all the item visuals are added to this layout.
-    // make this layout as the child to the vertical flow layout at index 1.
-    mData->mIconFlowLayout = CAlfFlowLayout::AddNewL( (CAlfControl&)control(), mData->mVerticalFlow );
-   
-    // Set the Layout Direction
-    mData->mIconFlowLayout->SetFlowDirection( CAlfFlowLayout::EFlowHorizontal );
-    mData->mIconFlowLayout->SetTagL( iconflowlayout );
-    mData->mIconFlowLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-    
-    // stores visuals of all the items(text visuals) 
-    mData->mTextLayout = CAlfLayout::AddNewL((CAlfControl&)control(),mData->mVerticalFlow);
-    mData->mTextLayout->SetTagL( textflowlayout );
-    mData->mTextLayout->SetFlag(EAlfVisualFlagIgnorePointer);
-    mData->mTextLayout->SetFlag( EAlfVisualFlagManualLayout );    
-    mData->mTextLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-    //Add main layout to the base visual tree
-    addVisualTree( main, KInitialvalueZero );
-    
-     );       
-	}
-
-// ---------------------------------------------------------------------------
-// SetDefaultSize
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetDefaultSize( TSize aSize )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetDefaultSize");
-	CAlfLayout* main  = (CAlfLayout*)findVisual( KMainLayoutIndex );
-	main->SetSize(aSize );
-	CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
-	deckLayout.SetSize(aSize);
-	CAlfVisual* backgroundVisual = deckLayout.FindTag(backgroundvisual);
-    if(backgroundVisual)
-		{
-		backgroundVisual->SetSize(aSize);				
-		}	
-	if( mData->mEmptyTextVisual && mData->mEmptyTextOpacity == 1 )
-		{
-		mData->mEmptyTextVisual->SetSize(aSize);		
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// TextAnchorLayout
-// ---------------------------------------------------------------------------
-//	        
-CAlfLayout& MulBaseElement::TextLayout()
-	{
-	__MUL_ASSERT( mData->mTextLayout != 0,KNullPointer);
-	return *mData->mTextLayout;
-	}
-
-  
-//----------------------Empty text related visualisation---------------------
-// ---------------------------------------------------------------------------
-// SetEmptyText
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetEmptyText( const UString& aDefaultText )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetEmptyText");
-
-	mData->mEmptyText = aDefaultText;
-	int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
-
-	if( mData->mEmptyTextVisual )
-		{
-		THROW_IF_LEAVES
-		 ( 
-		  TBuf<KTempBufferSize> desc; 
-		   
-		  MulModelUtility::ConvertUStringToTDes(mData->mEmptyText, desc);   
-		  mData->mEmptyTextVisual->SetTextL(desc);
-		 );
-		}
-		
-    if( totalModelCount <= KInitialvalueZero )
-        {
-        ShowEmptyText( true );
-        }
-	}
-
-// ---------------------------------------------------------------------------
-// ShowEmptyText
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::ShowEmptyText( bool aShowText  )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowEmptyText");
-    	
-     // If the application has not set any empty text , then no need to do anything 
-    if( mData->mEmptyText.isEmpty() )
-    	{
-    	if( aShowText )
-    		{
-    		ShowHideVisualsForEmptyText(false);
-    		HandleSizeChangeOnMain();
-    		}
-    	else
-    		{
-    		ShowHideVisualsForEmptyText(true);
-    		}
-    	return;
-    	}
-    	
-    if( aShowText )
-    	{
-    	if( !mData->mEmptyTextVisual )
-    		{
-    		CreateEmptyTextVisualisation();		
-    		}
-    		    	
-    	// This function is called twice only when an empty model is set and the app sets the empty text twice .	
-    	ShowHideVisualsForEmptyText(false);	
-    	if( mData->mEmptyTextOpacity == KBackGroundOpacity && mData->mEmptyTextVisual )
-    		{
-	    	mData->mEmptyTextVisual->SetOpacity(KHighlightOpacity);
-	    	mData->mEmptyTextOpacity = KHighlightOpacity;
-	    	}
-    	HandleSizeChangeOnMain();
-	    	
-    	}
-    else
-    	{
-    	ShowHideVisualsForEmptyText(true);
-    	if( mData->mEmptyTextVisual && mData->mEmptyTextOpacity == 1 )
-    		{
-    		mData->mEmptyTextVisual->SetOpacity(KBackGroundOpacity);
-    		mData->mEmptyTextOpacity = KBackGroundOpacity;
-    		}
-    	}
-    }
- 
-// ---------------------------------------------------------------------------
-// HandleSizeChangeOnMain()
-// ---------------------------------------------------------------------------
-// 
-void  MulBaseElement::HandleSizeChangeOnMain()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleSizeChangeOnMain");
-
-	IMulModelAccessor* model = ((MulCoverFlowControl*)&control())->ModelAccessor(); 
-	CAlfLayout* main  = (CAlfLayout*)findVisual( KMainLayoutIndex );
-	TSize topLayoutSize = main->Size().Target().AsSize(); ;
-	
-	if( !model )
-		{
-		if (topLayoutSize != TSize(0,0))
-			{
-			SetDefaultSize(topLayoutSize);
-			}
-		else
-			{
-			SetDefaultSize( control().DisplayArea().Size() );
-			}
-			
-		}
-	else
-	    {
-	    SetDefaultSize(topLayoutSize);		
-	    }
-	}
-
-// ---------------------------------------------------------------------------
-// IsEmptyText
-// ---------------------------------------------------------------------------
-// 
-bool  MulBaseElement::IsEmptyText()
-	{
-	return !(mData->mEmptyText.isEmpty());
-	}  
-// ---------------------------------------------------------------------------
-// ShowHideVisualsForEmptyText
-// ---------------------------------------------------------------------------
-// 
-void  MulBaseElement::ShowHideVisualsForEmptyText( bool aShow )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowHideVisualsForEmptyText");
-
-	if( !aShow )
-		{
-		SetTextVisualOpacity( KBackGroundOpacity );
-		SetCounterTextOpacity( KBackGroundOpacity);   
-		}
-	else 
-		{
-		if(mData->mTextVisible)
-			{
-			SetTextVisualOpacity( KHighlightOpacity );	
-			}		
-		// if ui on off template is enabled then reset the counter 
-		// opacity depending on the current ui on/off value
-		if( Template2D()->IsUiOnOffFlagEnabled() )
-			{
-			ResetUiOnOff();	
-			}
-		else
-			{
-			SetCounterTextOpacity( KHighlightOpacity);   
-			}	
-		}
-	}
-	
-// ---------------------------------------------------------------------------
-// CreateEmptyTextVisualisation
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::CreateEmptyTextVisualisation() 
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateEmptyTextVisualisation");
- 
-	if( !mData->mEmptyTextVisual )
-		{
-		THROW_IF_LEAVES
-		 ( 
-		 	CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
-		    mData->mEmptyTextVisual = CAlfTextVisual::AddNewL(control(),main);
-		    
-		    TBuf<KTempBufferSize> desc; 
-		   
-		    MulModelUtility::ConvertUStringToTDes(mData->mEmptyText, desc);   
-		    mData->mEmptyTextVisual->SetTextL(desc);
-		    mData->mEmptyTextVisual->SetTagL(KEmptyText);
-		    mData->mEmptyTextVisual->SetWrapping(CAlfTextVisual::ELineWrapBreak);
-		       
-		    TInt fontId =control().Env().TextStyleManager()
-				.CreatePlatformTextStyleL(EAknLogicalFontSecondaryFont,-1);	
-		    // check if user has set any different color for text.
-			if (mData->mTextColor.mIsColorSet)
-				{
-				// apply the color set by the application
-				mData->mEmptyTextVisual->SetColor(mData->mTextColor.mColor);
-				}
-			else
-				{
-				// apply the default color
-				mData->mEmptyTextVisual->SetColor(KRgbWhite);
-				}
-			
-			mData->mEmptyTextVisual->SetLineSpacing(KTextRowsz);
-			mData->mEmptyTextVisual->SetTextStyle(fontId);
-		    mData->mEmptyTextVisual->SetFlag(EAlfVisualFlagIgnorePointer);
-		 );
-		
-		}
-    }
-
-
-
-// ---------------------------------------------------------------------------
-// DisplayIndicatorIcon
-// ---------------------------------------------------------------------------
-// 
-void MulBaseElement::DisplayIndicatorIcon(const MulVisualItem & aVisualItem, int aIndex)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::DisplayIndicatorIcon");
-    CAlfDeckLayout& layout = static_cast<CAlfDeckLayout&>(mData->mIconFlowLayout->Visual(aIndex));
-    CAlfImageVisual* visual =static_cast<CAlfImageVisual*>(layout.FindTag(KCoverflowIndicator));    
-    IMulVariantType* varData = aVisualItem.Attribute(mulvisualitem::KMulIndicator2); 
-    
-    if(varData)
-        {
-        if(!visual)
-            {
-            visual = CreateIndicatorIconVisual(layout);   
-            }
-        ((MulCoverFlowControl*)&control())->DoSetImage(varData,visual);
-        visual->ClearFlag(EAlfVisualFlagIgnorePointer);
-        }
-
-    else if(visual)
-        {
-        CAlfTextureManager& textureMgr = control().Env().TextureManager();
-        TAlfImage image = TAlfImage(textureMgr.BlankTexture()); 
-        visual->SetImage(image); 
-        visual->SetFlag(EAlfVisualFlagIgnorePointer);
-        }
-
-    }
- 
-// ---------------------------------------------------------------------------
-// CreateIndicatorIconVisual
-// ---------------------------------------------------------------------------
-//    
-CAlfImageVisual*  MulBaseElement::CreateIndicatorIconVisual(CAlfDeckLayout& aLayout) 
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateIndicatorIconVisual");
-    CAlfImageVisual* indicatorVisual = CAlfImageVisual::AddNewL(control(), &aLayout);
-    indicatorVisual->SetTagL(KCoverflowIndicator); 
-    SetIndicatorDimensions(*indicatorVisual);
-    indicatorVisual->SetScaleMode(CAlfImageVisual::EScaleNormal);
-    
-    return indicatorVisual;
-    }
-
-// ---------------------------------------------------------------------------
-// SetIndicatorDimensions
-// ---------------------------------------------------------------------------
-//  
-void  MulBaseElement::SetIndicatorDimensions(CAlfImageVisual& aIndicatorVisual)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetIndicatorDimensions");
-    TMulCoverFlowItem indicatorDimensions = Template2D()->IndicatorDimension();
-    aIndicatorVisual.SetPos(TAlfRealPoint(indicatorDimensions.posx,indicatorDimensions.posy));
-    aIndicatorVisual.SetSize(TAlfRealSize(indicatorDimensions.width ,indicatorDimensions.height));    
-    }
-    
-// ---------------------------------------------------------------------------
-// StoreVisualDimensions
-// ---------------------------------------------------------------------------
-// 
-void MulBaseElement::StoreVisualDimensions( TMulCoverFlowItem aHighlightItemDimensions, TMulCoverFlowItem aNonHighlightItemDimensions,int aVisibleIconCount )
- 	{
- 	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StoreVisualDimensions");
- 	mData->mHighlightItemStruct = aHighlightItemDimensions;
-	mData->mItemStruct = aNonHighlightItemDimensions;
-	mData->mVisibleCount = aVisibleIconCount;
-	((MulCoverFlowControl*)&control())->StoreVisibleItemCount(mData->mVisibleCount);
-	if (mData->mVisibleCount > 1)
-		{
-		mData->mChangeSize = true;	
-		}
-	else
-		{
-		mData->mChangeSize = false;	
-		}
- 	}
-
-// ---------------------------------------------------------------------------
-// StoreTextVisibility
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::StoreTextVisibility( bool aIsTextVisible )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StoreTextVisibility");
-	mData->mTextVisible = aIsTextVisible;
-	}
-
-
-// ---------------------------------------------------------------------------
-// IsTextVisibile
-// ---------------------------------------------------------------------------
-//  
-bool MulBaseElement::IsTextVisibile( )const
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::IsTextVisible");
-    return mData->mTextVisible ;
-    }
-
-
-// ---------------------------------------------------------------------------
-// OrientationChange
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::OrientationChange()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::OrientationChange");
-
-	mData->mVerticalFlow->SetOpacity(0);
-	if (mData->mDummyVisual)
-		{
-		// deleting since the textextents being zero.
-		mData->mDummyVisual->RemoveAndDestroyAllD();
-		mData->mDummyVisual = NULL;
-		}
-
-	// update the attribute of visuals
-	Template2D()->CreateVisualisation(((MulCoverFlowControl*)&control())->IsLandscape(),true);
-    
-    CalculatePadding();    
-    CreateAndInitializeVisuals(true);
-	
-	// Redraw the visuals after orientation changes
-	int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();    		
-	if( totalModelCount == 0 )
-		{
-		CAlfLayout* main  = (CAlfLayout*)findVisual( KMainLayoutIndex );
-		SetDefaultSize(main->Size().ValueNow().AsSize());		
-		}
-	ArrangeItems();
-	SetNewCounterPosition(Template2D()->CounterDimensions(),true);
-	UpdateRotation();
-	mData->mVerticalFlow->SetOpacity(1);   
-	}
-
-
-//------------------Counter and Text related----------------------------------
-
-// ---------------------------------------------------------------------------
-// CreateCounterVisual
-// ---------------------------------------------------------------------------
-// 
-CAlfTextVisual& MulBaseElement::CounterVisual()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CounterVisual");
-   	__MUL_ASSERT( mData->mVerticalFlow != 0,KNullPointer);
-
-    mData->mCounterVisual = &CreateTextVisual(KCoverflowCounter,*mData->mVerticalFlow);
-    mData->mCounterVisual->SetAlign(EAlfAlignHCenter,EAlfAlignVCenter);
-	return *mData->mCounterVisual;
-    }
-
-// ---------------------------------------------------------------------------
-// CreateVisual
-// ---------------------------------------------------------------------------
-// 
-CAlfTextVisual& MulBaseElement::CreateTextVisual(const TDesC8& aName, 
-        CAlfLayout& aLayout) 
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateTextVisual");
-	
-	CAlfTextVisual* textVisual =static_cast<CAlfTextVisual*>(aLayout.FindTag(aName));
-
-	if(textVisual == NULL)
-	   {
-	   THROW_IF_LEAVES
-	        (
-	   		textVisual = CAlfTextVisual::AddNewL( (CAlfControl &)control(),&aLayout); 
-	        textVisual->SetTagL(aName);
-	        ); 
-	    textVisual->SetFlag(EAlfVisualFlagIgnorePointer);
-	    textVisual->SetFlag(EAlfVisualFlagClipping);
-	   }
-	return *textVisual;  
-	}
-    
-    
-// ---------------------------------------------------------------------------
-// UpdateTextAndCounter
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::UpdateTextAndCounter(int animationTime)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateTextAndCounter");
-    
-	UpdateTextValue(animationTime);	
-    
-    //After highlight is changed then the counter text should be updated
-    SetCounterText();
-    } 
-    
-// ---------------------------------------------------------------------------
-// SetCounterTextOpacity
-// ---------------------------------------------------------------------------
-//  
-void MulBaseElement::SetCounterTextOpacity( int aOpacity)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetCounterTextOpacity");
-    if(mData->mCounterVisual)
-        {
-        mData->mCounterVisual->SetOpacity( aOpacity ); 		
-        }	    
-	}
-
-    
-// ---------------------------------------------------------------------------
-// ResetUiOnOff
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::ResetUiOnOff(int aTransitionTime)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ResetUiOnOff");
-    
-	int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
-    if(mData->mCounterVisual && Template2D() && Template2D()->IsUiOnOffFlagEnabled() && totalModelCount>0 )
-        {
-        int opacity = mData->mUiOn? KHighlightOpacity: KBackGroundOpacity;
-        mData->mCounterVisual->SetOpacity( TAlfTimedValue(opacity,aTransitionTime)  ); 
-        // Every time In template4 Ui on off mode toggles we should set the enable holding flag 
-		// to gesture helper to recieve the hold events.
-		((MulCoverFlowControl*)&control())->SetHoldingEnabled(); 
-        }
-    } 
-    
-// ---------------------------------------------------------------------------
-// UIOnOffMode
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::UIOnOffMode(bool aUiOn, int aTransitionTime)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UIOnOffMode");
-      
-    mData->mUiOn = aUiOn;
-    ResetUiOnOff( aTransitionTime );
-    }
-    
-// ---------------------------------------------------------------------------
-// IsUiOnMode
-// ---------------------------------------------------------------------------
-//  
-bool MulBaseElement::IsUiOnMode()
-	{
-    return mData->mUiOn;	
-	}
-
-
-// ---------------------------------------------------------------------------
-// SetTextVisualOpacity
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetTextVisualOpacity( int aOpacity , int aTransitionTime )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetTextVisualOpacity"); 
-	if(mData->mTextLayout)
-		{
-    	mData->mTextLayout->SetOpacity(TAlfTimedValue (aOpacity,aTransitionTime));
-    	}	
-	}
-
-// ---------------------------------------------------------------------------
-// UpdateTextValue
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::UpdateTextValue(int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::UpdateTextValue");
-	if( !mData->mTextVisible )
-    	{
-    	return;
-    	}
-    	
-	IMulModelAccessor* modelAccessor = ((MulCoverFlowControl*)&control())->ModelAccessor();
-	int highlightindex = static_cast<MulCoverFlowControl*>(&control())->HighlightIndex();
-    
-	if(highlightindex>=0  )
-        {
-        //set text to title
-        try
-            {
-			const MulVisualItem& item = modelAccessor->Item(highlightindex);
-			IMulVariantType* varData = item.Attribute(mulvisualitem::KMulTitle);
-            MUL_LOG_INFO("MUL::UpdateTextValue::UpdateTiltle");
-            SetTextToVisual( mulvisualitem::KMulTitle, varData  ); 
-            
-            // SetVirtualSize if required.
-            SetVirtualViewPortSize(mulvisualitem::KMulTitle);  
-            }
-        catch(...)
-            {
-            IMulVariantType* varData = NULL;
-            SetTextToVisual( mulvisualitem::KMulTitle, varData  );
-            }
-         
-         //set text to detail
-         try
-            {
-			const MulVisualItem& item = modelAccessor->Item(highlightindex);
-			IMulVariantType* varData = item.Attribute(mulvisualitem::KMulDetail);
-            MUL_LOG_INFO("MUL::UpdateTextValue::UpdateDetail");
-            SetTextToVisual( mulvisualitem::KMulDetail, varData );
-            
-            // SetVirtualSize if required.
-            SetVirtualViewPortSize(mulvisualitem::KMulDetail);  
-            }
-        catch(...)
-            {
-            IMulVariantType* varData = NULL;
-            SetTextToVisual( mulvisualitem::KMulDetail,varData );
-            } 
-        
-        // Cancel if any command is in process before start marquee.
-        CancelAllCommands();
-        
-        // Before orientaion change stop marquee on the text
-        if(!((static_cast<MulCoverFlowControl&>(control())).IsFastScrollMode())) 
-            {            
-            control().Env().Send(
-                TAlfCustomEventCommand(ECustomEventMarqueeStart, 
-                &control()), KMarqueeTime1000 + aAnimationTime);
-            
-            }
-        }
-	}
-// ---------------------------------------------------------------------------
-// SetTextToVisual
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetTextToVisual( mulvisualitem::TVisualAttribute aName,IMulVariantType* aText )
-	{
-	MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::SetTextToVisual");
-
-	if(mData->mTextLayout)
-		{
-		CAlfTextVisual* textVisual = 
-			static_cast<CAlfTextVisual*> (mData->mTextLayout->FindTag( IdToTag(aName) ));
-
-		if(textVisual)
-			{
-			if ( aText )
-				{  
-				// set text to visual
-				THROW_IF_LEAVES
-					(
-					MUL_LOG_INFO("MUL::SetTextToVisual::Set New Data");
-					textVisual->SetTextL(aText->DesC());
-					textVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
-					);
-				    // A workaround till the text visual starts giving the correct text extents value.
-		            if(!mData->mDummyVisual)
-		                {
-		                mData->mDummyVisual = CAlfTextVisual::AddNewL(control(), NULL);
-		                mData->mDummyVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
-		                mData->mDummyVisual->SetOpacity(0);
-		                mData->mDummyVisual->SetFlags(EAlfVisualFlagIgnorePointer);
-		                }
-		            
-		            // Setting the style same as our text visual.
-		            mData->mDummyVisual->SetTextStyle(textVisual->TextStyle()); 
-		            mData->mDummyVisual->SetTextL(aText->DesC()); // Setting the text
-		            	        
-		            if(aName == mulvisualitem::KMulDetail)
-		                {
-		                mData->mDetailExt = mData->mDummyVisual->TextExtents();
-		                }
-		            else
-		                {
-		                mData->mTitleExt = mData->mDummyVisual->TextExtents();
-		                }
-				}
-			else
-				{
-				// reset to null value .
-				THROW_IF_LEAVES
-					(
-					textVisual->SetTextL(_L(""));
-					);
-				}
-			}
-		else
-			{
-			mData->mTextLayout->SetOpacity(TAlfTimedValue(KBackGroundOpacity,0));   
-			}   
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// SetVirtualViewPortSize()
-// ---------------------------------------------------------------------------
-//    
-void MulBaseElement::SetVirtualViewPortSize(mulvisualitem::TVisualAttribute aName)
-    {
-    MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::SetVirtualViewPortSize");
-	CAlfViewportLayout* viewportLayout = NULL ;
-	CAlfTextVisual* text = NULL ;
-	TSize textExtent ;
-	TSize parentSize;
-	if (aName == mulvisualitem::KMulDetail)
-	    {
-	    viewportLayout = static_cast<CAlfViewportLayout*>(
-	            mData->mTextLayout->FindTag(KDetailViewPortLayout));
-	    if(!viewportLayout)
-	        {
-	        return; // return if no viewport
-	        }
-        textExtent = mData->mDetailExt;
-        parentSize = Template2D()->DetailWindowSize();
-	          
-	    }
-	else
-	    {
-	    viewportLayout = static_cast<CAlfViewportLayout*>(
-	            mData->mTextLayout->FindTag(KTitleViewPortLayout));
-	    if(!viewportLayout)
-	        {
-	        return; // return if no viewport
-	        }
-       textExtent = mData->mTitleExt;
-       parentSize = Template2D()->TitleWindowSize();
-	        
-	    }
-	text = static_cast<CAlfTextVisual*>(
-	        viewportLayout->FindTag( IdToTag(aName) ));
-	if(!text)
-	    {
-	    return; // if text visual is not found we will not set viewportsize.
-	    }
-	
-	viewportLayout->SetViewportPos((TAlfRealPoint(0, 0)), 0);
-    viewportLayout->SetVirtualSize(
-            (TAlfRealPoint(parentSize.iWidth, parentSize.iHeight)),0);   
-	
-	//Tollerance is 15 pixel, it might happen that
-	// the text is big but while wrapping it not filling the whole
-	// width of the layout because the remaining space is less to
-	// accomodate a character.
-	// As for QFN_PRIMARY the max character width is 15 pixel
-	// so I am keeping tollerance as 15 
-	// @TODO: Insted of hard coding to 15 pixel use max charecter 
-	// width for QFN_PRIMARY.
-	if ((parentSize.iWidth - textExtent.iWidth) > 15)
-		{
-		text->SetAlign(EAlfAlignHCenter, EAlfAlignVCenter); 	
-		}
-	else
-		{
-		text->SetAlign(EAlfAlignHLocale,EAlfAlignVCenter);
-		}
-    }
-
-// ---------------------------------------------------------------------------
-// StartMarquee()
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::StartMarquee(mulvisualitem::TVisualAttribute aName)
-    {
-    MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::StartMarquee");
-    // start marquee.
-    int widthOffScreen = 0;
-    CAlfViewportLayout* viewportLayout = NULL ;
-    CAlfTextVisual* text =  NULL ;
-	TSize textExtent ;
-	TSize parentSize;
-	int maxCharWidth ;
-	if (aName == mulvisualitem::KMulDetail)
-        {
-        viewportLayout =static_cast<CAlfViewportLayout*>(
-                mData->mTextLayout->FindTag(KDetailViewPortLayout));
-        if(!viewportLayout)
-            {
-            return;// return if no viewport
-            }                  
-       textExtent = mData->mDetailExt;
-       parentSize = Template2D()->DetailWindowSize();
-       maxCharWidth = Template2D()->DetailMaxCharWidth();         
-        }
-    else
-        {
-        viewportLayout = static_cast<CAlfViewportLayout*>(
-                mData->mTextLayout->FindTag(KTitleViewPortLayout));
-        if(!viewportLayout)
-            {
-            return;// return if no viewport
-            }
-       textExtent = mData->mTitleExt;
-       parentSize = Template2D()->TitleWindowSize();
-       maxCharWidth = Template2D()->TitleMaxCharWidth();
-        }
-	text = static_cast<CAlfTextVisual*>(
-	        viewportLayout->FindTag( IdToTag(aName) ));
-	if(!text)
-	    {
-	    return; // if no text.
-	    }
-	
-    text->SetWrapping(CAlfTextVisual::ELineWrapManual);
-   
-    widthOffScreen= textExtent.iWidth - parentSize.iWidth;
-    int nDbMaxChars = (widthOffScreen/(2*maxCharWidth)) + 1;
-	          	        
-    // Schedule a update event, when the visual has finished marquee text scrolling.
-    if (aName == mulvisualitem::KMulDetail)
-        {
-        if (nDbMaxChars > 0 )
-            {
-			viewportLayout->SetVirtualSize(
-			        (TAlfRealPoint(textExtent.iWidth, parentSize.iHeight)),0);                  
-            // to avoid negative time value
-            mData->mMarqueeAnimTime = (nDbMaxChars*KMarqueeTime1000);
-            viewportLayout->SetViewportPos((TAlfRealPoint(widthOffScreen , 0)), 
-                    nDbMaxChars * KMarqueeTime1000);
-            // delay after completion of the marquee for titlte.
-            mData->mMarqueeAnimTime += KMarqueeTime1000;
-            control().Env().Send(
-                TAlfCustomEventCommand(ECustomEventMarqueeFinished, 
-                static_cast<CAlfControl*>(&(control()))), 
-                mData->mMarqueeAnimTime);
-            }
-        }
-    else
-        {
-        // reset the marquee animation time
-        mData->mMarqueeAnimTime = 0;  
-        if(nDbMaxChars > 0)
-            {
-			viewportLayout->SetVirtualSize(
-			        (TAlfRealPoint(textExtent.iWidth, parentSize.iHeight)),0);  
-            
-            // to avoid negative time value
-            mData->mMarqueeAnimTime = (nDbMaxChars*KMarqueeTime1000);  
-            viewportLayout->SetViewportPos((TAlfRealPoint(widthOffScreen , 0)), 
-                    nDbMaxChars * KMarqueeTime1000);
-            // delay after completion of the marquee for titlte.
-            mData->mMarqueeAnimTime += KMarqueeTime1000;
-            control().Env().Send(
-                TAlfCustomEventCommand(ECustomEventTitleMarqueeFinished, 
-                static_cast<CAlfControl*>(&(control()))), 
-                mData->mMarqueeAnimTime );
-            // delay before start the marquee for detail.
-            mData->mMarqueeAnimTime += KMarqueeTime1000;
-            }
-        control().Env().Send(
-            TAlfCustomEventCommand(ECustomEventDetailMarqueeStart, 
-            (&(control()))), mData->mMarqueeAnimTime );
-        }
-    } 	
-    
-// ---------------------------------------------------------------------------
-// StopMarquee()
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::StopMarquee(mulvisualitem::TVisualAttribute aName)
-    {
-    MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::StopMarquee");
-    CAlfViewportLayout* viewPortLayout = NULL; 
-    CAlfTextVisual* text = NULL;
-    TSize parentSize;
-    if (aName == mulvisualitem::KMulDetail)
-        {
-        viewPortLayout =
-            static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KDetailViewPortLayout));
-        parentSize = Template2D()->DetailWindowSize();
-        }
-    else
-        {
-        viewPortLayout =
-            static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KTitleViewPortLayout));
-        parentSize = Template2D()->TitleWindowSize();
-        }
-   if(!viewPortLayout)
-       {
-       return;
-       }
-   text = static_cast<CAlfTextVisual*>(viewPortLayout->FindTag( IdToTag(aName) ));
-   if(!text)
-       {
-       return;
-       }
-   const TDesC textDesc = text->Text();
-   if(!textDesc.Length())
-       {
-       return;
-       }
-  
-    viewPortLayout->SetViewportPos((TAlfRealPoint(0, 0)), 0);
-    viewPortLayout->SetVirtualSize((TAlfRealPoint(parentSize.iWidth, parentSize.iHeight)),0);   
-    text->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
-               
-    }
-
-// ---------------------------------------------------------------------------
-// CancelAllCommands
-// ---------------------------------------------------------------------------
-//  
-void MulBaseElement::CancelAllCommands( )
-    {
-    MUL_LOG_ENTRY_EXIT("Mul::MulBaseElement::CancelAllCommands");
-    CAlfWidgetControl * cntrl = &control();
-    control().Env().CancelCustomCommands( cntrl, ECustomEventMarqueeFinished);
-    control().Env().CancelCustomCommands( cntrl, ECustomEventMarqueeStart);
-    control().Env().CancelCustomCommands( cntrl, ECustomEventTitleMarqueeFinished);
-    control().Env().CancelCustomCommands( cntrl, ECustomEventDetailMarqueeStart); 
-    }
-
-// ---------------------------------------------------------------------------
-// SetCounterText
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::SetCounterText( int /*aTransitionTime*/ )
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetCounterText");
-	   
-    if( mData->mCounterVisual )
-    	{
-    	SetNewCounterPosition(Template2D()->CounterDimensions());
-    	int totalModelCount = ((MulCoverFlowControl*)&control())->TotalModelCount();
-    	int currHighlightIndex = ((MulCoverFlowControl*)&control())->HighlightIndex();
-		
-		// this code will work for model count upto 99999.
-		// done for performance improvement , no need to calculate 
-		// no of digits in highlight index and total model count.
-    	auto_ptr<HBufC> countbuffer(HBufC::NewL (12)); 
-      
-        //settin value for counter text visual
-        /// @bug critical:avanhata:7/7/2008 in arabic/hebrew the text should flow
-        /// from right to left (totalCount / highlight) => the string format needs
-        /// to come from a resource file, and use stringloader (and arabic indic number
-        /// conversion if stringloader does not do it automatically)
-        countbuffer->Des().AppendNum(currHighlightIndex+1);
-        countbuffer->Des().Append(KSlash);
-        countbuffer->Des().AppendNum(totalModelCount);
-
-        mData->mCounterVisual->SetTextL(*countbuffer);
-    	}    
-	}
-
-//--------------------------------------------------------------------------
-// SetNewCounterPosition
-//--------------------------------------------------------------------------
-//
-void MulBaseElement::SetNewCounterPosition( const TMulCoverFlowItem& aCounterLctDimension, bool aOrientationChanged)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetNewCounterPosition");
-	MulCoverFlowControl* coverflowControl = ((MulCoverFlowControl*)&control());
-	int totalModelCount = coverflowControl->TotalModelCount();
-	int currHighlightIndex = coverflowControl->HighlightIndex();
-    
-    if( totalModelCount > 0 && currHighlightIndex >= 0 )
-    	{
-    	int numOfDigits = NumberOfDigits(totalModelCount);
-    	numOfDigits += NumberOfDigits(currHighlightIndex);
-   		
-   		if( mData->mNumOfDigitsInCounter!= numOfDigits || aOrientationChanged )
-   			{
-        	mData->mNumOfDigitsInCounter = numOfDigits;
-        	int maxCharWidth = coverflowControl->Template2D()->CounterMaxCharWidth();
-        	int numOfPixels = numOfDigits*maxCharWidth + 20; // 10 is the tolerance.
-  
-        	int rightPosx =0; 
-        	int leftPosx = 0;
-        	// if mirroring is enabled(ie for RTL Language)
-        	if (mData->mIsMirrored)
-        		{
-        		CAlfLayout* main  = (CAlfLayout*)findVisual( KMainLayoutIndex );
-				TSize topLayoutSize = main->Size().Target().AsSize();
-        		rightPosx = topLayoutSize.iWidth - aCounterLctDimension.posx ;
-        		leftPosx = rightPosx - numOfPixels;
-        		}
-        	else
-        		{
-        		rightPosx = aCounterLctDimension.posx + aCounterLctDimension.width; 
-        		leftPosx = rightPosx - numOfPixels;
-        		}
-	   		mData->mCounterVisual->SetPos(TAlfRealPoint(leftPosx,aCounterLctDimension.posy));
-		    mData->mCounterVisual->SetSize(TAlfRealPoint(numOfPixels ,aCounterLctDimension.height));
-   			}
-    	}
-	}
-// ---------------------------------------------------------------------------
-// NumberOfDigits
-// ---------------------------------------------------------------------------
-//
-int MulBaseElement::NumberOfDigits(int aNumber)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::NumberOfDigits");
-    int num_digits = 0;
-    int number = aNumber;
-    do 
-    	{
-    	num_digits++;
-		number/=10;	
-    	}
-    while ( number > 0 );
-    
-    return 	num_digits;
-    }
-    	
-// ---------------------------------------------------------------------------
-// ApplyScaleMode
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::ApplyScaleMode( CAlfImageVisual& aImageVisual)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ApplyScaleMode");
-    CAlfImageVisual::TScaleMode scaleMode; 
-
-    if (mData->mFitMode)
-	    {
-	    if(aImageVisual.Image().HasTexture())
-	        {
-	        CAlfTexture* texture = const_cast<CAlfTexture*>(&aImageVisual.Image().Texture());
-	        TInt imageWidth = texture->Size().iWidth;
-	        TInt imageHeight = texture->Size().iHeight;
-	        // when animation is not complete sizes will not be correct.
-	        // so sizes are taken from template   
-	        if(imageWidth == 0 || imageHeight == 0) 
-		        {
-		        scaleMode = CAlfImageVisual::EScaleFitInside;
-		        }
-	        else if( imageWidth <= mData->mHighlightItemStruct.width && 
-	        	imageHeight <= mData->mHighlightItemStruct.height )
-	            {
-	            scaleMode = CAlfImageVisual::EScaleNormal;
-	            }
-	        else
-	            {
-		        scaleMode = CAlfImageVisual::EScaleFitInside;
-	            }
-	        }
-	    else
-	        {
-		    scaleMode = CAlfImageVisual::EScaleFitInside;
-	        }
-	    }
-	else
-		{
-		// Apply default scale mode
-		scaleMode = CAlfImageVisual::EScaleFitInside;
-		}
-     
-	if (aImageVisual.ScaleMode() != scaleMode) 
-		{
-	    aImageVisual.SetScaleMode( scaleMode ); 	
-		}
-	 ApplyBrushOnIcon( aImageVisual );	
-    }
-    
-// ---------------------------------------------------------------------------
-// ApplyBrushOnIcon
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::ApplyBrushOnIcon( CAlfImageVisual& aImageVisual )
-    { 
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ApplyBrushOnIcon");  
-    if( mData->mIconBgColor.mIsColorSet )
-    	{
-    	aImageVisual.EnableBrushesL(ETrue); 
-    	CAlfBrushArray* brushArray = aImageVisual.Brushes();
-	    if( (brushArray->Count()==0))
-	        {
-	        CAlfGradientBrush* brush = CAlfGradientBrush::NewL(aImageVisual.Env());     
-	    	brush->SetColor( mData->mIconBgColor.mColor );         
-	    	aImageVisual.Brushes()->AppendL( brush, EAlfHasOwnership );
-	        }
-	     else
-	     	{
-	     	CAlfGradientBrush* brush = static_cast<CAlfGradientBrush*>(&brushArray->At(0));
-	     	if ( brush->Color(0) != mData->mIconBgColor.mColor )
-		     	{
-		     	brush->SetColor( mData->mIconBgColor.mColor );  	
-		     	}
-	     	}
-    	}
-    }
-    
-// ---------------------------------------------------------------------------
-// RemoveBrushOnIcon
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::RemoveBrushOnIcon( CAlfImageVisual& aImageVisual )
-    {  
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RemoveBrushOnIcon"); 
-	CAlfBrushArray* brushArray = aImageVisual.Brushes();
-    if(brushArray && (brushArray->Count()!=0))
-        {
-     	brushArray->Remove(0);
-        }
-    }    
-
-// ---------------------------------------------------------------------------
-// Template2D
-// ---------------------------------------------------------------------------
-//
-MulCoverFlowTemplate*  MulBaseElement::Template2D()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::Template2D");
-	return ((MulCoverFlowControl*)&control())->Template2D(); 
-	}
-
-// ---------------------------------------------------------------------------
-// SetScrollAnimationTime
-// ---------------------------------------------------------------------------
-//	    
-void MulBaseElement::SetScrollAnimationTime( int aScrollAnimationTime )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetScrollAnimationTime");
-    mData->mScrollAnimationTime = aScrollAnimationTime;    
-    }
-   
-// ---------------------------------------------------------------------------
-// ArrangeItems
-// ---------------------------------------------------------------------------
-//	    
-void MulBaseElement::ArrangeItems()
-    { 
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ArrangeItems");
-		
-	control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced); 
-
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	int highlightIndex = mData->mVisibleCount;
-	CAlfImageVisual* imageVisual = NULL;	
-
-
-	int posX = mData->mHighlightItemStruct.posx - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
-	
-	TAlfRealPoint highlightItemSize(mData->mHighlightItemStruct.width, mData->mHighlightItemStruct.height);
-	TAlfRealPoint nonHighlightItemSize(mData->mItemStruct.width, mData->mItemStruct.height);
-
-	for (int i=0; i < totalVisual ; i++)  
-	    {
-	    CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);		
-		imageVisual = (CAlfImageVisual*)deckLayout.FindTag(KCoverflowIcon);
-	    
-		if (i != highlightIndex)
-			{
-			deckLayout.SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
-		 	deckLayout.SetSize(nonHighlightItemSize);
-		   	imageVisual->SetSize(nonHighlightItemSize);
-		   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			}
-		else
-			{
-		    deckLayout.SetPos( TAlfRealPoint(mData->mHighlightItemStruct.posx,mData->mHighlightItemStruct.posy));
-		 	deckLayout.SetSize(highlightItemSize);
-		   	imageVisual->SetSize(highlightItemSize);
-		   	posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
-			}
-		if (mData->mFitMode)
-			{
-			ApplyScaleMode(*imageVisual);
-			}
-	   	CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIndicator));    
-        if (indicatorVisual)
-            {
-            SetIndicatorDimensions(*indicatorVisual);    
-            }
-	
-	    }
-	    
-	control().Env().BatchBufferHandler().FlushBatchBuffer();            
-	control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);           
-	        
-    }
-
-// ---------------------------------------------------------------------------
-// SetScrollDir
-// ---------------------------------------------------------------------------
-//    
-void MulBaseElement::SetScrollDir( TItemScroll aScrollDir )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetScrollDir");
-    mData->mScrollDir = aScrollDir;   
-    }
-
-// ---------------------------------------------------------------------------
-// SetScrollDir
-// ---------------------------------------------------------------------------
-//    
-TItemScroll MulBaseElement::ScrollDir()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ScrollDir");
-    return mData->mScrollDir;   
-    }    
-
-// ---------------------------------------------------------------------------
-// CalculatePadding
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::CalculatePadding()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CalculatePadding");
-    
-    // The vector has already been created when the template was set. 
-     if( mData->mVisibleCount == 1)
-        {
-        if( mData->mHighlightItemStruct.posx > KInitialvalueZero )
-            {
-            mData->mPadding = mData->mHighlightItemStruct.posx;
-            }
-        else
-            {
-            // full screen template ..photos
-            // padding between the highlight and non highlight item is considered to be 2 pixel for 
-            // full screen template as only one visual is visible.
-            mData->mPadding = 2;
-            }
-        }
-   else
-        {
-        int startx = mData->mHighlightItemStruct.posx+ mData->mHighlightItemStruct.width;
-        mData->mPadding = mData->mItemStruct.posx - startx;
-        } 
-    }
-
-
-// ---------------------------------------------------------------------------
-// GetIconSize
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::GetIconSize( mulwidget::TLogicalTemplate aTemplateId, 
-		    mulvisualitem::TVisualAttribute aAttribute, int& aHeight, int& aWidth)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::GetIconSize");
-
-	bool isLandscape = ((MulCoverFlowControl*)&control())->IsLandscape();
-	switch(aTemplateId)
-		{
-		case mulwidget::KTemplate1:
-			{
-			MulCoverFlowTemplate1::GetIconSize(aAttribute,isLandscape,aHeight,aWidth);
-			}
-		break;
-		case mulwidget::KTemplate4:
-			{
-			MulCoverFlowTemplate4::GetIconSize(aAttribute,isLandscape,aHeight,aWidth);
-			}
-		break;
-		default:
-			{
-			// Invalid template id
-			// raise exception
-			__MUL_ASSERT(false,KInvalidTemplate);
-			}
-		break;
-		}
-	}
-
-
-// ---------------------------------------------------------------------------
-// ShowWidget
-// ---------------------------------------------------------------------------
-//		
-void MulBaseElement::ShowWidget( bool aShow, int aTransitionTime ) 
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowWidget");
-	float opacity ;
-	CAlfLayout* main = (CAlfLayout*) findVisual( KMainLayoutIndex );
-
-    if( aShow )
-		{
-		opacity =  KHighlightOpacity;
-		}
-	else
-		{
-		opacity =  KBackGroundOpacity;
-		}
-	main->SetOpacity(TAlfTimedValue(opacity,aTransitionTime));
-	}
-
-// ---------------------------------------------------------------------------
-// makeInterface
-// ---------------------------------------------------------------------------
-//	        
-IAlfInterfaceBase* MulBaseElement::makeInterface( const IfId& aType )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::makeInterface");
-    UString param(aType.mImplementationId);
-     
-    if(param == MulBaseElement::Type().mImplementationId )
-        {
-        return static_cast<IAlfElement*>(this);  
-        }    
-   else if(param == IAlfWidgetEventHandler::type().mImplementationId )
-        {
-        return static_cast<IAlfWidgetEventHandler*>(this);  
-        }
-    else 
-        {
-        return AlfElement::makeInterface(aType);    
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// setEventHandlerData
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::setEventHandlerData( const AlfWidgetEventHandlerInitData& /*aData*/ )
-	{
-	//No implementation required		
-	}
-
-// ---------------------------------------------------------------------------
-// eventHandlerData
-// ---------------------------------------------------------------------------
-//
-AlfWidgetEventHandlerInitData* MulBaseElement::eventHandlerData()
-	{
-    return NULL;		
-	}
-	
-// ----------------------------------------------------------------------------
-// eventHandlerType
-// ----------------------------------------------------------------------------
-//
- IAlfWidgetEventHandler::AlfEventHandlerType MulBaseElement::eventHandlerType() 
-	{
-	return IAlfWidgetEventHandler::ELogicalEventHandler ;
-	}
-// ----------------------------------------------------------------------------
-// eventExecutionPhase
-// ----------------------------------------------------------------------------
-//
-
-IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulBaseElement::eventExecutionPhase()
-	{
-	return EBubblingPhaseEventHandler;
-	}   
-	
-//------------------------Slider related Api's -------------------------	
-
-//--------------------------------------------------------------------------
-// UpdateSliderTick
-//--------------------------------------------------------------------------
-//
-void MulBaseElement::UpdateSliderTick(int aUpdateTick)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MulBaseElement");
-	IMulSliderModel* mulSliderModel = ((MulCoverFlowControl*)&control())->GetSliderModel();
-    if( mulSliderModel && Template2D()->IsSliderVisible() )
-		{
-		 // Creating a reference Visual Item
-    	//@todo remove const from Data api in slider model
-		const MulVisualItem& item = mulSliderModel->Data();
-		//auto_ptr<MulVisualItem> tempItem( new (EMM) MulVisualItem());
-		MulVisualItem* tempItem  = const_cast<MulVisualItem*> (&item);
-		  
-		tempItem->SetAttribute( mulvisualitem::KMulMaxRange, --aUpdateTick );
-		tempItem->SetAttribute (mulvisualitem::KMulMinRange, 0);
-		tempItem->SetAttribute ( mulvisualitem::KMulTick,1);
-		
-		// Add the newly created visual item to the model
-		// Model takes the ownership of the visual item
-		mulSliderModel->SetData(*tempItem);   
-		}
-		
-	// Set the opacity to the slider widget after verifyiny all the conditions.
-	SetSliderOpacity();
-	}
-//--------------------------------------------------------------------------
-// SetSliderOpacity
-//--------------------------------------------------------------------------
-//	
-void MulBaseElement::SetSliderOpacity()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetSliderOpacity");
-	
-	if (mData->mSliderLayout)
-		{
-		if ( Template2D()->IsSliderVisible() )
-	    	{
-	    	if( static_cast<MulCoverFlowControl&>(control()).TotalModelCount() > 1 && mData->mSliderOpacity == KBackGroundOpacity)
-		    	{
-		     	ShowSlider(true);	    	
-		    	}
-		    else if((static_cast<MulCoverFlowControl&>(control()).TotalModelCount() <= 1) && mData->mSliderOpacity == KHighlightOpacity)
-		    	{
-		    	ShowSlider(false);	    	
-		    	}
-	    	}
-	     else if(mData->mSliderOpacity == KHighlightOpacity)
-	     	{
-	     	 ShowSlider(false);	
-	     	}
-		}
-	}
-
-//--------------------------------------------------------------------------
-//CreateSlider
-//--------------------------------------------------------------------------
-//	
-void MulBaseElement::CreateSlider()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateSlider");
-	if ( Template2D()->IsSliderVisible() )
-    	{
-    	MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
-    	IAlfWidget* sliderwidget = coverflowControl->GetSliderWidget();
-    	if(!sliderwidget)
-			{
-			ConstructSliderWidget();
-			}
-
-		const TMulCoverFlowItem sliderStruct = Template2D()->SliderDimension();
-		mData->mSliderLayout->SetPos(TAlfRealPoint(sliderStruct.posx,sliderStruct.posy));
-		mData->mSliderLayout->SetSize(TAlfRealPoint(sliderStruct.width,sliderStruct.height));
-		int totalModelCount = coverflowControl->TotalModelCount();
-		if( totalModelCount > 1 )
-			{
-			UpdateSliderTick(totalModelCount);	
-			coverflowControl->SetSliderTickPosition();
-			ShowSlider(true);
-			}
-		else
-			{
-			ShowSlider(false);
-			}
-	    mData->mSliderLayout->UpdateChildrenLayout();
-    	}
-    else
-    	{
-    	if (!mData->mSliderLayout)
-	    	{
-	    	return;	
-	    	}
-	    ShowSlider(false);
-    	}
-	}
-
-//--------------------------------------------------------------------------
-//ConstructSliderWidget
-//--------------------------------------------------------------------------	
-void MulBaseElement::ConstructSliderWidget()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ConstructSliderWidget");
-	IAlfWidget* alfSliderWidget = ((MulCoverFlowControl*)&control())->CreateSliderWidget();
-	IMulSliderWidget* mulSliderWidget = static_cast<IMulSliderWidget*>(alfSliderWidget);
-	mData->mSliderLayout = const_cast<CAlfLayout*>(&mulSliderWidget->ContainerLayout());
-	mData->mVerticalFlow->Insert(mData->mSliderLayout, mData->mVerticalFlow->Count());
-	}
-	
-
-//--------------------------------------------------------------------------
-//ShowSlider
-//--------------------------------------------------------------------------
-void MulBaseElement::ShowSlider(bool aFlag)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::ShowSlider");
-	if(mData->mSliderLayout)
-		{
-		IAlfWidget* alfSliderWidget = ((MulCoverFlowControl*)&control())->GetSliderWidget();
-		IMulSliderWidget* mulSliderWidget = static_cast<IMulSliderWidget*>(alfSliderWidget);
-		mulSliderWidget->ShowWidget(aFlag);
-		if(aFlag)
-			{
-			mData->mSliderLayout->SetOpacity(TAlfTimedValue(KHighlightOpacity));
-			mData->mSliderOpacity = KHighlightOpacity;							
-			}
-		else
-			{
-    		mData->mSliderLayout->SetOpacity(TAlfTimedValue(KBackGroundOpacity));
-    		mData->mSliderOpacity = KBackGroundOpacity;			
-			}
-		}
-	}	
-	
-    
-//--------------------------------------------------------------------------
-// StartBounce
-//--------------------------------------------------------------------------
-void MulBaseElement::StartBounce(int aBounceDirection) 
-    {
-    int bounceDistance = (mData->mHighlightItemStruct.width/4) * aBounceDirection; 	
-    control().Env().Send(TAlfCustomEventCommand(ECustomEventBounceBack,&control()),KBounceTime); 
- 	StartDoodling(bounceDistance,KBounceTime);
-    }
-
-
-// ---------------------------------------------------------------------------
-// CalculateDistanceChangeFactor
-// ---------------------------------------------------------------------------
-//
-int MulBaseElement::CalculateDistanceChangeFactor()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CalculateDistanceChangeFactor");
-   
-    int firstVisualMidPoint = mData->mHighlightItemStruct.posx + (mData->mHighlightItemStruct.width/2);
-    int secVisualMidPoint =  mData->mItemStruct.posx + (mData->mItemStruct.width/2);
-   
-    return Abs(secVisualMidPoint-firstVisualMidPoint);
-    }
-
-
-// ---------------------------------------------------------------------------
-// SetBackground
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetBackground(const TRgb& aColor)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetBackground");
-	
-	CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
-	CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
-	
-	CAlfVisual* oldVisual = deckLayout.FindTag(backgroundvisual);
-	if(oldVisual)
-		{
-		CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(oldVisual);
-		if(imageVisual->Image().HasTexture())
-			{
-			const CAlfTexture& textureToUnload = imageVisual->Image().Texture();
-			CAlfTextureManager& textureMgr = control().Env().TextureManager();    
-			textureMgr.UnloadTexture(textureToUnload.Id());		
-			}
-					
-		deckLayout.Remove( oldVisual );
-		oldVisual->RemoveAndDestroyAllD();
-		}
-		
-    deckLayout.EnableBrushesL( ETrue );
-    CAlfBrushArray* brushArray = deckLayout.Brushes();
-    if(brushArray)
-        {
-		if( brushArray->Count()!=0)
-		    {
-			CAlfGradientBrush& brush = static_cast<CAlfGradientBrush&>(brushArray->At(0));		    
-		    brush.SetColor( aColor ); 
-		    }
-		else
-			{
-			THROW_IF_LEAVES
-				(
-				CAlfGradientBrush* brush = CAlfGradientBrush::NewL( control().Env() );
-				// Set the brush colour
-				brush->SetColor( aColor );
-				// Apply brush and set the opacity .
-				deckLayout.Brushes()->AppendL( brush, EAlfHasOwnership ); 
-				); 	
-			}
-        }
-	}
-
-// ---------------------------------------------------------------------------
-// SetBackground
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetBackground(const TAknsItemID& aIID)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetBackground");
-	
-	CAlfLayout* main = static_cast<CAlfLayout*>(findVisual( KMainLayoutIndex ));
-	CAlfDeckLayout& deckLayout = static_cast<CAlfDeckLayout&> (main->Visual(KMainLayoutIndex) );
-
-	CAlfBrushArray* brushArray = deckLayout.Brushes();
-    if(brushArray)
-        {     
-		if( brushArray->Count()!=0)
-		    {
-		    brushArray->Reset();            
-		    }
-        }
-		    
-	TAlfRealSize layoutSize = deckLayout.Size().ValueNow();
-	const TAlfImage image(aIID,TSize(layoutSize),EAspectRatioPreserved,NULL,-1,-1,0.f,0.f,1.f,
-					1.f, TAlfTextureFlags(EAlfTextureFlagAutoSize | EAlfTextureFlagSkinContent),
-					KAlfAutoGeneratedTextureId,NULL);							 
-                    
-	CAlfVisual* oldVisual = deckLayout.FindTag(backgroundvisual);
-	if(oldVisual)
-		{
-		CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(oldVisual);
-		if(imageVisual->Image().HasTexture())
-			{
-			const CAlfTexture& textureToUnload = imageVisual->Image().Texture();
-			CAlfTextureManager& textureMgr = control().Env().TextureManager();    
-			textureMgr.UnloadTexture(textureToUnload.Id());		
-			}		
-		imageVisual->SetImage(image);	
-		}
-	else
-		{
-		THROW_IF_LEAVES
-			(
-			CAlfImageVisual* imagevisual(CAlfImageVisual::AddNewL((CAlfControl&)control(), &deckLayout));
-			deckLayout.MoveVisualToBack(*imagevisual);
-			imagevisual->SetImage(image);
-			imagevisual->SetFlag(EAlfVisualFlagIgnorePointer);
-			imagevisual->SetPos(TPoint(0,0));
-		    imagevisual->SetSize(layoutSize);
-		    imagevisual->SetOpacity( KHighlightOpacity );
-		    imagevisual->SetTagL( backgroundvisual );
-			);	
-		}	
-	}
-
-// ---------------------------------------------------------------------------
-// SetItemBrush
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetItemBrush(const TRgb& aColor)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetItemBrush");
-	mData->mIconBgColor.mIsColorSet = true;
-	mData->mIconBgColor.mColor = aColor;
-	
-	int itemCount = 2*mData->mVisibleCount + 1;
-	
-	itemCount = itemCount > mData->mIconFlowLayout->Count() ? mData->mIconFlowLayout->Count() : itemCount;
-	
-	for(int i =0 ;i<itemCount;i++)
-    	{
-    	CAlfVisual& visual = mData->mIconFlowLayout->Visual( i );
-        CAlfImageVisual* imageVisual = ( CAlfImageVisual* )visual.FindTag(KCoverflowIcon);
-        ApplyBrushOnIcon( *imageVisual);    
-    	}
-    }
-
-	
-// ---------------------------------------------------------------------------
-// SetTextColor
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::SetTextColor(TTextVisualType aVisualType, const TRgb& aColor)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetTextColor");
-    
-    switch(aVisualType)
-	    {
-	    case ECounterVisual:
-		    {
-		    // save the values set by the application
-		    mData->mCounterColor.mIsColorSet = true;
-		    mData->mCounterColor.mColor = aColor;
-		    
-		    // apply the property if the visuals are already created
-		    if(mData->mCounterVisual)
-			    {
-			    mData->mCounterVisual->SetColor(aColor);	
-			    }
-		    break;	
-		    }
-	    case ETilteDetailTextVisual:
-		    {
-		    // save the values set by the application
-		    mData->mTextColor.mIsColorSet = true;
-		    mData->mTextColor.mColor = aColor;
-
-		    // apply the property if the visuals are already created
-		    CAlfTextVisual* titleTextVisual =static_cast<CAlfTextVisual*>(mData->mTextLayout->FindTag(KCoverflowTitle));
-	        if(titleTextVisual)
-	            {
-	            titleTextVisual->SetColor(aColor);
-	            }
-	        CAlfViewportLayout* viewPortLayout =static_cast<CAlfViewportLayout*>(mData->mTextLayout->FindTag(KDetailViewPortLayout));
-	        if(viewPortLayout)
-	            {
-	            CAlfTextVisual* detailTextVisual =static_cast<CAlfTextVisual*>(viewPortLayout->FindTag(KCoverflowDetail));
-	            if(detailTextVisual)
-	                {
-	                detailTextVisual->SetColor(aColor);
-	                }
-	            }
-            // Apply the same color for empty text also
-            if(mData->mEmptyTextVisual)
-	            {
-	            mData->mEmptyTextVisual->SetColor(aColor);	
-	            }
-		    break;	
-		    }
-		default:
-			break;
-	    }
-    }
-
-// ---------------------------------------------------------------------------
-// TextColor
-// ---------------------------------------------------------------------------
-//
-TMulVisualColorProperty MulBaseElement::TextColor(TTextVisualType aVisualType)
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::TextColor");
-    TMulVisualColorProperty colorProperty;
-    
-    switch(aVisualType)
-	    {
-	    case ECounterVisual:
-		    {
-		    colorProperty = mData->mCounterColor;
-		    break;
-		    }
-	    case ETilteDetailTextVisual:
-		    {
-		    colorProperty = mData->mTextColor;
-		    break;
-		    }
-		default:
-			break;
-	    }
-	return colorProperty;
-    }
-
-// ---------------------------------------------------------------------------
-// FlowLayout
-// ---------------------------------------------------------------------------
-//
-CAlfLayout& MulBaseElement::FlowLayout( int aLayoutIndex )
-      {
-      MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::FlowLayout");
-      
-      return static_cast<CAlfLayout&>(mData->mVerticalFlow->Visual( aLayoutIndex ));
-      }
-
-// ---------------------------------------------------------------------------
-// SetFitMode
-// ---------------------------------------------------------------------------
-//      
-void MulBaseElement::SetFitMode(bool aFlag)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetFitMode");
-	mData->mFitMode = aFlag;
-	}
-	
-// ----------------------------------------------------------------------------
-// CreateAndInitializeVisuals
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::CreateAndInitializeVisuals(bool aIsOrientationChange)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateAndInitializeVisuals");
-	CreateVisuals();
-
-	// Specific to template 4 don't update the visuals
-	// during orientation change
-	// done for performance improvement.
-	if (!(aIsOrientationChange &&mData->mFitMode))
-		{
-		UpdateVisuals();
-		CreateSlider();
-		}
-	
-	// For template 4 set model case
-	// cancel the rotation if any.
-	if (!aIsOrientationChange && mData->mFitMode)
-		{
-		if (mData->mRotation.mIsApplied)
-			{
-			if (mData->mRotation.mIndex >= 0)
-				{
-				CancelRotation(mData->mRotation.mIndex);
-				}
-			else
-				{
-				// rotation applied on highlight index.
-				// so cancel it.
-				mData->mRotation.mIndex = 1;
-				CancelRotation(mData->mRotation.mIndex);
-				}
-			}
-		}
-	}
-	
-// ----------------------------------------------------------------------------
-// CreateVisuals
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::CreateVisuals()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateVisuals");
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	int visualIndex = 0;
-	
-	// if there are less visuals than required tehn create the extra visauls and
-	// set opacity 1 for already existing visuals
-	if(totalVisual > mData->mIconFlowLayout->Count())
-    	{
-    	visualIndex = mData->mIconFlowLayout->Count(); 	
-        for(; visualIndex < totalVisual;visualIndex++) 
-            {
-            CreateIconStructure(mData->mIconFlowLayout); 
-            }
-    	}
-    // if the number of visuals are more, then set opacity 0 for the extra visuals
-    else if (totalVisual < mData->mIconFlowLayout->Count())
-        {
-        IMulModelAccessor* accessor = ((MulCoverFlowControl*)&control())->ModelAccessor();
-        if(accessor)
-            {
-            if(accessor->CurrentItemCount() < totalVisual)
-	            {
-	            for(; visualIndex < totalVisual;visualIndex++) 
-	                {
-	                CAlfVisual& visual = mData->mIconFlowLayout->Visual(visualIndex);
-        			static_cast<MulCoverFlowControl&>(control()).UpdateItemAtIndex(visualIndex);	
-	                }
-	            }
-	            
-    	    CAlfTextureManager& textureMgr = control().Env().TextureManager();
-    	    TAlfImage image = TAlfImage(textureMgr.BlankTexture());
-    	    // position those visuals to some other location.
-    	    int posX = mData->mHighlightItemStruct.posx + totalVisual * mData->mHighlightItemStruct.width;
-            for(; visualIndex < mData->mIconFlowLayout->Count();visualIndex++) 
-                {
-	            CAlfVisual& visual = mData->mIconFlowLayout->Visual(visualIndex);
-	            visual.SetPos(TAlfRealPoint(posX,mData->mHighlightItemStruct.posy));
-	            CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon));
-		        // remove the icon brush if any.
-		        RemoveBrushOnIcon(*imageVisual);        
-		        imageVisual->SetImage(image); 
-                CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIndicator));    
-                if(indicatorVisual)
-                    {
-                    indicatorVisual->SetImage(image);   
-                    }
-	            }
-            }
-        }
-	}
-
-// ----------------------------------------------------------------------------
-// UpdateVisuals
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::UpdateVisuals()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateVisuals");
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	MulCoverFlowControl* coverflowControl = static_cast<MulCoverFlowControl*>(&control());
-	IMulModelAccessor* accessor = coverflowControl->ModelAccessor();
-	if(accessor)
-    	{
-    	for(int i = 0; i < totalVisual; i++) 
-            {
-            CAlfVisual& visual = mData->mIconFlowLayout->Visual(i);
-        	coverflowControl->UpdateItemAtIndex(i);	          
-            }
-    	}
-	}
-	
-// ----------------------------------------------------------------------------
-// CreateIconStructure
-// ----------------------------------------------------------------------------
-//
-CAlfVisual* MulBaseElement::CreateIconStructure(CAlfLayout* aParentLayout)
-    { 
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CreateIconStructure");       
-    //create the deck layout.
-    CAlfDeckLayout* deck =CAlfDeckLayout::AddNewL((CAlfControl &)control(),aParentLayout);
-    CAlfImageVisual* imageVisual =CAlfImageVisual::AddNewL((CAlfControl &)control(),deck);
-    imageVisual->SetTagL(KCoverflowIcon);
-	deck->SetFlag( EAlfVisualFlagManualLayout );
-    return deck;
-    }
-	
-	
-// ----------------------------------------------------------------------------
-// SetHighlight
-// This function is used to change the highlight by 1 with animation.
-// This function also takes care whether we need to change the size or only the position.
-// it takes into consideration the current direction and the current highlight index.
-// The logic is , we are always keeping the highlight visual index fixed (its equal to
-// the no of visible item in the screen), Depending on the scroll direction we reorder
-// the last or first visual and then position all visuals keeping the highlight visual
-// in its position. Then update the last or 1st visual with appropriate data.
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::SetHighlight(int /*aHighlightIndex*/, int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::SetHighlight");
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	int highlightIndex = mData->mVisibleCount;
-	CAlfVisual* deckLayout = NULL;
-	CAlfVisual* imageVisual = NULL;	
-	
-	int highlightPosX = mData->mHighlightItemStruct.posx;
-
-    if(mData->mScrollDir == EItemScrollLeft)
-    	{
-    	CancelRotation(totalVisual - 1);
-		control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced);     	
-		deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(totalVisual - 1);
-    	mData->mIconFlowLayout->Reorder(*deckLayout,0);
-    	
-		int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
-		deckLayout->SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
-		posX = posX + mData->mItemStruct.width + mData->mPadding;
-		for (int i=1; i < totalVisual ; i++)  
-		    {
-			deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(i);
-			imageVisual = deckLayout->FindTag(KCoverflowIcon);
-			if (i != highlightIndex)
-				{
-				deckLayout->SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
-			   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			   
-			   	// Change the size if required
-				if((i == highlightIndex+1 || i == highlightIndex-1) && mData->mChangeSize)
-					{
-					deckLayout->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-					imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-					}
-				}
-			else
-				{
-			    deckLayout->SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
-			   	posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
-			   	
-			   	// Change the size if required
-			   	if(mData->mChangeSize)
-				   	{
-					deckLayout->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
-														mData->mHighlightItemStruct.height,
-														aAnimationTime));
-					imageVisual->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
-														mData->mHighlightItemStruct.height,
-														aAnimationTime));
-				   	}
-				}
-		    }
-	    control().Env().BatchBufferHandler().FlushBatchBuffer();            
-	  	control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);           
-		((MulCoverFlowControl*)&control())->UpdateItemAtIndex(0, aAnimationTime);
-
-    	}
-    else if (mData->mScrollDir == EItemScrollRight)
-	    {
-	    CancelRotation(0);
-		control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced); 	    
-		deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(0);
-    	mData->mIconFlowLayout->Reorder(*deckLayout,totalVisual-1);
-    	
-		int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
-
-		for (int i=0; i < totalVisual-1 ; i++)  
-		    {
-			deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(i);
-			imageVisual = deckLayout->FindTag(KCoverflowIcon);
-		    
-			if (i != highlightIndex)
-				{
-				deckLayout->SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
-			   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			   	// Change the size if required
-				if((i == highlightIndex+1 || i == highlightIndex-1) && mData->mChangeSize)
-					{
-					deckLayout->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-					imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-					}			   	
-				}
-			else
-				{
-			    deckLayout->SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
-			   	posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
-			   	// Change the size if required
-			   	if(mData->mChangeSize)
-				   	{
-					deckLayout->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
-														mData->mHighlightItemStruct.height,
-														aAnimationTime));
-					imageVisual->SetSize(TAlfTimedPoint(mData->mHighlightItemStruct.width,
-														mData->mHighlightItemStruct.height,
-														aAnimationTime));
-				   	}
-				}
-		    }
-		deckLayout = (CAlfVisual*)&mData->mIconFlowLayout->Visual(totalVisual-1);
-		deckLayout->SetPos( TAlfRealPoint(posX,mData->mItemStruct.posy));
-	    control().Env().BatchBufferHandler().FlushBatchBuffer();            
-	    control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);           
-		((MulCoverFlowControl*)&control())->UpdateItemAtIndex(totalVisual-1, aAnimationTime);
-	    }
-	    
-	}
-	
-// ----------------------------------------------------------------------------
-// StartDoodling
-// This function is used in doodling case. it calls the appropriate function to
-// handle doodling based on whether we have to only change the position or both
-// position and size.
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::StartDoodling(int aDistance, int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StartDoodling");
-	if (mData->mChangeSize)
-		{
-		MoveVisualsWithSizeChange(aDistance,aAnimationTime);
-		}
-	else
-		{
-		MoveVisuals(aDistance,aAnimationTime);
-		}
-	}
-	
-// ----------------------------------------------------------------------------
-// StopDoodling
-// it calls when we get a gestureunknown or to do a bounce back.
-// it basically repositions the visuals based on current highlight.
-// it simply calls a startdoodling function with 0 distance and with
-//  animation time if required.
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::StopDoodling(int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::StopDoodling");
-	StartDoodling(0,aAnimationTime);
-	}
-	
-	
-// ----------------------------------------------------------------------------
-// MoveVisuals
-// This function is used in doodling when only position needs to be change, usefull
-// in potrait where 1 visible item is in the screen. 
-// The logic is to change the position of all visuals by doodling distance.
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::MoveVisuals(int aDistance, int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MoveVisuals");
-	CancelRotation();
-		
-	control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushOnlyForced); 
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	int highlightIndex = mData->mVisibleCount;
-	
-	int highlightPosX = mData->mHighlightItemStruct.posx;
-	
-	highlightPosX += aDistance;
-
-	int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
-	for (int i=0; i < totalVisual ; i++)  
-	    {
-		CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);
-		
-		if (i != mData->mVisibleCount)
-			{
-			deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
-		   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			}
-		else
-			{
-		    deckLayout.SetPos( TAlfTimedPoint(highlightPosX,mData->mHighlightItemStruct.posy,aAnimationTime));
-		   	posX = posX + mData->mHighlightItemStruct.width + mData->mPadding;
-			}
-	    }
-  	control().Env().BatchBufferHandler().FlushBatchBuffer();            
-    control().Env().BatchBufferHandler().SetAutoFlushMode(EAlfAutoFlushDeferred);           
-	}
-
-// ----------------------------------------------------------------------------
-// NumberOfSwipe
-// ----------------------------------------------------------------------------
-//	
-TNumberofSwipes MulBaseElement::NumberOfSwipes()
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::NumberOfSwipes");
-	return mData->mNumSwipes;
-	}
-	
-// ----------------------------------------------------------------------------
-// FinalSwipeDirection
-// ----------------------------------------------------------------------------
-//
-int MulBaseElement::FinalSwipeDirection(int aDistance, int aLastSwipeDirection)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::FinalSwipeDirection");
-	
-	int NewHighlightPos = NearestPoint(FinalMidPoints(ReferenceMidPoints(),aDistance),aLastSwipeDirection);
-	
-	int scrollDir = EItemNoDirection;
-	mData->mNumSwipes = ESingleSwipe;
-	
-	// now depending on the new highlight position make a decission
-	// whether to double swipe or single swipe and in which direction.
-	if(mData->mVisibleCount == 1)
-		{
-		switch(NewHighlightPos)
-			{
-			case 0:
-				{
-				scrollDir = EItemScrollLeft;	
-				}
-			break;
-			case 2:
-				{
-				scrollDir = EItemScrollRight;	
-				}
-			break;
-			case 1:
-			default:
-			break;				
-			}
-		}
-	else
-		{
-		switch(NewHighlightPos)
-			{
-			case 0:
-				{
-				mData->mNumSwipes = ETripleSwipe; // triple swipe
-				scrollDir = EItemScrollLeft;	
-				}
-			break;
-			case 1:
-				{
-				mData->mNumSwipes = EDoubleSwipe;
-				scrollDir = EItemScrollLeft;	
-				}
-			break;	
-			case 2:
-				{
-				scrollDir = EItemScrollLeft;	
-				}
-			break;					
-			case 4:
-				{
-				scrollDir = EItemScrollRight;	
-				}
-			break;
-			case 5:
-				{
-				mData->mNumSwipes = EDoubleSwipe;
-				scrollDir = EItemScrollRight;
-				}
-			break;
-			case 6:
-				{
-				mData->mNumSwipes = ETripleSwipe; // triple swipe
-				scrollDir = EItemScrollRight;
-				}
-			break;									
-			case 3:
-			default:
-			break;				
-			}
-		}
-	return scrollDir;							
-	}	
-
-// ----------------------------------------------------------------------------
-// NearestPoint
-// ----------------------------------------------------------------------------
-//
-int MulBaseElement::NearestPoint(std::vector<int> aFinalMidPoints,int aLastSwipeDirection)
-	{
-	int referencePoint = mData->mHighlightItemStruct.posx + mData->mHighlightItemStruct.width/2;
-	int i = 0;
-	while(i < aFinalMidPoints.size())
-		{
-		int temp = 	aFinalMidPoints[i];
-		if(aFinalMidPoints[i] > referencePoint)
-			{
-			break;	
-			}
-		i++;
-		}
-      
-	if(aLastSwipeDirection == EEventScrollLeft)
-		{
-		return --i;
-		}
-	return i;
-	}
-	
-// ----------------------------------------------------------------------------
-// ReferenceMidPoints
-// ----------------------------------------------------------------------------
-//
-std::vector<int> MulBaseElement::ReferenceMidPoints()
-	{
-	std::vector<int> referenceMidPoints;
-	int highlightMidPoint = mData->mHighlightItemStruct.posx + mData->mHighlightItemStruct.width/2;
-	int differnce = mData->mHighlightItemStruct.width/2
-			+ mData->mPadding + mData->mItemStruct.width/2 ;
-			
-	int doubleDiff = mData->mPadding + mData->mItemStruct.width;
-	if(mData->mVisibleCount != 1)
-		{
-		referenceMidPoints.push_back(highlightMidPoint - (differnce
-			+ 2 * doubleDiff));
-			
-		referenceMidPoints.push_back(highlightMidPoint - (differnce
-			+ doubleDiff));
-		}
-	referenceMidPoints.push_back(highlightMidPoint - differnce);
-	referenceMidPoints.push_back(highlightMidPoint);
-	referenceMidPoints.push_back(highlightMidPoint + differnce);
-
-	if(mData->mVisibleCount != 1)
-		{
-		referenceMidPoints.push_back(highlightMidPoint + (differnce
-			+ 2 * doubleDiff));	
-			
-		referenceMidPoints.push_back(highlightMidPoint + (differnce
-			+ doubleDiff));						
-		}	
-	return referenceMidPoints;
-	}
-
-// ----------------------------------------------------------------------------
-// FinalMidPoints
-// ----------------------------------------------------------------------------
-//
-std::vector<int> MulBaseElement::FinalMidPoints(std::vector<int> aReferenceMidPoints,int aDistance)
-	{
-	std::vector<int> newMidPoints;
-	for(int i = 0; i < aReferenceMidPoints.size(); i++)
-		{
-		newMidPoints.push_back(aReferenceMidPoints[i] + aDistance);
-		int temp = 	newMidPoints[i];
-		}
-	return newMidPoints;	
-	}
-
-// ----------------------------------------------------------------------------
-// MoveVisualsWithSizeChange
-// This function used when during doodling size changes also required.
-// ie in case of landscape and visible items are 3 during doodling position as well
-// as size change requird.
-// The basic logic is we are keeping a reference distance for a complete highlight 
-// change (that means the highlight becomes nonhighlight and vice versa). so at 
-// any point of time there will be only two visuals whose size needs to be change.
-// one to grow and other to shrink. so we  calculate the % of grow and shrink of
-// visual keeping the doodling distance and reference distance into consideration.
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::MoveVisualsWithSizeChange(int aDistance, int aAnimationTime)
-	{
-	MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::MoveVisualsWithSizeChange");
-	int totalVisual = 2*mData->mVisibleCount + 1;
-	int highlightIndex = mData->mVisibleCount;
-	CAlfVisual* imageVisual = NULL;	
-	int visualIndexToShrink = -1;
-	int visualIndexToGrow = -1;  
-	int updateSpecialIndex = -1;  
-	int distancefactor = CalculateDistanceChangeFactor ();
-	
-	int highlightPosX = mData->mHighlightItemStruct.posx;
-	highlightPosX += aDistance;
-	
-	
-	if (Abs(aDistance) < distancefactor)
-		{
-		// user has doodled to change the highlight by 1.Single swipe.
-		if (aDistance < 0)
-			{
-			visualIndexToGrow = highlightIndex +1;
-			}
-		else if (aDistance > 0)
-			{
-			visualIndexToGrow = highlightIndex -1;
-			}
-		else
-			{
-			// for stop doodling case
-			visualIndexToGrow = highlightIndex - 1;
-			updateSpecialIndex = highlightIndex + 1;
-			}
-		visualIndexToShrink = highlightIndex;
-		}
-	else
-		{
-		// user has doodled to change the highlight by 2. Double swipe.
-		if (aDistance < 0)
-			{
-			visualIndexToShrink = highlightIndex +1;
-			visualIndexToGrow = highlightIndex +2;
-			aDistance +=distancefactor;
-			}
-		else
-			{
-			visualIndexToShrink = highlightIndex -1;
-			visualIndexToGrow = highlightIndex -2;
-			aDistance -=distancefactor;
-			}
-		}
-	int changeInPosY = (((mData->mItemStruct.posy - mData->mHighlightItemStruct.posy)*Abs(aDistance))/distancefactor);
-	int changeInWidth = (((mData->mHighlightItemStruct.width - mData->mItemStruct.width)*Abs(aDistance))/distancefactor);
-	int changeInHeight = (((mData->mHighlightItemStruct.height - mData->mItemStruct.height)*Abs(aDistance))/distancefactor);
-
-
-	int posX = highlightPosX - mData->mVisibleCount*(mData->mItemStruct.width + mData->mPadding);
-	for (int i=0; i < totalVisual && i < mData->mIconFlowLayout->Count(); i++)  
-	    {
-		CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(i);
-		if (i == visualIndexToShrink)
-			{
-			int posY = mData->mHighlightItemStruct.posy + changeInPosY;
-			int width =mData->mHighlightItemStruct.width - changeInWidth;
-			int height =mData->mHighlightItemStruct.height - changeInHeight;
-			deckLayout.SetPos( TAlfTimedPoint(posX,posY,aAnimationTime));
-			imageVisual = deckLayout.FindTag(KCoverflowIcon);
-			deckLayout.SetSize(TAlfTimedPoint(width,height,aAnimationTime));
-			imageVisual->SetSize(TAlfTimedPoint(width,height,aAnimationTime));
-			posX = posX + width + mData->mPadding;
-			}
-		else if (i == visualIndexToGrow)
-			{
-			int posY = mData->mItemStruct.posy - changeInPosY;
-			int width = mData->mItemStruct.width + changeInWidth;
-			int height = mData->mItemStruct.height + changeInHeight;
-			deckLayout.SetPos( TAlfTimedPoint(posX,posY,aAnimationTime));
-			imageVisual = deckLayout.FindTag(KCoverflowIcon);
-			deckLayout.SetSize(TAlfTimedPoint(width,height,aAnimationTime));
-			imageVisual->SetSize(TAlfTimedPoint(width,height,aAnimationTime));
-			posX = posX + width + mData->mPadding;
-			}
-		else if (i == updateSpecialIndex)
-			{
-			deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
-			imageVisual = deckLayout.FindTag(KCoverflowIcon);
-			deckLayout.SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-			imageVisual->SetSize(TAlfTimedPoint(mData->mItemStruct.width,mData->mItemStruct.height,aAnimationTime));
-		   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			}
-		else
-			{
-			deckLayout.SetPos( TAlfTimedPoint(posX,mData->mItemStruct.posy,aAnimationTime));
-		   	posX = posX + mData->mItemStruct.width + mData->mPadding;
-			}
-	    }
-	}
-
-// ----------------------------------------------------------------------------
-//RecycleIconVisuals
-// ----------------------------------------------------------------------------
-//
-void MulBaseElement::RecycleIconVisuals()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RecycleIconVisuals");
-    CAlfTextureManager& textureMgr = control().Env().TextureManager();
-    TAlfImage image = TAlfImage(textureMgr.BlankTexture());
-    
-    for(int i=0; i<mData->mIconFlowLayout->Count(); i++)
-        {
-        CAlfVisual& visual = mData->mIconFlowLayout->Visual(i);
-        CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon)); 
-        // remove the icon brush if any.
-        RemoveBrushOnIcon(*imageVisual);        
-        imageVisual->SetImage(image);
-        
-        CAlfImageVisual* indicatorVisual =static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIndicator));    
-        if(indicatorVisual)
-            {
-            indicatorVisual->SetImage(image);   
-            }
-        }
-	// cancel the rotation if any.
-	if (mData->mRotation.mIsApplied)
-		{
-		if (mData->mRotation.mIndex >= 0)
-			{
-			CancelRotation(mData->mRotation.mIndex);
-			}
-		else
-			{
-			// rotation applied on highlight index.
-			// so cancel it.
-			mData->mRotation.mIndex = 1;
-			CancelRotation(mData->mRotation.mIndex);
-			}
-		}
-    }
-
-// ----------------------------------------------------------------------------
-//IdToTag
-// ----------------------------------------------------------------------------
-//
-const TDesC8& MulBaseElement::IdToTag( int aId )
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::IdToTag");
-    switch( aId )
-        {
-        case mulvisualitem::KMulIcon1 :
-            {
-            return KCoverflowIcon;
-            }
-        case mulvisualitem::KMulTitle :
-            {
-            return KCoverflowTitle;
-            }    
-        case mulvisualitem::KMulDetail :
-            {
-            return KCoverflowDetail;
-            }  
-        case mulvisualitem::KMulIndicator2 :
-            {
-            return KCoverflowIndicator;
-            }                               
-        default:
-            {
-            return KInvalidID;
-            }
-        }
-    }
- 
-// ---------------------------------------------------------------------------
-// RemoveSliderFromLayout
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::RemoveSliderFromLayout()
-    {
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RemoveSliderFromLayout");
-    IAlfWidget* slider = (static_cast<MulCoverFlowControl&>(control())).GetSliderWidget();
-    if(slider && slider->control())
-        {
-        IMulSliderWidget* sliderwidget = static_cast<IMulSliderWidget*>(slider);
-        CAlfLayout* sliderContlyt = const_cast<CAlfLayout*>(sliderwidget->control()->ContainerLayout(NULL));
-        mData->mVerticalFlow->Remove(sliderContlyt);
-        }
-    
-    }    
-
-// ---------------------------------------------------------------------------
-// RotateImage
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::RotateImage(IMulWidget::TMulRotation aDirection,TSize aImageSize,int aAnimationTime,bool aAdjustSize)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::RotateImage");
-	
-	__MUL_ASSERT( mData->mIconFlowLayout->Count() != 0,KNullPointer);
-		
-	if (Template2D()->IsUiOnOffFlagEnabled())
-		{
-		CAlfVisual& visual = mData->mIconFlowLayout->Visual(1);
-		CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(visual.FindTag(KCoverflowIcon)); 
-		
-		if (!aAdjustSize)
-			{
-			// Take care the case where rotation was
-			// applied to the previous highlight index
-			// cancel the rotation on that visual  
-			CancelRotation(mData->mRotation.mIndex);
-
-			switch(aDirection)
-				{
-				case IMulWidget::ERotateLeft:
-					{
-					mData->mRotation.mImageAngle = (mData->mRotation.mImageAngle + 90)%360;
-					imageVisual->EnableTransformationL();
-					imageVisual->Transformation().Rotate(TAlfTimedValue(90,aAnimationTime));
-					mData->mRotation.mIsApplied = true;
-					break;
-					}
-				case IMulWidget::ERotateRight:
-					{
-					mData->mRotation.mImageAngle = (mData->mRotation.mImageAngle - 90)%360;
-					imageVisual->EnableTransformationL();
-					imageVisual->Transformation().Rotate(TAlfTimedValue(-90,aAnimationTime));
-					mData->mRotation.mIsApplied = true;
-					break;
-					}
-				default:
-					break;
-				}
-			// store the actual texture size of image to be rotated.
-			mData->mRotation.mTextureSize = aImageSize;
-			}
-			
-		AdjustVisualSizeInRotation(imageVisual, aAnimationTime);
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// AdjustVisualSizeInRotation
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::AdjustVisualSizeInRotation(CAlfImageVisual* aVisual,int aAnimationTime)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::AdjustVisualSizeInRotation");
-
-	bool isLandScape = static_cast<MulCoverFlowControl&>(control()).IsLandscape();
-	int shortEdge = !isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
-		 			 			
-	if( mData->mRotation.mTextureSize.iWidth <= shortEdge && mData->mRotation.mTextureSize.iHeight <= shortEdge)
-	    {
-	    return;
-	    }
-	else
-	    {
-	    switch(Abs(mData->mRotation.mImageAngle))
-	    	{
-	    	case 90:
-	    	case 270:
-	        	{
-	        	HandleRotationOnVerticalAxis(aVisual,aAnimationTime);
-	        	}
-	    	break;
-	    	case 0:
-	    	case 180:
-	    		{
-	    		HandleRotationOnHorizontalAxis(aVisual,aAnimationTime);
-	    		}
-	        break;
-	    	default:
-	    		break;
-	    	}
-	    }
-	}
-
-// ---------------------------------------------------------------------------
-// HandleRotationOnVerticalAxis
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::HandleRotationOnVerticalAxis(CAlfImageVisual* aVisual,int aAnimationTime)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleRotationOnVerticalAxis");
-
-	bool isLandScape = static_cast<MulCoverFlowControl&>(control()).IsLandscape();
-	int longEdge = isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
-	int shortEdge = !isLandScape ? mData->mHighlightItemStruct.width : mData->mHighlightItemStruct.height;
-
-	if (isLandScape)
-		{
-		if(mData->mRotation.mTextureSize.iWidth > shortEdge) 
-			{
-			// make the visual of shortEdge size and fit the image by width.
-			aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,0),aAnimationTime);
-			aVisual->SetSize(TAlfRealSize(shortEdge,shortEdge),aAnimationTime);
-			aVisual->SetScaleMode(CAlfImageVisual::EScaleFitWidth); 
-			}
-		else 
-			{
-			//imageHeight > shortEdge and imageWidth < shortEdge
-			if (mData->mRotation.mTextureSize.iHeight > longEdge)
-				{
-				aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,shortEdge/2 -longEdge/2),aAnimationTime);
-				aVisual->SetSize(TAlfRealSize(shortEdge,longEdge),aAnimationTime);
-				}
-			else
-				{
-				aVisual->SetPos(TAlfRealPoint(longEdge/2 - shortEdge/2,shortEdge/2 - mData->mRotation.mTextureSize.iHeight/2),aAnimationTime);
-				aVisual->SetSize(TAlfRealSize(shortEdge,mData->mRotation.mTextureSize.iHeight),aAnimationTime);
-				}
-			aVisual->SetScaleMode(CAlfImageVisual::EScaleFitHeight);            				
-			}
-		}
-	else
-		{
-		if(mData->mRotation.mTextureSize.iHeight > shortEdge) 
-			{
-			// make the visual of shortEdge size and fit the image by height.
-			aVisual->SetPos(TAlfRealPoint(0,longEdge/2 - shortEdge/2),aAnimationTime);
-			aVisual->SetSize(TAlfRealSize(shortEdge,shortEdge),aAnimationTime);
-			aVisual->SetScaleMode(CAlfImageVisual::EScaleFitHeight);
-			}
-		else  
-			{
-			//imageWidth > shortEdge and imageHeight < shortEdge
-			if (mData->mRotation.mTextureSize.iWidth > longEdge)
-				{
-				aVisual->SetPos(TAlfRealPoint(shortEdge/2 - longEdge/2,longEdge/2 - shortEdge/2),aAnimationTime);
-				aVisual->SetSize(TAlfRealSize(longEdge,shortEdge),aAnimationTime);
-				}
-			else
-				{
-				aVisual->SetPos(TAlfRealPoint(shortEdge/2 - mData->mRotation.mTextureSize.iWidth/2,longEdge/2 - shortEdge/2),aAnimationTime);
-				aVisual->SetSize(TAlfRealSize(mData->mRotation.mTextureSize.iWidth,shortEdge),aAnimationTime);
-				}
-			// @todo check if this effective height after fit by width can ever be more than
-			// the shorter edge. If yes then this fit mode should be chnged to fit inside(check this)
-			aVisual->SetScaleMode(CAlfImageVisual::EScaleFitWidth);
-			}
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// HandleRotationOnHorizontalAxis
-// ---------------------------------------------------------------------------
-//	
-void MulBaseElement::HandleRotationOnHorizontalAxis(CAlfImageVisual* aVisual,int aAnimationTime)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::HandleRotationOnHorizontalAxis");
-	
-	aVisual->SetPos(TAlfRealPoint(0,0),aAnimationTime);
-	aVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height),aAnimationTime);
-	ApplyScaleMode(*aVisual);
-	}
-		
-// ---------------------------------------------------------------------------
-// CancelRotation
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::CancelRotation(int aIndex)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CancelRotation");
-	
-	if (mData->mRotation.mIsApplied)
-		{
-		if (mData->mRotation.mIndex >= 0)
-			{
-			// revert it back
-			mData->mRotation.mImageAngle = 0;
-			CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(mData->mRotation.mIndex);
-			CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIcon));
-			imageVisual->EnableTransformationL();
-			imageVisual->Transformation().LoadIdentity();
-			// reset the rotation property
-			mData->mRotation.mIsApplied = false;
-			mData->mRotation.mIndex = -1;   
-        	imageVisual->SetPos(TAlfRealPoint(0,0));
-			imageVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height));
-			ApplyScaleMode(*imageVisual);			
-			}
-		else
-			{
-			mData->mRotation.mIndex = aIndex;
-			}
-		}	    
-	}
-
-// ---------------------------------------------------------------------------
-// CancelRotationOnUpdate
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::CancelRotationOnUpdate(int aIndex)
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::CancelRotationOnUpdate");
-	
-	if (mData->mRotation.mIsApplied)
-		{
-		if (mData->mRotation.mIndex < 0 || mData->mRotation.mIndex == aIndex)
-			{
-			// revert it back
-			mData->mRotation.mImageAngle = 0;
-			CAlfVisual& deckLayout = mData->mIconFlowLayout->Visual(aIndex);
-			CAlfImageVisual* imageVisual = static_cast<CAlfImageVisual*>(deckLayout.FindTag(KCoverflowIcon));
-			imageVisual->EnableTransformationL();
-			imageVisual->Transformation().LoadIdentity();
-			// reset the rotation property
-			mData->mRotation.mIsApplied = false;
-			mData->mRotation.mIndex = -1;   
-        	imageVisual->SetPos(TAlfRealPoint(0,0));
-			imageVisual->SetSize(TAlfRealSize(mData->mHighlightItemStruct.width,mData->mHighlightItemStruct.height));
-			ApplyScaleMode(*imageVisual);			
-			}
-		}	    
-	}
-		
-// ---------------------------------------------------------------------------
-// UpdateRotation
-// ---------------------------------------------------------------------------
-//
-void MulBaseElement::UpdateRotation()
-	{
-    MUL_LOG_ENTRY_EXIT("aakash::MulBaseElement::UpdateRotation");
-	
-	if (mData->mRotation.mIsApplied)
-		{
-		// rotation applied on the highlight item.
-		if (mData->mRotation.mIndex < 0)
-			{
-			RotateImage(IMulWidget::ERotateLeft,TSize(0,0),0,true);
-			}
-		}	    
-	}	
-
-    } //namespace Alf
-    
-//End of file