williamr@2: /* williamr@2: * Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Long Tap Detector with animation informing of long tap functionality williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: #ifndef CAKNLONGTAPDETECTORCONTROLLER_H williamr@2: #define CAKNLONGTAPDETECTORCONTROLLER_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@4: class CAknLongTapAnimation; williamr@4: williamr@2: /** williamr@2: * Avkon LongTapDetector CallBack. williamr@2: * williamr@2: * Inherit from this class and implement HandleLongTapEventL to williamr@2: * get a callback when/if a long tap occurs. williamr@2: * williamr@2: * @lib avkon.lib williamr@2: * @since S60 5.0 williamr@2: */ williamr@2: class MAknLongTapDetectorCallBack williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * Callback method. Get's called when a long tap occurs. williamr@2: * @param aPenEventLocation Long tap event location relative to parent control. williamr@2: * @param aPenEventScreenLocation Long tap event location relative to screen. williamr@2: */ williamr@2: virtual void HandleLongTapEventL( const TPoint& aPenEventLocation, williamr@2: const TPoint& aPenEventScreenLocation ) = 0; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * Avkon Long Tap Detector. williamr@2: * williamr@2: * Receives pointer events from owner application or owner control and returns williamr@2: * location if a long tap event occurs. williamr@2: * After short period of time (default 0,15s) animation is displayed next to stylus on the screen to williamr@2: * inform the user of long tap functionality. Animation can be turned OFF by application if wanted. williamr@2: * williamr@2: * @lib avkon.lib williamr@2: * @since S60 5.0 williamr@2: */ williamr@2: NONSHARABLE_CLASS( CAknLongTapDetector ) : public CTimer, MCoeMessageMonitorObserver williamr@2: { williamr@2: public: // Constructors and destructor williamr@2: williamr@2: /** williamr@2: * Two-phased constructor. williamr@2: * @param aOwner Pointer to owner of this component. Ownership not transferred. williamr@2: */ williamr@2: IMPORT_C static CAknLongTapDetector* NewL( MAknLongTapDetectorCallBack* aOwner ); williamr@2: williamr@2: /** williamr@2: * Two-phased constructor. williamr@2: * @param aOwner Pointer to owner of this component. Ownership not transferred. williamr@2: */ williamr@2: IMPORT_C static CAknLongTapDetector* NewLC( MAknLongTapDetectorCallBack* aOwner ); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: virtual ~CAknLongTapDetector(); williamr@2: williamr@2: public: // New functions williamr@2: williamr@2: /** williamr@2: * Receives and handles pointer events from owner's HandlePointerEventL() -method. williamr@2: * Used to control timers in detecting long tap events. williamr@2: * @param aEvent Pointer event from owner. williamr@2: */ williamr@2: IMPORT_C void PointerEventL( const TPointerEvent& aEvent ); williamr@2: williamr@2: /** williamr@2: * Sets new time delay before long tap detector animation starts. Default delay is 0,15s. williamr@2: * @param aMicroSeconds New delay in microseconds. williamr@2: */ williamr@2: IMPORT_C void SetTimeDelayBeforeAnimation( const TInt aMicroSeconds ); williamr@2: williamr@2: /** williamr@2: * Sets new time delay before long tap detector event is returned. Default delay is 0,8s. williamr@2: * @param aMicroSeconds New delay in microseconds. williamr@2: */ williamr@2: IMPORT_C void SetLongTapDelay( const TInt aMicroSeconds ); williamr@2: williamr@2: /** williamr@2: * Sets long tap animation ON/OFF. Default is ON. williamr@2: * @param aAnimation ETrue turns animations ON and EFalse turns animations OFF. williamr@2: */ williamr@2: IMPORT_C void EnableLongTapAnimation( const TBool aAnimation ); williamr@2: williamr@2: /** williamr@2: * Checks if the animation is running williamr@2: * @return ETrue if the animation is running, EFalse if not williamr@2: */ williamr@2: IMPORT_C TBool IsAnimationRunning() const; williamr@2: williamr@2: /** williamr@2: * Cancels the long tap animation williamr@2: */ williamr@2: IMPORT_C void CancelAnimationL(); williamr@2: williamr@2: /** williamr@2: * This function is used to capture key events during the longtap animation. williamr@2: * If such events are received, the longtap animation is then cancelled (TSW Error williamr@2: * ASAA-79TCJP). williamr@2: */ williamr@2: void MonitorWsMessage(const TWsEvent& aEvent); williamr@4: williamr@4: protected: // From CActive williamr@2: williamr@2: /** williamr@2: * Handles CTimer events. Called by system framework. williamr@2: */ williamr@2: void RunL(); williamr@4: williamr@4: /** williamr@4: * Cancels an outstanding request. williamr@4: */ williamr@4: void DoCancel(); williamr@2: williamr@2: private: // Constructors williamr@2: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: * @param aOwner Owner. williamr@2: */ williamr@2: CAknLongTapDetector( MAknLongTapDetectorCallBack* aOwner ); williamr@2: williamr@2: /** williamr@2: * By default Symbian 2nd phase constructor is private. williamr@2: */ williamr@2: void ConstructL(); williamr@2: williamr@2: private: // New functions williamr@2: williamr@2: void StartAnimationL(); williamr@4: void StopAnimation(); williamr@2: williamr@2: private: // Data williamr@2: williamr@2: enum TLongTapDetectorState williamr@2: { williamr@2: EWaiting, // normal state williamr@2: EWaitingForAnimation, // Only "Pen down" event received, CTimer started williamr@2: EShowingAnimation // Long tap animation started williamr@2: }; williamr@2: williamr@2: /** williamr@2: * Current state of LongTapDetector. williamr@2: */ williamr@2: TLongTapDetectorState iState; williamr@2: williamr@2: /** williamr@2: * Pointer to owner of this LongTapDetector object. williamr@2: * Not own. williamr@2: */ williamr@2: MAknLongTapDetectorCallBack* iOwner; williamr@2: williamr@2: /** williamr@2: * Delay before animation starts in microseconds. williamr@2: */ williamr@2: TInt iTimeDelayBeforeAnimation; williamr@2: williamr@2: /** williamr@2: * Delay before long tap event is reported in microseconds. williamr@2: */ williamr@2: TInt iLongTapDelay; williamr@2: williamr@2: /** williamr@2: * Pointer event received from owner. williamr@2: */ williamr@2: TPointerEvent iPointerEvent; williamr@2: williamr@2: /** williamr@2: * Is long tap animation shown or not. williamr@2: */ williamr@2: TBool iShowAnimation; williamr@2: williamr@4: /** williamr@4: * Long tap animation. williamr@4: * Own. williamr@4: */ williamr@4: CAknLongTapAnimation* iAnimation; williamr@2: }; williamr@2: williamr@2: #endif // CAKNLONGTAPDETECTOR_H williamr@2: williamr@4: // End of File williamr@2: