textinput/ptienginev2/src/PtiKeyMapData.cpp
changeset 0 eb1f2e154e89
child 9 e6a39382bb9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/ptienginev2/src/PtiKeyMapData.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,525 @@
+/*
+* 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 implementation.
+*
+*/
+
+
+#include <ecom/ecom.h>
+#include <PtiKeyMapData.h>
+#include <languages.hrh>
+
+class TPtiLangImplBinding
+	{
+	public:
+		TInt iUid;
+		TInt iLangCode;		 
+	};
+
+const TInt KPtiDefaultNumMultitapKeys = 12;   // Conventional phone keypad.
+const TInt KPtiDefaultNumQwertyKeys = 48;     // 4x12 qwerty keyboard matrix.
+const TInt KPtiDefaultNum4x10QwertyKeys = 40; // 4x10 Mini qwerty keyboard
+const TInt KPtiDefaultNum3x11QwertyKeys = 33; // 3x11 Mini qwerty keyboard
+const TInt KPtiDefaultNumHalfQwertyKeys = 20; // 4x5 Half qwerty keyboard
+const TInt KPtiLargeNumber = 100000;
+const TUid KPtiKeymapDataInterfaceUid = { 0x10281896 };
+
+void CleanupArray( TAny* aAny )
+	{
+	RImplInfoPtrArray* implArray = 
+		reinterpret_cast< RImplInfoPtrArray*> ( aAny );
+	implArray->ResetAndDestroy();
+	implArray->Close();
+	}
+
+const TInt KNumItemsPerDeadKeyDataRow = 6;
+
+//
+// CPtiKeyMapData
+//
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::KeyForBindingTableIndex
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtiKey CPtiKeyMapData::KeyForBindingTableIndex(TPtiKeyboardType aKeyboardType,
+                                                         TInt aIndex, TPtiTextCase& aCase) const
+	{
+    TInt numItems = 0;         
+    const TPtiKeyBinding* table = KeyBindingTable(aKeyboardType, numItems);
+	
+	if (table && aIndex < numItems)
+	    {
+	    aCase = (TPtiTextCase)table[aIndex].iCase;
+	    return (TPtiKey)table[aIndex].iScanCode;
+	    }
+			
+	return EPtiKeyNone;	
+	}
+	
+			
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::~CPtiKeyMapData
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CPtiKeyMapData::~CPtiKeyMapData()
+	{
+	}
+	
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::LanguageCode
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiKeyMapData::LanguageCode() const
+	{
+	return 0;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::HasKeyData
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CPtiKeyMapData::HasKeyData(TPtiKeyboardType aKeyboardType) const
+    {
+	TInt tmp = 0;
+	return (KeyData(aKeyboardType, tmp) != NULL);	        
+    }	
+    
+    
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::HasDeadKeys
+// 
+// ---------------------------------------------------------------------------
+//   
+EXPORT_C TBool CPtiKeyMapData::HasDeadKeys(TPtiKeyboardType aKeyboardType) const
+    {
+	TInt tmp = 0;
+	return (DeadKeyDataArray(aKeyboardType, tmp) != NULL);    
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::HasVowelSequences
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CPtiKeyMapData::HasVowelSequences(TPtiKeyboardType aKeyboardType) const
+	{
+	TInt tmp = 0;
+	return (VowelSequenceTable(aKeyboardType, tmp) != NULL);
+	}
+    
+        
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::DataForKey
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CPtiKeyMapData::DataForKey(TPtiKeyboardType aKeyboardType,
+                                          TPtiKey aKey,
+                                          TPtiTextCase aCase) const
+	{		
+    TInt index = CaseBasedIndexInBindingTable(aKeyboardType, aKey, aCase);       
+    
+    if (index != KErrNotFound)
+    	{    		
+    	return DataForKey(aKeyboardType, index);    	
+    	}
+
+	return TPtrC();    	
+	}
+    
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::DataForKey
+// 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TPtrC CPtiKeyMapData::DataForKey(TPtiKeyboardType aKeyboardType,
+                                          TInt aIndex) const	
+	{	
+	TInt dataSize = 0;
+	TInt numBindItems = 0;
+	
+	const TPtiKeyBinding* bindPtr = KeyBindingTable(aKeyboardType, numBindItems);
+	const TUint16* dataPtr = KeyData(aKeyboardType, dataSize);
+		
+	if (aIndex < numBindItems)
+        {           
+        if (bindPtr[aIndex].iIndex < dataSize)
+        	{
+            return TPtrC(&dataPtr[bindPtr[aIndex].iIndex], bindPtr[aIndex].iNumChars);
+        	}
+        }
+        
+	return TPtrC();    
+	}
+
+	
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::IsDeadKey
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CPtiKeyMapData::IsDeadKey(TPtiKeyboardType /*aKeyboardType*/,
+                                         TPtiKey /*aKey*/,
+                                         TPtiTextCase /*aCase*/) const
+	{
+	return EFalse; // ONKO TURHA METODI?
+	}
+	
+		
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::DeadKeyDataForKey
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPtrC CPtiKeyMapData::DeadKeyDataForKey(TPtiKeyboardType aKeyboardType,
+                                                 TPtiKey aKey,
+                                                 TPtiTextCase aCase) const
+	{
+	if (!HasDeadKeys(aKeyboardType))	
+		{
+		return TPtrC();	
+		}
+		
+  	TInt index = CaseBasedIndexInBindingTable(aKeyboardType, aKey, aCase); 
+  	    	
+    if (index != KErrNotFound)
+        {        
+   	    TInt numRows = 0;	
+	    const TUint16* data = DeadKeyDataArray(aKeyboardType, numRows);		
+	
+	    for (TInt i = 0; i < numRows; i++)
+		    {
+		    if (data[0] == index)
+			    {
+			    data++;
+			    return TPtrC(data, KNumItemsPerDeadKeyDataRow - 1);
+			    }
+		    data += KNumItemsPerDeadKeyDataRow;
+		    }
+        }
+	
+	return TPtrC();
+	}
+		
+		
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::VowelSequenceTable
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TVowelSequence* CPtiKeyMapData::VowelSequenceTable(TPtiKeyboardType /*aKeyboardType*/,
+                                                                  TInt& aNumEntries) const
+	{
+	aNumEntries = 0;
+	return NULL;		
+	}				
+	                  
+	
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::NumberOfKeys
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CPtiKeyMapData::NumberOfKeys(TPtiKeyboardType aKeyboardType) const
+	{
+	switch (aKeyboardType)
+	    {
+        case EPtiKeyboard12Key:
+             return KPtiDefaultNumMultitapKeys;	   
+        case EPtiKeyboardQwerty4x12:
+             return KPtiDefaultNumQwertyKeys;                
+        case EPtiKeyboardQwerty4x10: 
+             return KPtiDefaultNum4x10QwertyKeys;	       
+        case EPtiKeyboardQwerty3x11: 
+             return KPtiDefaultNum3x11QwertyKeys;	                      	    	    
+        case EPtiKeyboardHalfQwerty: 
+             return KPtiDefaultNumHalfQwertyKeys;	               	    	                 
+	    default:
+	        break;
+	    }
+	    
+    return 0;	    			
+	}		
+	
+  
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::KeyData
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TUint16* CPtiKeyMapData::KeyData(TPtiKeyboardType /*aKeyboardType*/,
+                                                TInt& aDataSize) const
+	{
+	aDataSize = 0;
+	return NULL;		
+	}  
+  
+  
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::KeyBindingTable
+// 
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C const TPtiKeyBinding* CPtiKeyMapData::KeyBindingTable(TPtiKeyboardType /*aKeyboardType*/,
+                                                               TInt& aNumItems) const
+	{
+	aNumItems = 0;
+	return NULL;			
+	}
+	    	     
+				
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::GetNumericModeKeysL 
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CPtiKeyMapData::GetNumericModeKeysL(TPtiKeyboardType aKeyboardType,
+                                                  RArray<TPtiNumericKeyBinding>& aResult) const
+	{	
+	TInt numItems = 0;
+	const TPtiNumericKeyBinding* data = NumericModeKeysTable(aKeyboardType, numItems);
+
+	aResult.Reset();
+
+	if (data)
+		{			
+		for (TInt i = 0; i < numItems; i++)
+			{
+			User::LeaveIfError(aResult.Append(data[i]));
+			}
+		}
+	}	 	 	
+	 	 		 
+	       	
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::IsNumberModeKey
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CPtiKeyMapData::IsNumberModeKey(TPtiKeyboardType aKeyboardType,
+                                               TPtiNumericKeyBinding& aWhichKey) const
+	{
+	TInt numItems = 0;
+	aWhichKey.iChar = 0;
+		
+	const TPtiNumericKeyBinding* data = NumericModeKeysTable(aKeyboardType, numItems);
+	
+	if (data)
+		{
+		for (TInt i = 0; i < numItems; i++)
+			{			 
+			if (aWhichKey.iKey == data[i].iKey &&
+			    aWhichKey.iCase == data[i].iCase)
+				{
+				aWhichKey.iChar = data[i].iChar;
+				return ETrue;
+				}			
+			}		
+		}
+
+	return EFalse;	
+	}	    
+	       	
+	       		       				    	    	  
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::NumericModeKeysTable
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TPtiNumericKeyBinding* CPtiKeyMapData::NumericModeKeysTable(TPtiKeyboardType /*aKeyboardType*/,
+                                                                           TInt& aNumEntries) const
+	{
+	aNumEntries = 0;
+	return NULL;	
+	}	    
+		    	  
+	 
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::SuitableForLatinOnlyMode
+// 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TBool CPtiKeyMapData::SuitableForLatinOnlyMode() const
+	{
+	return ETrue;
+	}	    								
+
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::DeadKeyDataArray
+// 
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TUint16* CPtiKeyMapData::DeadKeyDataArray(TPtiKeyboardType /*aKeyboardType*/,
+                                                         TInt& aNumRowsInArray) const
+	{
+	aNumRowsInArray = 0;
+	return NULL;	
+	}
+	
+	
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::HasFnKeyBindings
+// 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C TBool CPtiKeyMapData::HasFnKeyBindings(TPtiKeyboardType aKeyboardType) const
+    {
+    TInt numItems = 0;
+    KeyBindingTable(aKeyboardType, numItems);
+    
+    if (numItems > 0)
+        {
+        if (numItems > NumberOfKeys(aKeyboardType) * 2)
+            {
+            // If there are data items beyond upper and lower case bindings,
+            // they must be fn-key data.
+            return ETrue;
+            }       
+        }
+        
+    return EFalse;
+    }	
+	
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapData::CaseBasedIndexInBindingTable
+// 
+// ---------------------------------------------------------------------------
+//		
+EXPORT_C TInt CPtiKeyMapData::CaseBasedIndexInBindingTable(TPtiKeyboardType aKeyboardType,
+                                                           TPtiKey aKey,                                                     
+	                                                       TPtiTextCase aCase) const
+    {
+    TInt numItems = 0;         
+    const TPtiKeyBinding* table = KeyBindingTable(aKeyboardType, numItems);
+    
+    if (table)
+        {
+        for (TInt i = 0; i < numItems; i++)
+            {
+            if (table[i].iScanCode == aKey && table[i].iCase == aCase)
+                {
+                return i;
+                }
+            }
+        }
+                       
+    return KPtiLargeNumber;
+    }
+	
+			   
+// ---------------------------------------------------------------------------
+// Reserved ordinals.
+// 
+// ---------------------------------------------------------------------------
+//	     
+EXPORT_C void CPtiKeyMapData::Reserved_1()
+	{
+	}
+	
+EXPORT_C void CPtiKeyMapData::Reserved_2()
+	{
+	}
+	
+EXPORT_C void CPtiKeyMapData::Reserved_3()
+	{
+	}
+	
+EXPORT_C void CPtiKeyMapData::Reserved_4()
+	{
+	}	
+
+//
+// CPtiKeyMapDataFactory
+//
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapDataFactory::CreateImplementationL
+// 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CPtiKeyMapDataFactory* CPtiKeyMapDataFactory::CreateImplementationL(const TUid aImplUid)
+    {
+	TUid dtorIDKey;
+	CPtiKeyMapDataFactory* iface = (CPtiKeyMapDataFactory*)REComSession::CreateImplementationL(aImplUid, dtorIDKey);		
+	if (iface)
+		{
+		iface->SetDestructorKeyId(dtorIDKey.iUid);
+		iface->SetImplementationUid(aImplUid. iUid);
+		}
+	return iface;	        
+    }
+
+
+// ---------------------------------------------------------------------------
+// CPtiKeyMapDataFactory::ListImplementationsL
+// 
+// ---------------------------------------------------------------------------
+//			
+EXPORT_C void CPtiKeyMapDataFactory::ListImplementationsL(RArray<TInt>& aResult)
+    {
+	RImplInfoPtrArray infoArray;
+	TInt i;
+
+	aResult.Reset();
+	CleanupStack::PushL( TCleanupItem( CleanupArray, &infoArray ) );
+	REComSession::ListImplementationsL(KPtiKeymapDataInterfaceUid, infoArray);
+
+	for (i = 0; i < infoArray.Count(); i++)
+		{
+		aResult.AppendL(infoArray[i]->ImplementationUid().iUid);
+		}
+
+	CleanupStack::PopAndDestroy(); // infoArray     
+    }
+        	
+        	
+// ---------------------------------------------------------------------------
+// CPtiKeyMapDataFactory::~CPtiKeyMapDataFactory
+// 
+// ---------------------------------------------------------------------------
+//	
+EXPORT_C CPtiKeyMapDataFactory::~CPtiKeyMapDataFactory()
+    {
+ 	REComSession::DestroyedImplementation(TUid::Uid(iDTorId));
+    }
+
+
+// ---------------------------------------------------------------------------
+// Reserved ordinals.
+// 
+// ---------------------------------------------------------------------------
+//	  
+EXPORT_C void CPtiKeyMapDataFactory::Reserved_1()
+    {    
+    }
+    
+    
+EXPORT_C void CPtiKeyMapDataFactory::Reserved_2()
+    {    
+    }
+
+// End of file
+
+