fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
--- a/fep/aknfep/src/AknFepUiInputStateEntryHalfQwertyWesternPredictive.cpp	Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,887 +0,0 @@
-/*
-* 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:           
-*       Provides the TAknFepUiInputStateEntryHalfQwertyWesternPredictive methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepUiInputStateEntryHalfQwertyWesternPredictive.h"
-#include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h"           //MAknFepManagerUIInterface
-#include "AknFepUiManagerWestern.h"
-#include "AknFepManager.h"
-#include "AknFepPanic.h"
-#include "AknFepCaseManager.h"
-
-#include <PtiEngine.h>              //CPtiEngine
-#include <PtiDefs.h>                //keys
-#include <PtiCompositionDataIF.h>   //MPtiEngineCompositionDataInterface
-#include <featmgr.h>                //FeatureManager
-#include <e32keys.h>
-#include <aknfep.rsg>
-#include <PtiUserDicEntry.h>
-// TODO: Remove this include
-#include <AvkonInternalCRKeys.h>
-#include <AknUtils.h>
-
-static const TInt KKeyMappingsLength = 63;
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-TAknFepUiInputStateEntryHalfQwertyWesternPredictive::TAknFepUiInputStateEntryHalfQwertyWesternPredictive(MAknFepUIManagerStateInterface* aOwner)
-    :TAknFepInputStateBase(aOwner)
-    {
-    //this class insists on the existence of a case manager
-    __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager));
-
-    iState = EEntry;
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    
-    ptiengine->SetInputMode( EPtiEngineHalfQwertyPredictive );
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-
-    TPtiTextCase caseMode = ptiengine->Case();
-
-    ptiengine->SetCase(caseMode);
-    TBool isUnlimitedEditor = EFalse;
-    ptiengine->SetMaxLengthForAutoCompletedCandidates(fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor ));
-    
-	if(fepMan->IsAutoCompleteOn())
-	    {
-	    TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandEnableAutoCompletion ) );
-	    }
-	else
-	    {
-	    TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandDisableAutoCompletion ) );
-	    }
-	
-//	TPtiErrorCorrectionLevel correctionLevel = (TPtiErrorCorrectionLevel)fepMan->AdvancedPredictiveTypingCorrectionLevel();
-//	TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetCorrectionLevel, &correctionLevel ) );	
-	
-	TPtiKeyboardType keyboard = fepMan->KeyboardLayout();
-	ptiengine->SetKeyboardType(keyboard);
-	
-
-//	TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown();
-//	TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, &isNumberCandidateShown ) );
-//	
-//	TBool primaryCandidateState = fepMan->AdvancedPredictivePrimaryCandidate();
-//	TRAP_IGNORE( ptiengine->HandleCommandL( EPtiCommandSetProactiveCorrection, &primaryCandidateState ) );
-    }
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////////
-//
-TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength)
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-	
-	CAknFepFnKeyManager::TFnKeyState fnKeyState  = fepMan->FnKeyState();
-	
-	if(fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)
-		{
-		ptiengine->SetCase(EPtiCaseFnLower);
-		}
-
-    // Handle the Chr cycling
-    if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) && aKey !=EKeyBackspace)
-        {
-        // if the key has no accented characters mapped to it, then just block the event
-		TBuf<KKeyMappingsLength> keyMappings; 
-    	ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseChrLower );   
-		if( keyMappings.Length() == 0 )       	
-        	{
-        	return EFalse;
-        	}
-       // if there is a no matches indicator remove it 
-        if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) && fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))
-             {
-             fepMan->TryRemoveNoMatchesIndicatorL();
-             fepMan->UpdateCbaL(NULL);
-             }	
-        // if there is an autocompletion part rip it off
-        fepMan->RemoveSuggestedAdvanceCompletionL();			        
-        
-        // now if the editor has no free space just return
-        if ( !fepMan->EditorHasFreeSpace() )
-            {
-            return EFalse;
-            }
-        // if we are in inline editing, break the word
-		if( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) )
-			{                        
-			TPtrC selectedWord = ptiengine->CurrentWord();
-        	if( ptiengine->CurrentWord() != KNullDesC)
-        		{
-            	fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() );  //selection.iAnchorPosition
-        		ptiengine->CommitCurrentWord();	
-            	}
-        	fepMan->TryCloseUiL(); 
-			}
-            
-        if ( iData && (iData != aKey) )
-            {
-            // Chr key is still pressed down but character key was changed from previous one
-            // to new one. The previous character is committed and PtiEngine starts 
-            // processing new key.
-            ptiengine->CancelTimerActivity();            
-            }
-        fepMan->SetFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction );
-        }
-
-    TBool response = EFalse;
-
-
-    // Handle dead keys with space or backspace. These keys are not mapped in PtiEngine, so they cannot
-    // be handled there.
-/*    if ( ptiengine->HandleCommandL(EPtiCommandDeadKeyWaiting) == 1 )
-        {
-        if ( aKey == EStdKeyBackspace )
-            {
-            // Pending dead key is removed with backspace. No other characters are removed.
-            ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar);
-            response = ETrue;
-            }
-        else if ( aKey == EStdKeySpace )
-            {
-            // Dead key followed by space enters the dead key root character
-            TText deadRoot = ptiengine->HandleCommandL(EPtiCommandGetAndClearDeadKeyRootChar);
-            ptiengine->HandleCommandL( EPtiCommandAppendCharacter, &deadRoot );
-            
-            TPtrC newText = ptiengine->CurrentWord();
-            fepMan->UpdateInlineEditL( newText, newText.Length() );
-            iOwner->CaseMan()->UpdateCase(ENullNaviEvent);
-            
-            response = ETrue;
-            }
-        }		    
-*/
-    if (!response) // key not yet handled
-        {
-        switch (aKey)
-            {
-            case EStdKeySpace: 
-            	if( fepMan->FnKeyState() 
-            				== CAknFepFnKeyManager::EFnKeyNone )
-            		{
-            		response = HandleWordBreakingKeysL(aKey);            		
-            		}
-            	else
-            		{
-            		response = HandleQwertyKeysL( aKey, aLength);
-            		}	
-            	break;
-            case EStdKeyFullStop:
-            	if( aLength == ELongKeyPress )
-            		{
-            		// first commit the word if in inline editing
-					if( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))
-						{ 
-						if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))
-							{
-							fepMan->TryRemoveNoMatchesIndicatorL();
-							fepMan->UpdateCbaL(NULL);
-							}
-					
-						TPtrC selectedWord = ptiengine->CurrentWord();
-			        	if( ptiengine->CurrentWord() != KNullDesC)
-			        		{
-			            	fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() );  //selection.iAnchorPosition			            	
-                            ptiengine->CommitCurrentWord();
-			            	}
-			        	fepMan->TryCloseUiL(); 
-						}
-            		response = EFalse;            		
-            		}
-            	else
-            		{
-            		HandleShiftState(aKey);
-            		response = HandleQwertyKeysL( aKey, aLength);
-            		}	
-            	break;
-            case EStdKeyEnter:
-            case EStdKeyTab:
-            case EStdKeyLeftArrow:
-            case EStdKeyRightArrow:
-            case EStdKeyUpArrow:
-            case EStdKeyDownArrow:
-                response = HandleWordBreakingKeysL(aKey);
-                break;
-                
-            // Long press of shift key start copy event.     
-            // Its should handle by framework.    
-            case EStdKeyF21:
-            case EKeyF21:
-            // Soft key handle by framework
-            // Selection key handle by AknFepManager.
-            case EStdKeyDevice0: // iCode:EKeyCBA1
-            case EStdKeyDevice1: //	iCode:EKeyCBA2
-            case EStdKeyDevice3: // iCode:EKeyOK
-            case EKeyCBA1:
-            case EKeyCBA2:
-            case EKeyOK:
-            	response = EFalse;
-            	break;
-
-            case EKeyUpArrow: 
-                if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) )
-                    {
-                    // Select the exact match with the up arrow and lock it.
-                    // Another alternative could be to call function DoPreviousMatchL() from here
-                    
-                    TPtrC exactWord = ptiengine->FirstCandidate();
-                    ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate, NULL );
-                    
-                    fepMan->UpdateInlineEditL(exactWord, exactWord.Length());
-                    
-                    response = ETrue;
-                    break;
-                    }
-                    // fall through
-            case EKeyDownArrow:
-            case EKeyLeftArrow:
-            case EKeyRightArrow:
-            case EKeyBackspace:
-            	{
-                response = HandleNaviKeysL(aKey, aLength);
-            	}
-                break;
-            
-            case EStdKeyLeftShift:
-            case EStdKeyRightShift:
-            case EStdKeyLeftFunc:
-                {
-                if( EPtiCaseFnLower == fepMan->PtiEngine()->Case() )
-                    {
-                    if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) )
-                        {
-                        fepMan->TryRemoveNoMatchesIndicatorL();
-                        }
-                    
-                    fepMan->UpdateCbaL(NULL);
-    
-                    /*if (fepMan->IsFlagSet(CAknFepManager::EFlagCompoundWord))
-                        { 
-                        if (fepMan->IsCursorAtEndOfWord())
-                            {
-                            fepMan->AddCompoundWordToUdbL();                
-                            }
-                        fepMan->ClearFlag(CAknFepManager::EFlagCompoundWord);
-                        }
-                        */
-    
-                    fepMan->RemoveSuggestedAdvanceCompletionL();
-                    ptiengine->CommitCurrentWord();
-                    fepMan->CommitInlineEditL();
-                    fepMan->TryCloseUiL();
-                    response = EFalse;
-                    }
-                }
-                break;
-                
-            default:
-                HandleShiftState(aKey);
-                response = HandleQwertyKeysL(aKey, aLength);
-#ifdef __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__
-                if ( aLength == ELongKeyPress )
-                    {
-                    // Expire multitap timer after long press. 
-                    ptiengine->CancelTimerActivity();
-                    }
-#endif // __ITI_LONGPRESS_NUM_SHIFT_COPYPASTE__
-                break;
-            }
-        }
-        
-    if ( aKey == EStdKeyEnter)
-        {
-        iData = 0;
-        return 0;
-        }
-        
-    if (!iOwner->PtiEngine()->IsValidKey((TPtiKey)aKey))
-        {     
-        iData = 0;
-        fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction);        
-        fepMan->PtiEngine()->CancelTimerActivity();
-                
-        return response;
-        }
-        
-        
-    iData = aKey; // store the pressed key for future reference
-    return response;
-    }
-
-
-//////////////////////////////////////////////////////////////////////////////////
-//
-void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleShiftState( TInt aKey )
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    CAknFepCaseManager* caseMan = iOwner->CaseMan();
-    CAknFepFnKeyManager::TFnKeyState fnKeyState  = fepMan->FnKeyState();
-    TPtiTextCase shiftedCase;
-    if(fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)
-		{
-		shiftedCase = EPtiCaseFnLower;
-		}
-	else
- 		{
- 		shiftedCase= EPtiCaseLower;	
- 		}
-    
-    // Find out if the key is alphabetic
-    TBuf<KKeyMappingsLength> keyMappings; 
-    ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseUpper );   
-    TBool isAlpha = ( keyMappings.Length() && TChar(keyMappings[0]).IsAlpha() );
-    
-    if (isAlpha && (fnKeyState  == CAknFepFnKeyManager::EFnKeyNone))
-        {
-        switch ( caseMan->CurrentCase() )
-            {
-            case EAknEditorTextCase:
-                {
-                // Alphabetic characters are always capitalized in "Abc" mode 
-                // unless the shift is pressed
-                if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) )
-                    {
-                    shiftedCase = EPtiCaseUpper;
-                    }          
-                }
-            break;
-            
-            case EAknEditorLowerCase:
-                {
-                // Pressing shift enters uppercae letters in the "abc" mode
-                if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) )
-                    {
-                    shiftedCase = EPtiCaseUpper;
-                    }                
-                }
-            break;
-            
-            case EAknEditorUpperCase:
-                {
-                // In the "ABC" mode (capslock mode) the letters are uppercased
-                // unless the shift is pressed
-                if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) )
-                    {
-                    shiftedCase = EPtiCaseUpper;
-                    }                
-                }
-            break;
-                
-            default:
-            break;
-            }
-
-        
-        }
-    else
-        {
-        // non-alphabetic keys are shifted if and only if shift is pressed, no matter what is the input state
-        if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState  == CAknFepFnKeyManager::EFnKeyNone))
-            {
-            shiftedCase = EPtiCaseUpper;
-            }
-        else if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) && (fnKeyState  != CAknFepFnKeyManager::EFnKeyNone))
-	        {
-			shiftedCase = EPtiCaseFnUpper;
-	        }    
-        }
-
-    
-    // Handle the Chr key state
-    if ( fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) )
-        {
-        // Chr key is pressed down. Chr mode is used.
-        if (shiftedCase == EPtiCaseLower)
-            {
-            shiftedCase = EPtiCaseChrLower;
-            }
-        else if (shiftedCase == EPtiCaseUpper)
-            {
-            shiftedCase = EPtiCaseChrUpper;
-            }
-        }
-    
-    ptiengine->SetCase(shiftedCase);
-    
-    fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress);
-    }
-
-//////////////////////////////////////////////////////////////////////////////////
-//
-
-TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleWordBreakingKeysL(TInt aKey)
-    {
-    TBool retVal = EFalse; // in most cases we let also the upper levels handle these key events
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    
-
-    // Up and down arrows break the inline word input only when shift or chr is held down
-    if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) &&
-         !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode) &&
-         ( aKey==EStdKeyUpArrow || aKey==EStdKeyDownArrow ) )
-        {
-        return retVal;    
-        }
-
-
-    if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) )
-        {
-        TBool rightToLeftLang = fepMan->IsRightToLeftLanguage();
-        TInt tailLength = 0;
-	    ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength );
-        switch (aKey)
-            {
-            case EStdKeyLeftArrow:
-            case EStdKeyRightArrow:    
-            	// In case the inline editing is ongoing and there is a word completion
-                // currently shown, the first backwards tap will remove the suggested 
-                // completion. 
-                if(tailLength > 0)
-	                {
-	                if ((rightToLeftLang && aKey == EStdKeyLeftArrow) 
-	                	|| (! rightToLeftLang && aKey == EStdKeyRightArrow ))
-	                    {
-					    ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate);
-					    TPtrC selectedWord = ptiengine->CurrentWord();
-                        fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() );  //selection.iAnchorPosition
-                        // To fix the bug: STAA-7GYBJC Suggested word is not committed when Arrow right key is pressed.
-                        ptiengine->CommitCurrentWord();
-                        fepMan->TryCloseUiL();
-                        // Asyncronous case update after the editor has handled the key
-                		fepMan->SimulateKeyEventL(EKeyF19); 
-	                    retVal = ETrue;
-	                    }
-	                else if((rightToLeftLang && aKey == EStdKeyRightArrow) 
-	                	|| (! rightToLeftLang && aKey == EStdKeyLeftArrow )) 
-		                {
-	                    fepMan->RemoveSuggestedAdvanceCompletionL();
-	                    retVal = ETrue;
-		                }    	
-	                }
-                else
-	                {
-	                ptiengine->CommitCurrentWord();
-	                retVal = EFalse;
-	                }
-            	break;
-            case EStdKeyUpArrow:
-            case EStdKeyDownArrow:
-            case EStdKeyEnter:
-            case EStdKeySpace:
-            case EStdKeyTab:
-            {
-            	//retVal = ETrue;
-				
-				if ( ( aKey == EStdKeySpace || aKey == EStdKeyEnter ||aKey == EStdKeyTab)
-					 && fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) 
-					 && (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) )
-		            {
-		            fepMan->TryRemoveNoMatchesIndicatorL();
-		            fepMan->UpdateCbaL(NULL);
-		            }
-
-            	TBool wasInlineEditing = EFalse;	
-            	wasInlineEditing = fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction);            	
-                ptiengine->CommitCurrentWord();
-                fepMan->CommitInlineEditL();
-                /* Temporary Fix */
-                //EFlagInsideInlineEditingTransaction flag check is not required
-                //but just to make sure.
-                if(aKey == EStdKeySpace && wasInlineEditing)
-                	{
-                	_LIT(KSpace," ");                
-	                fepMan->StartInlineEditL();
-	                fepMan->UpdateInlineEditL(KSpace,0);
-	                fepMan->CommitInlineEditL();
-                	retVal = ETrue;
-                	}                
-                /* Temporary Fix */
-                fepMan->TryCloseUiL();                
-                // Asyncronous case update after the editor has handled the key
-                fepMan->SimulateKeyEventL(EKeyF19); 
-            	}                
-            break;
-            default:
-                __ASSERT_DEBUG( EFalse, AknFepPanic(EAknFepPanicNotSupportKey) );
-            }
-
-        }
-    else
-        {
-        iOwner->ChangeState( EInitial );
-        }
-
-    return retVal;
-    }
-
-
-/////////////////////////////////////////////////////////////////////////////////
-//
-TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleQwertyKeysL(TInt aKey, TKeyPressLength aLength)
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-	TBool retVal = EFalse;
-    CAknFepCaseManager* caseMan = iOwner->CaseMan(); 
-    
-    CAknFepFnKeyManager::TFnKeyState fnKeyState  = fepMan->FnKeyState();
-    
-    // Key is consumed if the PtiEngine maps it to some character
-    TBuf<KKeyMappingsLength> keyMappings; 
-    
-    if(fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)
-		{
-	    ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseFnLower);
-		}
-	else
- 		{
-	    ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseLower);   
- 		}
-    //ptiengine->MappingDataForKey( (TPtiKey)aKey, keyMappings, EPtiCaseLower);   
-    //ITI : Pti Engine can be asked to give the proper data for the keys under Fn Key.
-    TBool keyIsMapped = ( keyMappings.Length() > 0 );
-    
-    // The dead key handling inside the PtiDefaultCore assumes that no other key mapping queries
-    // have been made between handling the dead key and the next one (these queries change the
-    // internal state of the key mapping object). For this reason, we must return the key mappings
-    // to their previous state. This is quite dirty hack, but so is the dead key handling code which
-    // forces us to do this.
-    if(fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)
-		{
-	    ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseFnLower);
-		}
-	else
- 		{
- 		ptiengine->MappingDataForKey( (TPtiKey)iData, keyMappings, EPtiCaseLower);
- 		}
- 		
-    if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches) && fnKeyState  == CAknFepFnKeyManager::EFnKeyNone )            
-    	{
-    	//no matches, so just play tone
-        fepMan->PlaySound(EAvkonSIDConfirmationTone);   
-        return keyIsMapped;     
-        }  
-    
-    if ( keyIsMapped )
-        {
-       	if( fnKeyState  != CAknFepFnKeyManager::EFnKeyNone ) 
-        	{
-    	    //closing the UI will commit the current word and move to intial state
-	    
-        	// break the word    		
-        	if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))
-        	    {
-        	    fepMan->TryRemoveNoMatchesIndicatorL();
-        	    }
-        	fepMan->RemoveSuggestedAdvanceCompletionL();
-			TPtrC selectedWord = ptiengine->CurrentWord();
-            if( ptiengine->CurrentWord() != KNullDesC)
-            	{
-            	fepMan->UpdateInlineEditL( selectedWord, selectedWord.Length() );  //selection.iAnchorPosition
-        		ptiengine->CommitCurrentWord();	
-            	}
-            fepMan->TryCloseUiL(); 
-            ptiengine->SetCase(EPtiCaseFnLower);
-        	}
-        
-        if ( !(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) )
-            { // 'new' inline edit                        
-            ptiengine->ClearCurrentWord();
-            if (caseMan->CurrentCase() == EAknEditorTextCase)
-                {
-                ptiengine->MarkAutoCapitalized();    
-                }            
-            
-            fepMan->StartInlineEditL();
-            }
-            
-		TPtrC newText;
-        
-        if( aKey == EStdKeyFullStop )
-        	{
-        	TInt tailLength = 0;
-        	ptiengine->HandleCommandL( EPtiCommandLockCurrentCandidate, &tailLength );
-/*        	if( fepMan->IsAutoCompleteOn() )
-        		{
-                TInt tailLength = 0;
-                ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength );
-                if( tailLength > 0)
-                    {
-                    // if autoword part is visible update the input sequence
-                    newText.Set(ptiengine->CurrentWord() );
-                    ptiengine->ClearCurrentWord();
-                    ptiengine->SetCurrentWord(newText);
-                    }
-                }*/
-        	}
-        	
-        newText.Set(ptiengine->AppendKeyPress((TPtiKey)aKey));
-        	
-        if ( aLength == EShortKeyPress )
-        	{
-        	SetShortKeyPressText(newText);
-        	}
-        if (ptiengine->NumberOfCandidates() > 0 )
-        	{
-                // more good words coming in from predictive text engine so carry on
-                if(newText.Length() == 1)
-           			{
-	            	TDigitType digittype = fepMan->LocalDigit();
-	                TChar chchar(newText[0]);
-	                if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype))
-	                	{ 	
-	                	fepMan->UpdateInlineEditL(newText, newText.Length());    
-    	            	}
-	                else 
-	                	{
-	                	TBuf<1> tempbuf;
-	                	tempbuf.Append(newText[0]);
-		            	ConvertDigitToDigittype(digittype,tempbuf);
-		                fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length());				                	
-	                	}
-	                if(fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)	
-	                	{
-            			ptiengine->CommitCurrentWord();
-        				fepMan->CommitInlineEditL();	                	
-	                	}
-           			}
-           		else 
-           			{
-           			fepMan->UpdateInlineEditL(newText, newText.Length());	
-           			}
-           			
-        	}
-        	
-        else 
-                {
-                // engine has run out of matches 
-                // we are not in the functionized state
-                fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem);                
-                fepMan->SetFlag(CAknFepManager::EFlagNoMatches);
-                fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY);
-                if(newText.Length() == 1)
-           			{
-	            	TDigitType digittype = fepMan->LocalDigit();
-	                TChar chchar(newText[0]);
-	                if(!chchar.IsDigit() || (chchar.IsDigit() && !digittype))
-	                	{ 	
-	                	fepMan->UpdateInlineEditL(newText, newText.Length());    
-    	            	}
-	                else 
-	                	{
-	                	TBuf<1> tempbuf;
-	                	tempbuf.Append(newText[0]);
-		            	ConvertDigitToDigittype(digittype,tempbuf);
-		                fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length());					                	
-	                	}
-           			}
-           		else 
-           			{
-           			// Remove the autocompletion tail if present
-                    if (fepMan->IsAutoCompleteOn())
-                        {
-                        TInt tailLength = 0;
-                        ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, &tailLength );
-                        if(tailLength > 0)
-                            {
-							// To remove the autocompletion part, the below function is used. 
-							// DeleteKeyPress was used earlier. This is removed to fix the bug :
-							// enter characters to show autocompletion part. Now press a 
-							// character so that the no matches character is shown. Now press
-                            // backspace key, last character is not deleted.
-                            fepMan->RemoveSuggestedAdvanceCompletionL();
-                            fepMan->PlaySound(EAvkonSIDConfirmationTone);
-                            return ETrue;
-                            }
-                        }
-           			fepMan->UpdateInlineEditL(newText, newText.Length());	
-           			}
-                fepMan->PlaySound(EAvkonSIDConfirmationTone);
-                }
-
-        // Normally we update the case after key press. However, if Chr key is held down, the case update
-        // must not happen until when the Chr is released or the timer expires (in both of these cases
-        // the function KeyTimerExpired() will get callled).         
-        if ( !fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) )
-            {
-       	    iOwner->CaseMan()->UpdateCase(ENullNaviEvent);
-       	    }
-    	else
-            {
-            fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress);
-            }
-       	
-        retVal = ETrue;
-        }
-    else
-        {
-        retVal = EFalse;
-        }
-        
-    if(ptiengine->IsValidKey((TPtiKey)aKey))
-       	retVal = ETrue;
-        
-    if( aKey!=EStdKeyBackspace && fnKeyState  != CAknFepFnKeyManager::EFnKeyNone)
-        {
-        retVal = ETrue;        
-        }
-	if( !fepMan->IsFlagSet( CAknFepManager::EFlagLongShiftKeyPress ) &&
-	    fnKeyState  == CAknFepFnKeyManager::EFnKeyNext ) 
-    	{
-       	fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone);
-       	}
-       	
-   	return retVal; 
-    }
-    
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
-TBool TAknFepUiInputStateEntryHalfQwertyWesternPredictive::HandleNaviKeysL(TInt aKey, TKeyPressLength /*aLength*/)
-    {
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-
-    if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)))
-        {
-        TBuf<CAknFepManager::EMaximumFepWordLength> textToUncommit;
-        TBool comsumeKey;
-        if (!(fepMan->TryGetTextToUncommitL(textToUncommit, aKey, comsumeKey)))
-            {
-            // If T9 word length > 32, the navi key is consumed without action.
-            // Maybe should navigate inside word.
-            return comsumeKey;
-            }
-        ptiengine->ClearCurrentWord();
-        ptiengine->SetCurrentWord(textToUncommit); // this set the input sequence of PtiEngine
-        fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, 
-        						 textToUncommit.Length(), EFalse);
-        }
-
-    if (aKey == EKeyBackspace)
-        {
-        if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches))
-            {
-            fepMan->TryRemoveNoMatchesIndicatorL();
-            fepMan->UpdateCbaL(NULL);
-            ptiengine->HandleCommandL(EPtiCommandSetFlagToUpdateCandidates);         
-            // Need to return as DeleteKeyPress should not be passed to ptiengine.
-            // This is because ptiengine does not maintain the input sequence
-            // if the key press does not increase the word length. So when no matches
-            // character is (?) is deleted, no need to pass to ptiengine. This is to done
-            // to solve the bug :enter characters till the no matches character is shown. Now press
-            // backspace, last character is not deleted.
-            return ETrue;
-            }
-        
-        TPtrC newText = ptiengine->DeleteKeyPress();
-        // remove autocompletion part if any
-		// this has to be done before updateinlineedit to avoid flickering
-        TInt tailLength = 0;
-        ptiengine->HandleCommandL( EPtiCommandGetAutoCompletionTailLength, 
-                                            &tailLength );
-        if(tailLength > 0)
-            {
-            fepMan->RemoveSuggestedAdvanceCompletionL();
-            newText.Set(ptiengine->CurrentWord());
-            }
-        fepMan->UpdateInlineEditL(newText, newText.Length());
-
-		fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem);           
-        if (ptiengine->NumberOfCandidates() <= 1)
-        	{
-			fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem);           	
-        	}
-
-        iOwner->CaseMan()->UpdateCase(EBackspaceEvent);
-        fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress);   
-        fepMan->CloseUiIfWordDeletedL();
-        }
-    
-    return ETrue;
-    }
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::LastWordInSelectionList()
-    {
-
-    }
-
-
-//////////////////////////////////////////////////////////////////////////////
-//
-void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::FirstWordInSelectionList()
-    {   
-    }
-
-
-/////////////////////////////////////////////////////////////////
-//
-void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::KeyTimerExpired()
-    {
-    if (iData)
-        {
-        MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-        CAknFepCaseManager* caseMan = iOwner->CaseMan(); 
-        caseMan->UpdateCase(ENullNaviEvent); 
-        fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction );
-        iData = 0;
-        }
-    }
-   
-void TAknFepUiInputStateEntryHalfQwertyWesternPredictive::ConvertDigitToDigittype(TDigitType& digittype,TDes& aConvertedNumeral)
-	{
-	TChar chchar(aConvertedNumeral[0]);
-	switch(digittype)
-    	{
-    	case EDigitTypeDevanagari:
-        	{
-        	chchar = (aConvertedNumeral[0] + KLatinToDevanagariDigitsDelta);
-	    	}
-        	break;	
-        case EDigitTypeArabicIndic:
-            {
-        	chchar = (aConvertedNumeral[0] + KLatinToArabicIndicDigitsDelta);
-	        }
-            break;
-    	case EDigitTypeEasternArabicIndic:
-        	{
-        	chchar = (aConvertedNumeral[0] + KLatinToEasternArabicIndicDigitsDelta);
-        	}
-    	}
-    aConvertedNumeral.Zero();
-    aConvertedNumeral.Append(chchar);
-	}
-// End of file