diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/src/aknfepuiinputstateindicphoneticqwerty.cpp --- /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 +#include +#include +#include +#include +#include + +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 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