williamr@2: /* williamr@2: * Copyright (c) 2003-2006 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: PtiLanguage class definitions. williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: #ifndef _PTI_KEY_MAPPINGS_H williamr@2: #define _PTI_KEY_MAPPINGS_H williamr@2: williamr@2: #include williamr@2: #include "PtiDefs.h" williamr@2: williamr@2: williamr@2: const TInt KPtiKeyDataDeadKeySeparator = 0xffff; williamr@2: const TInt KPtiPinyinMarker = 0x2460; williamr@2: const TInt KPtiStrokeMarker = 0x2461; williamr@2: const TInt KPtiZhuyinMarker = 0x2462; williamr@2: const TInt KPtiCangjieMarker = 0x2463; williamr@2: const TInt KPtiGetAllMarker = 0x2464; williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CPtiKeyMapData; williamr@2: williamr@2: // williamr@2: // CPtiQwertyKeymappingsExtension williamr@2: // williamr@2: williamr@2: NONSHARABLE_CLASS(CPtiQwertyKeymappingsExtension) : public CBase williamr@2: { williamr@2: public: williamr@2: static CPtiQwertyKeymappingsExtension* NewL(); williamr@2: ~CPtiQwertyKeymappingsExtension(); williamr@2: williamr@2: private: williamr@2: CPtiQwertyKeymappingsExtension(); williamr@2: williamr@2: public: williamr@2: TUint16 iLastChar; // for Vietnamese williamr@2: TInt16 iLastTone; // for Vietnamese williamr@2: TUint16 iReplaced; // for Vietnamese williamr@2: TPtiTextCase iVowelCase; // for Vietnamese williamr@2: TPtiKey iLastToneKey; // for Vietnamese williamr@2: }; williamr@2: williamr@2: williamr@2: // williamr@2: // TPtiKeyMapping williamr@2: // williamr@2: williamr@2: class TPtiKeyMapping williamr@2: { williamr@2: public: williamr@2: TInt iIndex; williamr@2: TInt iNumChars; williamr@2: }; williamr@2: williamr@2: williamr@2: // williamr@2: // TPtiReplacedMapping williamr@2: // williamr@2: williamr@2: const TInt KMaxReplacedMappingCharacters = 5; williamr@2: class TPtiReplacedMapping williamr@2: { williamr@2: public: williamr@2: TPtiKey iKey; williamr@2: TPtiTextCase iCase; williamr@2: TPtiEngineInputMode iMode; williamr@2: TPtiKeyboardType iKeyboardType; williamr@2: TInt iNumChars; williamr@2: TUint16 iChrs[KMaxReplacedMappingCharacters]; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * MPtiKeyMappings williamr@2: * williamr@2: * Interface class for PtiEngine keymapping functionality. williamr@2: */ williamr@2: class MPtiKeyMappings williamr@2: { williamr@2: public: williamr@2: virtual ~MPtiKeyMappings() {} williamr@2: williamr@2: /** williamr@2: * Starts mapping new key. Will return first character bound to given williamr@2: * key in given text case. williamr@2: * williamr@2: * @param aKey A key to be mapped. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @param aMode Input mode for mapping. This is needed if keymapping data contains williamr@2: * characters for several input modes (used mainly with Chinese williamr@2: * modes). This value will be matched to possible input mode control williamr@2: * characters in keymapping data. williamr@2: * @return First character bound to requested key. williamr@2: */ williamr@2: virtual TUint16 StartMapping(TPtiKey aKey, williamr@2: TPtiTextCase aCase, williamr@2: TPtiEngineInputMode aMode = EPtiEngineInputModeNone) = 0; williamr@2: williamr@2: /** williamr@2: * Continues keymapping sequence. This method should be called when key event williamr@2: * comes in while multitapping timer is active. Takes care of cycling through williamr@2: * multitapping candidates associated for given key. williamr@2: * williamr@2: * @since 2.6 williamr@2: * @param aKey A key to be mapped. williamr@2: * @param aAppend Refernce to boolen variable. This will be set to ETrue if current character in williamr@2: * editor should be replaced (new multitapping candidate was found) and williamr@2: * to EFalse if new character should inserted instead. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @return Next character assosiated to given key or the first character if aKey williamr@2: * was different key than previous key press. williamr@2: */ williamr@2: virtual TUint16 NextKey(TPtiKey aKey, TBool &aAppend, TPtiTextCase aCase) = 0; williamr@2: williamr@2: /** williamr@2: * Returns PtiEngine key code for last StartMapping() call. williamr@2: * williamr@2: * @since 2.6 williamr@2: * @return PtiEngine key code for last StartMapping() call. williamr@2: */ williamr@2: virtual TPtiKey CurrentKey() = 0; williamr@2: williamr@2: /** williamr@2: * Replaces keymapping data for given key and case. williamr@2: * williamr@2: * @since 2.6 williamr@2: * @param aKey A key to be replaced. williamr@2: * @param aMap New keymapping data for aKey, williamr@2: * @param aCase Text case for replaced data. williamr@2: * @return KErrNone or system wide error code. williamr@2: */ williamr@2: virtual TInt ReplaceKeyMapL(TPtiKey aKey, TDesC& aMap, TPtiTextCase aCase) = 0; williamr@2: williamr@2: /** williamr@2: * Returns key code for key which produces given unicode character (if found). williamr@2: * williamr@2: * @since 2.6 williamr@2: * @param aChar A character to be queried. williamr@2: * @return Key code for aChar. EPtiKeyNone, if not found. williamr@2: */ williamr@2: virtual TPtiKey KeyForCharacter(TUint16 aChar) = 0; williamr@2: williamr@2: /** williamr@2: * Returns all keymapping data for current key, excluding first character williamr@2: * (which is expected to be "get all"-control character). williamr@2: * williamr@2: * @param aCase Text case for which data will be returned. williamr@2: * @return Constant descriptor pointing to keymap data. williamr@2: * @since 3.0 williamr@2: */ williamr@2: virtual TPtrC GetAll(TPtiTextCase aCase) = 0; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * CPtiMappings williamr@2: * williamr@2: * Base class for keymapping implementation classes. williamr@2: * Handles locally replaced keymappings. williamr@2: */ williamr@2: class CPtiMappings : public CBase williamr@2: { williamr@2: public: williamr@2: CPtiMappings(); williamr@2: CPtiMappings(CPtiKeyMapData* aData); williamr@2: ~CPtiMappings(); williamr@2: inline CPtiKeyMapData* KeyMapData() const; williamr@2: williamr@2: // DEPRECATED williamr@2: virtual TInt WriteData(TInt16*); williamr@2: // DEPRECATED williamr@2: virtual TInt ChunkDataSize() const; williamr@2: williamr@2: IMPORT_C TPtiKeyboardType KeyboardType() const; williamr@2: williamr@2: protected: williamr@2: TInt FindReplacedMapping(TPtiKey aKey, TPtiTextCase aCase, TPtiEngineInputMode aMode) const; williamr@2: void ReplaceKeyMapLocalL(TPtiKey aKey, TDesC& aMap, TPtiTextCase aCase, TPtiEngineInputMode aMode); williamr@2: williamr@2: public: williamr@2: TPtrC DataForKeyLocal(TPtiKey aKey, TPtiTextCase aCase, TPtiEngineInputMode aMode) const; williamr@2: williamr@2: protected: williamr@2: TPtiKey iCurrentKey; williamr@2: TPtiEngineInputMode iCurrentMode; williamr@2: TInt iCurrentChar; williamr@2: RArray iReplacedMappings; williamr@2: CPtiKeyMapData* iKeyMapData; // Not owned williamr@2: TPtiKeyboardType iKeyboardType; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * CPtiKeyMappings williamr@2: * williamr@2: * Keymappings implementation class for itu-t keyboard williamr@2: */ williamr@2: NONSHARABLE_CLASS(CPtiKeyMappings) : public CPtiMappings, public MPtiKeyMappings williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * DEPRECATED. Leaves with KErrNotSupported. williamr@2: */ williamr@2: IMPORT_C static CPtiKeyMappings* NewL(TDesC& aData); williamr@2: williamr@2: /** williamr@2: * DEPRECATED. Leaves with KErrNotSupported. williamr@2: */ williamr@2: IMPORT_C static CPtiKeyMappings* NewL(TInt16* aData); williamr@2: williamr@2: /** williamr@2: * Constructor. williamr@2: */ williamr@2: IMPORT_C static CPtiKeyMappings* NewL(CPtiKeyMapData* aData); williamr@2: williamr@2: IMPORT_C ~CPtiKeyMappings(); williamr@2: williamr@2: /** williamr@2: * Start mapping for given key. williamr@2: * williamr@2: * @param aKey Key code for key. williamr@2: * @param aCase Cuurrent text case. williamr@2: * @param aMode Current input mode. Default value works for most cases. williamr@2: * @return First character for given key. williamr@2: */ williamr@2: IMPORT_C virtual TUint16 StartMapping(TPtiKey aKey, williamr@2: TPtiTextCase aCase, williamr@2: TPtiEngineInputMode aMode = EPtiEngineInputModeNone); williamr@2: williamr@2: /** williamr@2: * Continues keymapping sequence. This method should be called when key event williamr@2: * comes in while multitapping timer is active. Takes care of cycling through williamr@2: * multitapping candidates associated for given key. williamr@2: * williamr@2: * @since S60 V2.6 williamr@2: * @param aKey A key to be mapped. williamr@2: * @param Refernce to boolen variable. This will be set to ETrue if current character in williamr@2: * editor should be replaced (new multitapping candidate was found) and williamr@2: * to EFalse if new character should inserted instead. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @return Next character assosiated to given key or the first character if aKey williamr@2: * was different key than previous key press. williamr@2: */ williamr@2: IMPORT_C TUint16 NextKey(TPtiKey aKey, TBool &aAppend, TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Returns key code for key currently being mapped (relates to StartMapping and NextKey). williamr@2: * williamr@2: * @return Key code for key currently being mapped. williamr@2: */ williamr@2: inline TPtiKey CurrentKey(); williamr@2: williamr@2: /** williamr@2: * Replaces keymapping data for given key. williamr@2: * williamr@2: * @param aKey Key code for key to be replaced. williamr@2: * @param aMap New keymapping data for aKey. williamr@2: * @param aCase Text case. williamr@2: * @return KErrNone if succesfull williamr@2: * Otherwise system wide error code. williamr@2: */ williamr@2: IMPORT_C TInt ReplaceKeyMapL(TPtiKey aKey, TDesC& aMap, TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Scans through keymapping data and returns key code for given character. williamr@2: * williamr@2: * @param aChar A character to be queried. williamr@2: * @return Key code for mtaching key. williamr@2: * EPtiKeyNone if no matching keys found. williamr@2: */ williamr@2: IMPORT_C TPtiKey KeyForCharacter(TUint16 aChar); williamr@2: williamr@2: /** williamr@2: * Returns keymapping data for given key. williamr@2: * williamr@2: * @param aKey A key to be queried. williamr@2: * @param aResult Descritor where resulting data is stored. williamr@2: * @param aCase Text case williamr@2: */ williamr@2: IMPORT_C void GetDataForKey(TPtiKey aKey, TDes& aResult, TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Returns all keymapping data for current key, excluding first character williamr@2: * (which is expected to be "get all"-control character). williamr@2: * williamr@2: * @param aCase Text case for which data will be returned. williamr@2: * @return Constant descriptor pointing to keymap data. williamr@2: * @since S60 V3.0 williamr@2: */ williamr@2: TPtrC GetAll(TPtiTextCase aCase); williamr@2: williamr@2: protected: williamr@2: CPtiKeyMappings(); williamr@2: CPtiKeyMappings(CPtiKeyMapData* aData); williamr@2: TUint16 NextChar(TPtiTextCase aCase); williamr@2: inline void KeyCodeToInternal(TPtiKey aKey); williamr@2: inline void DeQwertyfyCaseValue(TPtiTextCase& aCase); williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * CPtiQwertyKeyMappings williamr@2: * williamr@2: * Keymappings implementation class for qwerty keyboard. williamr@2: */ williamr@2: NONSHARABLE_CLASS(CPtiQwertyKeyMappings) : public CPtiMappings, public MPtiKeyMappings williamr@2: { williamr@2: public: williamr@2: /** williamr@2: * DEPRECATED. Will leave with KErrNotSupported. williamr@2: */ williamr@2: IMPORT_C static CPtiQwertyKeyMappings* NewL(TDesC& aData); williamr@2: williamr@2: /** williamr@2: * DEPRECATED. Will leave with KErrNotSupported. williamr@2: */ williamr@2: IMPORT_C static CPtiQwertyKeyMappings* NewL(TInt16* aData); williamr@2: williamr@2: /** williamr@2: * Constructor. williamr@2: */ williamr@2: IMPORT_C static CPtiQwertyKeyMappings* NewL(CPtiKeyMapData* aData); williamr@2: williamr@2: IMPORT_C ~CPtiQwertyKeyMappings(); williamr@2: williamr@2: /** williamr@2: * Start mapping for given key. williamr@2: * williamr@2: * @param aKey Key code for key. williamr@2: * @param aCase Cuurrent text case. williamr@2: * @param aMode Current input mode. Default value works for most cases. williamr@2: * @return First character for given key. williamr@2: */ williamr@2: IMPORT_C TUint16 StartMapping(TPtiKey aKey, williamr@2: TPtiTextCase aCase, williamr@2: TPtiEngineInputMode aMode = EPtiEngineInputModeNone); williamr@2: williamr@2: /** williamr@2: * Continues keymapping sequence. This method should be called when key event williamr@2: * comes in while multitapping timer is active. Takes care of cycling through williamr@2: * multitapping candidates associated for given key. williamr@2: * williamr@2: * @since S60 V2.6 williamr@2: * @param aKey A key to be mapped. williamr@2: * @param aAppend Refernce to boolen variable. This will be set to ETrue if current character in williamr@2: * editor should be replaced (new chr-case character was found) and williamr@2: * to EFalse if new character should inserted instead. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @return Next character assosiated to given key or the first character if aKey williamr@2: * was different key than previous key press. williamr@2: */ williamr@2: IMPORT_C TUint16 NextKey(TPtiKey aKey, TBool &aAppend, TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Returns key code for key currently being mapped (relates to StartMapping and NextKey). williamr@2: * williamr@2: * @return Key code for key currently being mapped. williamr@2: */ williamr@2: inline TPtiKey CurrentKey(); williamr@2: williamr@2: /** williamr@2: * Replaces keymapping data for given key. williamr@2: * williamr@2: * @param aKey Key code for key to be replaced. williamr@2: * @param aMap New keymapping data for aKey. williamr@2: * @param aCase Text case. williamr@2: * @return KErrNone if succesfull williamr@2: * Otherwise system wide error code. williamr@2: */ williamr@2: IMPORT_C TInt ReplaceKeyMapL(TPtiKey aKey, TDesC& aMap, TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Scans through keymapping data and returns key code for given character. williamr@2: * williamr@2: * @param aChar A character to be queried. williamr@2: * @return Key code for mtaching key. williamr@2: * EPtiKeyNone if no matching keys found. williamr@2: */ williamr@2: IMPORT_C TPtiKey KeyForCharacter(TUint16 aChar); williamr@2: williamr@2: /** williamr@2: * Returns keymapping data for given key. williamr@2: * williamr@2: * @param aKey A key to be queried. williamr@2: * @param aResult Descritor where resulting data is stored. williamr@2: * @param aCase Text case williamr@2: */ williamr@2: IMPORT_C void GetDataForKey(TPtiKey aKey, TDes& aResult, TPtiTextCase aCase); williamr@2: williamr@2: /** DEPRECATED */ williamr@2: TInt WriteData(TInt16* aDest); williamr@2: williamr@2: /** DEPRECATED */ williamr@2: TInt ChunkDataSize() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline TBool DeadKeyRootFlag() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline TUint16 DeadKeyRootChar() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline TBool VowelSequenceFlag() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline TUint16 VowelSequenceResult() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline void ClearVowelSequence(); williamr@2: williamr@2: /** Internal */ williamr@2: inline TInt16 DeadKey() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline void ClearDeadKey(); williamr@2: williamr@2: /** Internal */ williamr@2: inline void ClearLastChar(); williamr@2: williamr@2: /** Internal */ williamr@2: inline void SetLastChar(TInt aLastChar); williamr@2: williamr@2: /** Internal */ williamr@2: inline TInt GetLastChar() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline TUint16 ReplacedCharacter(); williamr@2: williamr@2: /** Internal */ williamr@2: inline void SetLastKey(TPtiKey aKey); williamr@2: williamr@2: /** Internal */ williamr@2: inline TPtiTextCase VowelCase() const; williamr@2: williamr@2: /** Internal */ williamr@2: inline void ResetVietnameseVowelSequenceAndToneMarks(); williamr@2: williamr@2: /** Internal */ williamr@2: inline TPtiKey LastKey() const; williamr@2: williamr@2: /** williamr@2: * Returns all keymapping data for current key, excluding first character williamr@2: * (which is expected to be "get all"-control character). williamr@2: * williamr@2: * @param aCase Text case for which data will be returned. williamr@2: * @return Constant descriptor pointing to keymap data. williamr@2: * @since S60 V3.0 williamr@2: */ williamr@2: TPtrC GetAll(TPtiTextCase aCase); williamr@2: williamr@2: /** Internal */ williamr@2: inline void SetFlag(TInt aFlag); williamr@2: williamr@2: /** Internal */ williamr@2: inline void ResetFlag(TInt aFlag); williamr@2: williamr@2: /** williamr@2: * Fills given array with numeric mode mappings defined in keymap data file. williamr@2: * Resultin array contains those mappings that are given with "numeric_mode_key" williamr@2: * tag in keymap data file. williamr@2: * williamr@2: * @since S60 V3.2 williamr@2: * @param aResult An array to be filled with numeric mode mappings. williamr@2: */ williamr@2: void GetNumericModeKeysFromDataL(RArray& aResult); williamr@2: williamr@2: /** williamr@2: * Set keyboard type to be used with qwerty keymappings. Default williamr@2: * type is EPtiKeyboardStandard4x12 (Nokia E70 style). williamr@2: * williamr@2: * @param aKeyboardType Keyboard type to be set. williamr@2: * @return KErrNone if keyboard type was set. williamr@2: * EErrNotSupported if mapping data does not have block for given keyboard type. williamr@2: */ williamr@2: IMPORT_C TInt SetKeyboardType(TPtiKeyboardType aKeyboardType); williamr@2: williamr@2: /** williamr@2: * Returns a boolean value indicating whether there is data block available for williamr@2: * given keyboard type. williamr@2: * williamr@2: * @param aKeyboardType Keyboard type. williamr@2: * @return ETrue if there is data block for given keyboard type. williamr@2: * EFalse otherwise williamr@2: */ williamr@2: IMPORT_C TBool HasDataBlockForKeyboardType(TPtiKeyboardType aKeyboardType) const; williamr@2: williamr@2: public: williamr@2: enum williamr@2: { williamr@2: EDeadKeyRootFlag = 0x01, williamr@2: EVowelSeqFlag = 0x02, williamr@2: EPrevKeyInUpperCase = 0x04, williamr@2: ETrackVietnameseToneMarksAndVowels = 0x08 williamr@2: }; williamr@2: williamr@2: private: williamr@2: CPtiQwertyKeyMappings(); williamr@2: CPtiQwertyKeyMappings(CPtiKeyMapData* aData); williamr@2: void ConstructL(); williamr@2: williamr@2: TUint16 NextChar(TPtiTextCase aCase); williamr@2: void KeyCodeToInternal(TPtiKey aKey); williamr@2: TUint16 GetDeadKeyChar(TPtiKey aKey, TPtiTextCase aCase); williamr@2: inline TInt DeadKeyIndex(TUint16 aDeadKeyUnicode); williamr@2: inline TBool IsDeadKeyCode(TUint16 aChar) const; williamr@2: inline TBool IsModeControlChar(TUint16 aChar) const; williamr@2: TUint16 GetCharForMode(TPtiEngineInputMode aMode, TPtrC aChars, TBool aSkipFirst); williamr@2: TBool DoesModeCharMatchToInputMode(TUint16 aChar, TPtiEngineInputMode aMode) const; williamr@2: TUint16 VowelSequence(TPtiKey aKey1, TPtiKey aKey2, TPtiTextCase aCase) const; williamr@2: TUint16 VietnameseToneMark(TUint16 aPrevChar, TPtiKey aKey); williamr@2: TUint16 RepeatingVowelSequence(TPtiKey aKey); williamr@2: TPtiKey VowelSeqRootKey(TUint16 aChar); williamr@2: inline TBool ChineseChrModeConversionNeeded(TPtiTextCase aCase, TPtiEngineInputMode aMode) const; williamr@2: inline TBool IsChnSpecialCharKey(TPtiKey aKey) const; williamr@2: williamr@2: private: williamr@2: RArray iReservedArray; williamr@2: TAny* iReservedPtr; williamr@2: TUint16 iDeadKey; williamr@2: TUint16 iDeadKeyRootChar; williamr@2: TUint16 iVowelSeqResult; williamr@2: TPtiKey iLastKey; williamr@2: TInt iFlags; williamr@2: CPtiQwertyKeymappingsExtension* iExtension; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: * CPtiHalfQwertyKeyMappings williamr@2: * williamr@2: * Keymappings implementation class for half qwerty keyboard williamr@2: */ williamr@2: williamr@2: NONSHARABLE_CLASS(CPtiHalfQwertyKeyMappings) : public CPtiKeyMappings williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CPtiHalfQwertyKeyMappings* NewL(CPtiKeyMapData* aData); williamr@2: IMPORT_C ~CPtiHalfQwertyKeyMappings(); williamr@2: williamr@2: public: // From MPtiKeyMappings williamr@2: IMPORT_C TInt ReplaceKeyMapL(TPtiKey aKey, TDesC& aMap, TPtiTextCase aCase); williamr@2: IMPORT_C TPtiKey KeyForCharacter(TUint16 aChar); williamr@2: IMPORT_C TPtrC GetAll(TPtiTextCase aCase); williamr@2: williamr@2: /** williamr@2: * Fills given array with numeric mode mappings defined in keymap data file. williamr@2: * Resultin array contains those mappings that are given with "numeric_mode_key" williamr@2: * tag in keymap data file. williamr@2: * williamr@2: * @since S60 V5.0 williamr@2: * @param aResult An array to be filled with numeric mode mappings. williamr@2: */ williamr@2: void GetNumericModeKeysFromDataL(RArray& aResult); williamr@2: williamr@2: /** williamr@2: * Returns keymapping data for given key. williamr@2: * williamr@2: * @since S60 V5.0 williamr@2: * @param aKey A key to be queried. williamr@2: * @param aResult Descritor where resulting data is stored. williamr@2: * @param aCase Text case williamr@2: */ williamr@2: IMPORT_C void GetDataForKey(TPtiKey aKey, TDes& aResult, TPtiTextCase aCase); williamr@2: /** williamr@2: * Starts mapping new key. Will return first character bound to given williamr@2: * key in given text case. williamr@2: * williamr@2: * @param aKey A key to be mapped. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @param aMode Input mode for mapping. This is needed if keymapping data contains williamr@2: * characters for several input modes (used mainly with Chinese williamr@2: * modes). This value will be matched to possible input mode control williamr@2: * characters in keymapping data. williamr@2: * @return First character bound to requested key. williamr@2: */ williamr@2: IMPORT_C TUint16 StartMapping(TPtiKey aKey, TPtiTextCase aCase, williamr@2: TPtiEngineInputMode aMode = EPtiEngineInputModeNone); williamr@2: williamr@2: /** williamr@2: * Continues keymapping sequence. This method should be called when key event williamr@2: * comes in while multitapping timer is active. Takes care of cycling through williamr@2: * multitapping candidates associated for given key. williamr@2: * williamr@2: * @since S60 V5.0 williamr@2: * @param aKey A key to be mapped. williamr@2: * @param aAppend Refernce to boolen variable. This will be set to ETrue if current character in williamr@2: * editor should be replaced (new chr-case character was found) and williamr@2: * to EFalse if new character should inserted instead. williamr@2: * @param aCase Text case for mapping operation. williamr@2: * @return Next character assosiated to given key or the first character if aKey williamr@2: * was different key than previous key press. williamr@2: */ williamr@2: IMPORT_C TUint16 NextKey(TPtiKey aKey, TBool &aAppend, TPtiTextCase aCase); williamr@2: protected: williamr@2: TUint16 NextChar(TPtiTextCase aCase); williamr@2: williamr@2: private: williamr@2: CPtiHalfQwertyKeyMappings(CPtiKeyMapData* aData); williamr@2: }; williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiKeyMappings::CurrentKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TPtiKey CPtiKeyMappings::CurrentKey() williamr@2: { williamr@2: return iCurrentKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::CurrentKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TPtiKey CPtiQwertyKeyMappings::CurrentKey() williamr@2: { williamr@2: return iCurrentKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::DeadKeyIndex williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TInt CPtiQwertyKeyMappings::DeadKeyIndex(TUint16 aDeadKeyUnicode) williamr@2: { williamr@2: return (aDeadKeyUnicode & 0x00ff); williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::IsDeadKeyCode williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::IsDeadKeyCode(TUint16 aChar) const williamr@2: { williamr@2: if (((aChar & 0xff00) == 0xf000) && williamr@2: ((aChar & 0xff) <= 5)) williamr@2: { williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::DeadKeyRootFlag williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::DeadKeyRootFlag() const williamr@2: { williamr@2: return (iFlags & EDeadKeyRootFlag) != 0; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::IsModeControlChar williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::IsModeControlChar(TUint16 aChar) const williamr@2: { williamr@2: if ((aChar == KPtiPinyinMarker) || williamr@2: (aChar == KPtiStrokeMarker) || williamr@2: (aChar == KPtiZhuyinMarker) || williamr@2: (aChar == KPtiCangjieMarker)) williamr@2: { williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::VowelSequenceFlag williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::VowelSequenceFlag() const williamr@2: { williamr@2: return (iFlags & EVowelSeqFlag) != 0; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::SetFlag williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::SetFlag(TInt aFlag) williamr@2: { williamr@2: iFlags |= aFlag; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ResertFlag williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::ResetFlag(TInt aFlag) williamr@2: { williamr@2: iFlags &= ~aFlag; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::VowelSequenceResult williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TUint16 CPtiQwertyKeyMappings::VowelSequenceResult() const williamr@2: { williamr@2: return iVowelSeqResult; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ClearVowelSequence williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::ClearVowelSequence() williamr@2: { williamr@2: iLastKey = EPtiKeyNone; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::DeadKeyRootChar williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TUint16 CPtiQwertyKeyMappings::DeadKeyRootChar() const williamr@2: { williamr@2: return iDeadKeyRootChar; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::DeadKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TInt16 CPtiQwertyKeyMappings::DeadKey() const williamr@2: { williamr@2: return iDeadKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ClearDeadKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::ClearDeadKey() williamr@2: { williamr@2: iDeadKey = 0; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ClearLastChar williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::ClearLastChar() williamr@2: { williamr@2: iExtension->iLastChar = 0; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::SetLastChar williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::SetLastChar(TInt aLastChar) williamr@2: { williamr@2: iExtension->iLastChar = (TUint16)aLastChar; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::GetLastChar williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TInt CPtiQwertyKeyMappings::GetLastChar() const williamr@2: { williamr@2: return iExtension->iLastChar; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ReplacedCharacter williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TUint16 CPtiQwertyKeyMappings::ReplacedCharacter() williamr@2: { williamr@2: return iExtension->iReplaced; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::SetLastKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::SetLastKey(TPtiKey aKey) williamr@2: { williamr@2: iLastKey = aKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::KeyCodeToInternal williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiKeyMappings::KeyCodeToInternal(TPtiKey aKey) williamr@2: { williamr@2: iCurrentKey = aKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::VowelCase williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TPtiTextCase CPtiQwertyKeyMappings::VowelCase() const williamr@2: { williamr@2: return iExtension->iVowelCase; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ResetVietnameseVowelSequenceAndToneMarks williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiQwertyKeyMappings::ResetVietnameseVowelSequenceAndToneMarks() williamr@2: { williamr@2: iExtension->iLastChar = 0; williamr@2: iExtension->iReplaced = 0; williamr@2: iExtension->iLastTone = 0; williamr@2: iVowelSeqResult = 0; williamr@2: iLastKey = EPtiKeyNone; williamr@2: ResetFlag(EVowelSeqFlag); williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::LastKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TPtiKey CPtiQwertyKeyMappings::LastKey() const williamr@2: { williamr@2: return iLastKey; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiQwertyKeyMappings::ChineseChrModeConversionNeeded williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::ChineseChrModeConversionNeeded(TPtiTextCase aCase, williamr@2: TPtiEngineInputMode aMode) const williamr@2: { williamr@2: if (aCase == EPtiCaseChrLower && williamr@2: (aMode == EPtiEnginePinyinQwerty || aMode == EPtiEnginePinyinPhraseQwerty || williamr@2: aMode == EPtiEngineStrokeQwerty || aMode ==EPtiEngineNormalCangjieQwerty || williamr@2: aMode == EPtiEngineZhuyinQwerty || aMode == EPtiEngineZhuyinPhraseQwerty || williamr@2: aMode == EPtiEngineStrokePhraseQwerty)) williamr@2: { williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiKeyMappings::DeQwertyfyCaseValue williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline void CPtiKeyMappings::DeQwertyfyCaseValue(TPtiTextCase& aCase) williamr@2: { williamr@2: if (aCase == EPtiCaseChrLower) williamr@2: { williamr@2: aCase = EPtiCaseLower; williamr@2: } williamr@2: else if (aCase == EPtiCaseChrUpper) williamr@2: { williamr@2: aCase = EPtiCaseUpper; williamr@2: } williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiKeyMappings::KeyMapData williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline CPtiKeyMapData* CPtiMappings::KeyMapData() const williamr@2: { williamr@2: return iKeyMapData; williamr@2: } williamr@2: williamr@2: // --------------------------------------------------------------------------- williamr@2: // CPtiKeyMappings::IsChnSpecialCharKey williamr@2: // williamr@2: // --------------------------------------------------------------------------- williamr@2: // williamr@2: inline TBool CPtiQwertyKeyMappings::IsChnSpecialCharKey(TPtiKey aKey) const williamr@2: { williamr@2: if (aKey == EPtiKeyQwertyPlus || williamr@2: aKey == EPtiKeyQwertyMinus || williamr@2: aKey == EPtiKeyQwertyComma || williamr@2: aKey == EPtiKeyQwertySemicolon || williamr@2: aKey == EPtiKeyQwertyFullstop || williamr@2: aKey == EPtiKeyQwertyHash || williamr@2: aKey == EPtiKeyQwertySlash || williamr@2: aKey == EPtiKeyQwertyApostrophe) williamr@2: { williamr@2: return ETrue; williamr@2: } williamr@2: williamr@2: return EFalse; williamr@2: } williamr@2: williamr@2: #endif // _PTI_KEY_MAPPINGS_H williamr@2: williamr@2: // End of file