javauis/lcdui_akn/javalcdui/inc/CMIDKeyTranslator.h
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/javalcdui/inc/CMIDKeyTranslator.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,125 @@
+/*
+* Copyright (c) 2002 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:
+*
+*/
+
+
+#ifndef CMIDKEYTRANSLATOR_H
+#define CMIDKEYTRANSLATOR_H
+
+#include <coecntrl.h>
+#include "lcdui.h"
+
+class CKeyList;
+
+struct TKeyRecord
+{
+    enum TState
+    {
+        EStateInitial = 0,
+        EStateDown,
+        EStateDownTranslated,
+        EStateKeyTranslated,
+        EStateKeyRepeated,
+        EStateDownRepeated,
+    };
+
+    TInt iScanCode;
+    TInt iKeyCode;
+    TInt iState;
+    TBool iIsSpecialKey;
+
+    void Transition(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats, TBool aS60SelectionKeyCompatibility);
+    void StateInitial(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats, TBool aS60SelectionKeyCompatibility);
+    void StateDown(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats);
+    void StateDownTranslated(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats);
+    void StateKeyTranslated(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats);
+    void StateKeyRepeated(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats);
+    void StateDownRepeated(TEventCode aEventCode, TMIDKeyEvent& aMIDPKeyEvent, TInt aRepeats);
+    void KeyPressed(TMIDKeyEvent& aMIDKeyEvent);
+    void KeyRepeated(TMIDKeyEvent& aMIDKeyEvent,TInt aRepeats);
+    void KeyReleased(TMIDKeyEvent& aMIDKeyEvent);
+    void SetKeyCode(TMIDKeyEvent& aMIDPKeyEvent);
+
+};
+
+/**
+ * Maps EPOC key events to MIDP key codes.
+ *
+ *  Translates EEventKeyDown and EEventKeyUp scancodes to
+ *  key codes.
+ *
+ *  Maps non-unicode keys to negative codes.
+ *
+ *  Stores Game key mappings.
+ *
+ */
+class CMIDKeyTranslator : public CBase
+{
+public:
+    enum { KInvalidKeyCode    = 0  };
+    enum { KInvalidGameAction = 0  };
+    enum { KMaxGameAction     = 12 };
+    enum { KMaxUnicodeKeyCode = 65535 };    // TUint16 max value
+
+public:
+    CMIDKeyTranslator(MMIDEnv& aEnv);
+    void ConstructL();
+    ~CMIDKeyTranslator();
+
+    /**
+     * Utils are not available at construction time, so
+     * are set later.
+     */
+    void    SetUtils(MMIDUtils* aUtils);
+
+    /**
+     * Map EPOC Key event to MIDP key code.
+     *
+     *@returns ETrue if key event should be posted to Java.
+     */
+    TBool   TranslateL(TMIDKeyEvent& aEvent, const TKeyEvent& aWsEvent, TEventCode aType);
+    TBool   PostKeyEvent(MMIDComponent& aSource, const TMIDKeyEvent& aEvent);
+
+    /**
+     * Forgets all currently tracked keys. Used to release some memory
+     * if key events will not be sent up to java. Also resets the
+     * game action key state.
+     */
+    void    Reset();
+
+
+private:
+    TInt FindKeyRecord(TInt aScanCode) const;
+    TInt Map(TInt aScanCode, TInt aCode);
+    /**
+     * Map an invalid (non-unicode) SymbianOS keycode to a valid MIDP unicode or
+     * negative keycode.
+     *@param  aScanCode SymbianOS scan code.
+     *@return MIDP key code
+     */
+    TInt    MapNonUnicodeKeyCode(TInt aScanCode);
+    void    PostKeyEvent(MMIDComponent& aComponent, TEventType aType, TInt aKeyCode, TInt aRepeats);
+
+private:
+    MMIDEnv&    iEnv;
+    MMIDUtils*  iUtils;
+    RArray<TKeyRecord>  iKeyList;
+
+    TBool iS60SelectionKeyCompatibility;
+
+};
+
+#endif // CMIDKEYTRANSLATOR_H