diff -r 000000000000 -r eb1f2e154e89 inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyMapData.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyMapData.h Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,478 @@ +/* +* 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: CPtiKeyMapData class definitions. +* +*/ + + + + + + + + + + + + + + +#ifndef _PTI_KEYMAP_DATA_H +#define _PTI_KEYMAP_DATA_H + +#include +#include "PtiDefs.h" + +// +// TPtiKeyBinding +// +class TPtiKeyBinding + { + public: + TUint16 iScanCode; + TUint16 iCase; + TUint16 iIndex; + TUint16 iNumChars; + }; + +// +// TPtiVowelSequence +// +class TVowelSequence + { + public: + TPtiKey iFirst; + TPtiKey iSecond; + TUint16 iChars[2]; // for upper and lower case + }; + +/** +* Interface class for PtiEngine keymapping data. Keymapping data is built into ecom dlls +* and accessesed through this interface. PtiEngine clients do not normally need to use +* this class directly. +*/ +class MPtiKeyMapData + { + public: + /** + * Returns language code for keymap data. + * + * @since S60 V5.0 + * @return Symbian OS language code. + */ + virtual TInt LanguageCode() const = 0; + + /** + * Returns a boolean value indicating whether language dll contains keymapping + * data for given keyboard type. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @return ETrue if data contains multitapping definitions. + * EFalse otherwise. + */ + virtual TBool HasKeyData(TPtiKeyboardType aKeyboardType) const = 0; + + /** + * Returns a boolean value indicating whether key mapping data contains + * dead keys. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @return ETrue if data contains dead keys. + * EFalse otherwise. + */ + virtual TBool HasDeadKeys(TPtiKeyboardType aKeyboardType) const = 0; + + /** + * Returns boolean value indicating whether keymapping data contains + * vowel sequences (such as those needed for Vietnamese qwerty input). + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @return ETrue if data contains vowel sequences. + * EFalse otherwise + */ + virtual TBool HasVowelSequences(TPtiKeyboardType aKeyboardType) const = 0; + + /** + * Returns keymap data for given keyboard type, key and text case. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aKey A key to be requested. + * @param aCase A text case for aKey + * @return Pointer to keymap data. + */ + virtual TPtrC DataForKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const = 0; + /** + * Returns keymap data for given keyboard type, key and text case. This version takes + * an internal keymap binding table index as a parameter. PtiEngine framework + * doesn't call this method directly. Normally the real implementation + * for this method is generated by keymap data builder into keymap plugin + * file, so each language data plugin has own implementation of this method. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aIndex A internal index into keymap buildings table. + * @return Pointer to keymap data. + */ + virtual TPtrC DataForKey(TPtiKeyboardType aKeyboardType, TInt aIndex) const = 0; + + /** + * Returns a boolean value indicating whether given key / case combination + * is so called 'dead key'. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aKey A key to be queried. + * @param aCase A text case for aKey + * @return ETrue if given key / case combination is a dead key. + * EFalse otherwise. + */ + virtual TBool IsDeadKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const = 0; + /** + * Returns dead key data for given key / case combination. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aKey A key to be queried. + * @param aCase A text case for aKey. + * @return Pointer to dead key data. + */ + virtual TPtrC DeadKeyDataForKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const = 0; + /** + * Returns pointer to vowel sequence table (needed for Vietnamese qwerty input). + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aNumEntries This integer will be filled with number of entries in table. + * @return Pointer to vowel sequence table. + * NULL if there isn't vowel sequence data available. + */ + virtual const TVowelSequence* VowelSequenceTable(TPtiKeyboardType aKeyboardType, + TInt& aNumEntries) const = 0; + /** + * Returns maximum number of physical keys used for given keyboard type. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type. + * @return number of physical keys used for multitap mode. + */ + virtual TInt NumberOfKeys(TPtiKeyboardType aKeyboardType) const = 0; + + /** + * This methods provides direct access to keymap data table. In most cases + * this method is not needed outside keymap data classes. + * Use only if none of the convinience methods above is applicable. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aDataSize This integer filled with number of TUint16 values in data table. + * @return Pointer to multitap data table. + */ + virtual const TUint16* KeyData(TPtiKeyboardType aKeyboardType, + TInt& aDataSize) const = 0; + /** + * This method provides direct access to keybinding table. Normally + * this isn't needed outside of keymapping classes. Use only if none of the + * convinienece methods above is applicable + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aNumItems This integer will be filled with number of items in reurned table. + * @return Pointer to multitapping key bindings table. + */ + virtual const TPtiKeyBinding* KeyBindingTable(TPtiKeyboardType aKeyboardType, + TInt& aNumItems) const = 0; + /** + * This methods fills an array of key bindings with those keys that produce numeric + * mode characters for given keyboard type. This is needed because not all languages naturally + * contain required numeric mode characters. Text input framework needs to know which + * keys to use in that case. For example, user always needs to be able to produce + * characters 'p' and 'w' for phone number editor, but many languages (Arabic, Hebrew, etc) + * don't have those characters in their qwerty key mapping data. This method makes it possible + * to define in key mapping data file which keys will be used if a number mode character is + * missing from normal qwerty mappings. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aResult resulting key array will be stored here. Existing entries are cleared. + */ + virtual void GetNumericModeKeysL(TPtiKeyboardType aKeyboardType, + RArray& aResult) const = 0; + + /** + * This methods takes the given TPtiNumericKeyBinding struct and fills its iChar + * field if iKey and iShifted parameters of that struct match to any of the + * qwerty number mode keys for this language. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aWhichKey A structure containing search parameters and result field. + * @return ETrue If matching number mode key was found. + * EFalse Otherwise. + */ + virtual TBool IsNumberModeKey(TPtiKeyboardType aKeyboardType, + TPtiNumericKeyBinding& aWhichKey) const = 0; + + /** + * Returns pointer to numeric mode key table for given keyboard type. + * Number of items in array is stored to given integer variable. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aNumEntries The number of items in return array will be stored to this + * integer value. + * @return Pointer to numeric mode keys table + */ + virtual const TPtiNumericKeyBinding* NumericModeKeysTable(TPtiKeyboardType aKeyboardType, + TInt& aNumEntries) const = 0; + + /** + * This method returns a boolean value indicating whether this language can be used + * in "Latin Only" editors. If this method returns EFalse, then input framework will + * substitute it locally with English for "Latin Only" editors. Default implementation + * returns ETrue, so most languages don't need to define this in their key mapping data file. + * + * @since S60 V5.0 + * @return ETrue if this language is suitable to be used in "Latin Only" -mode. + * EFalse otherwise. + */ + virtual TBool SuitableForLatinOnlyMode() const = 0; + + /** + * Returns pointer to dead key data table. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aNumRowsInArray This integer is filled with number of rows in array. + * @return Pointer to dead key data array, + */ + virtual const TUint16* DeadKeyDataArray(TPtiKeyboardType aKeyboardType, + TInt& aNumRowsInArray) const = 0; + + /** + * Returns boolean value indicating whether given keyboard data + * contains fn-key mappings. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @return A boolean value indicating whether aKeyboardType contains fn-key + * mappings + */ + virtual TBool HasFnKeyBindings(TPtiKeyboardType aKeyboardType) const = 0; + + /** + * Reserved vtable entries. + */ + virtual void Reserved_1() = 0; + virtual void Reserved_2() = 0; + virtual void Reserved_3() = 0; + virtual void Reserved_4() = 0; + }; + + +/** +* Default implementation for MPtiKeyMapData interface class. +*/ +class CPtiKeyMapData : public CBase, public MPtiKeyMapData + { + public: + /** + * Returns index of TPtiKeyBinding item in key binding table for given key. + * Key binding table contains index of key's data in keymap data array as well as + * number of characters tied to that key. When the index is know, the actual key + * map data for a key can then be accesses through key binding table. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aKey A key to be queried. + * @return Index of aKey in key binding table. + */ + IMPORT_C TInt CaseBasedIndexInBindingTable(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const; + + /** + * Returns a key constant and text case associated to given index in + * key binding table. + * + * @since S60 V5.0 + * @param aKeyboardType Keyboard type + * @param aIndex An index to be queried. + * @param aCase This value will be filled with text case associated to given + * index. + * @return A key associated to given index. + * EPtiKeyNone if not found. + */ + IMPORT_C TPtiKey KeyForBindingTableIndex(TPtiKeyboardType aKeyboardType, + TInt aIndex, + TPtiTextCase& aCase) const; + + /** + * Reurns list of language codes for all found keymap data implementations. + * + * @since S60 V5.0 + * @param aResult An array to be filled with language codes. + */ + IMPORT_C static void ListLanguagesL(RArray& aResult); + + IMPORT_C ~CPtiKeyMapData(); + + // From MPtiKeyMapData + IMPORT_C TInt LanguageCode() const; + IMPORT_C TBool HasKeyData(TPtiKeyboardType aKeyboardType) const; + IMPORT_C TBool HasDeadKeys(TPtiKeyboardType aKeyboardType) const; + IMPORT_C TBool HasVowelSequences(TPtiKeyboardType aKeyboardType) const; + IMPORT_C TPtrC DataForKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const; + IMPORT_C TPtrC DataForKey(TPtiKeyboardType aKeyboardType, TInt aIndex) const; + IMPORT_C TBool IsDeadKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const; + IMPORT_C TPtrC DeadKeyDataForKey(TPtiKeyboardType aKeyboardType, + TPtiKey aKey, + TPtiTextCase aCase) const; + IMPORT_C const TVowelSequence* VowelSequenceTable(TPtiKeyboardType aKeyboardType, + TInt& aNumEntries) const; + IMPORT_C TInt NumberOfKeys(TPtiKeyboardType aKeyboardType) const; + IMPORT_C const TUint16* KeyData(TPtiKeyboardType aKeyboardType, + TInt& aDataSize) const; + IMPORT_C const TPtiKeyBinding* KeyBindingTable(TPtiKeyboardType aKeyboardType, + TInt& aNumItems) const; + IMPORT_C void GetNumericModeKeysL(TPtiKeyboardType aKeyboardType, + RArray& aResult) const; + IMPORT_C TBool IsNumberModeKey(TPtiKeyboardType aKeyboardType, + TPtiNumericKeyBinding& aWhichKey) const; + IMPORT_C const TPtiNumericKeyBinding* NumericModeKeysTable(TPtiKeyboardType aKeyboardType, + TInt& aNumEntries) const; + IMPORT_C TBool SuitableForLatinOnlyMode() const; + IMPORT_C const TUint16* DeadKeyDataArray(TPtiKeyboardType aKeyboardType, + TInt& aNumRowsInArray) const; + IMPORT_C TBool HasFnKeyBindings(TPtiKeyboardType aKeyboardType) const; + + IMPORT_C void Reserved_1(); + IMPORT_C void Reserved_2(); + IMPORT_C void Reserved_3(); + IMPORT_C void Reserved_4(); + + private: + TInt iReserved1; + TInt iReserved2; + }; + + +/** +* Keymap data factory class. +*/ +class CPtiKeyMapDataFactory : public CBase + { + public: + /** + * Creates a key map data instance for given implementation uid. + * + * @since S60 V5.0 + * @param aImplUid An implemenation uid for key map data factory to be created. + * @return Pointer to key map data factory interface. + * NULL if not found. + */ + IMPORT_C static CPtiKeyMapDataFactory* CreateImplementationL(const TUid aImplUid); + + /** + * Fills given list with implementation uids of all found key map data + * factory implementations. + * + * @since S60 V5.0 + * @param aResult An array to be filled with uids. + */ + IMPORT_C static void ListImplementationsL(RArray& aResult); + + /** + * Returns keymap data object for given language. + * + * @since S60 5.0 + * @param aLanguageCode Languace code for requested data. + * @return Pointer to keymap data obejct. + * NULL if no data available for given language. + */ + virtual MPtiKeyMapData* KeyMapDataForLanguageL(TInt aLanguageCode) = 0; + + /** + * Lists all languages supported by this data factory. + * + * @since S60 5.0 + * @param aResult List instance for storing results. + */ + virtual void ListLanguagesL(RArray& aResult) = 0; + + IMPORT_C ~CPtiKeyMapDataFactory(); + + IMPORT_C virtual void Reserved_1(); + IMPORT_C virtual void Reserved_2(); + + public: + inline TInt ImplementationUid() const; + + private: + inline void SetDestructorKeyId(TInt aUid); + inline void SetImplementationUid(TInt aUid); + + private: + TInt iDTorId; + TInt iImplUid; + TInt iReserved; + }; + + +// --------------------------------------------------------------------------- +// CPtiKeyMapDataFactory::SetDestructorKeyId +// +// --------------------------------------------------------------------------- +// +inline void CPtiKeyMapDataFactory::SetDestructorKeyId(TInt aUid) + { + iDTorId = aUid; + } + +// --------------------------------------------------------------------------- +// CPtiKeyMapDataFactory::ImplementationUid +// +// --------------------------------------------------------------------------- +// +inline TInt CPtiKeyMapDataFactory::ImplementationUid() const + { + return iImplUid; + } + +// --------------------------------------------------------------------------- +// CPtiKeyMapDataFactory::SetImplementationUid +// +// --------------------------------------------------------------------------- +// +inline void CPtiKeyMapDataFactory::SetImplementationUid(TInt aUid) + { + iImplUid = aUid; + } + +#endif // _PTI_KEYMAP_DATA_H + +// End of file