uifw/AvKon/aknphysics/src/aknphysicsdragobserver.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/aknphysics/src/aknphysicsdragobserver.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,235 @@
+/*
+* Copyright (c) 2009 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:  AknPhysics drag event observer
+*
+*/
+
+
+#include <w32std.h>
+
+#include "aknphysicsdragobserver.h"
+#include "aknphysicsflicktracker.h"
+#include "aknphysicsparameterprovider.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::NewL
+// ---------------------------------------------------------------------------
+//
+CAknPhysicsDragObserver* CAknPhysicsDragObserver::NewL(
+    CAknPhysicsParameterProvider* aProvider )
+    {
+    CAknPhysicsDragObserver* self = 
+        CAknPhysicsDragObserver::NewLC( aProvider );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::NewLC
+// ---------------------------------------------------------------------------
+//
+CAknPhysicsDragObserver* CAknPhysicsDragObserver::NewLC(
+    CAknPhysicsParameterProvider* aProvider )
+    {
+    CAknPhysicsDragObserver* self 
+        = new ( ELeave ) CAknPhysicsDragObserver();
+    CleanupStack::PushL( self );
+    self->ConstructL( aProvider );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::~CAknPhysicsDragObserver
+// ---------------------------------------------------------------------------
+//
+CAknPhysicsDragObserver::~CAknPhysicsDragObserver()
+    {
+    delete iVerticalTracker;
+    delete iHorizontalTracker;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::RegisterEventPosition
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::RegisterEventPosition( 
+    const TPointerEvent* aEvent )
+    {
+    if ( aEvent->iType == TPointerEvent::EButton1Down || 
+         ( !iPointerDown && aEvent->iType == TPointerEvent::EDrag ) )
+        {
+        HandlePointerDownEvent( aEvent->iPosition );
+        iPointerDown = ETrue;
+        }
+    else if ( aEvent->iType == TPointerEvent::EDrag )
+        {
+        HandlePointerDragEvent( aEvent->iPosition );
+        }
+    else if ( aEvent->iType == TPointerEvent::EButton1Up )
+        {
+        if ( iPointerDown )
+            {
+            HandlePointerUpEvent( aEvent->iPosition );
+            }
+        else
+            {
+            Reset();
+            }  
+        iPointerDown = EFalse;            
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::ChangedDragDistance
+// ---------------------------------------------------------------------------
+//
+TPoint CAknPhysicsDragObserver::ChangedDragDistance() const
+    {
+    TPoint dragDistance;
+    dragDistance.iY = iVerticalTracker->FlickStartCoordinate() - iUpPosition.iY;
+    dragDistance.iX = iHorizontalTracker->FlickStartCoordinate() - iUpPosition.iX;
+    return dragDistance;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::ChangedVerticalDragMoveTime
+// ---------------------------------------------------------------------------
+//
+TInt CAknPhysicsDragObserver::ChangedVerticalDragMoveTime() const
+    {
+    if ( iVerticalTracker )
+        {
+        return iVerticalTracker->FlickMoveTime();
+        }
+    return 0;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::ChangedHorizontalDragMoveTime
+// ---------------------------------------------------------------------------
+//
+TInt CAknPhysicsDragObserver::ChangedHorizontalDragMoveTime() const
+    {
+    if ( iHorizontalTracker )
+        {
+        return iHorizontalTracker->FlickMoveTime();
+        }
+    return 0;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::DragChanged
+// ---------------------------------------------------------------------------
+//
+TInt CAknPhysicsDragObserver::DragChanged() const
+    {
+    TBool changed( EFalse );
+    if ( iVerticalTracker )
+        {
+        changed = iVerticalTracker->FlickStartCoordinate() != iDownPosition.iY;
+        }
+    if ( !changed && iHorizontalTracker )
+        {
+        changed = iHorizontalTracker->FlickStartCoordinate() != iDownPosition.iX;
+        }
+    return changed;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::CAknPhysicsDragObserver
+// ---------------------------------------------------------------------------
+//
+CAknPhysicsDragObserver::CAknPhysicsDragObserver()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::ConstructL(
+        CAknPhysicsParameterProvider* aProvider )
+    {
+    iVerticalTracker = CAknPhysicsFlickTracker::NewL( aProvider );
+    iHorizontalTracker = CAknPhysicsFlickTracker::NewL( aProvider );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::HandlePointerDownEvent
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::HandlePointerDownEvent( 
+    const TPoint& aPosition )
+    {
+    iDownPosition = aPosition;
+    iUpPosition = TPoint();
+    iVerticalTracker->InitTracker( aPosition.iY );
+    iHorizontalTracker->InitTracker( aPosition.iX );
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::HandlePointerDragEvent
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::HandlePointerDragEvent( 
+    const TPoint& aPosition )
+    {
+    if ( iVerticalTracker )
+        {
+        iVerticalTracker->DragChanged( aPosition.iY );
+        }
+    if ( iHorizontalTracker )
+        {
+        iHorizontalTracker->DragChanged( aPosition.iX );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::HandlePointerUpEvent
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::HandlePointerUpEvent( 
+    const TPoint& aPosition )
+    {
+    HandlePointerDragEvent( aPosition );
+    iUpPosition = aPosition;
+    }
+
+
+// ---------------------------------------------------------------------------
+// CAknPhysicsDragObserver::Reset
+// ---------------------------------------------------------------------------
+//
+void CAknPhysicsDragObserver::Reset()
+    {
+    iDownPosition.SetXY( 0, 0 );
+    iUpPosition.SetXY( 0, 0 );
+    iVerticalTracker->InitTracker( 0 );
+    iHorizontalTracker->InitTracker( 0 );    
+    }
+