diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/src/AknFepUiInputStateEntryLatinJapanese.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/src/AknFepUiInputStateEntryLatinJapanese.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,254 @@ +/* +* 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 TAknFepUiInputStateEntryLatinJapanese methods. +* +*/ + + + + + + + + + + + + +// INCLUDE FILES +#include "AknFepUiInputStateEntryLatinJapanese.h" +#include "AknFepUIManagerStateInterface.h" // MAknFepUIManagerStateInterface +#include "AknFepManagerUIInterface.h" // MAknFepManagerUIInterface +#include "AknFepCaseManager.h" // CAknFepCaseManager +#include "AknFepManager.h" +#include "AknFepGlobalEnums.h" + +#include +#include // MPtiEngineCompositionDataInterface + +// CONSTANTS + +/** + * TAknFepUiInputStateEntryLatinJapanese class. + * + */ +//============================ MEMBER FUNCTIONS ============================== + +// --------------------------------------------------------------------------- +// TAknFepUiInputStateEntryLatinJapanese:: +// TAknFepUiInputStateEntryLatinJapanese +// Default constructor +// --------------------------------------------------------------------------- +// +TAknFepUiInputStateEntryLatinJapanese::TAknFepUiInputStateEntryLatinJapanese( + MAknFepUIManagerStateInterface* aOwner, + MAknFepUICtrlContainerJapanese* aUIContainer) + :TAknFepUiInputStateEntryJapaneseMultitap(aOwner, aUIContainer) + { + } + +/** + * MPtiObserver interface. + */ +//============================ MEMBER FUNCTIONS ============================== + +// --------------------------------------------------------------------------- +// TAknFepUiInputStateEntryLatinJapanese::KeyTimerExpired +// Call this function when Multitap timer of PtiEngine was time-out +// --------------------------------------------------------------------------- +// +void TAknFepUiInputStateEntryLatinJapanese::KeyTimerExpired() + { + CPtiEngine* ptiEngine = iOwner->PtiEngine(); + const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); + TPtrC text = data->CompletedString(); + if (text.Length() > 0) + { + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + + if (fepMan->IsSupportsSecretText() + && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) + { + TRAP_IGNORE(fepMan->CommitInlineEditL()); + // Update case without Qwerty + if (!iOwner->IsQwerty()) + { + UpdateCase(text); + } + } + else + { + iOwner->ChangeState(EMultiCompletion); + // Update case without Qwerty + if (!iOwner->IsQwerty()) + { + UpdateCase(text); + } + + // Commit a character + TRAP_IGNORE(iOwner->FepMan()->CommitInlineEditL(text, text.Length())); + + // Update case with Qwerty + if (iOwner->IsQwerty()) + { + CAknFepCaseManager* caseMan = iOwner->CaseMan(); + caseMan->UpdateCase(ENullNaviEvent); + } + } + } + iData = 0; + CPtiEngine* ptiengine = iOwner->PtiEngine(); + ptiengine->ClearCurrentWord(); + iOwner->ChangeState(EInitial); + } + +/** +* TAknFepUiInputStateEntryLatinJapanese class. +* +*/ +//============================ MEMBER FUNCTIONS ============================== + +// --------------------------------------------------------------------------- +// TAknFepUiInputStateEntryLatinJapanese::HandleNumericShortKeyL +// Handling short keypress events of the numeric and the star. +// --------------------------------------------------------------------------- +// +TBool TAknFepUiInputStateEntryLatinJapanese::HandleNumericShortKeyL(TInt aKey) + { + CPtiEngine* ptiEngine = iOwner->PtiEngine(); + MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); + TBool ret = EFalse; + + if (iData && iData != aKey) + { + if (!iOwner->IsQwerty() + && iOwner->FepMan()->IsSupportsSecretText() + && fepMan->IsFlagSet(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction)) + { + const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); + TPtrC text = data->ConvertingString(); + if (text.Length() > 0) + { + fepMan->CommitInlineEditL(); + if (!iOwner->IsQwerty()) + { + UpdateCase(text); + } + } + ptiEngine->ClearCurrentWord(); + iOwner->ChangeState(EInitial); + iData = 0; + ret = EFalse; + } + else + { + ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); + iOwner->ChangeState(EMultiCompletion); + } + } + else + { + iData = aKey; + + const MPtiEngineCompositionDataInterface* previousData = ptiEngine->CompositionData(); + TChar previousChar = 0; + TPtrC previousText(previousData->ConvertingString()); + if (previousText.Length() > 0) + { + previousChar = previousText[0]; + } + + // Append a key to PtiEngine + ptiEngine->AppendKeyPress((TPtiKey)aKey); + + const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData(); + TPtrC text(data->ConvertingString()); + if (text.Length() > 0) + { + TChar ch = text[0]; + TBool validNewCandidate = fepMan->CharIsValidInEditor(ch); + // Check if the character is valid for the editor. + if ( !validNewCandidate ) + { + TChar firstNewCandidate = ch; + TBool goneThroughAllCandidates(EFalse); + TPtrC8 sequence = ptiEngine->CurrentInputSequence(); + + if ( sequence.Length() ) + { + TPtiKey key = (TPtiKey)sequence[0]; + + // Go through candidates and check if valid characters are found. + do { + TPtrC text = ptiEngine->AppendKeyPress(key); + ch = text[0]; + goneThroughAllCandidates = (ch == firstNewCandidate); + validNewCandidate = fepMan->CharIsValidInEditor(ch); + } + while (!validNewCandidate && !goneThroughAllCandidates); + } + + if (!validNewCandidate) + { + // No valid characters at all. + ptiEngine->DeleteKeyPress(); + iOwner->ChangeState(EMultiCompletion); + ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); + iOwner->FepMan()->CommitInlineEditL(); + ptiEngine->ClearCurrentWord(); + iOwner->ChangeState(EInitial); + return ETrue; + } + else if (ch == previousChar) + { + // The valid key loop count is 1. + // The current characters are committed, and send the same key again. + iOwner->ChangeState(EMultiCompletion); + ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); + iOwner->FepMan()->CommitInlineEditL(); + ptiEngine->ClearCurrentWord(); + iOwner->ChangeState(EInitial); + iOwner->FepMan()->SimulateKeyEventL(aKey, ETrue); + return ETrue; + } + } + } + + ret = UpdateInlineEditingCharacterL(); + // Qwerty input without Secret input mode is continuing to Comleteion. + if (ret && iOwner->IsQwerty()) + { + if (iOwner->FepMan()->IsSupportsSecretText() + || iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagPassNextKey)) + { + iOwner->ChangeState(EMultiCompletion); + ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); + iOwner->FepMan()->CommitInlineEditL(); + ptiEngine->ClearCurrentWord(); + iOwner->ChangeState(EInitial); + ret = ETrue; + } + else + { + // Qwerty need to change status + ptiEngine->HandleCommandL(EPtiCommandUserActionComplete); + iOwner->ChangeState(EMultiCompletion); + ret = EFalse; + } + } + } + return ret; + } +// End of file