inputmethods_plat/ptiengine_key_definations_api/inc/PtiKeyMapData.h
changeset 0 eb1f2e154e89
--- /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 <e32base.h>
+#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<TPtiNumericKeyBinding>& 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<TInt>& 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<TPtiNumericKeyBinding>& 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<TInt>& 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<TInt>& 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