web_plat/stmgesturefw_api/inc/stmgestureinterface.h
changeset 42 d39add9822e2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web_plat/stmgesturefw_api/inc/stmgestureinterface.h	Tue Feb 02 00:56:45 2010 +0200
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   
+*
+*/
+
+
+#ifndef __STMGESTUREINTERFACE_H__
+#define __STMGESTUREINTERFACE_H__
+
+#include <e32base.h>
+#include <rt_gestureif.h>
+#include <rt_gesturelistener.h>
+#include <rt_uievent.h>
+#include <stmgesturelistener.h>
+
+// FORWARD DECLARATION
+namespace stmGesture
+{
+    class CGestureFramework;
+    class MGestureRecogniserIf;
+}
+
+class CStmGestureContext;
+class MStmGestureListener;
+
+typedef stmGesture::MGestureIf MStmGesture;
+typedef stmGesture::TGestureUid TStmGestureUid;
+typedef stmGesture::MGestureListener MStmGestureEngineListener;
+typedef stmGesture::MGestureRecogniserIf MStmGestureRecogniser;
+typedef stmGesture::TGestureSettings TStmGestureSettings;
+typedef stmGesture::TGestureAreaSettings TStmGestureAreaSettings;
+typedef stmGesture::TGestureArea TStmGestureArea;
+
+///==================================================================
+
+/**
+ * Interface class for defining gesture settings parameters
+ */
+class MStmGestureParameters
+    {
+public:
+    virtual TStmGestureArea* Area(TStmGestureAreaSettings aArea) = 0;
+    virtual TInt Param(TStmGestureSettings aParam) const = 0;
+    virtual TUint8 Enabled(TStmGestureUid aGesture) const = 0;
+    };
+
+///==================================================================
+
+/**
+ * Class definition for gesture settings parameters
+ */
+NONSHARABLE_CLASS( CStmGestureParameters ): public CBase, public MStmGestureParameters
+    {
+public:
+    /*!
+     * Constructors
+     */
+    IMPORT_C CStmGestureParameters();
+    IMPORT_C CStmGestureParameters(const CStmGestureParameters& aParams);
+
+public: //getter methods
+
+    /*!
+     * To get the area settings
+     */
+    TStmGestureArea* Area(TStmGestureAreaSettings aArea) { return &iAreaSettings[aArea]; }
+
+    /*!
+     * To get Gesture params
+     */
+    TInt Param(TStmGestureSettings aParam) const { return iParam[aParam];  }
+
+    /*!
+     * Gesture enabled or not
+     */
+    TUint8 Enabled(TStmGestureUid aGesture) const { return iEnabled[aGesture] != 0; }
+
+public: // setter methods
+
+    /*!
+     * To set the parameters
+     */
+    void SetParam(TStmGestureSettings aParam, TInt aValue) { iParam[aParam] = aValue; }
+
+    /*!
+     * To enable or disble the gestures
+     */
+    void SetEnabled(TStmGestureUid aGesture, TUint8 aParam) { iEnabled[aGesture] = aParam; }
+
+    /*!
+     * Gesture settings
+     */
+    TInt& operator[](TStmGestureSettings aParam) { return iParam[aParam]; }
+
+private:
+    TInt iParam[stmGesture::EGestureSettingsCount];
+    TStmGestureArea iAreaSettings[stmGesture::EGestureAreaSettingsCount];
+    TInt iModified;
+    TUint8 iEnabled[stmGesture::EStmGestureUid_Count];
+    };
+
+///==================================================================
+
+/**
+ * CStmGestureEngine Class Declaration
+ */
+NONSHARABLE_CLASS( CStmGestureEngine ): public CBase
+    {
+public:
+
+    /*!
+     * Gesture Engine Creation
+     */
+    IMPORT_C static CStmGestureEngine* NewL();
+    ~CStmGestureEngine();
+
+public:
+
+    /*!
+     * To Create a context in gesture engine
+     */
+    IMPORT_C CStmGestureContext* CreateContextL(TInt aId);
+
+    /*!
+     * To get the context
+     */
+    IMPORT_C CStmGestureContext* Context(TInt aId);
+
+    /*!
+     * Application use HandlePointerEventL API to pass the raw hardware events to the gesture library
+     */
+    IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent, void* target);
+
+private:
+
+    /*!
+     * default constructor
+     */
+    CStmGestureEngine();
+
+    /*!
+     * Two-phase constructor
+     */
+    void ConstructL();
+
+private: // used by friend class CStmGestureContext
+
+    void EnableContextL(CStmGestureContext& aCtxt);
+    void DisableContextL(CStmGestureContext& aCtxt);
+
+    template<class T>
+    void InitRecognizerL( T*& aGesture, CStmGestureContext& aContext, TBool aNewCOntext);
+
+    void SetupRecognizersL(CStmGestureContext& aCtxt, TBool aNewContext);
+
+private:
+    friend class CStmGestureContext;
+    stmGesture::CGestureFramework* iGf;
+    // Registered/owned contexts
+    RPointerArray<CStmGestureContext> iContexts;
+    // Active set of contexts; latest added defines parameters
+    RPointerArray<CStmGestureContext> iCtxtStack;
+    // Global/default parameters
+    CStmGestureParameters* iConfig;
+    TBool iDtorPhase;
+    };
+
+///==================================================================
+
+//Forward declaration
+class CGestureEventSender;
+
+/**
+ * Gesture context represents a certain configuration of gesture parameters
+ * (including what gestures are enabled) and gesture listeners.
+ * Context can be created beforehand and reused later.
+ * The assumed use of a context is to have rough correspondence between
+ * UI view and enabled gestures.
+ *
+ * @note Gesture contexts are created by an instance of CStmGestureEngine.
+ */
+
+class CStmGestureContext: public CBase, public MStmGestureEngineListener
+    {
+public:
+    /*!
+     * Constructor
+     */
+    CStmGestureContext(CStmGestureEngine& aEngine);
+
+    ~CStmGestureContext();
+
+public: /// Gesture listeners
+
+    /*!
+     * Add listener to the gesture processing context.
+     * @param aListener Listener object
+     * @param aPos Position of inserted listener which determines order in which it receives gesture events (0 == first, before existing)
+     */
+    IMPORT_C void AddListenerL(MStmGestureListener* aListener, TInt aPos = 0);
+
+    /*!
+     * Remove listener from the gesture processing context.
+     * @param aListener Listener object
+     */
+    IMPORT_C TInt RemoveListener(MStmGestureListener* aListener);
+
+    /*!
+     * To get the list of listeners
+     */
+    const RPointerArray<MStmGestureListener>& Listeners() const { return iListeners; }
+
+public: /// Context activation
+    
+    /*!
+     * To set the context configuration in Gesture Engine.
+     */
+    IMPORT_C void SetContext(CCoeControl* aControl);
+   
+    /*!
+     * Initialize context configuration on the Gesture Engine.
+     */
+    IMPORT_C void ActivateL();
+    
+    /*!
+     * deactivate context configuration on the Gesture Engine.
+     */
+    IMPORT_C void Deactivate();
+
+    /*!
+     * gesture configuration
+     */
+    CStmGestureParameters& Config() { return *iConfig; }
+    
+    /*!
+     * Enable Logging
+     */
+    void SetLogging(TInt aEnabled) { iLogging = aEnabled; }
+    
+    /*!
+     * Context control
+     */
+    CCoeControl* ContextControl() { return iOwnerControl; }
+    
+    /*!
+     * is gesture context is active ?
+     */   
+    TBool IsActive() { return iActivated; }
+     
+    /*!
+     * Context id
+     */      
+    TInt Id() const { return iCtxtId; }
+    
+public: // from MStmGestureEngineListener
+
+    void gestureEnter(MStmGesture& aGesture);
+    void gestureExit(TStmGestureUid aGestureUid);
+    CCoeControl* getOwner();
+
+private:
+    friend class CStmGestureEngine;
+
+    void ConstructL();
+    void DispatchGestureEventL(TStmGestureUid aUid, MStmGesture* aGesture);
+    void SuspendRecognizer(TStmGestureUid aUid);
+    void EnableRecognizersL();
+    void EnableRecognizerL(TStmGestureUid aUid);
+
+private:
+    CStmGestureEngine& iEngine;
+    // Application-specific ID for finding context
+    TInt iCtxtId;
+    TBool iActivated;
+    CStmGestureParameters* iConfig;
+    CCoeControl* iOwnerControl;
+    //TBool iPinchUsed;
+    RPointerArray<MStmGestureListener> iListeners;
+    // for simplicity of addressing recognizers, we'll use fixed array
+    // with UID-based index (range 0..N is assumed for UIDs)
+    // @note Tap recognizer actually produces Tap and DoubleTap gesture,
+    //       so should be handled carefully -- only Tap position is set
+    MStmGestureRecogniser* iRecognizers[stmGesture::EStmGestureUid_Count];
+    TBool iLogging;
+    CGestureEventSender* iEventSender;
+    };
+
+#endif