diff -r ebd48d2de13c -r ecbabf52600f fep/aknfep/inc/AknFepKeyCatcher.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/inc/AknFepKeyCatcher.h Wed Sep 01 12:23:33 2010 +0100 @@ -0,0 +1,167 @@ +/* +* Copyright (c) 2002-2004 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: +* Provides the CAknFepKeyCatcher definition. +* +*/ + + + + + + + + + + + + +#ifndef __AKN_INPUT_FEP_KEYCATCHER_H__ +#define __AKN_INPUT_FEP_KEYCATCHER_H__ + +#include //CCoeControl +#include +#include "AknFepGlobalEnums.h" + +class CAknFepManager; + +/** + * Interface class to allow ability to switch into a test mode, where a different + * key catcher is used, i.e. to print values of keys received on the screen. + */ +class CAknFepKeyCatcherInterface : public CCoeControl + { +public: + virtual void SetState(const TAknFepManagerState aState) = 0; + virtual ~CAknFepKeyCatcherInterface(); + virtual void HandleChangeInFocus(); + }; + +/** + * The Key Catcher sits sits on top of the control stack and does some basic, primary processing + * of all key presses. ` + */ +class CAknFepKeyCatcher : + public CAknFepKeyCatcherInterface +#ifdef RD_SCALABLE_UI_V2 + ,public MCoeMessageMonitorObserver +#endif //RD_SCALABLE_UI_V2 + + { + +private: + /** + * values for the flags required to maintain the internal + * state of the Key Catcher during operation + */ + enum + { + EFlagLongKeyPressHandled =0x00000001, + EFlagBlockAllLongKeyPressEvents =0x00000002 + }; + +public: + /** + * First phase construction + * + * @param aFepMan the Fep Manager object which owns this key catcher object. + */ + static CAknFepKeyCatcher* NewL(CAknFepManager& aFepMan); + + /** + * Destructor + */ + virtual ~CAknFepKeyCatcher(); + + + /** + * from CCoeControl + * Key Catcher. Ignores keys when Fep is in null mode (no editor focused) + * and does first stage filtering + */ + virtual TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aEventCode); + + /** + * interface for FepMan to set the Key Catcher's internal state object + */ + virtual void SetState(const TAknFepManagerState aState); + +private: + /** + * C++ Constructor + */ + CAknFepKeyCatcher(CAknFepManager& aFepMan); + + /** + * Second phase construction + */ + void ConstructL(); + + TKeyResponse HandleHashKeyJapaneseL(const TKeyEvent& aKeyEvent, TEventCode aEventCode); + + /** + * from CCoeControl + * Handles a change to the control's resources. + * @param aType A message UID value + */ + void HandleResourceChange(TInt aType); +#ifdef RD_SCALABLE_UI_V2 + void MonitorWsMessage(const TWsEvent& aEvent); +#endif + inline void SetFlag(TInt aFlag); + inline void ClearFlag(TInt aFlag); + inline TBool IsFlagSet(TInt aFlag) const; + TKeyResponse CheckForSpecilacaseHandlingTosetKeyboardtype(const TKeyEvent& aKeyEvent, TEventCode aEventCode); + TBool IsNaviKey(TUint aCode); +private: + // Data not owned + CAknFepManager& iFepMan; + + TAknFepManagerState iKeyCatcherState; + TUint iFlags; + TKeyPressLength iKeyPressLength; + TInt iLongPressedScanCode; + TBool iPreviousKeyeventNormal; + TBool iPreviousKeyeventSpecial; + TBool iRetainKeyBoardtypeFornextkeyevent; + }; + +/** + * Sets aFlag bitfield in iFlags + */ +inline void CAknFepKeyCatcher::SetFlag(TInt aFlag) + { + iFlags|=aFlag; + } + +/** + * Clears aFlag bitfield in iFlags + */ +inline void CAknFepKeyCatcher::ClearFlag(TInt aFlag) + { + iFlags&=~aFlag; + } + +/** + * Returns ETrue if the aFlag bitfield in iFlags is set, EFalse if it + * is clear + */ +inline TBool CAknFepKeyCatcher::IsFlagSet(TInt aFlag) const + { + return iFlags&aFlag; + } + +#endif + +// End of file