mulwidgets/mulsliderwidget/src/mulhorizontalslider.cpp
branchRCL_3
changeset 19 4ea6f81c838a
parent 17 514d98f21c43
child 20 0e9bb658ef58
--- a/mulwidgets/mulsliderwidget/src/mulhorizontalslider.cpp	Mon Jun 21 16:15:51 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1207 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  The implementation for presentation elements.
-*
-*/
-
-#include <avkon.hrh>
-#include <avkon.mbg> 
-//Toolkit Includes
-// Alfred Client includes
-#include <alf/alfenv.h>
-#include <alf/alfroster.h>
-#include <alf/alfdisplay.h>
-#include <alf/alfbitmapprovider.h>
-#include <alf/alftexture.h> 
-#include <alf/alfbrusharray.h>
-#include <alf/alftextvisual.h>
-#include <alf/alfevent.h>
-
-//Widget Model Includes
-#include <alf/alfwidgetevents.h>
-#include <alf/alfwidgetenvextension.h>
-#include <alf/ialfmodel.h>
-
-//Avkon Includes
-#include <AknUtils.h>
-#include <AknsConstants.h>
-#include <utf.h> 
-#include <math.h>
-
-//slider widget includes
-#include <mul/mulevent.h>
-#include "mulsliderhorizontal.h"
-#include "mulsliderwidget.h"
-#include "mulslidercontrol.h"
-#include "mulslidermodel.h"
-#include "mulsliderdefinitions.h"
-
-#include "mulsliderutils.h"
-
-//Timer function includes
-#include "mulsliderlongtaptimer.h"
-
-
-namespace Alf
-    {
-    
-// Structure to store data for the slider element class    
-
- struct MulHorizontalSliderDataImpl
-     {
-
-     bool mOperation;// Drag state	
-     float mTickInPixels;// Tick size in Pixel
-     bool mIsLongTapObserverSet;// Is LongTap Event observer set
-     CAlfVisual * mVisual;// Stores thje current visual hit 
-     TPoint mDragPoint;// Point at which drag started 
-     TPoint mLongTapPos;// Point at which button down happened 
-     bool mLongTapStarted;// Long tap timer started (true)
-     int mDragStartStep;// Tick positon of Drag Start
-     int mCurrTick;// Stores current tick
-     int mTrackStartPoint;// Slider Track Start Point in pixel
-     int mTick;// Stores Tick Size
-     bool mLayoutMirrored;// 
-     int mdirection;// 0 - nomovement,1 left movement 2 right
-     int mImageTextureId; // to differtiate between textures 
-     int mTrackTopTextureId;// to store the auto generated texture id's
-     int mTrackBottomTextureId;
-     int mTrackMiddleTextureId;
-     int mMarkerTextureId;
-     // Visualization Layouts
-     CAlfLayout* mMainLayout;
-     CAlfLayout* mBaseSliderLayout;
-     CAlfLayout* mSliderCentre;
-     CAlfImageVisual* mTrackLeftImage;
-     CAlfImageVisual* mTrackMiddleImage;
-     CAlfImageVisual* mTrackRightImage;
-     CAlfLayout* mSliderCentreGhost;
-     CAlfImageVisual* mSliderHandle;
-     CAlfLayout* mSliderHandleGhost;
-     CAlfImageVisual* mSliderProgressDownload;
-     CAlfImageVisual* mSliderProgressCentre;
-     CAlfTexture* mTexture;
-
-     MulHorizontalSliderDataImpl()
-         {
-         mOperation = 0;	
-         mTickInPixels = 0;
-         mIsLongTapObserverSet = 0;
-         mDragPoint.SetXY(0,0) ;
-         mLongTapPos.SetXY(0,0);
-         mLongTapStarted = 0;
-         mDragStartStep = 0;
-         mCurrTick = 0;
-         mTrackStartPoint = 0;
-         mImageTextureId = 0;
-         mTrackTopTextureId = 0 ;
-         mTrackBottomTextureId = 0;
-         mTrackMiddleTextureId = 0;
-         mMarkerTextureId = 0;
-         mVisual = NULL;
-         mMainLayout = NULL;
-         mBaseSliderLayout = NULL;  
-         mSliderCentre = NULL;
-         mSliderHandle = NULL;
-         mSliderProgressCentre = NULL;
-         mBaseSliderLayout     = NULL;       
-         mSliderCentreGhost = NULL;
-         mSliderHandleGhost = NULL;   
-         mLayoutMirrored = false;  
-         mdirection = 0;
-         } 
-
-     };
- 
- // Bitmaps for slider
-_LIT(KAvkonBitmapFile,"\\resource\\apps\\avkon2.mbm"); 
-//_LIT(KImageViewerBitmapFile,"\\resource\\apps\\ImageViewer.mif");
-// Bitmap Texture ID
-const TInt KAlfTrackTopTextureId = 1;
-const TInt KAlfTrackBottomTextureId = 2;
-const TInt KAlfTrackMiddleTextureId = 3;
-const TInt KAlfMarkerTextureId = 4;
-//const TInt KAlfMarkerSelectedTextureId = 5;
-        
-// ---------------------------------------------------------------------------
-//  C++ default constructor.
-// ---------------------------------------------------------------------------
-//
-MulSliderHorizontal::MulSliderHorizontal(
-                                    CAlfWidgetControl& aControl,
-                                    const char* aName, 
-                                    AlfCustomInitDataBase* /*aCustomData*/)
-    : mData(NULL)
-    {
-    // Base class (AlfElement) construct
-    construct(aControl, aName);
-    mData = new (EMM) MulHorizontalSliderDataImpl;
-	mPosData.reset(new(EMM)MulSliderPos);
-	// Timer for generating tap and hold repeat events  
-    mLongTapTimer.reset(new (EMM) MulSliderLongTapTimer(this)); 
-    mDragVisual = NULL; 
-    mSliderModel = NULL;
-    mSliderWidget = NULL; 
-    // Store the widget and model pointer
-    initializeSliderData();  
-    }
-
-// ---------------------------------------------------------------------------
-//  Destructor
-// ---------------------------------------------------------------------------
-//
-MulSliderHorizontal::~MulSliderHorizontal()
-    {
-    if(mData)
-        {
-       
-        (&control().Env())->TextureManager().UnloadTexture(mData->mTrackTopTextureId);
-        (&control().Env())->TextureManager().UnloadTexture(mData->mTrackBottomTextureId);
-        (&control().Env())->TextureManager().UnloadTexture(mData->mTrackMiddleTextureId);
-        // (&control().Env())->TextureManager().UnloadTexture(KAlfMarkerSelectedTextureId);
-        (&control().Env())->TextureManager().UnloadTexture(mData->mMarkerTextureId);
-        // Visualization Data
-        delete mData;
-        }
-    else
-        {
-
-        }
-
-    }//End of Destructor
-
-// ---------------------------------------------------------------------------
-// From class MAlfInterfaceBase.
-// Getter for interfaces provided by the slider widget.
-// ---------------------------------------------------------------------------
-//
-IAlfInterfaceBase* MulSliderHorizontal::makeInterface(
-                        const IfId& aType)
-    {
-    UString param (aType.mImplementationId);
-     if (param == IAlfWidgetEventHandler::type().mImplementationId)
-        {
-        return static_cast<IAlfWidgetEventHandler*>(this);
-        }
-
-    else if (param == 
-        IMulSliderBaseElementInternal::type().mImplementationId)
-        {
-        return static_cast<IMulSliderBaseElementInternal*>(this);
-        }  
-    else
-        {
-        return AlfElement ::makeInterface(aType);
-        }  
-   
-    }
-
-
-//--------------------------------------------------------------------------
-// APIs from the IMulSliderBaseElement 
-//--------------------------------------------------------------------------
-
-// ---------------------------------------------------------------------------
-// Gets called when the parent layout is relayouted.
-// resets all the anchor points and updates the visualization
-// ---------------------------------------------------------------------------
-//
-void MulSliderHorizontal::baseLayoutSizeChanged()
-    {
-    mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification); 
-    if(mData->mMainLayout)
-        {
-        // This is a hack to resolve screen refresh issue
-        control().Env().RefreshCallBack(&(control().Env()));
-        // Layout the visualization with correct LCT values 
-        layoutVisuals(mSliderModel->GetTemplate());
-        // Convert all the user defined data to pixels
-        ConvertDataToPixels();
-        // Set the thumb position to the current tick
-        SetThumbPosition();
-        if(!mSliderModel->IsLandscape())
-            {
-            if(mSliderWidget->GetOpacity())
-                {
-                TAlfTimedValue opacity(1,0);
-                mData->mMainLayout->SetOpacity(opacity);
-                }
-            }
-        else
-            {
-            TAlfTimedValue opacity(0,0);
-            mData->mMainLayout->SetOpacity(opacity);
-            } 
-        } 
-
-    mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);   
-    }
-
-// ---------------------------------------------------------------------------
-// From class IAlfWidgetEventHandler.
-// ---------------------------------------------------------------------------
-//  
-
-
-// ---------------------------------------------------------------------------
-//  Destructor
-// ---------------------------------------------------------------------------
-//
-void MulSliderHorizontal::setActiveStates(
-    unsigned int /*aStates*/)
-    {
-    //do nothing
-    }
-
-
-
-// ---------------------------------------------------------------------------
-//  initializes Model and Widget Pointer
-// ---------------------------------------------------------------------------
-//
-
-void  MulSliderHorizontal::initializeSliderData() 
-    {
-    // initialize the Slider Widget Pointer;
-    IAlfWidgetFactory& widgetFactory = 
-    AlfWidgetEnvExtension::widgetFactory(control().Env());
-    mSliderWidget = static_cast<MulSliderWidget*>(widgetFactory.findWidget(
-            control().widget()->widgetName()));
-
-    // initialize the Slider Model Pointer;
-    mSliderModel = static_cast<MulSliderModel*>(mSliderWidget->model());
-    }
-    
-// ---------------------------------------------------------------------------
-// layoutVisuals
-// ---------------------------------------------------------------------------
-// 
-void MulSliderHorizontal::layoutVisuals(sliderTemplate /*aTemplateId*/)
-    {
-    // TAknLayoutRect to store the Lct rect 
-    TAknLayoutRect layoutRect;
-    CAlfControl* ctrl = (CAlfControl*)&control();
-
-    //get the lct rect for mBaseSliderLayout and set it 
-    //aacf_slider_pane(0)
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderPane, 
-            mData->mMainLayout,
-            KVariety0);
-    mData->mBaseSliderLayout->SetRect(
-            TRect( TPoint( 0,0 ),
-                    TSize( layoutRect.Rect().Size().iWidth, 
-                            layoutRect.Rect().Size().iHeight ))) ;
-
-    mData->mSliderCentreGhost->SetRect(
-            TRect( TPoint( 0,0 ),
-                    TSize( layoutRect.Rect().Size().iWidth, 
-                            layoutRect.Rect().Size().iHeight ))) ;
-
-    //get the lct rect for mSliderCentre and set it 
-    //aaslider_bg_pane(0)
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderCenter,
-            mData->mBaseSliderLayout,
-            KVariety0);
-
-
-    mData->mSliderCentre->SetRect(
-            TRect( TPoint(layoutRect.Rect().iTl.iX,
-                    layoutRect.Rect().iTl.iY ),
-                    TSize( layoutRect.Rect().Size().iWidth, 
-                            layoutRect.Rect().Size().iHeight))) ; 
-
-
-   
-    //TAknLayoutRect handleGostRect = layoutRect;    
-    //get the lct rect for mSliderHandle and set it 
-    //aacf_slider_pane_g1(0)
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderHandle,mData->mBaseSliderLayout,KVariety1);
-
-    // This is a correction since the handle LCT data is not correct
-   /* mData->mSliderHandle->SetRect(
-            TRect( TPoint(handleGostRect.Rect().iTl.iX + 
-                    (handleGostRect.Rect().Size().iWidth - 
-                            layoutRect.Rect().Size().iWidth)/2    ,
-                            handleGostRect.Rect().iTl.iY + 
-                            (handleGostRect.Rect().Size().iHeight -
-                                    layoutRect.Rect().Size().iHeight)/2 ),
-                                    TSize( layoutRect.Rect().Size().iWidth, 
-                                            layoutRect.Rect().Size().iHeight ))) ; */
-    mData->mSliderHandle->SetRect(
-                TRect( TPoint(layoutRect.Rect().iTl.iX,
-                        layoutRect.Rect().iTl.iY ),
-                                        TSize( layoutRect.Rect().Size().iWidth, 
-                                                layoutRect.Rect().Size().iHeight ))) ;
-    mData->mSliderHandleGhost->SetRect(
-               TRect( TPoint(layoutRect.Rect().iTl.iX,
-                       mData->mBaseSliderLayout->Pos().iX.ValueNow() ),
-                       TSize( layoutRect.Rect().Size().iWidth, 
-                               mData->mBaseSliderLayout->Size().iY.ValueNow() ))) ;
-    //get the lct rect for mTrackLeftImage and set it 
-    //aaslider_bg_pane_g1(0)  
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderLeft,mData->mSliderCentre,0);
-
-    mData->mTrackLeftImage->SetRect(
-            TRect( TPoint(layoutRect.Rect().iTl.iX,
-                    layoutRect.Rect().iTl.iY ),
-                    TSize( layoutRect.Rect().Size().iWidth, 
-                            layoutRect.Rect().Size().iHeight ))) ; 
-
-    //get the lct rect for mTrackMiddleImage and set it 
-    //aaslider_bg_pane_g2_copy1(0)
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderCentre,mData->mSliderCentre,0);
-
-    mData->mTrackMiddleImage->SetRect(
-            TRect( TPoint(layoutRect.Rect().iTl.iX,
-                    layoutRect.Rect().iTl.iY ),
-                    TSize( layoutRect.Rect().Size().iWidth,
-                            layoutRect.Rect().Size().iHeight ))) ; 
-
-    //get the lct rect for mTrackRightImage and set it 
-    //aaslider_bg_pane_g2(0)
-    layoutRect = MulSliderUtils::GetComponentRect(
-            EHSliderRight,mData->mSliderCentre,0);
-
-    mData->mTrackRightImage->SetRect(
-            TRect( TPoint(layoutRect.Rect().iTl.iX,
-                    layoutRect.Rect().iTl.iY ),
-                    TSize( layoutRect.Rect().Size().iWidth, 
-                            layoutRect.Rect().Size().iHeight ))) ; 
-
-
-    if(mData->mTrackLeftImage && 
-            mData->mTrackMiddleImage && 
-            mData->mTrackRightImage)
-        {
-        setTrackImage();
-        }
-
-    if(mData->mSliderHandle)
-        {
-        mData->mImageTextureId = KAlfMarkerTextureId;
-        mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
-                KAlfAutoGeneratedTextureId/*KAlfMarkerTextureId*/,
-                (MAlfBitmapProvider *)this,
-                (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|EAlfTextureFlagSkinContent)));
-
-        TAlfImage markerImage(*mData->mTexture );
-        mData->mSliderHandle->SetImage(markerImage);
-
-        }
-
-    }
-
-// ---------------------------------------------------------------------------
-// Used for setting images for the track 
-// ---------------------------------------------------------------------------
-//
-
-void MulSliderHorizontal::setTrackImage()
-    {
-    TInt flags = EAlfTextureFlagSkinContent;
-    flags |= EAlfTextureFlagAutoSize;
-    CAlfControl* ctrl = (CAlfControl*)&control();
-    //create texture for leftimage
-    mData->mImageTextureId = KAlfTrackTopTextureId;
-    mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
-            KAlfAutoGeneratedTextureId/*KAlfTrackTopTextureId*/,
-            (MAlfBitmapProvider *)this,
-            (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
-                    EAlfTextureFlagSkinContent)));
-
-    TAlfImage trackLeftImage(*mData->mTexture );
-
-    //create texture for middleimage
-    mData->mImageTextureId = KAlfTrackMiddleTextureId;
-    mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
-            KAlfAutoGeneratedTextureId/*KAlfTrackMiddleTextureId*/,
-            (MAlfBitmapProvider *)this,
-            (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
-                    EAlfTextureFlagSkinContent)));
-    TAlfImage trackMiddleImage(*mData->mTexture );
-    //create texture for right image
-    mData->mImageTextureId = KAlfTrackBottomTextureId;
-    mData->mTexture = &((ctrl->Env()).TextureManager().CreateTextureL(
-            KAlfAutoGeneratedTextureId/*KAlfTrackBottomTextureId*/,
-            (MAlfBitmapProvider *)this,
-            (TAlfTextureFlags)(EAlfTextureFlagRetainResolution|
-                    EAlfTextureFlagSkinContent)));
-
-    TAlfImage trackRightImage(*mData->mTexture );
-    // Set Image on visuals
-    if(AknLayoutUtils::LayoutMirrored())
-        {
-        mData->mTrackLeftImage->SetImage(trackRightImage);
-        mData->mTrackRightImage->SetImage(trackLeftImage);
-        }
-    else
-        {
-        mData->mTrackLeftImage->SetImage(trackLeftImage);
-        mData->mTrackRightImage->SetImage(trackRightImage);
-        }
-
-    mData->mTrackMiddleImage->SetImage(trackMiddleImage); 
-
-    }//End of setImage
-        
-// ---------------------------------------------------------------------------
-// ProvideBitmapL()
-// ---------------------------------------------------------------------------
-//
-void MulSliderHorizontal::ProvideBitmapL (TInt aId, 
-                                         CFbsBitmap *& aBitmap, 
-                                         CFbsBitmap *& aMaskBitmap)
-    {
-    TAknLayoutRect layoutRect;
-    TRect rect;
-    TSize size;
-    switch(mData->mImageTextureId)
-        {
-        case KAlfTrackTopTextureId:
-            {
-            AknIconUtils::CreateIconL(
-                   aBitmap,
-                   aMaskBitmap,
-                   KAvkonBitmapFile,
-                   EMbmAvkonQgn_graf_nslider_end_left,
-                   EMbmAvkonQgn_graf_nslider_end_left_mask );
-
-
-            layoutRect = MulSliderUtils::GetComponentRect(
-                   EHSliderLeft,mData->mSliderCentre,KVariety0);
-
-            AknIconUtils::SetSize( aBitmap,
-                   TSize(layoutRect.Rect().Size().iWidth,
-                           layoutRect.Rect().Size().iHeight),
-                           EAspectRatioNotPreserved);
-            mData->mImageTextureId = 0;
-            mData->mTrackTopTextureId = aId;
-            }
-            break;
-        case KAlfTrackBottomTextureId:
-            {
-            AknIconUtils::CreateIconL(
-                    aBitmap,
-                    aMaskBitmap,
-                    KAvkonBitmapFile,
-                    EMbmAvkonQgn_graf_nslider_end_right,
-                    EMbmAvkonQgn_graf_nslider_end_right_mask );
-            layoutRect = MulSliderUtils::GetComponentRect(
-                    EHSliderRight,
-                    mData->mSliderCentre,
-                    KVariety0);
-
-            AknIconUtils::SetSize( aBitmap,
-                    TSize(layoutRect.Rect().Size().iWidth,
-                            layoutRect.Rect().Size().iHeight),
-                            EAspectRatioNotPreserved);
-
-    
-            mData->mImageTextureId = 0;
-            mData->mTrackBottomTextureId = aId;
-            }
-            break;
-        case KAlfTrackMiddleTextureId:
-            {
-            AknIconUtils::CreateIconL(
-                    aBitmap,
-                    aMaskBitmap,
-                    KAvkonBitmapFile,
-                    EMbmAvkonQgn_graf_nslider_middle,
-                    EMbmAvkonQgn_graf_nslider_middle_mask );
-
-            //AknIconUtils::SetSize( aBitmap,TSize(304,14),EAspectRatioNotPreserved);    
-            layoutRect = MulSliderUtils::GetComponentRect(
-                    EPSliderCentre,
-                    mData->mSliderCentre,
-                    KVariety0);
-            AknIconUtils::SetSize( aBitmap,
-                    TSize(layoutRect.Rect().Size().iWidth,
-                            layoutRect.Rect().Size().iHeight),
-                            EAspectRatioNotPreserved);
-            mData->mImageTextureId = 0;
-            mData->mTrackMiddleTextureId = aId;
-            }
-            break;
-        case KAlfMarkerTextureId:
-            {
-            AknIconUtils::CreateIconL(
-                    aBitmap,
-                    aMaskBitmap,
-                    KAvkonBitmapFile,
-                    EMbmAvkonQgn_graf_nslider_marker,
-                    EMbmAvkonQgn_graf_nslider_marker_mask );            
-
-            layoutRect = MulSliderUtils::GetComponentRect(
-                    EHSliderHandle,
-                    mData->mBaseSliderLayout,
-                    KVariety1);
-
-            AknIconUtils::SetSize( aBitmap,
-                    TSize(layoutRect.Rect().Size().iWidth,
-                            layoutRect.Rect().Size().iHeight),
-                            EAspectRatioNotPreserved);
-            mData->mImageTextureId = 0;
-            mData->mMarkerTextureId = aId;
-            }
-        default:
-            break;
-               
-        }
-    }
- 
-    
-// ---------------------------------------------------------------------------
-//  ConvertDataToPixels
-// ---------------------------------------------------------------------------
-// 
-void MulSliderHorizontal::ConvertDataToPixels()   
-    {
-    // Calculate the range in pixel values
-    int distance = (mData->mSliderCentre->Size().iX.ValueNow() - 
-            mData->mSliderHandle->Size().iX.ValueNow());
-    if((mSliderModel->MaxRange() - mSliderModel->MinRange()) != 0)
-        {
-        // Calculate Tick Size in Pixels
-        mData->mTickInPixels = 
-        (float)distance /(mSliderModel->MaxRange() 
-                - mSliderModel->MinRange()) ;                             
-        }
-    // Get the track start pixel value  
-    mData->mTrackStartPoint = mData->mSliderCentre->Pos().iX.ValueNow()   ;  
-    // Store current tick
-    mData->mCurrTick =  mSliderModel->PrimaryValue() ; 
-    mData->mTick = mSliderModel->Tick();
-    }
-    
-    
-// ---------------------------------------------------------------------------
-//  createVisualization
-// ---------------------------------------------------------------------------
-// 
-void MulSliderHorizontal::createVisualization(sliderTemplate /*aTemplateId*/)
-    {
-    // Create the visualization
-    CAlfControl* ctrl = (CAlfControl*)&control();
-    // Visual Hierarchy creation
-    //creating mMainLayout 
-    mData->mMainLayout = CAlfLayout::AddNewL(*ctrl,NULL); 
-    // set the flag for Notifications and mirroring  
-    mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
-    mData->mMainLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-    // create mBaseSliderLayout 
-    mData->mBaseSliderLayout = CAlfLayout::AddNewL(*ctrl,mData->mMainLayout);
-    mData->mBaseSliderLayout->SetFlag(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
-    //create dummy layout for slider track
-    mData->mSliderCentreGhost = 
-    CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
-    //create dummy layout for slider Thumb
-    // create imagevisual for slider track
-    mData->mSliderCentre = 
-    CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);
-    mData->mTrackLeftImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
-    mData->mTrackMiddleImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
-    mData->mTrackRightImage = CAlfImageVisual::AddNewL(*ctrl,mData->mSliderCentre);
-
-    // create imagevisual for slider thumb 
-    mData->mSliderHandle = 
-    CAlfImageVisual::AddNewL(*ctrl,mData->mBaseSliderLayout);
-    // Attach brush and transfer its ownership to the visual.
-    mData->mSliderHandleGhost = 
-    CAlfLayout::AddNewL(*ctrl,mData->mBaseSliderLayout);                           
-
-    // Get the widget opacity and apply on root visual
-    mSliderWidget->ShowWidget(mSliderWidget->GetOpacity(),0);
-    }
-    
-
-// ---------------------------------------------------------------------------
-//  eventHandlerType          
-// ---------------------------------------------------------------------------
-//
-IAlfWidgetEventHandler::AlfEventHandlerType MulSliderHorizontal::eventHandlerType()
-    {
-    return IAlfWidgetEventHandler::EPresentationEventHandler;
-    }
-
-
-// ---------------------------------------------------------------------------
-//  eventExecutionPhase         
-// ---------------------------------------------------------------------------
-//
-IAlfWidgetEventHandler::AlfEventHandlerExecutionPhase MulSliderHorizontal::eventExecutionPhase()
-    {
-    return IAlfWidgetEventHandler::ETunnellingPhaseEventHandler;
-    }
-
-// ---------------------------------------------------------------------------
-//  offerEvent
-// ---------------------------------------------------------------------------
-//
-AlfEventStatus MulSliderHorizontal::offerEvent( CAlfWidgetControl& /*aControl*/, 
-                                              const TAlfEvent& aEvent )
-    {    
-    AlfEventStatus ret = EEventNotHandled;	
-    if(!mSliderWidget->IsHidden())
-        {	    
-        if(aEvent.IsCustomEvent())
-            {
-            if(aEvent.CustomParameter() == EEventMissedPointerUp)
-                {
-                mData->mLongTapStarted = false;
-                ret=EEventHandled;
-                handlePointerUpEvent();
-                }
-            }
-        // handle key events    
-        else if(aEvent.IsKeyEvent() &&  mSliderWidget->IsKeyEnabled())
-            { 		
-            ret = HandleKeyEvents(aEvent);	             
-            }    		    
-        // Pointer drag events and single tap events      
-        else if(aEvent.IsPointerEvent())
-            {
-            ret = HandlePointerEvents((TAlfEvent *)&aEvent);	    
-            }     
-        }
-    return ret;
-    } 
-    
-    
-// ---------------------------------------------------------------------------
-//  handleLongTap ( Long TapTimer calls  inside its RUNL)
-// ---------------------------------------------------------------------------
-// 
- AlfEventStatus MulSliderHorizontal::handleLongTap()
-     {
-     mData->mMainLayout->ClearFlag(EAlfVisualFlagLayoutUpdateNotification);
-     //CAlfVisual * focusvisual = aEvent->Visual();
-     AlfEventStatus ret = EEventNotHandled;
-     if (mData->mVisual == mData->mSliderCentre || mData->mVisual == mData->mSliderCentreGhost)
-         {
-         mData->mLongTapStarted = true;
-         ret =  trackVisualHit(mData->mVisual);
-         // Handle Long tap timer tactile feedback 
-         MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
-         sldrcntrl.TactileEffectOnTouchandHold();
-         }
-
-     //  ret = HandlePointerEvents(aEvent);
-     mData->mMainLayout->SetFlag(EAlfVisualFlagLayoutUpdateNotification);
-     return ret;
-     }
-    
-    
-// ---------------------------------------------------------------------------
-// HandleKeyEvents
-// ---------------------------------------------------------------------------
-// 
- AlfEventStatus MulSliderHorizontal::HandleKeyEvents(const TAlfEvent& aEvent)
-     {
-     AlfEventStatus ret = EEventNotHandled;
-     int newPos = 0;
-     int data = 0;
-     if(AknLayoutUtils::LayoutMirrored())
-         {
-         data= - mData->mTick;
-         }
-     else
-         {
-         data= mData->mTick;
-         }
-     if(aEvent.Code() == EEventKey  )
-         {
-         if(aEvent.KeyEvent().iScanCode == EStdKeyRightArrow)
-             {
-             ret = EEventHandled;
-             newPos = mSliderModel->PrimaryValue() + data;
-             updateModelPrimaryValue(newPos);          
-             }
-         else if(aEvent.KeyEvent().iScanCode == EStdKeyLeftArrow)
-             {
-             ret = EEventHandled;
-             newPos = mSliderModel->PrimaryValue() - data;
-             updateModelPrimaryValue(newPos);
-             }
-         }
-     return ret;
-     }
-	
-	
-// ---------------------------------------------------------------------------
-//  Sends drag Up or Down event, according to the hit position
-//  on track
-// ---------------------------------------------------------------------------
-//
-AlfEventStatus MulSliderHorizontal::trackVisualHit(CAlfVisual * /*aHitVisual*/)
-    {
-
-    //Find the thumb Anchor Layout.
-    TAlfTimedPoint thumbVisPos = mData->mSliderHandle->Pos();
-    TAlfTimedPoint thumbVisSize = mData->mSliderHandle->Size();
-    //Check if click was above/to left or below/to right of 
-    //thumb
-    if (mData->mLongTapPos.iX  < thumbVisPos.iX.ValueNow())
-        {// Pointer down happened left side of Handle 
-
-        int newPos = mSliderModel->PrimaryValue() - mData->mTick;
-        if(mData->mLongTapStarted)
-            {
-            if(mData->mdirection !=2)
-                  {
-            	// Move Handle 
-            	updateModelPrimaryValue(newPos);
-            	mData->mdirection = 1;
-            	}
-            }
-        }
-    else if (mData->mLongTapPos.iX  > (thumbVisPos.iX.ValueNow() + 
-            thumbVisSize.iX.ValueNow()) )
-        {
-        // Pointer down happened right side of Handle
-        int newPos = mSliderModel->PrimaryValue() + mData->mTick;
-        if(mData->mLongTapStarted)
-            {
-            if(mData->mdirection !=1)
-                {
-            	// Move Handle
-            	updateModelPrimaryValue(newPos);
-            	mData->mdirection = 2;
-            	}
-            }  
-        }
-    else 
-        {
-        if(mData->mIsLongTapObserverSet)
-            {
-            // Stop the long tap timer
-            mLongTapTimer->Stop();
-            mData->mLongTapStarted = false;
-            if(AknLayoutUtils::LayoutMirrored() )
-                {
-                mData->mLongTapPos.iX = mData->mMainLayout->Size().iX.ValueNow() - 
-                mData->mLongTapPos.iX;
-                }
-            mData->mIsLongTapObserverSet = EFalse;  
-            if(!mData->mOperation)
-                {
-                mData->mVisual  =  mData->mSliderHandle;
-                initializeThumbDragData(
-                        mData->mLongTapPos);
-                }  
-            }
-        else
-            {
-            //Do Nothing.
-            }                            
-        }
-    return EEventHandled;
-    }	
-
-	
-// ---------------------------------------------------------------------------
-//  handles the pointerDown event
-// 
-// ---------------------------------------------------------------------------
-//
-AlfEventStatus MulSliderHorizontal::handlePointerDownEvent(TAlfEvent * aPntrEvent)
-    {
-    CAlfVisual * focusvisual = aPntrEvent->Visual();
-    AlfEventStatus result = EEventNotHandled;
-    if (focusvisual)
-        {
-        mData->mVisual = focusvisual; 
-
-        if (IsSliderVisual(focusvisual))
-            {
-            control().processEvent(TAlfEvent(ECustomEventIconClick));  
-            control().Display()->Roster().SetPointerEventObservers( 
-                    EAlfPointerEventReportDrag ,control());
-            if(!mData->mOperation)   
-                {  
-                mData->mIsLongTapObserverSet = ETrue;
-                //mData->mLongTapPos = aPntrEvent->PointerEvent().iParentPosition;
-                mirrorPointerPosition(aPntrEvent->PointerEvent().iParentPosition);
-                mData->mLongTapStarted = true;
-                mLongTapTimer->Start();
-                // Dont send custom event at pointer up
-
-                }
-            //Tick Movement
-            if (focusvisual == mData->mSliderCentre ||
-                    focusvisual == mData->mSliderCentreGhost)
-                {
-                mData->mLongTapStarted = true;
-                return trackVisualHit(focusvisual);
-                }
-
-            // Drag 
-            else if (focusvisual == mData->mSliderHandle ||
-                    focusvisual == mData->mSliderHandleGhost )
-                {
-                // Initialize the drag variables
-                if(!mData->mOperation)
-                    {
-                    initializeThumbDragData(
-                            aPntrEvent->PointerEvent().iParentPosition);
-                    //Tactile Feedback for thumb touch
-                    MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
-                    sldrcntrl.TactileEffectOnTouchandHold();
-                    }
-
-                result = EEventHandled;
-                }
-            }
-
-        }
-    return result;
-    }
-
-	
-// ---------------------------------------------------------------------------
-// HandlePointerEvents
-// ---------------------------------------------------------------------------
-// 
- AlfEventStatus MulSliderHorizontal::HandlePointerEvents(TAlfEvent* aEvent)
-     {
-     AlfEventStatus ret = EEventHandled;
-     if (aEvent->PointerEvent().iType == TPointerEvent::EButton1Down)
-         {
-         mData->mdirection = 0;
-         ret = handlePointerDownEvent(aEvent); 
-         }
-     // Drag Events
-     else if (aEvent->PointerEvent().iType == TPointerEvent::EDrag)
-         {
-
-         if(!mData->mOperation) 
-             {// Drag during tap and hold on track . 
-             if(mData->mIsLongTapObserverSet)
-                 {// Store the new pointer position
-                 //mData->mLongTapPos=aEvent->PointerEvent().iParentPosition;
-                 mirrorPointerPosition(aEvent->PointerEvent().iParentPosition);
-                 }
-             else
-                 {
-                 //Do Nothing.
-                 }    
-             }
-         else
-             {
-             // Drag on Handle
-             if(mData->mIsLongTapObserverSet &&
-                     mData->mVisual && 
-                     mData->mSliderHandle &&  
-                     mData->mSliderHandleGhost) 
-                 {                
-                 // Store the new pointer position
-                 mirrorPointerPosition(aEvent->PointerEvent().iParentPosition);                    
-                 }
-             else
-                 {
-                 // Do nothing
-                 }
-             int dist;
-             // Calculate the distance moved from the drag  start point
-             if(AknLayoutUtils::LayoutMirrored())
-                 {
-                 dist = mData->mDragPoint.iX - 
-                 aEvent->PointerEvent().iParentPosition.iX  ;
-                 }
-             else
-                 {
-                 dist = aEvent->PointerEvent().iParentPosition.iX - 
-                 mData->mDragPoint.iX ;
-                 }
-             // Calculate the new tick position
-             int precision = KRoundupvalue;
-             if(dist<0)
-                 {
-                 precision = -KRoundupvalue;
-                 }
-             int newPos= (int)(((float)dist / mData->mTickInPixels ) + precision) + 
-             mData->mDragStartStep;
-             // send tactile sensitive event
-             // Update the model hence update visualization
-             updateModelPrimaryValue(newPos);
-             }
-         // Tactile Feedback for Drag
-         //Tactile Feedback for thumb drag
-         MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
-         sldrcntrl.TactileEffectOnDrag(*aEvent);
-         }
-     else if(aEvent->PointerUp()  )
-         {
-         mData->mLongTapStarted = false;
-         handlePointerUpEvent();
-         
-         }
-     else
-         {
-         //Do Nothing.
-         }
-
-     return ret;
-     }
-    
-    
-// ---------------------------------------------------------------------------
-//  updateModelPrimaryValue
-// ---------------------------------------------------------------------------
-//    
-void MulSliderHorizontal::updateModelPrimaryValue( int aNewPosValue) 
-    {
-    // Validate the new tick value
-    if(aNewPosValue< mSliderModel->MinRange())
-        {
-        aNewPosValue = mSliderModel->MinRange();	
-        }
-    else if(aNewPosValue > mSliderModel->MaxRange())
-        {
-        aNewPosValue = mSliderModel->MaxRange();	
-        }
-    if(mSliderModel->PrimaryValue() != aNewPosValue && mData->mTick != 0)
-        {
-        // Update visualization and model only if data is changed
-        mPosData.reset(new(EMM)MulSliderPos);
-        mPosData->mPreviousValue = mSliderModel->PrimaryValue()  ;
-        mSliderModel->SetPrimaryValue(aNewPosValue);
-        mPosData->mCurrentValue =aNewPosValue;
-        mData->mCurrTick = aNewPosValue; 
-
-        // Send event to the slider widget        
-        TAlfEvent customevent(ETypePrimaryValueChange,
-                (uint)mPosData.get());
-        control().processEvent(customevent);
-        }
-    }
-    
-
-// ---------------------------------------------------------------------------
-//  snapPrimaryValueToTicks
-// ---------------------------------------------------------------------------
-//    
-void MulSliderHorizontal::snapPrimaryValueToTicks()
-    {
-    // If the position is not a multiple of ticks then 
-    //snap to the nearest tick multiple
-
-    int currHandlePos = mSliderModel->PrimaryValue() - mSliderModel->MinRange();
-    int tick = mSliderModel->Tick();
-    int newPos = currHandlePos + mSliderModel->MinRange();
-    if(mSliderModel->PrimaryValue() < mSliderModel->MaxRange())
-        {         
-        int diff = 0;
-        if(tick > 0) //model
-            {
-            diff = currHandlePos - ((currHandlePos /tick) * tick);
-            }
-        if(diff !=0)
-            {            
-            newPos = currHandlePos + tick - diff + mSliderModel->MinRange();            
-            }        
-        }
-
-    // Update model
-    updateModelPrimaryValue(newPos);
-    } 
-    
-      
-// ---------------------------------------------------------------------------
-//  handlePointerUpEvent
-// 
-// ---------------------------------------------------------------------------
-//
-void MulSliderHorizontal::handlePointerUpEvent()
-    {
-    // if thumb or track is clicked, change the graphics
-    // Send event if single click has hapened 
-
-    snapPrimaryValueToTicks();
-    
-    if(mData->mOperation)
-        {
-        //Somehow missed the Up event?
-        stopDrag();
-        //Tactile Feedback For Thumb Release
-        MulSliderControl& sldrcntrl = static_cast<MulSliderControl&>(control());
-        sldrcntrl.TactileEffectOnRelease();
-        }
-    if(mData->mIsLongTapObserverSet)
-        {
-        // Stop the long tap timer
-        mLongTapTimer->Stop();
-        // Un-register with the roster for long tap events 
-        control().Display()->Roster().SetPointerEventObservers(0,
-                control());
-        mData->mIsLongTapObserverSet = EFalse;    
-        }
-    else
-        {
-        //Do Nothing.
-        }    
-    }
-	
-	
-// ---------------------------------------------------------------------------
-// UpdateVisualization
-// ---------------------------------------------------------------------------
-//	  
-void MulSliderHorizontal::updateVisualization()
-    {
-    ConvertDataToPixels();
-    SetThumbPosition();
-    }
-    
-// ---------------------------------------------------------------------------
-//Mirror pointer position
-// ---------------------------------------------------------------------------
-//	  
-void MulSliderHorizontal::mirrorPointerPosition(const TPoint& aPointerPos )
-    {    
-    mData->mLongTapPos = aPointerPos;
-    if(AknLayoutUtils::LayoutMirrored())
-        {
-        mData->mLongTapPos.iX  = mData->mMainLayout->Size().iX.ValueNow() -
-        mData->mLongTapPos.iX  ;
-        }
-    }    
-// ---------------------------------------------------------------------------
-// SetThumbPosition
-// ---------------------------------------------------------------------------
-//
-
-void MulSliderHorizontal::SetThumbPosition()
-    {
-    // Current primary value in pixels
-    int newTickVal = (mSliderModel->PrimaryValue() - mSliderModel->MinRange()) * 
-    mData->mTickInPixels;
-    // Handle
-    int handleY = mData->mSliderHandle->Pos().iY.ValueNow();
-    int ghostHandleY = mData->mSliderHandleGhost->Pos().iY.ValueNow();
-    // Handle new pos
-    int widthDiff = (mData->mSliderHandleGhost->Size().iX.ValueNow() - 
-            mData->mSliderHandle->Size().iX.ValueNow())/2;
-    TAlfRealPoint pnt(mData->mTrackStartPoint + newTickVal,handleY); 
-    // Ghost Handle ( Extended) new pos 
-    TAlfRealPoint pnt1(mData->mTrackStartPoint - 
-            widthDiff/2 + newTickVal,ghostHandleY); 
-    // Set the position
-    mData->mSliderHandle->SetPos(pnt,0);
-    mData->mSliderHandleGhost->SetPos(pnt1,0);
-
-    // Update visualization variables
-    mData->mCurrTick = mSliderModel->PrimaryValue();
-    }
-
-
-// ---------------------------------------------------------------------------
-// accept
-// ---------------------------------------------------------------------------
-// 
-bool MulSliderHorizontal::accept( CAlfWidgetControl& /*aControl*/, 
-                                 const TAlfEvent& aEvent ) const
-	{
-	 // Accept only key or pointer events.
-	 if(aEvent.IsKeyEvent()||aEvent.IsPointerEvent())
-		 {
-		 return true;	
-		 }
-	 else
-		 {
-		 return false;
-		 } 
-	}
-
-
-// ---------------------------------------------------------------------------
-//initializeThumbDragData
-// ---------------------------------------------------------------------------
-//    
-bool MulSliderHorizontal::initializeThumbDragData( const TPoint& aPointerPos )
-    {       
-    TRAPD(err,control().Display()->Roster().SetPointerDragThreshold(control(),
-            TAlfXYMetric(TAlfMetric(KXToleranceInPixel,EAlfUnitPixel),
-                    TAlfMetric(KYToleranceInPixel,EAlfUnitPixel))) );  
-
-    if(mData->mVisual && err == KErrNone)
-        {
-        mData->mOperation = EMoveItem;
-        mData->mDragPoint = aPointerPos;
-        mData->mDragStartStep = mSliderModel->PrimaryValue();
-
-        }
-    else
-        {
-        // Do Nothing
-        }   
-    return ETrue;  
-    }
-
-    
-// ---------------------------------------------------------------------------
-// stopDrag
-//  
-// ---------------------------------------------------------------------------
-//
-bool MulSliderHorizontal::stopDrag()
-    {
-    TRAPD(err,
-            control().Display()->Roster().SetPointerEventObservers(
-                    0, 
-                    control()));
-    if(err == KErrNone)
-        {
-        mData->mVisual = NULL;
-        mData->mOperation = ENop;
-        return ETrue;
-        }
-    return EFalse; 
-    }
- 
-    
-        
-
-// ---------------------------------------------------------------------------
-// IsSliderVisual
-// 
-// ---------------------------------------------------------------------------
-// 
-bool MulSliderHorizontal::IsSliderVisual(CAlfVisual *aVisual)
-    {
-    if(aVisual == mData->mSliderCentre||
-            aVisual == mData->mTrackLeftImage ||
-            aVisual == mData->mTrackMiddleImage ||
-            aVisual == mData->mTrackRightImage ||
-            aVisual == mData->mSliderCentreGhost||
-            aVisual == mData->mSliderHandle||
-            aVisual == mData->mSliderHandleGhost)
-        {
-        return true;
-        }
-    return false;   
-    }      	   	
-      	   
-    void MulSliderHorizontal::updateTextVisualization()	
-    {
-    	
-    }
-    }//namespace Alf
-    
-//End Of File