--- /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