diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepzhuyinkeyhandler.cpp --- a/fep/aknfep/src/aknfepzhuyinkeyhandler.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,611 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - -#include "aknfepzhuyinkeyhandler.h" - -const TInt KBTLoopLength1 = 3; -const TInt KBTLoopLength2 = 4; -const TInt KBTLoopLength3 = 5; - -const TInt KBTLoopLength = 5; - -const TInt KCLKCount1 = 1; -const TInt KCLKCount2 = 2; -const TInt KCLKCount3 = 3; -const TInt KCLKCount4 = 4; -const TInt KCLKCount5 = 5; - -const TInt KTimerOut = 700000; - -_LIT(KPtiKey1_1, "\x3105"); -_LIT(KPtiKey1_2, "\x3106"); -_LIT(KPtiKey1_3, "\x3107"); -_LIT(KPtiKey1_4, "\x3108"); - -_LIT(KPtiKey2_1, "\x3109"); -_LIT(KPtiKey2_2, "\x310A"); -_LIT(KPtiKey2_3, "\x310B"); -_LIT(KPtiKey2_4, "\x310C"); - -_LIT(KPtiKey3_1, "\x310D"); -_LIT(KPtiKey3_2, "\x310E"); -_LIT(KPtiKey3_3, "\x310F"); - -_LIT(KPtiKey4_1, "\x3110"); -_LIT(KPtiKey4_2, "\x3111"); -_LIT(KPtiKey4_3, "\x3112"); - -_LIT(KPtiKey5_1, "\x3113"); -_LIT(KPtiKey5_2, "\x3114"); -_LIT(KPtiKey5_3, "\x3115"); -_LIT(KPtiKey5_4, "\x3116"); - -_LIT(KPtiKey6_1, "\x3117"); -_LIT(KPtiKey6_2, "\x3118"); -_LIT(KPtiKey6_3, "\x3119"); - -_LIT(KPtiKey7_1, "\x311A"); -_LIT(KPtiKey7_2, "\x311B"); -_LIT(KPtiKey7_3, "\x311C"); -_LIT(KPtiKey7_4, "\x311D"); - -_LIT(KPtiKey8_1, "\x311E"); -_LIT(KPtiKey8_2, "\x311F"); -_LIT(KPtiKey8_3, "\x3120"); -_LIT(KPtiKey8_4, "\x3121"); - -_LIT(KPtiKey9_1, "\x3122"); -_LIT(KPtiKey9_2, "\x3123"); -_LIT(KPtiKey9_3, "\x3124"); -_LIT(KPtiKey9_4, "\x3125"); -_LIT(KPtiKey9_5, "\x3126"); - -_LIT(KPtiKey0_1, "\x3127"); -_LIT(KPtiKey0_2, "\x3128"); -_LIT(KPtiKey0_3, "\x3129"); - -_LIT(KPtiKeyStar_1, "\x0020"); -_LIT(KPtiKeyStar_2, "\x02CA"); -_LIT(KPtiKeyStar_3, "\x02C7"); -_LIT(KPtiKeyStar_4, "\x02CB"); -_LIT(KPtiKeyStar_5, "\x02D9"); - - -// --------------------------------------------------------- -// C++ constructor. -// --------------------------------------------------------- -// -ZhuyinKeyTable::ZhuyinKeyTable() - { - } - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -// -ZhuyinKeyTable::~ZhuyinKeyTable() - { - } - -// --------------------------------------------------------- -// Get butten loop length. -// --------------------------------------------------------- -// -TInt ZhuyinKeyTable::GetBtLoopLength ( TPtiKey aKey ) - { - switch ( aKey ) - { - case EPtiKey0: - case EPtiKey3: - case EPtiKey4: - case EPtiKey6: - { - return KBTLoopLength1; - } - case EPtiKey1: - case EPtiKey2: - case EPtiKey5: - case EPtiKey7: - case EPtiKey8: - { - return KBTLoopLength2; - } - case EPtiKey9: - case EPtiKeyStar: - { - return KBTLoopLength3; - } - default: - return 0; - } - } - -// --------------------------------------------------------- -// Get zhuyin symbol. -// --------------------------------------------------------- -// -TBool ZhuyinKeyTable::GetUnicode ( TPtiKey aKey, TInt aClkCount, TDes& aOutput ) - { - aOutput.Zero(); - switch ( aKey ) - { - case EPtiKey0: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey0_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey0_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey0_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey1: - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey1_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey1_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey1_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey1_4); - return ETrue; - default: - return EFalse; - } - case EPtiKey2: - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey2_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey2_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey2_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey2_4); - return ETrue; - default: - return EFalse; - } - case EPtiKey3: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey3_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey3_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey3_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey4: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey4_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey4_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey4_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey5: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey5_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey5_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey5_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey5_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey6: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey6_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey6_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey6_3); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey7: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey7_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey7_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey7_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey7_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey8: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey8_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey8_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey8_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey8_4); - return ETrue; - default: - return EFalse; - } - } - case EPtiKey9: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKey9_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKey9_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKey9_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKey9_4); - return ETrue; - case KCLKCount5: - aOutput.Append(KPtiKey9_5); - return ETrue; - default: - return EFalse; - } - } - case EPtiKeyStar: - { - switch ( aClkCount ) - { - case KCLKCount1: - aOutput.Append(KPtiKeyStar_1); - return ETrue; - case KCLKCount2: - aOutput.Append(KPtiKeyStar_2); - return ETrue; - case KCLKCount3: - aOutput.Append(KPtiKeyStar_3); - return ETrue; - case KCLKCount4: - aOutput.Append(KPtiKeyStar_4); - return ETrue; - case KCLKCount5: - aOutput.Append(KPtiKeyStar_5); - return ETrue; - default: - return EFalse; - } - } - default: - return EFalse; - } - } - -// --------------------------------------------------------- -// C++ constructor -// --------------------------------------------------------- -// -CZhuyinKeyHandler::CZhuyinKeyHandler( ) : - CActive ( EPriorityStandard ), // Standard priority - iLastKey ( EPtiKeyNone ), - iTimeOut ( ETrue ), - iBtClickNum ( 0 ), - iBtLoopLength ( 1 ), - iState( 0 ), - iStatusChgFlag(EInit) - { - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -CZhuyinKeyHandler* CZhuyinKeyHandler::NewLC() - { - CZhuyinKeyHandler* self = new ( ELeave ) CZhuyinKeyHandler(); - CleanupStack::PushL( self ); - self->ConstructL( ); - return self; - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -CZhuyinKeyHandler* CZhuyinKeyHandler::NewL() - { - CZhuyinKeyHandler* self = CZhuyinKeyHandler::NewLC(); - CleanupStack::Pop( self ); // self; - return self; - } - -// --------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::ConstructL( ) - { - User::LeaveIfError( iTimer.CreateLocal( ) ); // Initialize timer - CActiveScheduler::Add( this ); // Add to scheduler - } - -// --------------------------------------------------------- -// Cancel and destroy. -// --------------------------------------------------------- -// -CZhuyinKeyHandler::~CZhuyinKeyHandler( ) - { - Cancel( ); // Cancel any request, if outstanding - iTimer.Close( ); // Destroy the RTimer object - // Delete instance variables if any - } - -// --------------------------------------------------------- -// How to cancel me. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::DoCancel( ) - { - iTimer.Cancel( ); - } - -// --------------------------------------------------------- -// Function for making the initial request. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::Start() - { - Cancel(); // Cancel any request, just to be sure - iTimer.After( iStatus, KTimerOut ); // Set for later - SetActive(); // Tell scheduler a request is active - } - -// --------------------------------------------------------- -// Get Zhuyin symbol according to the inputting key. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetZhuyinSymbol ( TPtiKey aKey, TDes& aOutBuf ) - { - TInt ret = 0; - Start(); - // if the same button is pressed for many times. - if ( iLastKey == aKey - && iTimeOut == EFalse ) - { - if ( iBtLoopLength != 0 ) - { - iBtClickNum++; - if ( iBtClickNum > iBtLoopLength ) - { - iBtClickNum = 1; - } - } - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - ret = 0; - } - // if the pressed button is changed or time out event is happened. - else if ( iLastKey == aKey - && iTimeOut != EFalse ) - { - // Update iBtClickNum - iBtClickNum = 1; - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - ret = 1; - } - else - { - // Update iBtClickNum - iBtClickNum = 1; - // Update iBtUnicodeNum - iBtLoopLength = ZhuyinKeyTable::GetBtLoopLength(aKey); - // Search for the corresponding unicode and value aOutBuf. - ZhuyinKeyTable::GetUnicode(aKey,iBtClickNum,aOutBuf); - if ( iBtLoopLength != 0 ) - { - ret = 1; - } - else - { - ret = -1; - } - } - iLastKey = aKey; - iTimeOut = EFalse; - return ret; - } - -// --------------------------------------------------------- -// Set status change flag. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::SetStatusChgFlag ( MZhuyinKeyHandler::TStatusChgFlag aChgFlag ) - { - iStatusChgFlag = aChgFlag; - } - -// --------------------------------------------------------- -// Get the status change flag. -// --------------------------------------------------------- -// -MZhuyinKeyHandler::TStatusChgFlag CZhuyinKeyHandler::GetStatusChgFlag () - { - return iStatusChgFlag; - } - -// --------------------------------------------------------- -// Reset all the member variables. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::Reset() - { - iLastKey = EPtiKeyNone; - iTimeOut = ETrue ; - iBtClickNum = 0; - iBtLoopLength = 1; - } - - -// --------------------------------------------------------- -// Get tonemark according to symbol in front of cursor. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetToneMark ( const TDes& aBaseSymbol, TDes& aOutBuf ) - { - TInt ret = 0; - iBtLoopLength = KBTLoopLength; - iTimeOut = ETrue ; - if ( aBaseSymbol.Compare(KPtiKeyStar_1) == 0 ) - { - iBtClickNum = KCLKCount1; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_2) == 0 ) - { - iBtClickNum = KCLKCount2; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_3) == 0 ) - { - iBtClickNum = KCLKCount3; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_4) == 0 ) - { - iBtClickNum = KCLKCount4; - } - else if ( aBaseSymbol.Compare(KPtiKeyStar_5) == 0 ) - { - iBtClickNum = KCLKCount5; - } - else - { - iBtClickNum = 0; - ret = 1; - } - iBtClickNum++; - if ( iBtClickNum > iBtLoopLength ) - { - iBtClickNum = 1; - } - ZhuyinKeyTable::GetUnicode(EPtiKeyStar,iBtClickNum,aOutBuf); - iLastKey = EPtiKeyStar; - iTimeOut = EFalse; - return ret; - } - -// --------------------------------------------------------- -// Get tonemark according to symbol in front of cursor. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::RunL( ) - { - iTimeOut = ETrue; - } - -// --------------------------------------------------------- -// Override to handle leaves from RunL(). Default implementation causes. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::RunError( TInt aError ) - { - return aError; - } - -// --------------------------------------------------------- -// Set whether state change from entry to spelling editing is automatical. -// --------------------------------------------------------- -// -void CZhuyinKeyHandler::SetState( TInt aState ) - { - iState = aState; - } - -// --------------------------------------------------------- -// Get state change states. -// --------------------------------------------------------- -// -TInt CZhuyinKeyHandler::GetState() - { - return iState; - } - -// End of file