akntouchgesturefw/inc/akntouchgesturefwrecognitionengine.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/akntouchgesturefw/inc/akntouchgesturefwrecognitionengine.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,296 @@
+/*
+* 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:  Touch gesture recognition engine.
+*
+*/
+
+#ifndef C_AKNTOUCHGESTUREFWRECOGNITIONENGINE_H
+#define C_AKNTOUCHGESTUREFWRECOGNITIONENGINE_H
+
+#include <akntouchgesturefwevents.h>
+#include <touchfeedback.h>
+
+#include "akntouchgesturefwutils.h"
+
+namespace AknTouchGestureFw {
+
+class MAknTouchGestureFwObserver;
+class CAknTouchGestureFwPointerState;
+class CAknTouchGestureFwBaseRecognizer;
+class CAknTouchGestureFwSettings;
+
+/**
+ *  Touch gesture recognition engine.
+ *
+ *  @lib akntouchgesturefw
+ *  @since S60 v5.2
+ */
+NONSHARABLE_CLASS( CAknTouchGestureFwRecognitionEngine ) : public CBase
+    {
+
+public:
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param  aObserver  Gesture observer to which the gesture events are
+     *                    sent when a gesture is recognized.
+     * @param  aControl   Control receiving the gesture pointer events.                    
+     */
+    static CAknTouchGestureFwRecognitionEngine* NewL(
+            MAknTouchGestureFwObserver& aObserver,
+            CCoeControl* aControl );
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param  aObserver  Gesture observer to which the gesture events are
+     *                    sent when a gesture is recognized.
+     * @param  aControl   Control receiving the gesture pointer events.                    
+     */
+    static CAknTouchGestureFwRecognitionEngine* NewLC(
+            MAknTouchGestureFwObserver& aObserver,
+            CCoeControl* aControl );
+
+    /**
+     * Destructor.
+     */
+    virtual ~CAknTouchGestureFwRecognitionEngine();
+
+    /**
+     * Notifies observer of a gesture.
+     *
+     * @param  aEvent  Gesture event.
+     */
+    void NotifyObserverL( MAknTouchGestureFwEvent& aEvent );
+
+    /**
+     * Sets client gesture interest.
+     *
+     * @param  aGestureGroups  New client gesture interest.
+     */
+    void SetGestureInterestL( TUint aGestureGroups );
+
+    /**
+     * Provides client gesture interest.
+     *
+     * @return Client gesture interest.
+     */
+    TUint GestureInterest() const;
+
+    /**
+     * Cancels all gesture recognition.
+     */
+    void CancelRecognizing();
+
+    /**
+     * Handles gesture control targeted pointer event received
+     * from window server.
+     *
+     * @param  aPointerData  Pointer event related data.
+     */
+    void HandlePointerEventL( const TPointerEventData& aPointerData );
+
+    /**
+     * Returns a reference to the Central Repository settings provider.
+     *
+     * @return Settings provider.
+     */
+    CAknTouchGestureFwSettings& Settings() const;
+
+    /**
+     * Enables testing features.
+     */ 
+    void EnableTestingFeatures();
+    
+    /**
+     * Gives immediate direct feedback.
+     *
+     * @param aLogicalFeedback - The logical feedback type to play.
+     * @param aFeedbackType - Feedback types to be played as a bitmask 
+     *                        combination of enumeration items from
+     *                        TTouchFeedbackType.  
+     */
+    void ImmediateFeedback(
+        TTouchLogicalFeedback aLogicalFeedback,
+        TTouchFeedbackType aFeedbackType );
+    
+    /**
+     * Starts continuous feedback.
+     *
+     * @param aType         - The continuous feedback type to play.
+     * @param aIntensity    - Intensity of continuous feedback.
+     * @param aTimeout      - Timeout value to automatically stop continuous 
+     *                        feedback if there's no new Start call within the
+     *                        timeout. Use value 0 if timeout is not used.
+     */
+    void StartContinuousFeedback(
+        TTouchContinuousFeedback aContinuousFeedback,
+        TInt aIntensity,
+        TTimeIntervalMicroSeconds32 aTimeout );
+         
+    /**
+     * Modifies continuous feedback.
+     *
+     * @param aIntensity     - New intensity value for feedback.
+     */    
+    void ModifyContinuousFeedback( TInt aIntensity );
+    
+    /**
+     * Stops continuous feedback.
+     */
+    void StopContinuousFeedback();     
+      
+    /**
+     * Defines gesture groups, which trigger tactile feedback automatically.
+     *
+     * @param aGestureGroups - Those gesture groups, which trigger tactile
+     *                         feedback automatically as touch gestures
+     *                         are recognized or being in the process
+     *                         of recognizing.   
+     */ 
+    void SetFeedbackForGroupsL( TUint aGestureGroups );
+
+    /**
+     * Sets gesture types which generate tactile and audio feedback.
+     * 
+     * @param aGestureGroup - Gesture group, which tactile- and audio feedback
+     *                        is affected by this function call.     
+     * @param  aGestureTypesForTactile Gesture types with tactile feedback
+     * @param  aGestureTypesForAudio   Gesture types with audio feedback
+     */
+    void SetFeedbackForTypesL(
+        TAknTouchGestureFwGroup aGestureGroup,
+        TUint aGestureTypesForTactile,
+        TUint aGestureTypesForAudio );
+    
+
+private:
+
+    /**
+     * C++ constructor.
+     *
+     * @param  aObserver  Gesture observer to which the gesture events are
+     *                    sent when a gesture is recognized.
+     * @param  aControl   Control receiving the gesture pointer events.
+     */
+    CAknTouchGestureFwRecognitionEngine(
+            MAknTouchGestureFwObserver& aObserver,
+            CCoeControl* aControl );
+
+    /**
+     * Symbian second-phase constructor.
+     */
+    void ConstructL();
+
+    /**
+     * Enables or disables the gesture recognizers on the recognizer array
+     * based on the client's gesture interest.
+     *
+     * @param  aGestureInterest  Current gesture interest.
+     */
+    void UpdateRecognizersForInterest( TUint aGestureInterest );
+
+    /**
+     * Creates new gesture recognizer according to the gesture group.
+     *
+     * @param  aGroup   Gesture group.
+     *
+     * @return Pointer to the created recognizer.
+     */
+    CAknTouchGestureFwBaseRecognizer* CreateRecognizerL(
+            TAknTouchGestureFwGroup aGroup );
+    
+    /**
+     * returns existing gesture recognizer according to the gesture group.
+     *
+     * @param  aGroup   Gesture group.
+     *
+     * @return Pointer to the existing recognizer or NULL if not found.
+     */
+    CAknTouchGestureFwBaseRecognizer* Recognizer(
+            TAknTouchGestureFwGroup aGroup );
+
+    /**
+     * Sends pointer event to recognizers.
+     *
+     * @param  aMultiPointer  @c ETrue if event is multi pointer event.
+     * @param  aPointerData   Pointer event related data.
+     */
+    void SendPointerEventToRecognizersL(
+            TBool aMultiPointer,
+            const TPointerEventData& aPointerData );
+
+private: // data
+
+    /**
+     * Observer for gestures being deduced from pointer events.
+     * Not own.
+     */
+    MAknTouchGestureFwObserver& iObserver;
+
+    /**
+     * Pointer state.
+     * Own.
+     */
+    CAknTouchGestureFwPointerState* iPointerState;
+
+    /**
+     * CenRep settings provider.
+     * Own.
+     */
+    CAknTouchGestureFwSettings* iSettings;
+
+    /**
+     * Flags determing which gesture groups should be recognized.
+     */
+    TUint iGestureInterest;
+
+    /**
+     * Boolean flag to indicate if single touch recognition is ongoing.
+     */
+    TBool iSingleRecognizing;
+
+    /**
+     * Boolean flag to indicate if multi touch recognition is ongoing.
+     */
+    TBool iMultiRecognizing;
+
+    /**
+     * Array for recognizers.
+     */
+    RPointerArray<CAknTouchGestureFwBaseRecognizer> iRecognizers;
+
+    /**
+     * ETrue if testing features are enabled.
+     */
+    TBool iTestingEnabled;
+    
+    /**
+     * Subcriber control.
+     * Not own.
+     */
+    CCoeControl* iControl;
+    
+    /**
+     * Touch feedback instance.
+     * Not own.
+     */
+    MTouchFeedback* iFeedBack;    
+    
+    };
+
+} // namespace AknTouchGestureFw
+
+#endif // C_AKNTOUCHGESTUREFWRECOGNITIONENGINE_H