diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2002 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 TAknFepInputStateEntryThaiPredictive methods. +* +*/ + + + + + + + + + + + + +#include "AknFepUiInputStateEntryThaiPredictive.h" +#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface +#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface +#include "AknFepManager.h" +#include "AknFepPanic.h" +#include "AknFepCaseManager.h" + +#include //CPtiEngine +#include //keys +#include +#include + +TAknFepInputStateEntryThaiPredictive:: +TAknFepInputStateEntryThaiPredictive(MAknFepUIManagerStateInterface* aOwner) + :TAknFepInputStateEntryWesternPredictive(aOwner) + { + //this class insists on the existence of a case manager + __ASSERT_DEBUG(iOwner->CaseMan(), AknFepPanic(EAknFepPanicNoCaseManager)); + + iState = EEntry; + iMatchState = EWordMatchNone; + CPtiEngine* ptiengine = iOwner->PtiEngine(); +#ifdef RD_INTELLIGENT_TEXT_INPUT + ptiengine->SetInputMode(EPtiEnginePredictive); + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + TBool isUnlimitedEditor = EFalse; + ptiengine->SetMaxLengthForAutoCompletedCandidates(fepMan->EditorFreeSpaceForAutoWordCompletion(isUnlimitedEditor )); + // To set the input mode + if(fepMan->IsAutoCompleteOn()) + { + TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandEnableAutoCompletion)); + } + else + { + TRAP_IGNORE(ptiengine->HandleCommandL(EPtiCommandDisableAutoCompletion)); + } + + TPtiKeyboardType keyboard = fepMan->KeyboardLayout(); + ptiengine->SetKeyboardType(keyboard); + TBool isNumberCandidateShown = fepMan->IsAdvancedPredictiveNumberCandidateShown(); + TRAP_IGNORE(ptiengine->HandleCommandL( EPtiCommandSetNumberCandidateStatus, &isNumberCandidateShown )); +#else + ptiengine->ClearCurrentWord(); +#ifdef RD_PRED_AW_COMPLETION + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + // To set the input mode + if(fepMan->IsAutoCompleteOn()) + { + ptiengine->SetInputMode(EPtiEngineWordCompletion); + } + else +#endif // RD_PRED_AW_COMPLETION + { + ptiengine->SetInputMode(EPtiEnginePredictive); + } +#endif // RD_INTELLIGENT_TEXT_INPUT + ptiengine->SetCase(EPtiCaseLower); + } + +TBool TAknFepInputStateEntryThaiPredictive::HandleKeyL(TInt aKey, TKeyPressLength aLength) + { + 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: + case EPtiKey0: + case EPtiKeyStar: + response = HandleStandardNumericKeysL(aKey, aLength); + break; + case EKeyDownArrow: + response = HandleDownKeyL(); + break; + case EKeyUpArrow: + response = HandleUpKeyL(); + break; + case EKeyRightArrow: // fall through + case EKeyLeftArrow: + case EKeyBackspace: + response = HandleNaviKeysL(aKey, aLength); + break; + default: + response = EFalse; + break; + } + return response; + } + +TBool TAknFepInputStateEntryThaiPredictive::HandleDownKeyL() + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + + if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) + { + return EFalse; + } + else + { + 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(); + fepMan->UpdateInlineEditL(newText, 0); + } + } + return ETrue; + } + +TBool TAknFepInputStateEntryThaiPredictive::HandleUpKeyL() + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + CPtiEngine* ptiengine = iOwner->PtiEngine(); + if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) + { + return EFalse; + } + +#ifdef RD_INTELLIGENT_TEXT_INPUT + TInt lastCandidateIndex = ptiengine->NumberOfCandidates() -1; + if(lastCandidateIndex >= 0) + { + // Get last word on list + fepMan->LaunchCandidatePopupListL( lastCandidateIndex ); + } + else + { + TInt wordIndexToSelect = 0; + // Get next word on list (wrap around if at end) + ptiengine->HandleCommandL( EPtiCommandUserActionGetCurrentIndexOfCandidates, + &wordIndexToSelect ); + wordIndexToSelect < lastCandidateIndex ? wordIndexToSelect++ : wordIndexToSelect = 0; + fepMan->LaunchCandidatePopupListL( wordIndexToSelect ); + } + +#else + if (!( (iMatchState == EWordMatchFirst) || !(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)))) + { + if (iMatchState == EWordMatchLast || iMatchState == EWordMatchAfterLast) + { + fepMan->UpdateCbaL(R_AKNFEP_SOFTKEYS_EMPTY_PREVIOUS); + } + iMatchState = EWordMatchStd; + TPtrC prevText = ptiengine->PreviousCandidate(); + fepMan->UpdateInlineEditL(prevText, 0); + } + +#endif //RD_INTELLIGENT_TEXT_INPUT + return ETrue; + } + +// End of file