fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp
branchRCL_3
changeset 44 ecbabf52600f
child 50 5a1685599b76
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiInputStateEntryThaiPredictive.cpp	Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,221 @@
+/*
+* 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 <PtiEngine.h>                             //CPtiEngine
+#include <PtiDefs.h>                            //keys
+#include <e32keys.h>
+#include <aknfep.rsg>
+
+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:
+        response = HandleStandardNumericKeysL(aKey, aLength);
+        break;
+    case EPtiKeyStar:
+        if ( aLength == ELongKeyPress )
+            {
+            response = HandleStarKeyL(aLength);
+            }
+        else
+            {
+            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