fep/aknfep/src/AknFepInputStateInitialChineseGenericHalfQwerty.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepInputStateInitialChineseGenericHalfQwerty.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,456 @@
+/*
+* 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 AknFepUiInputStateInitialChineseGenericHalfQwerty methods.
+*
+*/
+
+
+
+
+
+
+
+
+
+
+
+#include "AknFepUiInputStateInitialChineseGenericHalfQwerty.h"
+#include "AknFepUIManagerStateInterface.h"
+#include "AknFepManagerUIInterface.h"
+#include "AknFepManager.h"         //FepMan flag
+
+#include <PtiEngine.h>
+#include <AknFepFnKeyManager.h>
+
+const TInt KFnMappedCharacters = 5;
+_LIT(KEmotionSmile, "\x003A\x0029");//:)
+_LIT(KEmotionLaugh, "\x003A\x0050");//:P
+_LIT(KEmotionSad, "\x003A\x0028");//:(
+_LIT(KSpace," "); 
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::TAknFepInputStateInitialChineseGenericHalfQwerty
+// the construt funtion 
+// ---------------------------------------------------------------------------
+//
+TAknFepInputStateInitialChineseGenericHalfQwerty
+::TAknFepInputStateInitialChineseGenericHalfQwerty(MAknFepUIManagerStateInterface* aOwner, TInt /*aMode*/)
+    :TAknFepInputStateHalfQwerty(aOwner)
+    {
+    iState = EInitial;
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    TPtiTextCase caseMode = ptiengine->Case();
+    ptiengine->ClearCurrentWord();
+    ptiengine->SetInputMode(EPtiEngineHalfQwerty);
+    ptiengine->SetCase(caseMode);
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL
+// handle key event
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyL(TInt aKey, TKeyPressLength aLength)
+    {
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    TBool ret = EFalse;
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    CAknFepFnKeyManager::TFnKeyState fnKeyState = fepMan->FnKeyState();
+    if ( !fepMan->EditorHasFreeSpace() && fnKeyState )
+        {
+        return EFalse;
+        }
+    
+    if ( aKey == EPtiKeyQwerty0 )
+    	{
+    	aKey = EPtiKeyQwertySpace;
+    	}
+    
+    if (iData && (iData != aKey) && aKey != EStdKeyBackspace )
+        {
+        ptiengine->CancelTimerActivity();           
+        ptiengine->ClearCurrentWord();        
+        fepMan->ClearFlag( CAknFepManager::EFlagInsideMultitapInlineEditingTransaction );
+        iData = 0;
+        if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext )
+            {
+            fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone );
+            fnKeyState = CAknFepFnKeyManager::EFnKeyNone;
+            }
+        }
+    
+    if( aKey == EStdKeyLeftFunc && !fnKeyState) //chr key
+        {
+        fepMan->LaunchSelectModeMenuL();
+        }
+    else if ( HandleEmotionKeyL( aKey, aLength ) )
+        {
+        return ETrue;
+        }
+    else if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNone && (aKey
+        == EPtiKeyQwertyLeftShift || aKey == EStdKeyF21 ) )
+        {
+        return EFalse;
+        }
+    else if ( aKey == EStdKeyLeftArrow || aKey == EStdKeyRightArrow || aKey
+        == EStdKeyUpArrow || aKey == EStdKeyDownArrow || aKey
+        == EStdKeyBackspace )
+        {
+        if ( fepMan->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed )
+            && fnKeyState )
+            {
+            return ETrue;
+            }
+        else
+            {
+            if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext )
+                {
+                fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone );
+                }
+            return EFalse;
+            }
+        }
+    else if ( aKey == EStdKeyDevice0 || aKey == EStdKeyDevice1 || 
+        aKey == EStdKeyDevice2 )
+        {
+        return EFalse;
+        }
+    else if ( aLength == EShortKeyPress
+        && fepMan->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed )
+        && aKey != EStdKeyLeftShift )
+        {
+        return ETrue;
+        }
+    else if ( ( IsCharacter( aKey ) && aLength == EShortKeyPress )
+        && !fepMan->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed )
+        && !fepMan->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode )
+        && !fnKeyState )
+        {
+        ptiengine->ClearCurrentWord();
+        ptiengine->ResetToneMark();
+        if ( iOwner->IsValidChineseInputKeyQwerty( aKey ) )
+            {
+            if(iOwner->ChangeState(EEntry) == EEntry)
+                {
+                iOwner->FepMan()->SendUIActivatedNotification();
+                }
+            }
+        else if( aLength == EShortKeyPress )
+            {
+            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+            return ETrue;
+            }
+        }
+    else if ( fepMan->IsFlagSet( CAknFepManager::EFlagQwertyShiftMode )
+        && fepMan->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) )
+        {
+        ret = ETrue;
+        }
+    else if ( aKey == EPtiKeyQwertyApostrophe && aLength == ELongKeyPress )
+        {
+        ret = ETrue; 
+        }
+    else if (IsSCTKey(aKey))
+        {
+        HandleKeyByShiftOrCharPressedL(aKey,aLength);
+        if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
+            {
+            fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringChrKeyPress);        
+            }
+        ret = ETrue;
+        }
+    else if( aKey == EStdKeySpace )
+        {
+        if ( aLength == EShortKeyPress)
+            {
+            fepMan->StartInlineEditL();
+            fepMan->UpdateInlineEditL( KSpace, 0 );
+            fepMan->CommitInlineEditL();
+            if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
+                {
+                fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+                }
+            }
+        else
+            {
+            TPtrC text;
+            TBuf<KFnMappedCharacters> allFnMappedCharacters;
+            ptiengine->MappingDataForKey( (TPtiKey)aKey,
+                allFnMappedCharacters, EPtiCaseFnLower );
+            text.Set( allFnMappedCharacters );
+            if ( text.Length() > 0 )
+                {
+                TBuf<1> chr;
+                chr.Append( text[0] );
+                fepMan->RemovePreviousCharacterL();
+                fepMan->NewCharacterL( chr );
+                fepMan->CommitInlineEditL();
+                if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
+                    {
+                    fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+                    }
+                ptiengine->ClearCurrentWord();
+                iData = 0;
+                }
+            }
+        ret = ETrue;
+        }
+    else
+        {
+        ret = TAknFepInputStateHalfQwerty::HandleKeyL( aKey, aLength );
+        if ( fnKeyState == CAknFepFnKeyManager::EFnKeyNext && !IsMultitapkey( aKey ) )
+            {
+            fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNone );
+            }
+        if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
+            {
+            fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+            }
+        }
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::IsSCTKey
+// to check whether the key is sct key 
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsSCTKey(TInt aKey)
+    {
+    TBool response = EFalse;
+    switch (iOwner->FepMan()->InputMode())
+        {
+        case EPinyin:
+            break;
+        case EStroke:
+        case EZhuyin:
+            if (aKey == EPtiKeyQwertyQ ||aKey == EPtiKeyQwertyA ||aKey
+                    == EPtiKeyQwertyZ ||aKey == EPtiKeyQwertyO ||aKey
+                    == EPtiKeyQwertyL)
+                {
+                response = ETrue;
+                }
+            break;
+        case EStrokeFind:
+        case EZhuyinFind:
+            if (aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ)
+                {
+                response = ETrue;
+                }
+            break;
+        }
+    if ( (/*aKey == EStdKeyFullStop || */aKey == EStdKeySpace )
+        && iOwner->FepMan()->FnKeyState() )
+        {
+        response = ETrue;
+        }
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::IsCharacter
+// to check whether the key stroke is a character key or not 
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsCharacter(TInt aKey)
+    {
+    TBool response = EFalse;
+    switch (iOwner->FepMan()->InputMode())
+        {
+        case EPinyin:
+            if (( aKey >= EPtiKeyQwertyA && aKey <= EPtiKeyQwertyZ ) ||
+            	( aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9 ) )
+                {
+                response = ETrue;
+                }
+            break;
+        case EStroke:
+        case EStrokeFind:
+            if ((aKey == EPtiKeyQwertyE ||aKey == EPtiKeyQwertyT ||aKey
+                    == EPtiKeyQwertyU ||aKey == EPtiKeyQwertyD ||aKey
+                    == EPtiKeyQwertyG ||aKey == EPtiKeyQwertyJ ) || 
+               (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty6))
+                {
+                response = ETrue;
+                }
+            break;
+        case EZhuyin:
+            if ( (aKey == EPtiKeyQwertyE ||aKey == EPtiKeyQwertyT ||aKey
+                    == EPtiKeyQwertyU ||aKey == EPtiKeyQwertyD ||aKey
+                    == EPtiKeyQwertyG ||aKey == EPtiKeyQwertyJ ||aKey
+                    == EPtiKeyQwertyC ||aKey == EPtiKeyQwertyB ||aKey
+                    == EPtiKeyQwertyM ||aKey == EPtiKeyQwertySpace ) ||
+                (aKey >= EPtiKeyQwerty0 && aKey <= EPtiKeyQwerty9))
+                {
+                response = ETrue;
+                }
+            break;
+        }
+    return response;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyByShiftOrCharPressedL
+// Handle the shift key envent 
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleKeyByShiftOrCharPressedL(
+    TInt aKey, TKeyPressLength aLength)
+    {
+    TBool ret = EFalse;
+    CPtiEngine* ptiengine = iOwner->PtiEngine();
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    fepMan->ClearFlag(CAknFepManager::EFlagNoActionDuringShiftKeyPress);
+    TPtiTextCase caseMode = EPtiCaseLower;
+    TBool setfnstate = EFalse;
+    if (fepMan->IsOnlyNumericPermitted())
+        {
+        return ret;
+        }
+    TPtiTextCase shiftedCase = caseMode;
+    if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyShiftMode)) 
+        {
+        shiftedCase = EPtiCaseUpper;
+        } 
+    if (fepMan->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) )
+        {
+        shiftedCase = EPtiCaseChrLower;
+        }
+    if ( fepMan->FnKeyState() )
+        {
+        shiftedCase = EPtiCaseFnLower;
+        }
+    if ( aKey == EPtiKeyQwertyQ ||aKey == EPtiKeyQwertyA ||aKey
+        == EPtiKeyQwertyZ ||aKey == EPtiKeyQwertyO ||aKey == EPtiKeyQwertyL )
+        {
+        shiftedCase = EPtiCaseFnLower;
+        setfnstate = ETrue;
+        }
+    ptiengine->SetCase(shiftedCase);
+    TPtrC text;
+    text.Set(ptiengine->AppendKeyPress((TPtiKey)aKey));
+    if (text.Length())
+        {
+        if ( aLength == ELongKeyPress && !iOwner->FepMan()->FnKeyState() )
+            {
+            fepMan->RemovePreviousCharacterL();
+            }
+        TBuf<1> chr;            
+        for (TInt jj = 0; jj < text.Length(); jj++)
+            {
+            chr.Zero();
+            chr.Append( text[jj] );
+            fepMan->NewCharacterL( chr );
+            fepMan->CommitInlineEditL();
+            if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
+                {
+                fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+                }
+            ptiengine->ClearCurrentWord();
+            }
+        ret = ETrue;
+        }
+    if(setfnstate && fepMan->FnKeyState() == CAknFepFnKeyManager::EFnKeyNext )
+        {
+        ptiengine->SetCase(EPtiCaseLower); 
+        }    
+    
+    CAknFepFnKeyManager::TFnKeyState fnKeyState  = fepMan->FnKeyState();    
+    if(fnKeyState == CAknFepFnKeyManager::EFnKeyNext)
+        fepMan->SetFnKeyState(CAknFepFnKeyManager::EFnKeyNone);
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateInitialChineseGenericHalfQwerty::HandleEmotionKeyL
+// Handle the emotion key envent 
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::HandleEmotionKeyL( TInt aKey, TKeyPressLength aLength )
+    {
+    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+    TBool ret = EFalse;
+    TPtrC emotion;
+    if ( ( aKey != EPtiKeyQwerty7 &&
+         aKey != EPtiKeyQwerty8 &&
+         aKey != EPtiKeyQwerty9 ) ||
+         fepMan->FnKeyState())
+        {
+        return EFalse;
+        }
+    if ( EStroke == fepMan->InputMode() || EStrokeFind == fepMan->InputMode() )
+        {
+        if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) )
+            {
+            fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+            return ETrue;
+            }
+        else
+            {
+            switch ( aKey )
+                {
+                case EPtiKeyQwerty7:
+                    emotion.Set( KEmotionSmile );
+                    ret = ETrue;
+                    break;
+                case EPtiKeyQwerty8:
+                    emotion.Set( KEmotionLaugh );
+                    ret = ETrue;
+                    break;
+                case EPtiKeyQwerty9:
+                    emotion.Set( KEmotionSad );
+                    ret = ETrue;
+                    break;
+                default:
+                    break;
+                }
+            }
+        }
+    if ( ret )
+        {
+        if ( aLength == EShortKeyPress)
+            {
+            fepMan->NewTextL(emotion);
+            fepMan->CommitInlineEditL();
+            if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
+                {
+                fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
+                }
+            }
+        else
+            {
+            for( TInt i=0; i<emotion.Length(); i++ )
+                {
+                fepMan->RemovePreviousCharacterL();
+                }
+            fepMan->SetFnKeyState( CAknFepFnKeyManager::EFnKeyNext );
+            fepMan->PtiEngine()->SetCase( EPtiCaseFnLower );
+            return EFalse;
+            }
+        }
+    return ret;
+    }
+
+TBool TAknFepInputStateInitialChineseGenericHalfQwerty::IsMultitapkey( TInt aKey )
+    {
+    TBool ret = EFalse;
+    if ( aKey == EStdKeyLeftFunc || aKey == EPtiKeyQwertyLeftShift ||
+        aKey == EStdKeyFullStop )
+        {
+        ret = ETrue;
+        }
+    return ret;
+    }
+//end of the file