uifw/AvKon/aknphysics/inc/aknphysicsflicktracker.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/aknphysics/inc/aknphysicsflicktracker.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,226 @@
+/*
+* 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 flick tracker
+*
+*/
+
+#ifndef C_AKNPHYSICSFLICKTRACKER_H
+#define C_AKNPHYSICSFLICKTRACKER_H
+
+
+#include <e32base.h>
+
+class CAknPhysicsParameterProvider;
+
+/**
+ *  Tracker data class
+ *
+ */
+NONSHARABLE_CLASS( TAknPhysicsTrackerData )
+    {
+
+public:
+    
+    /**
+     * Flick tracker data coordinate attribute.
+     */
+    TInt iCoordinate;
+
+    /**
+     * Flick tracker data time attribute.
+     */
+    TTime iTime;
+
+    };
+
+/**
+ *  AknPhysics flick tracker
+ *
+ */
+NONSHARABLE_CLASS( CAknPhysicsFlickTracker ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+    static CAknPhysicsFlickTracker* NewL(
+            CAknPhysicsParameterProvider* aProvider );
+
+    /**
+     * Two-phased constructor.
+     */
+    static CAknPhysicsFlickTracker* NewLC(
+            CAknPhysicsParameterProvider* aProvider );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CAknPhysicsFlickTracker();
+    
+    /**
+     * Initializes tracker.
+     * 
+     * @param aCoordinate Start coordinate.
+     */
+    void InitTracker( const TInt& aCoordinate );
+
+    /**
+     * Checks if dragging parameters has changed
+     * with new coordinate.
+     * 
+     * @param aCoordinate New coordinate.
+     */
+    void DragChanged( const TInt& aCoordinate );
+
+    /**
+     * Returns flick start coordinate.
+     * 
+     * @return Flick start coordinate.
+     */
+    TInt FlickStartCoordinate() const;
+
+    /**
+     * Returns flick move time.
+     * 
+     * @return Flick move time.
+     */
+    TInt FlickMoveTime() const;
+
+private:
+
+    /**
+     * C++ constructor.
+     */
+    CAknPhysicsFlickTracker( CAknPhysicsParameterProvider* aProvider );
+
+    /**
+     * Symbian second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Checks if dragging speed has changed.
+     * 
+     * @param aCoordinate New drag coordinate.
+     */
+    void SpeedChanged( const TInt& aCoordinate );
+
+    /**
+     * Returns the drag threshold.
+     *
+     * @return Drag threshold.
+     */
+    TInt Threshold();
+
+    /**
+     * Calculates current dragging speed from new drag coordinate.
+     *
+     * @return Dragging speed.
+     */
+    TInt DragSpeed( const TInt& aNewCoordinate );
+
+    /**
+     * Inits tracker data item.
+     *
+     * @param aData Tracker data item.
+     * @param aCoordinate Initial coordinate.
+     */
+    void InitFlickData( TAknPhysicsTrackerData& aData, 
+                        const TInt& aCoordinate );
+
+    /**
+     * Returns "normal" flick move time.
+     * 
+     * @return Flick move time.
+     */
+    TInt NormalFlickMoveTime() const;
+
+private: // data
+
+    /**
+     * Direction enum.
+     */
+    enum TDirection
+        {
+        EDirectionNone = 1,
+        EDirectionForward,
+        EDirectionBackward
+        };
+
+    /**
+     * Current direction
+     */
+    TDirection iDirection;
+
+    /**
+     * Current coordinate.
+     */
+    TInt iCoordinate;
+
+    /**
+     * Current direction change data.
+     */
+    TAknPhysicsTrackerData iDirectionData;
+    
+    /**
+     * "Normal" flick start data (not affected by speed-ups).
+     */
+    TAknPhysicsTrackerData iNormalStartData;
+    
+    /**
+     * Current speed up data.
+     */
+    TAknPhysicsTrackerData iSpeedUpData;
+    
+    /**
+     * Speed-up start data.
+     */
+    TAknPhysicsTrackerData iSpeedUpStartData;
+    
+    /**
+     * ETrue if last direction change is registered.
+     */
+    TBool iChangeRegistered;
+    
+    /**
+     * ETrue if last speed up is registered.
+     */
+    TBool iSpeedUpRegistered;
+
+    /**
+     * Last drag time.
+     */
+    TTime iLastDragTime;
+    
+    /**
+     * Last drag speed.
+     */
+    TInt iLastDragSpeed;
+
+    /**
+     * Count of ignored events since last speed-up.
+     */
+    TInt iIgnoredEvents;
+
+    /**
+     * Physics parameter provider.
+     * Not own.
+     */
+    CAknPhysicsParameterProvider* iProvider;
+
+    };
+
+#endif // C_AKNPHYSICSFLICKTRACKER_H