--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneapp/phoneuicontrol/inc/cphonekeyeventforwarder.h Wed Sep 01 12:30:10 2010 +0100
@@ -0,0 +1,316 @@
+/*
+* Copyright (c) 2007 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: It is keyevent forwarder.
+*
+*/
+
+
+#ifndef CPHONEKEYEVENTFORWARDER_H
+#define CPHONEKEYEVENTFORWARDER_H
+
+// INCLUDES
+#include <bldvariant.hrh> //Feature flags
+#include <coecntrl.h>
+#include <peninputsrveventhandler.h>
+#include <peninputclient.h>
+
+// FORWARD DECLARATIONS
+class MPhoneStateMachine;
+class MPhoneKeyEventHandler;
+class MPhoneViewCommandHandle;
+class CPhoneTimer;
+class CPhoneQwertyHandler;
+class MPhoneQwertyModeObserver;
+class CEikMenuBar;
+
+// CLASS DECLARATION
+
+/**
+* It is keyevent forwarder.
+*
+*/
+class CPhoneKeyEventForwarder
+ : public CCoeControl,
+ public MPenUiActivationHandler
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aRect rectangle of this control.
+ * @param aStateMachine state machine
+ * @param aViewCommandHandle View command handle
+ * @return new instance.
+ */
+ static CPhoneKeyEventForwarder* NewL( const TRect& aRect,
+ MPhoneStateMachine* aStateMachine,
+ MPhoneViewCommandHandle* aViewCommandHandle );
+
+ /**
+ * Destructor.
+ */
+ ~CPhoneKeyEventForwarder();
+
+ public: // New functions.
+
+ public: // Functions from base classes
+
+ /**
+ * From CCoeControl, returns the amount of component controls.
+ *
+ * @return Returns the amount of component controls.
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl, returns a control by index.
+ *
+ * @param aIndex It is the index of the control.
+ * @return Returns a control by index.
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * From CCoeControl, informs that the size is changed to update
+ * the sizes of component controls appropriately.
+ */
+ void SizeChanged();
+
+ /**
+ * From CCoeControl, draws the contents of the view.
+ *
+ * @param aRect It is the area to be redrawn.
+ */
+ void Draw( const TRect& aRect ) const;
+
+ /**
+ * From CCoeControl, offers a key event to the view.
+ *
+ * @param aKeyEvent It contains information about the key event.
+ * @param aType It is the type of the event.
+ * @return Returns information which indicates whether the keypress
+ * was processed or not.
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * This function should be called from AppUi, after framework has
+ * Looped through CCoeControlStack
+ *
+ * @param aKeyEvent It contains information about the key event.
+ * @param aType It is the type of the event.
+ * @return Returns information which indicates whether the keypress
+ * was processed or not.
+ */
+ TKeyResponse OfferKeyEventAfterControlStackL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * @see MPenUiActivationHandler
+ */
+ void OnPeninputUiDeactivated();
+
+ /**
+ * @see MPenUiActivationHandler
+ */
+ void OnPeninputUiActivated();
+
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CPhoneKeyEventForwarder( MPhoneStateMachine* aStateMachine,
+ MPhoneViewCommandHandle* aViewCommandHandle );
+
+ /**
+ * Symbian OS constructor.
+ */
+ void ConstructL( const TRect& aRect );
+
+ /**
+ * This function should be called before FEP or other components in
+ * CCoeControl stack
+ *
+ * @param aKeyEvent It contains information about the key event.
+ * @param aType It is the type of the event.
+ * @return Returns information which indicates whether the keypress
+ * was processed or not.
+ */
+ TKeyResponse OfferKeyEventBeforeControlStackL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+
+ /**
+ * Handle EEventKeyDown
+ * @param aKeyEvent Tells which key was pressed.
+ * @return tells whether the event was consumed or not.
+ */
+ TKeyResponse HandleEventKeyDownBeforeControlStackL( const TKeyEvent& aKeyEvent );
+
+ /**
+ * Handle EEventKey
+ * @param aKeyEvent Tells which key was pressed.
+ * @return tells whether the event was consumed or not.
+ */
+ TKeyResponse HandleEventKeyBeforeControlStackL( const TKeyEvent& aKeyEvent );
+
+ /**
+ * Handle EEventKeyUp
+ * @param aKeyEvent Tells which key was pressed.
+ * @return tells whether the event was consumed or not.
+ */
+ TKeyResponse HandleEventKeyUpBeforeControlStackL( const TKeyEvent& aKeyEvent );
+
+
+ /**
+ * Callback function for long press of a particular key
+ */
+ static TInt DoHandleLongPressKeyEventCallbackL( TAny* aAny );
+
+ /**
+ * Convert key code
+ */
+ void ConvertKeyCodeL( TUint& aCode, const TKeyEvent& aKeyEvent );
+
+ /**
+ * Handle key long press
+ */
+ void HandleLongPressKeyEventL();
+
+ /**
+ * Checks from the statemachine is the given keyevent
+ * one which produces a legal character in the current mode.
+ */
+ TBool IsKeyAllowedL( const TKeyEvent& aKeyEvent );
+
+ /**
+ * Checks is the given key special character (*, 0, # ) from half-qwerty
+ * keyboard and conver key code if needed.
+ */
+ TBool ConvertHalfQwertySpecialChar( TUint& aCode, const TKeyEvent& aKeyEvent );
+
+ /**
+ * Checks if key should be blocked from phone.
+ *
+ * @ return ETrue if alpha mode, EFalse otherwise.
+ */
+ TBool IsKeyBlocked( const TKeyEvent& aKeyEvent ) const;
+
+ /**
+ * Test if key has flags indicating that it has been simulated by the
+ * touch dialer.
+ */
+ TBool IsKeySimulatedByTouchDialer( const TKeyEvent& aKeyEvent ) const;
+
+ /**
+ * Handles dialer key event. This includes handling multitapping of *-key.
+ * If multitap happens, function creates back space event
+ * to delete previous character, and replaces it with
+ * the next one in the cyclig character list *+pw.
+ */
+ void HandleTouchDialerKeyEventL( const TKeyEvent& aKeyEvent );
+
+ private: // Data
+
+ /**
+ * State machine
+ */
+ MPhoneStateMachine* iStateMachine;
+
+ /**
+ * Interface to view command handle
+ */
+ MPhoneViewCommandHandle* iViewCommandHandle;
+
+ /**
+ * For long key press. Long press is handled within a
+ * specific duration.
+ */
+ CPhoneTimer* iLongPressKeyEventTimer;
+
+ /**
+ * Key press time
+ */
+ TTime iKeyPressTime;
+
+ /**
+ * Key code
+ */
+ TUint iKeyPressedDown;
+
+ /**
+ * Key scan code from EEventKey Updated in HandleEventKeyDownL.
+ * Zeroed in HandleEventKeyUpL.
+ */
+ TInt iScanCode;
+
+ /**
+ * Has information of used qwerty keyboard.
+ * Own.
+ */
+ CPhoneQwertyHandler* iQwertyHandler;
+
+ /**
+ * Time of the previous key press. Used for multitap behaviour.
+ */
+ TTime iPreviousKeyPressTime;
+
+ /**
+ * Keycode of the previous keypress. Used for multitap behaviour.
+ */
+ TInt iPreviousScanCode;
+
+ /**
+ * Points to next character in multitap character list.
+ */
+ TInt iMultitapIndex;
+
+ /**
+ * True if there has been a key event but not a closing key up event.
+ * Needed to detect situations where key up event is handled before key event.
+ */
+ TBool iExpectKeyUpEvent;
+
+ /**
+ * Server that sends events via callback when the virtual keyboard is opened/closed.
+ */
+ RPeninputServer iPeninputServer;
+
+ /**
+ * Status of virtual keyboard.
+ */
+ TBool iVirtualKeyBoardOpen;
+
+
+ /**
+ * Indicates if menu or dialog was displayed
+ * when the key was pressed down.
+ */
+ TBool iDisplayingMenuOrDialogOnEventKeyDown;
+
+ /**
+ * Application menu.
+ * Not owned.
+ */
+ CEikMenuBar* iMenu;
+ };
+
+#endif // CPHONEKEYEVENTFORWARDER_H
+
+// End of File