diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/src/AknFepUiInputStateEntryVietnamesePredictive.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,370 @@ +/* +* Copyright (c) 2002-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 TAknFepUiInputStateEntryVietnamesePredictive methods. +* +*/ + + + + + + + + + + + + +#include "AknFepUiInputStateEntryVietnamesePredictive.h" +#include "AknFepUIInputStateInitialVietnameseMultitap.h" +#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface +#include "AknFepCaseManager.h" +#include "AknFepVietnameseToneManager.h" + +#include +#include //CPtiEngine +#include //keys +#include +#include +#include + +#include "AknFepUiManagerWestern.h" +TAknFepInputStateEntryVietnamesePredictive:: +TAknFepInputStateEntryVietnamesePredictive(MAknFepUIManagerStateInterface* aOwner) +: TAknFepInputStateEntryWesternPredictive(aOwner) + { + CPtiEngine* ptiengine = iOwner->PtiEngine(); + if (ptiengine->CurrentLanguage()->LanguageCode() != ELangVietnamese) + { + TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangVietnamese)); + } +#ifndef RD_INTELLIGENT_TEXT_INPUT + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + if(fepMan->IsAutoCompleteOn()) + { + ptiengine->SetInputMode(EPtiEngineWordCompletion); + } + else +#endif + { + ptiengine->SetInputMode(EPtiEnginePredictive); + } + } + +TBool TAknFepInputStateEntryVietnamesePredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) + { + + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + + TBool response = ETrue; + + switch (aKey) + { + case EPtiKey1: //fall through + case EPtiKey2: + case EPtiKey3: + case EPtiKey4: + case EPtiKey5: + case EPtiKey6: + case EPtiKey7: + case EPtiKey8: + case EPtiKey9: + response = HandleStandardNumericKeysL(aKey, aLength); + break; + case EPtiKey0: + if ( fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction) ) + { + fepMan->TryRemoveNoMatchesIndicatorL(); +#ifndef RD_INTELLIGENT_TEXT_INPUT + if(fepMan->IsAutoCompleteOn()) + { + fepMan->RemoveSuggestedCompletionL(); + } +#endif + } + fepMan->UpdateCbaL(NULL); + if (fepMan->IsFlagSet(CAknFepManager::EFlagCompoundWord)) + { + if (fepMan->IsCursorAtEndOfWord()) + { + fepMan->AddCompoundWordToUdbL(); + } + fepMan->ClearFlag(CAknFepManager::EFlagCompoundWord); + } + ptiengine->CommitCurrentWord(); // commit word after calling TryCloseUiL(). + fepMan->TryCloseUiL(); + response = EFalse; //pass to initial state to handle key + break; + case EKeyLeftArrow: // fall through + case EKeyRightArrow: + response = HandleNaviKeysL(aKey, aLength); + break; + case EKeyBackspace: + response = HandleDeleteKeysL(aKey, aLength); + break; + case EPtiKeyStar: + response = HandleStarKeyL(aLength); + break; + case EKeyDownArrow: // Japanese input required + if (fepMan->IsAbleScrollLatinPredictive()) + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + DoNextMatch(); + } + else + { + response = EFalse; + } + } + else + { + response = EFalse; + } + break; + case EKeyUpArrow: // Japanese input required + if (fepMan->IsAbleScrollLatinPredictive()) + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + DoPreviousMatchL(); + } + else + { + response = EFalse; + } + } + else + { + response = EFalse; + } + break; + default: + response = EFalse; + break; + } + return response; + } + +TBool TAknFepInputStateEntryVietnamesePredictive::HandleStarKeyL(TKeyPressLength aLength) + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + + if (aLength == ELongKeyPress) + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + // replace with previous match + fepMan->TryRemoveNoMatchesIndicatorL(); + iMatchState = EWordMatchStd; + TPtrC newText = ptiengine->PreviousCandidate(); + fepMan->UpdateInlineEditL(newText, newText.Length()); + } + +#ifndef RD_INTELLIGENT_TEXT_INPUT + // to rip off suggested completion when SCT is launched + if(fepMan->IsAutoCompleteOn()) + { + fepMan->RemoveSuggestedCompletionL(); + } +#endif + if (!fepMan->EditSubmenuInUse()) + { + fepMan->LaunchSpecialCharacterTableL(); + } + } + else + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) + { + //no more matches + fepMan->PlaySound(EAvkonSIDWarningTone); + } + else if (ptiengine->NumberOfCandidates()<=1) + { + // only one match + if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) + { + fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_EMPTY); + iMatchState = EWordMatchLast; + } + } + else + { + // > 1 match + if (iMatchState == EWordMatchLast && !(ptiengine->LastEnteredKey() == EPtiKey1)) + { + fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_SPELL_PREVIOUS); + } + else if (iMatchState == EWordMatchFirst || iMatchState == EWordMatchNone) + { + fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); + iMatchState = EWordMatchStd; + } + TPtrC newText = ptiengine->NextCandidate(); + 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; + switch(digittype) + { + case EDigitTypeDevanagari: + { + chchar = (newText[0] + KLatinToDevanagariDigitsDelta); + } + break; + case EDigitTypeArabicIndic: + { + chchar = (newText[0] + KLatinToArabicIndicDigitsDelta); + } + break; + case EDigitTypeEasternArabicIndic: + { + chchar = (newText[0] + KLatinToEasternArabicIndicDigitsDelta); + } + } + tempbuf.Append(chchar); + fepMan->UpdateInlineEditL(tempbuf, tempbuf.Length()); + } + } + else + { + fepMan->UpdateInlineEditL(newText, newText.Length()); + } + } + } + else + { + if (!fepMan->EditSubmenuInUse()) + { + fepMan->LaunchSpecialCharacterTableL(); + } + } + } + return ETrue; + } + +TBool TAknFepInputStateEntryVietnamesePredictive::HandleDeleteKeysL(TInt aKey, TKeyPressLength /*aLength*/) + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + + if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) + { + if(fepMan->PreviousChar() == TText(0x0020)) // 0x0020 is space + { + return EFalse; + } + TBuf 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->SetCurrentWord(textToUncommit); + fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); + if (ptiengine->NumberOfCandidates() <= 1) + { + fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); + } + fepMan->StartInlineEditL(fepMan->UncommittedText(), textToUncommit, + textToUncommit.Length(), EFalse); + } + + if (aKey == EKeyBackspace) + { + if (fepMan->IsFlagSet(CAknFepManager::EFlagNoMatches)) + { + fepMan->TryRemoveNoMatchesIndicatorL(); + fepMan->UpdateCbaL(NULL); + return ETrue; + } + else if (iMatchState != EWordMatchFirst) + { + //let FirstWordInSelectionList() reset the CBA + iMatchState = EWordMatchNone; + } + + TBuf<2> newText; + // Get the last character from the current editor + TText prevChar = fepMan->PreviousChar(); + TBool vowelList = EFalse; + for (TInt index = 0; index < KNumberOfToneMarks; index ++) + { + if (VietToneMatrix[0][index] == prevChar) + { + vowelList = ETrue; + break; + } + } + + if (vowelList) + { + ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); + } + else + { + if (prevChar <= 0) + { + return EFalse; + } + + // Judge if the last character needs to be converted + if ( TAknFepInputStateInitialVietnameseMultitap::NeedsVietnameseBkDelSupport(prevChar, + newText) ) + { + ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); + } + else + { + TPtrC updatedText = ptiengine->DeleteKeyPress(); + if(ptiengine->InputMode() != EPtiEngineWordCompletion && newText.Length()) + { + fepMan->UpdateInlineEditL(updatedText, newText.Length()); + } + else + { + fepMan->UpdateInlineEditL(updatedText, updatedText.Length()); + } + } + } + + fepMan->ClearFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); + if (ptiengine->NumberOfCandidates() <= 1) + { + fepMan->SetFlag(CAknFepManager::EFlagRemoveMatchesMenuItem); + } + + iOwner->CaseMan()->UpdateCase(EBackspaceEvent); + fepMan->CloseUiIfWordDeletedL(); + } + + return ETrue; + } + +// End of file