sl@0: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32\include\k32keys.h sl@0: // sl@0: // WARNING: This file contains some APIs which are internal and are subject sl@0: // to change without notice. Such APIs should therefore not be used sl@0: // outside the Kernel and Hardware Services package. sl@0: // sl@0: sl@0: #ifndef __KEYSTD_H__ sl@0: #define __KEYSTD_H__ sl@0: sl@0: sl@0: //////////////////////////////////////////////////////// sl@0: // sl@0: // Bits required for keyboard translation software sl@0: // sl@0: //////////////////////////////////////////////////////// sl@0: sl@0: #include sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: const TUint KConvTableSettableModifiers=EModifierAutorepeatable| sl@0: EModifierKeypad| sl@0: EModifierPureKeycode; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: const TUint KPersistentModifiers=EModifierLeftAlt| sl@0: EModifierRightAlt| sl@0: EModifierAlt| sl@0: EModifierLeftCtrl| sl@0: EModifierRightCtrl| sl@0: EModifierCtrl| sl@0: EModifierLeftShift| sl@0: EModifierRightShift| sl@0: EModifierShift| sl@0: EModifierLeftFunc| sl@0: EModifierRightFunc| sl@0: EModifierFunc| sl@0: EModifierCapsLock| sl@0: EModifierNumLock| sl@0: EModifierScrollLock| sl@0: EModifierKeyboardExtend; sl@0: sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: const TUint KRotationModifiers=EModifierRotateBy90| sl@0: EModifierRotateBy180| sl@0: EModifierRotateBy270; sl@0: sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SScanCodeBlock sl@0: { sl@0: TUint16 firstScanCode; sl@0: TUint16 lastScanCode; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SScanCodeBlockList sl@0: { sl@0: TUint numBlocks; sl@0: const SScanCodeBlock *pblocks; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SConvSubTable sl@0: { sl@0: const TUint16 *pkeyCode; sl@0: SScanCodeBlockList scanCodes; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SConvTableNode sl@0: { sl@0: TMaskedModifiers maskedModifiers; sl@0: TUint numSubTables; sl@0: const SConvSubTable * const *ppsubTables; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SConvTable sl@0: { sl@0: TUint numNodes; sl@0: const SConvTableNode *pnodes; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SKeyCodeList sl@0: { sl@0: TUint numKeyCodes; sl@0: const TUint16 *pkeyCodes; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SFunc sl@0: { sl@0: TInt32 funcParam; sl@0: TUint8 func; sl@0: TUint8 filler; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SFuncAndState sl@0: { sl@0: TUint8 state; sl@0: TUint8 func; sl@0: TInt32 funcParam; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SFuncTableEntry sl@0: { sl@0: TMaskedModifiers maskedModifiers; sl@0: TKeyCodePattern keyCodePattern; sl@0: SFuncAndState funcAndNewState; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SFuncTable sl@0: { sl@0: TUint numEntries; sl@0: const SFuncTableEntry *pentries; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: struct SFuncTables sl@0: { sl@0: SFuncTable defaultTable; sl@0: SFuncTable modifierTable; sl@0: TUint numGenFuncTables; sl@0: const SFuncTable *pgenFuncTables; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TCharExtended: public TChar sl@0: { sl@0: public: sl@0: inline TCharExtended(); sl@0: inline TCharExtended(TUint aChar); sl@0: TCharExtended &operator=(TUint aChar); sl@0: TBool IsDigitGivenRadix(TRadix aRadix) const; sl@0: TBool IsModifier() const; sl@0: TInt DigitValue() const; sl@0: TBool MatchesPattern(const TKeyCodePattern &aKeyCodePattern, TRadix aRadix=EDecimal) const; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TFuncTable sl@0: { sl@0: public: sl@0: TFuncTable(); sl@0: void Update(RLibrary aLibrary); sl@0: SFunc GetModifierFunc(const TCharExtended &aChar, const TInt &aModifiers) const; sl@0: SFuncAndState GetGeneralFuncAndState(const TCharExtended &aChar, const TInt &aModifiers, sl@0: TUint aCurState, TRadix aRadix) const; sl@0: private: sl@0: SFuncTables iFuncTables; sl@0: SFuncTableEntry getDefault(const TCharExtended &aChar, const TInt &aModifiers) const; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: struct SConvKeyData sl@0: { sl@0: TInt modifiers; sl@0: TUint16 keyCode; sl@0: TUint16 filler; sl@0: }; sl@0: sl@0: /** sl@0: @publishedPartner sl@0: @released sl@0: */ sl@0: enum TCtrlDigitsTermination sl@0: { sl@0: ETerminationByCount, sl@0: ETerminationByCtrlUp sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TConvTable sl@0: { sl@0: public: sl@0: TConvTable(); sl@0: void Update(RLibrary aLibrary); sl@0: SConvKeyData Convert(TUint aScanCode, const TInt &aModifiers) const; sl@0: SConvKeyData ConvertBaseCase(TUint aScanCode, const TInt &aModifiers) const; sl@0: inline TUint FirstScanCode() const; sl@0: inline TUint LastScanCode() const; sl@0: private: sl@0: SConvTable iConvTable; sl@0: TUint iFirstScanCode; sl@0: TUint iLastScanCode; sl@0: SScanCodeBlockList iKeypadScanCodes; sl@0: SKeyCodeList iNonAutorepKeyCodes; sl@0: TBool onKeypad(TUint aScanCode) const; sl@0: TBool autorepeatable(TUint aKeyCode) const; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: class TCtrlDigits sl@0: { sl@0: public: sl@0: TCtrlDigits(); sl@0: void Update(RLibrary aLibrary); sl@0: void Reset(); sl@0: void AppendDigit(TUint aKeyCode, TUint aModifiers); sl@0: inline void SetRadix(TRadix aRadix); sl@0: inline void SetMaxCount(TInt aMaxCount); sl@0: inline TRadix GetRadix() const; sl@0: TBool Terminated(TInt aModifiers) const; sl@0: TUint SetStateToCtrlDigits() const; sl@0: inline TBool WithinLimits() const; sl@0: inline TUint GetDigits() const; sl@0: inline TBool Error() const; sl@0: private: sl@0: TInt iCount; sl@0: TInt iMaxCount; sl@0: TInt iMaximumCtrlDigitsMaxCount; sl@0: TUint32 iDigits; sl@0: TRadix iRadix; sl@0: TBool iErrorFlag; sl@0: TCtrlDigitsTermination iTermination; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: enum TState sl@0: { sl@0: // values used as an index to a table sl@0: EStateNormal =0x0a, sl@0: EStateCtrlDigitsUntilCount =0x0b, sl@0: EStateCtrlDigitsUntilCtrlUp =0x0c, sl@0: // values used as "rules" to be processed in a switch statement sl@0: EStateUnchanged =0x40, sl@0: EStateDerivedFromDigitEntered, sl@0: EStateCtrlDigits sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: enum TFuncGeneral sl@0: { sl@0: EDoNothing =0x00, sl@0: EPassKeyThru, sl@0: EPassSpecialKeyThru, sl@0: EPassCtrlDigitsThru, sl@0: EAddOnCtrlDigit, sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: NONSHARABLE_CLASS(CKeyTranslatorX) : public CKeyTranslator sl@0: { sl@0: friend class CKeyTranslator; sl@0: public: sl@0: CKeyTranslatorX(); sl@0: virtual TInt GetModifierState(); sl@0: virtual void SetModifierState(TEventModifier aModifier,TModifierState aState); sl@0: virtual TBool TranslateKey(TUint aScanCode, TBool aKeyUp, sl@0: const CCaptureKeys &aCaptureKeys, TKeyData &aKeyData); sl@0: virtual void UpdateModifiers(TInt aModifiers); sl@0: virtual TInt ChangeKeyData(const TDesC& aLibraryName); sl@0: TBool currentlyUpperCase(void); sl@0: TUint executeFunctionsAndSetState(TCharExtended aChar); sl@0: TInt Initialise(); sl@0: private: sl@0: TInt iCurModifiers; sl@0: TMaskedModifiers iTogglingModifiers; sl@0: TCtrlDigits iCurCtrlDigits; sl@0: TConvTable iConvTable; sl@0: TFuncTable iFuncTable; sl@0: TUint iCurState; sl@0: TBool iIsdefaultKeyData; sl@0: RLibrary iKeyDataLib; sl@0: RLibrary iDefaultKeyDataLib; sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: enum TCP850Char sl@0: { sl@0: ECP850LogicNot=0x00aa, sl@0: ECP850LcAe=0x0091, sl@0: ECP850LcCcedilla=0x0087, sl@0: ECP850EsTset=0x00e1, sl@0: ECP850LcOslash=0x009b, sl@0: ECP850LcThorn=0x00d0, sl@0: ECP850LcSoftTh=0x00e7, sl@0: ECP850LeftChevron=0x00ae, sl@0: ECP850RightChevron=0x00af, sl@0: ECP850InvExclam=0x00ad, sl@0: ECP850InvQuest=0x00a8, sl@0: ECP850LcAo=0x0086, sl@0: ECP850Pound=0x009c, sl@0: ECP850LcAumlaut=0x0084, sl@0: ECP850LcEumlaut=0x0089, sl@0: ECP850LcIumlaut=0x008b, sl@0: ECP850LcOumlaut=0x0094, sl@0: ECP850LcUumlaut=0x009a, sl@0: ECP850LcYumlaut=0x0098, sl@0: ECP850SpaceUmlaut=0x00f9, sl@0: ECP850LcAgrave=0x0085, sl@0: ECP850LcEgrave=0x008a, sl@0: ECP850LcIgrave=0x008d, sl@0: ECP850LcOgrave=0x0095, sl@0: ECP850LcUgrave=0x0097, sl@0: ECP850SpaceGrave=0x0060, sl@0: ECP850LcAacute=0x00a0, sl@0: ECP850LcEacute=0x0082, sl@0: ECP850LcIacute=0x00a1, sl@0: ECP850LcOacute=0x00a2, sl@0: ECP850LcUacute=0x00a3, sl@0: ECP850LcYacute=0x00ec, sl@0: ECP850LcSpaceAcute=0x0027, sl@0: ECP850LcAtilde=0x00c6, sl@0: ECP850LcNtilde=0x00a4, sl@0: ECP850LcOtilde=0x00e4, sl@0: ECP850LcSpaceTilde=0x007e, sl@0: ECP850LcAcirc=0x0083, sl@0: ECP850LcEcirc=0x0088, sl@0: ECP850LcIcirc=0x008c, sl@0: ECP850LcOcirc=0x0093, sl@0: ECP850LcUcirc=0x0096, sl@0: ECP850LcSpaceCirc=0x005e sl@0: }; sl@0: sl@0: /** sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: enum TLatin1Char sl@0: { sl@0: ELatin1LogicNot=0x0090, sl@0: ELatin1LcAe=0x00e6, sl@0: ELatin1UcAe=0x00c6, sl@0: ELatin1LcCcedilla=0x00e7, sl@0: ELatin1EsTset=0x00df, sl@0: ELatin1LcOslash=0x00f8, sl@0: ELatin1UcOslash=0x00d8, sl@0: ELatin1LcThorn=0x00fe, sl@0: ELatin1LcSoftTh=0x00f0, sl@0: ELatin1LeftChevron=0x00ab, sl@0: ELatin1RightChevron=0x00bb, sl@0: ELatin1InvExclam=0x00a1, sl@0: ELatin1InvQuest=0x00bf, sl@0: ELatin1LcAo=0x00e5, sl@0: ELatin1Pound=0x00a3, sl@0: ELatin1LcAumlaut=0x00e4, sl@0: ELatin1LcEumlaut=0x00eb, sl@0: ELatin1LcIumlaut=0x00ef, sl@0: ELatin1LcOumlaut=0x00f6, sl@0: ELatin1LcUumlaut=0x00fc, sl@0: ELatin1LcYumlaut=0x00ff, sl@0: ELatin1SpaceUmlaut=0x00a8, sl@0: ELatin1LcAgrave=0x00e0, sl@0: ELatin1LcEgrave=0x00e8, sl@0: ELatin1LcIgrave=0x00ec, sl@0: ELatin1LcOgrave=0x00f2, sl@0: ELatin1LcUgrave=0x00f9, sl@0: ELatin1SpaceGrave=0x0060, sl@0: ELatin1LcAacute=0x00e1, sl@0: ELatin1LcEacute=0x00e9, sl@0: ELatin1LcIacute=0x00ed, sl@0: ELatin1LcOacute=0x00f3, sl@0: ELatin1LcUacute=0x00fa, sl@0: ELatin1LcYacute=0x00fd, sl@0: ELatin1LcSpaceAcute=0x00b4, sl@0: ELatin1LcAtilde=0x00e3, sl@0: ELatin1LcNtilde=0x00f1, sl@0: ELatin1LcOtilde=0x00f5, sl@0: ELatin1LcSpaceTilde=0x0098, sl@0: ELatin1LcAcirc=0x00e2, sl@0: ELatin1LcEcirc=0x00ea, sl@0: ELatin1LcIcirc=0x00ee, sl@0: ELatin1LcOcirc=0x00f4, sl@0: ELatin1LcUcirc=0x00fb, sl@0: ELatin1LcSpaceCirc=0x0088, sl@0: ELatin1UcEacute=0x00c9, sl@0: ELatin1Diaresis=0x00a8, sl@0: ELatin1MicroSign=0x00b5, sl@0: ELatin1UcAumlaut=0x00c4, sl@0: ELatin1UcOumlaut=0x00d6, sl@0: ELatin1UcUumlaut=0x00dc, sl@0: ELatin1SectionSign=0x00a7, sl@0: ELatin1MultiplicationSign=0x00d7, sl@0: ELatin1DivisionSign=0x00f7, sl@0: ELatin1DegreeSign=0x00b0, sl@0: ELatin1UcUgrave=0x00d9, sl@0: ELatin1MasculineOrdinalSign=0x00ba sl@0: }; sl@0: // sl@0: #include sl@0: // sl@0: #endif sl@0: