--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiInputStateInitialVietnameseMultitap.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,228 @@
+/*
+* Copyright (c) 2005 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 TAknFepInputStateInitialVietnameseMultitap methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+#include "AknFepUIInputStateInitialVietnameseMultitap.h"
+#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface
+
+#include "AknFepCaseManager.h"
+#include "AknFepVietnameseToneManager.h"
+
+#include <uikon.hrh>
+
+#include <PtiEngine.h>
+#include <PtiDefs.h>
+#include <aknSctDialog.h>
+#include <avkon.rsg>
+#include <AknFep.rsg>
+
+#include "AknFepUiManagerWestern.h"
+
+TAknFepInputStateInitialVietnameseMultitap::
+TAknFepInputStateInitialVietnameseMultitap(MAknFepUIManagerStateInterface* aOwner)
+:TAknFepInputStateInitialMultitapBase(aOwner)
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ TPtiTextCase caseMode = ptiengine->Case();
+ ptiengine->SetCase(caseMode);
+ }
+
+TBool TAknFepInputStateInitialVietnameseMultitap::HandleKeyL(TInt aKey, TKeyPressLength aLength)
+ {
+ TBool bHandled = EFalse;
+
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+ CAknFepUIManagerWestern* uiMan = static_cast<CAknFepUIManagerWestern*>(iOwner);
+ CAknFepVietnameseToneManager* toneMgr = uiMan->VietnameseToneManager();
+ CPtiEngine* ptiEng = fepMan->PtiEngine();
+
+ toneMgr->SetFepManager(fepMan);
+
+ if (aKey == EPtiKeyStar)
+ {
+ if (aLength == EShortKeyPress)
+ {
+ if (!toneMgr->IsLooping())
+ {
+ // Start looping status
+ if (toneMgr->StartToneMarkLooping())
+ {
+ // Save the vowel for undo back deletion
+ toneMgr->SetDeletedVowel(fepMan->PreviousChar());
+
+ ((CAknFepManager*)fepMan)->RemovePreviousCharacterL(); // remove previous char
+ }
+ }
+
+ // Process the interim looping state
+ if (toneMgr->IsLooping())
+ {
+ // Get current tone mark
+ TText toneVowel = toneMgr->GetVowelWithToneMark();
+ toneMgr->IncrementToneMark();
+
+ TBuf<CAknFepManager::ESingleCharacter> aChr;
+ aChr.Append(toneVowel);
+
+ // Update inline character(s)
+ fepMan->CancelInlineEdit();
+ fepMan->NewCharacterL(aChr);
+
+ // Reset the engine timer so that we can get timer expired message
+ // We send the * key, and clear it in the next loop
+ ptiEng->ClearCurrentWord();
+ ptiEng->AppendKeyPress((TPtiKey)aKey);
+
+ bHandled = ETrue;
+
+ if (fepMan->EditSubmenuInUse())
+ {
+ // Looping tone marks, supress edit-menu.
+ fepMan->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);
+ }
+ }
+ }
+ else if (aLength == ELongKeyPress)
+ {
+ // Reset the key event so that the TAknFepInputStateInitialMultitapBase will
+ // parse this event as a short key event, default reaction is to launch SCT
+ aLength = EShortKeyPress;
+
+ if (toneMgr->IsLooping())
+ {
+ // Remove the previous EShortKeyPress message
+ fepMan->CancelInlineEdit();
+ toneMgr->StopToneMarkLooping();
+
+ // Undo the backdeletion
+ TText bkChr = toneMgr->GetDeletedVowel();
+
+ TBuf<CAknFepManager::ESingleCharacter> aChr;
+ aChr.Append(bkChr);
+
+ fepMan->NewCharacterL(aChr);
+ fepMan->CommitInlineEditL();
+
+ if (fepMan->EditSubmenuInUse() && fepMan->IsAbleToLaunchSCT())
+ {
+ fepMan->LaunchSpecialCharacterTableL();
+ return ETrue;
+ }
+ }
+ else if (fepMan->EditSubmenuInUse())
+ {
+ aLength = ELongKeyPress;
+ }
+ }
+ }
+
+ // Implementation for the Vietnamese back deletion
+ if (aKey == EKeyBackspace)
+ {
+ TBuf<2> newText;
+ // Get the last character from the current editor
+ TText prevChar = fepMan->PreviousChar();
+
+ // Judge if the last character needs to be converted
+ if ( NeedsVietnameseBkDelSupport(prevChar, newText) )
+ {
+ // Delete the prev character and send the new character to editor
+ ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
+ fepMan->NewCharacterL(newText);
+ fepMan->CommitInlineEditL();
+ // Stop looping for backspace operation
+ if( toneMgr->IsLooping() )
+ {
+ toneMgr->StopToneMarkLooping();
+ }
+ return ETrue;
+ }
+ else
+ {
+ if ( prevChar )
+ {
+ ((CAknFepManager*)fepMan)->RemovePreviousCharacterL();
+ }
+ else
+ {
+ return EFalse;
+ }
+
+ bHandled = EFalse;
+ }
+ }
+
+ if(!bHandled && toneMgr->IsLooping())
+ {
+ toneMgr->StopToneMarkLooping();
+ }
+
+ return bHandled ? ETrue : TAknFepInputStateInitialMultitapBase::HandleKeyL(aKey, aLength);
+ }
+
+void TAknFepInputStateInitialVietnameseMultitap::KeyTimerExpired()
+ {
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+ CAknFepUIManagerWestern* uiMan = static_cast<CAknFepUIManagerWestern*>(iOwner);
+ CAknFepVietnameseToneManager* toneMgr = uiMan->VietnameseToneManager();
+ CPtiEngine* ptiEng = fepMan->PtiEngine();
+
+ // Try commit inline editting and clean up for future input attemps
+ TRAP_IGNORE(fepMan->CommitInlineEditL());
+
+ toneMgr->StopToneMarkLooping();
+ ptiEng->ClearCurrentWord();
+ }
+
+TBool TAknFepInputStateInitialVietnameseMultitap::NeedsVietnameseBkDelSupport(
+ TText aGlyphToDelete, TDes& aNewText)
+ {
+ TBool needBkDelSupport(EFalse);
+
+ const TInt KMatrixColumn = sizeof(VietToneMatrix) / sizeof(TText) / KNumberOfToneMarks;
+
+ aNewText.Zero();
+
+ // Loop of the ToneMatrix columns starts from 1 because the first column of the ToneMatrix stores the vowels
+ for (TUint i = 1; (i < KMatrixColumn) && (!needBkDelSupport); ++i)
+ {
+ for (TUint j = 0; j < KNumberOfToneMarks; ++j)
+ {
+ if (VietToneMatrix[i][j] == aGlyphToDelete)
+ {
+ needBkDelSupport = ETrue;
+ aNewText.Append(VietVowelList[i - 1]);
+ break;
+ }
+ }
+ }
+
+ return needBkDelSupport;
+ }
+
+// End of file