diff -r f1bdd6b078d1 -r 2cb9bae34d17 fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp --- a/fep/aknfep/src/AknFepUiInputStateInitialKoreanMultitap.cpp Tue Jul 06 14:38:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,213 +0,0 @@ -/* -* 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 TAknFepInputStateInitialKoreanMultitap methods. -* -*/ - -#include "AknFepUiInputStateInitialKoreanMultitap.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface -#include "AknFepCaseManager.h" -#include "AknFepUiIndicInputManager.h" -#include "AknFepManager.h" - -#include -#include - -TAknFepInputStateInitialKoreanMultitap::TAknFepInputStateInitialKoreanMultitap(MAknFepUIManagerStateInterface* aOwner) - :TAknFepInputStateInitialMultitapBase(aOwner) - { - iState = EInitial; - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - - TPtiTextCase caseMode = ptiengine->Case(); - -#ifdef RD_INTELLIGENT_TEXT_INPUT - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangKorean, EPtiEngineMultitappingKorean)) - ptiengine->SetInputMode(EPtiEngineMultitappingKorean); -#else - TRAP_IGNORE(ptiengine->ActivateLanguageL(ELangKorean, EPtiEngineMultitapping)) - ptiengine->SetInputMode(EPtiEngineMultitapping); -#endif //RD_INTELLIGENT_TEXT_INPUT - - ptiengine->SetCase(caseMode); - } - -TBool TAknFepInputStateInitialKoreanMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TBool ret = ETrue; - - if(aLength == EShortKeyPress) - { - - if(aKey == EKeyBackspace) - { - // Narat Geul engine tries first to disassemble hangul to jamos. if disassembly is not possible, - // then clear character. - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - TPtrC newText = ptiengine->DeleteKeyPress(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - - if (newText.Length() == 0) - { - fepMan->CancelInlineEdit(); - ptiengine->ClearCurrentWord(); - } - } - else - { - ret = EFalse; - } - } - else - { - - if(aKey == EKeyLeftArrow || - aKey == EKeyRightArrow || - aKey == EKeyDownArrow || - aKey == EKeyUpArrow) - { - ret = EFalse; - } - else - { - if (!(fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction))) - { // 'new' inline edit - ptiengine->ClearCurrentWord(); - fepMan->StartInlineEditL(); - fepMan->SetInlineEditingCursorVisibilityL(ETrue); - } - - TPtrC aText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->UpdateInlineEditL(aText, aText.Length()); - - // Force commit when buffer length is 511. Needs to be commited in order to - // prevent ptiengines iTextBuffer overflow. Even though it is very unlikely - // case - if(aText.Length() >= 254) - { - if (CommitOrNot(aText.Right(CAknFepManager::ESingleCharacter), aKey)) - { - TPtrC text = ptiengine->DeleteKeyPress(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - - ptiengine->ClearCurrentWord(); - - TPtrC newText = ptiengine->AppendKeyPress((TPtiKey)aKey); - fepMan->StartInlineEditL(); - fepMan->UpdateInlineEditL(newText, newText.Length()); - } - else if(aText.Length() >= 255) - {// force commit - fepMan->CommitInlineEditL(); - } - } - else - { - fepMan->UpdateInlineEditL(aText, aText.Length()); - } - } - } - } - else // long keypress - { - - if (aKey == EPtiKeyStar) - { - - ptiengine->DeleteKeyPress(); - TPtrC text = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - - fepMan->LaunchSelectModeMenuL(); - } - else - { - // Insert number through long key press. - if (aKey != EKeyBackspace) - { - if (!fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - // No edit transaction going on, we have ended here because of long - // key press created editor on UI or some other similar non-standard situation. - // We can't handle key press, so just consume it. - return ETrue; - } - - TPtrC text = ptiengine->PreviousCandidate(); - fepMan->UpdateInlineEditL(text, text.Length()); - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - ret = EFalse; - } - else if (aKey == EKeyBackspace) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagInsideInlineEditingTransaction)) - { - fepMan->CommitInlineEditL(); - ptiengine->ClearCurrentWord(); - fepMan->TryCloseUiL(); - } - ret = EFalse; - } - else - { - ret = EFalse; - } - } - - } - return ret; - } - -// Decides wheather text should be commited or not. Makes comparison between latest key input -// and "seed" jamos. if latest input match with one of "seed" jamos and star or hash key cannot make -// any changes to input, then commit. -// NOTE; the "seed" jamos are characters that are printed on keymat. Narat geul engine compiles all -// the hanguls from 12 jamos. -TBool TAknFepInputStateInitialKoreanMultitap::CommitOrNot(TPtrC aData, TInt aKey) - { - TBool commit = EFalse; - TBuf mappings; - TInt len; - - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - - ptiengine->MappingDataForKey((TPtiKey)aKey, mappings, ptiengine->Case()); - len = mappings.Length(); - - for (TInt i = 0; i < len; i++ ) - { - if(aData.Compare(mappings.Left(i + 1)) == 0) - { - commit = ETrue; - break; - } - } - - return commit; - } - -// End of file