fep/aknfep/src/aknfepuiinputstateindicphoneticqwerty.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/aknfepuiinputstateindicphoneticqwerty.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,210 @@
+/*
+* Copyright (c) 2004 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:           
+*       Provides the TAknFepInputStateIndicPhoneticQwerty methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+#include "aknfepuiinputstateindicphoneticqwerty.h"
+#include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
+#include "AknFepManagerUIInterface.h"           //MAknFepManagerUIInterface
+#include "AknFepCaseManager.h"
+#include "AknFepUiIndicInputManager.h"
+#include "AknFepPanic.h"
+
+#include <e32err.h>
+#include <PtiEngine.h>
+#include <PtiDefs.h>
+#include <PtiKeyMappings.h>
+#include <CentralRepository.h> 
+#include <Languages.hrh>
+
+TAknFepInputStateIndicPhoneticQwerty::
+TAknFepInputStateIndicPhoneticQwerty(MAknFepUIManagerStateInterface* aOwner)
+    :TAknFepInputStateQwerty(aOwner)
+    {
+    iState = EInitial;
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    ptiengine->ClearCurrentWord();
+    TRAP_IGNORE(ptiengine->ActivateLanguageL(KLangHindiPhonetic,
+                                             EPtiEngineInputModeIndicPhoneticQwerty));//KLangHindiPhonetic
+    ptiengine->SetCase(EPtiCaseLower);
+    }
+
+TBool TAknFepInputStateIndicPhoneticQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength)
+    {
+    TBool ret = ETrue;
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    __ASSERT_DEBUG(ptiengine != NULL,AknFepPanic(EAknFepPanicNoValidPtiEngine));
+    
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    __ASSERT_DEBUG(fepMan != NULL,AknFepPanic(EAknFepPanicNoValidFepManager));
+         
+	if(!IsQwertyKey(aKey)|| 
+		fepMan->IsOnlyNumericPermitted()||
+		fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
+		{
+		fepMan->CommitInlineEditL();
+		ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL );	
+		ret = TAknFepInputStateQwerty::HandleKeyL(aKey, aLength);
+		}
+	else if (aKey == EPtiKeyQwertySpace ||aKey == EStdKeyEnter)
+		{    
+		TInt languageCode = 0;
+    	MPtiLanguage* curlang = ptiengine->CurrentLanguage();
+	    if (curlang)
+	        {
+	        languageCode = curlang->LanguageCode();
+	        }
+
+		// Space clears Explicite halant for North Indian Languages.
+		if(IsToRemoveHalantForLanguage(languageCode))
+			{
+			RemoveHalantL(TLanguage(languageCode));
+			fepMan->CommitInlineEditL();
+			}
+		ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL );	
+		ret = EFalse;
+		}
+	else
+		{
+		TBool isCharacter = ETrue;
+	    if (!iData)
+	        {
+	        isCharacter = IsCharacterKey(aKey);
+	        }
+	        
+		HandleCaseChange(aKey,isCharacter);
+	    iData = aKey;
+
+	    TBool keyEventHandledByFep = ETrue;
+	    
+		TPhoneticArg arg;
+	    TBuf<CAknFepManager::EMaximumFepWordLength> destinationbuf;
+	    destinationbuf.Zero();               
+	    
+		TInt errorcode = 0;   
+	    
+	    if(!((aKey == EPtiKeyStar) || 
+	    	(aKey == EPtiKeyQwerty8 && fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) || 
+	    	(aKey == EPtiKeyQwertySpace)))
+	    	{
+	        TPtrC string = ptiengine->AppendKeyPress((TPtiKey)aKey);
+	        arg.iChar = string[0];
+	        arg.iDest = & destinationbuf;
+	        errorcode = ptiengine->HandleCommandL(EPtiCommandGetPhoneticText,REINTERPRET_CAST( TAny*, &arg));
+	        }
+	    else
+	        {
+	    	errorcode = ptiengine->HandleCommandL(EPtiCommandBreakSyllable, NULL );	
+	    	}
+	    	
+	    switch(errorcode)
+	    	{
+	    	case KErrNone:
+	    		{
+	    		switch(arg.iState)
+	    			{
+	    			case EIndicSyllableStateInsideSyllable:
+	    				{            				
+	        			if (destinationbuf.Length())
+				            {
+				            fepMan->NewCharacterSequenceL(destinationbuf,
+				                                          EIndicInputResponsePhoneticQwertyText);
+				            }
+	    				}
+	    			break;
+	    			case EIndicSyllableStateSyllableBroken:
+	    				{
+	  					fepMan->CommitInlineEditL();
+	    				if (destinationbuf.Length())
+				            {
+				            fepMan->NewCharacterSequenceL(destinationbuf,
+				                                          EIndicInputResponsePhoneticQwertyText);
+				            }	
+	    				}
+	    			break;
+	    			default:
+	    			break;
+	    			}
+	    		}
+	    	break;
+	    	case KErrOverflow:
+	    		{
+				fepMan->NewCharacterSequenceL(destinationbuf,EIndicInputResponsePhoneticQwertyText);    		
+	    		fepMan->CommitInlineEditL();
+	        	ptiengine->HandleCommandL(EPtiCommandClearPhoneticBuffer,NULL);
+	    		}
+	    	break;
+	    	default:
+	    	break;
+	    	}
+	    ptiengine->ClearCurrentWord();
+	    CAknFepCaseManager* caseMan = iOwner->CaseMan(); 
+	    iOwner->CaseMan()->UpdateCase(ENullNaviEvent);
+		}	
+
+    return ret;
+    }
+    
+TBool TAknFepInputStateIndicPhoneticQwerty::IsQwertyKey(const TInt aKey)
+    {
+    TBool response = EFalse;
+    if ( (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)||
+        (aKey == EPtiKeyQwertyFullstop) ||
+        (aKey == EPtiKeyStar || 
+        (aKey == EPtiKeyQwerty8 && 
+        iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode))) ||
+        aKey == EPtiKeyQwertySpace || 
+        aKey == EStdKeyEnter)
+        {
+        response = ETrue;
+        }
+    return response;
+    }
+    
+void TAknFepInputStateIndicPhoneticQwerty::RemoveHalantL(TLanguage aLanguage)
+	{
+	MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    if(TAknFepUiIndicInputManager::IsCharVirama(fepMan->PreviousChar(), aLanguage))
+    	{
+    	fepMan->RemovePreviousCharacterL();	
+    	}
+	}
+	
+TBool TAknFepInputStateIndicPhoneticQwerty::IsToRemoveHalantForLanguage(TInt aLanguage)
+	{
+	TBool ret = EFalse;
+	switch(aLanguage)
+		{
+		case KLangHindiPhonetic:
+			ret = ETrue;
+		break;
+		}
+	return ret;	
+	}
+	
+	
+// End of file