fep/aknfep/src/AknFepUiInputStateEntryJapaneseMultitap.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiInputStateEntryJapaneseMultitap.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,333 @@
+/*
+* 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 TAknFepUiInputStateEntryJapaneseMultitap methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include "AknFepUiInputStateEntryJapaneseMultitap.h"
+#include "AknFepUIManagerStateInterface.h"   // MAknFepUIManagerStateInterface
+#include "AknFepManagerUIInterface.h"        // MAknFepManagerUIInterface
+#include "AknFepGlobalEnums.h"
+#include "AknFepManager.h"
+#include "AknFepUICtrlCandidatePaneInterface.h" // MAknFepUICtrlCandidatePaneInterface
+
+#include <PtiDefs.h>                    // keys
+#include <PtiEngine.h>
+#include <PtiCompositionDataIF.h>       // MPtiEngineCompositionDataInterface
+
+// CONSTANTS
+const TText KAknFEPLineFeedSymbol = 0x21B2;
+const TText KAknFEPMirroredLineFeedSymbol = 0x21B3;
+
+/**
+ *  TAknFepUiInputStateEntryJapaneseMultitap class.
+ *
+ */
+
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::
+//                                  TAknFepUiInputStateEntryJapaneseMultitap
+// C++ default Constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepUiInputStateEntryJapaneseMultitap::
+    TAknFepUiInputStateEntryJapaneseMultitap(
+                                MAknFepUIManagerStateInterface* aOwner,
+                                MAknFepUICtrlContainerJapanese* aUIContainer)
+    :TAknFepUiInputStateJapaneseBase(aOwner, aUIContainer)
+    {
+    iState = EEntry;
+    }
+
+/**
+ * MPtiObserver interface.
+ */
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::KeyTimerExpired
+// Call this function when Multitap timer of PtiEngine was time-out
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateEntryJapaneseMultitap::KeyTimerExpired()
+    {
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData();
+    TPtrC text = data->CompletedString();
+
+    if (text.Length() > 0)
+        {
+        iOwner->ChangeState(EMultiCompletion);
+        fepMan->ClearFlag(CAknFepManager::EFlagInsideMultitapInlineEditingTransaction);
+        TRAP_IGNORE(fepMan->CommitInlineEditL());
+        iOwner->ChangeState(EInitial);
+        }
+    else
+        {
+        TPtrC text2 = data->ConvertingString();
+        TInt cursorpos = data->CursorPosition();
+        if (text2.Length() > 0)
+            {
+            if (text2[0] == KAknFEPLineFeedSymbol
+             || text2[0] == KAknFEPMirroredLineFeedSymbol)
+                {
+                iOwner->ChangeState(EInitial);
+                }
+            else
+                {
+                // Set on cursor visibility in inline editing
+                TRAPD(err, fepMan->SetInlineEditingCursorVisibilityL(ETrue));
+                if (err == KErrNone)
+                    {
+                    TRAP(err, fepMan->UpdateInlineEditL(text2, cursorpos));
+                    }
+                if (err != KErrNone)
+                    {
+                    TRAP_IGNORE(iOwner->FepMan()->SimulateKeyEventL(EKeyEscape, ETrue));
+                    }
+                }
+            }
+        }
+    }
+
+/**
+ *  TAknFepUiInputStateEntryJapaneseMultitap class.
+ *
+ */
+//============================ MEMBER FUNCTIONS ==============================
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::InitializeStateL
+// Initialize State
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateEntryJapaneseMultitap::InitializeStateL()
+    {
+    iOwner->SetInlineEditUnderlineVisibility(EFalse);
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericShortKeyL
+// HHandling short keypress events of the numeric and the star.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericShortKeyL(TInt aKey)
+    {
+    TBool cursorVisibility = EFalse;
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+    if (aKey == EPtiKeyStar)
+        {
+        cursorVisibility = ETrue;
+        }
+    fepMan->SetInlineEditingCursorVisibilityL(cursorVisibility);
+    ptiEngine->AppendKeyPress((TPtiKey)aKey);
+    ret = UpdateInlineEditingCharacterL();
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericLongKeyL
+// Handling Numeric long keypress event
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNumericLongKeyL(TInt /*aKey*/)
+    {
+    iOwner->ChangeState(EMultiCompletion);
+    return EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::HandleNaviKeyL
+// Handling navigate keypress event
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleNaviKeyL(TInt /*aKey*/,
+                                                               TKeyPressLength /*aLength*/)
+    {
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+
+    ptiEngine->HandleCommandL(EPtiCommandUserActionComplete);
+    ret = UpdateInlineEditingCharacterL();
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::HandleAuxKeyL
+// Handling auxiliary keypress events including OK and Backspace
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::HandleAuxKeyL(TInt aKey,
+                                                              TKeyPressLength /*aLength*/)
+    {
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+
+    switch(aKey)
+        {
+        case EKeyBackspace:
+        case EStdKeyBackspace:      /* 0x01 */
+            {
+            MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+            fepMan->SetInlineEditingCursorVisibilityL(ETrue);
+            ptiEngine->DeleteKeyPress();
+            ret = UpdateInlineEditingCharacterL();
+            }
+            break;
+        case EKeyOK:
+        case EStdKeyDevice3:        /* 0xA7 */
+        case EStdKeyEnter:          /* 0x03 */
+        case EStdKeyNkpEnter:       /* 0x88 */
+            {
+            iOwner->ChangeState(EMultiCompletion);
+            }
+            break;
+        default:
+            break;
+        }
+
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL
+// Update inline editing string
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL()
+    {
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+
+    if (!CommitInlineEditingCharacterL())
+        {
+        const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData();
+        TPtrC text = data->ConvertingString();
+        TInt cursorpos = data->CursorPosition();
+        if (text.Length() > 0)
+            {
+            if (State() == EConversion
+             || State() == ECandidate
+             || State() == ECandidateRetroActive
+             || State() == EPredictiveInput)
+            	{
+	            if (data->NumberOfPhrase() > 0)
+	                {
+	                TPtrC8 clauseChar = data->LengthOfPhrase();
+	                cursorpos = clauseChar[0];
+	                }
+            	}
+            fepMan->UpdateInlineEditL(text, cursorpos);
+            }
+        else
+            {
+            __ASSERT_DEBUG(text.Length() == 0,
+                RDebug::Print(
+                   _L("In TAknFepUiInputStateEntryJapaneseMultitap::UpdateInlineEditingCharacterL,\nINVALID DATA: ConvertingString. Roll back to initial State!")));
+            ptiEngine->ClearCurrentWord();
+            fepMan->CancelInlineEdit();
+            iOwner->ChangeState(EInitial);
+            }
+        ret = ETrue;
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStateEntryJapaneseMultitap::CommitInlineEditingCharacterL
+// Commit inline editing string
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepUiInputStateEntryJapaneseMultitap::CommitInlineEditingCharacterL()
+    {
+    CPtiEngine* ptiEngine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+    const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData();
+    TPtrC text = data->CompletedString();
+    if (text.Length() > 0)
+        {
+        iOwner->ChangeState(EMultiCompletion);
+        ret = ETrue;
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepUiInputStatePredictiveInputJapanese::HandleCommandL
+// Handling Command
+// ---------------------------------------------------------------------------
+//
+void TAknFepUiInputStateEntryJapaneseMultitap::
+    HandleCommandL(TInt aCommandId)
+    {
+    if(aCommandId == EAknFepSoftkeyCommit)
+        {
+        CPtiEngine* ptiEngine = iOwner->PtiEngine();
+        const MPtiEngineCompositionDataInterface* data = ptiEngine->CompositionData();
+        TPtrC textConv = data->ConvertingString();
+        TPtrC textComp = data->CompletedString();
+        MAknFepUICtrlCandidatePaneInterface* candidatePane =
+            UIContainer()->CandidatePane(MAknFepUICtrlContainerJapanese::
+                                         EJapaneseCandidatePane);
+        TInt curr = candidatePane->CurrentItemIndexOfCandidate();
+        if (curr > -1)
+            {
+            TInt old = 0;
+            ptiEngine->HandleCommandL(EPtiCommandUserActionGetCurrentIndexOfCandidates, &old);
+            while(curr > old)
+                {
+                ++old;
+                ptiEngine->HandleCommandL(EPtiCommandUserActionConvert);
+                }
+            while(curr < old)
+                {
+                --old;
+                ptiEngine->HandleCommandL(EPtiCommandUserActionPrevious);
+                }
+            }
+        candidatePane->HideWindow();
+        if (textConv.Length() > 0 || textComp.Length() > 0)
+            {
+            iOwner->ChangeState(EMultiCompletion);
+            }
+        else
+            {
+            iOwner->ChangeState(EInitial);
+            }
+        }
+    }
+
+// End of file