diff -r 514d98f21c43 -r 4ea6f81c838a mulwidgets/mulsliderwidget/src/mulhorizontalslider.cpp --- 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 -#include -//Toolkit Includes -// Alfred Client includes -#include -#include -#include -#include -#include -#include -#include -#include - -//Widget Model Includes -#include -#include -#include - -//Avkon Includes -#include -#include -#include -#include - -//slider widget includes -#include -#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(this); - } - - else if (param == - IMulSliderBaseElementInternal::type().mImplementationId) - { - return static_cast(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(widgetFactory.findWidget( - control().widget()->widgetName())); - - // initialize the Slider Model Pointer; - mSliderModel = static_cast(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(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(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(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(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