--- a/mulwidgets/mulsliderwidget/src/mulhorizontalslider.cpp Tue Feb 02 00:28:09 2010 +0200
+++ /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