fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
--- a/fep/aknfep/src/AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.cpp	Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1010 +0,0 @@
-/*
-* Copyright (c) 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 CAknFepUIInputStateMiniQwertyZhuyinPhrase methods.
- *
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepUiInputStateEntryMiniQwertyZhuyinPhrase.h"
-#include "AknFepUIManagerStateInterface.h"
-
-#include "AknFepUICtrlInputPane.h"
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepManagerUIInterface.h"       //MAknFepManagerUIInterface
-#include "AknFepManager.h"                  //FepMan flag
-#include "AknFepUICtrlPinyinPopup.h"		//Pinyin phrase
-#include "aknfepuictrleditpane.h"           //phrase creation
-#include "aknfepinputstateminiqwertyzhuyinkeymap.h"  //phrase creation
-#include <PtiEngine.h>
-#include <e32keys.h>
-#include <PtiDefs.h>    
-#include <avkon.rsg>            //keys
-#include <aknfep.rsg>
-
-const TInt KInputPaneLength = 32;
-_LIT(KSep, "'");
-_LIT(KReplace, "");
-_LIT(KLeftBracket, "(");
-_LIT(KRightBracket, ")");
-const TText KPinyinTone4Valid = 0x02D9;
-const TText KPinyinTone4Invalid = 0x0020;
-const TInt KMaxKeystrokeCount = 31;
-const TInt KKeystrokeMaxLength =5;
-const TInt KKeyBufferMaxLength =150;
-
-const TUint16 KSai = 0x311D;
-const TUint16 KToneMark1 = 0x0020;
-const TUint16 KToneMark2 = 0x02CA;
-const TUint16 KToneMark3 = 0x02c7;
-const TUint16 KToneMark4 = 0x02CB;
-const TUint16 KToneMark5 = 0x02D9;
-
-struct TToneZhuYinMap
-    {
-    TUint16 iValue;
-    TInt iInputTone;
-    };
-const TToneZhuYinMap ZhuyinToneMap[] =
-    {
-        {
-        KToneMark1, 1
-        },
-        {
-        KToneMark2, 2
-        },
-        {
-        KToneMark3, 3
-        },
-        {
-        KToneMark4, 4
-        },
-        {
-        KToneMark5, 5
-        }
-    };
-
-const TInt KMaxPhraseCount = 150;//This should be the same as that in pticpicore. 
-
-_LIT( KZhuyinNote,"\x9020\x65B0\x8BCD" );
-
-TAknFepInputStateEntryMiniQwertyZhuyinPhrase::TAknFepInputStateEntryMiniQwertyZhuyinPhrase(
-    MAknFepUIManagerStateInterface* aOwner,
-    MAknFepUICtrlContainerChinese* aUIContainer ) :
-    TAknFepInputStateEntryQwertyBaseChinesePhrase( aOwner, aUIContainer)
-    {
-    iState = EEntry;
-
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    uiContainer->FocusCandidatePane( EFalse );
-    uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse );
-    uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutInput );
-    uiContainer->CandidatePane()->SelectFirstPhrase();
-    uiContainer->ShowVerticalScrollArrows( ETrue );
-    uiContainer->ShowHorizontalScrollArrows( EFalse );
-    uiContainer->InputPane()->SetOverrideFontId( 0 );
-    uiContainer->SetFepMan( iOwner->FepMan() );
-    
-    //For fix bug that the text in input pane could not be shown totally. 
-    if ( iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10 ||
-        iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty3x11)
-        {
-        uiContainer->PinyinPopupWindow()->SetInputLayoutMiniQwertyZhuyin();
-        }
-    
-    iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount );
-    // in the case that we are coming back to the input pane from the candidate pane, 
-    // we need to ensure that the current selection is selected correctly
-    ImplicitlyUpdateSelection();
-    // however we also need to clear the deliberate selection, in case we are not
-    // coming back to the input pane from the candidate pane
-    ClearDeliberateSelection();
-    UpdateIndicator();
-
-    iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseQwerty );
-    iOwner->PtiEngine()->SetCase( EPtiCaseLower );
-    }
-
-TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyL( TInt aKey,
-    TKeyPressLength aLength )
-    {
-    if ( iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10 ||
-        iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty3x11)
-        {
-        return HandleKeyForMiniQwertyL( aKey, aLength );
-        }
-    else
-        {
-        return HandleKeyForHalfAndCustomQwertyL( aKey, aLength );
-        }
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::KeyTimerExpired()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
-
-    // set container's position
-    TPoint baseLine = TPoint( 0, 0 );
-    TInt height = 0;
-    TInt ascent = 0;
-    TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent))
-    ;
-    if ( ret == KErrNone )
-        {
-        uiContainer->SetContainerPosition( baseLine, height );
-        }
-
-    TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount();
-    if ( editPane->GetEffictiveLength() < keystroke->Count()
-        || pinyinCountWithoutToneMarks == popup->CurrentSelection() )
-        {
-        TBuf<KKeyBufferMaxLength> keystrokeBuf;
-        for (TInt i = 0; i < keystroke->Count(); i++ )
-            {
-            keystrokeBuf.Append( keystroke->MdcaPoint( i ) );
-            }
-        inputPane->SetText( keystrokeBuf );
-        }
-    else
-        {
-        TPtrC ptr = ptiengine->GetPhoneticSpelling( 1 );
-        TBuf<KInputPaneLength> currentText;
-        inputPane->GetText( currentText );
-        if ( ptr.Length() < currentText.Length() )
-            {
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            }
-        inputPane->SetText( ptr );
-        }
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::DeliberatelyUpdateSelection()
-    {
-    TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-
-    TInt selected = popup->CurrentSelection();
-    ptiengine->EnableToneMarks( EFalse );
-    TPtrC spelling = ptiengine->GetPhoneticSpelling( selected + 1 ); // our index is zero based, engine index is one based
-    deliberateSelection
-        = spelling.Left( MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark );
-    ptiengine->EnableToneMarks( ETrue );
-    UIContainer()->PinyinPopupWindow()->SetFlag( MAknFepUICtrlPinyinPopup::ESpellingNavigation );
-    RefreshUI( popup->CurrentVisibleSelection() );
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::ImplicitlyUpdateSelection()
-    {
-    TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
-    TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-
-    // previously selected is compared in turn to each of the new candidates
-    ptiengine->EnableToneMarks( EFalse );
-    TInt pinyinCount = ptiengine->PhoneticSpellingCount();
-    TInt newSelection = 0;
-    for (TInt i = 0; i < pinyinCount; i++ )
-        {
-        TPtrC spelling = ptiengine->GetPhoneticSpelling( i + 1 ); // our index is zero based, engine index is one based
-        TInt spellingLength = spelling.Length();
-
-        // figure out how many characters we are comparing, this depends on the 
-        // direction of the edit
-        TInt compareLength = oldDeliberateSelectionLength <= spellingLength
-            ? oldDeliberateSelectionLength : spellingLength;
-
-        if ( oldDeliberateSelection.Left( compareLength )
-            == spelling.Left( compareLength ) )
-            {
-            // as soon as a substring match is found, the 
-            // highlight position is set to that candidate in the new list. 
-            // note that in the case of the first character entered, the
-            // oldBuf will be empty so it will always match... which is 
-            // fine as we want to select the top one anyway, so we will
-            // quit the loop early.
-            newSelection = i;
-            break;
-            }
-        }
-    ptiengine->EnableToneMarks( ETrue );
-    UIContainer()->PinyinPopupWindow()->SetFlag( MAknFepUICtrlPinyinPopup::ESpellingChanged );
-    RefreshUI( newSelection );
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::ClearDeliberateSelection()
-    {
-    // we must have just deleted the last character, 
-    // or we are starting a new zhuyin session, so wipe the last deliberate selection
-    CDesCArrayFlat* keystroke = UIContainer()->EditPaneWindow()->KeystrokeArray();
-    if ( keystroke->Count() == 0 )
-        {
-        TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
-        oldDeliberateSelection = KNullDesC;
-        }
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::RefreshUI( TInt aSelection )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
-    TBuf<KKeyBufferMaxLength> keystrokeBuf;
-
-    // get cursor position
-    TPoint baseLine = TPoint( 0, 0 );
-    TInt height = 0;
-    TInt ascent = 0;
-
-    TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent));
-    if ( ret == KErrNone )
-        {
-        uiContainer->SetContainerPosition( baseLine, height );
-        }
-
-    TText toneMark;
-    TBool toneMarkEntered = ptiengine->ToneMark( toneMark );
-    TBuf<1> validToneMarkBuf;
-    if ( toneMarkEntered )
-        {
-        // override specific invalid tonemark character only, the others are the same character 
-        // when both valid and invalid
-        if ( toneMark == KPinyinTone4Invalid )
-            toneMark = KPinyinTone4Valid;
-        validToneMarkBuf.Append( toneMark );
-        }
-
-    // to start with, disable the tone marks so we can get the list of all zhuyin matches
-    // later we will figure out which ones are invalid
-    ptiengine->EnableToneMarks( EFalse );
-    TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount();
-
-    for (TInt i = 0; i < keystroke->Count(); i++ )
-        {
-        keystrokeBuf.Append( keystroke->MdcaPoint( i ) );
-        }
-
-    if ( pinyinCountWithoutToneMarks > 0 )
-        {
-        if ( popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingChanged ) )
-            {
-            if ( editPane->GetEffictiveLength() < keystroke->Count() )
-                {
-                spelling->Reset();
-                spelling->Compress();
-                }
-            else
-                {
-                TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling));
-                if ( ignore != KErrNone )
-                    {
-                    return;
-                    }
-                }
-
-            TRAPD( retOptimize, spelling->AppendL( keystrokeBuf ) );
-            if ( KErrNone != retOptimize )
-                {
-                return;
-                }
-
-            popup->SplitPhraseSpellingIntoPages();
-            }
-
-        // set display page for delibrate selection
-        popup->SetDisplayPage( aSelection );
-        popup->SetPhraseItemTexts();
-
-        // fill in input pane although it's invisible
-        if ( editPane->GetEffictiveLength() < keystroke->Count()
-            || pinyinCountWithoutToneMarks == popup->CurrentSelection() )
-            {
-            inputPane->SetText( keystrokeBuf );
-            }
-        else
-            {
-            inputPane->SetText( ptiengine->GetPhoneticSpelling( popup->CurrentSelection()
-                + 1 ) );
-            }
-        popup->PopupSizeChanged(); // phrase input
-        }
-    // turn tone marks back on so that we know where we are.
-    ptiengine->EnableToneMarks( ETrue );
-
-    // this is where we start to figure out whether the tonemarks are valid,
-    // whether the selected tonemark is valid, and what is the index of the 
-    // selected candidate in the list of candidates with tonemarks...
-    TBool selectionToneMarkValid = EFalse;
-    TInt selectionIndexAdjustedForToneMarkValidity =
-        popup->CurrentSelection();
-
-    // we only need to deal with tone marks if there is one
-    if ( toneMarkEntered )
-        {
-        if ( pinyinCountWithoutToneMarks > 0 )
-            {
-            for (TInt i = popup->CurrentSelection() + 1; i < pinyinCountWithoutToneMarks; i++ )
-                {
-                TBool valid = EFalse;
-
-                TBuf<MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark>
-                    nextCandidateWithoutToneMark;
-                nextCandidateWithoutToneMark.Copy( ptiengine->GetPhoneticSpelling(i + 1).Left( MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark ) );
-
-                ptiengine->EnableToneMarks( EFalse );
-                ptiengine->SelectPhoneticSpelling( i + 1 );
-
-                valid = ptiengine->IsToneMarkValidForSpelling();
-                if ( valid )
-                    {
-                    ptiengine->EnableToneMarks( ETrue );
-                    TInt pinyinCountWithToneMarks =
-                        ptiengine->PhoneticSpellingCount();
-
-                    for (TInt j = popup->CurrentSelection() + 1; j < pinyinCountWithToneMarks; j++ )
-                        {
-                        // use j here not i as we are looking at the list with tonemarks
-                        TPtrC nextCandidateWithToneMark =
-                            ptiengine->GetPhoneticSpelling( j + 1 );
-                        if ( nextCandidateWithToneMark
-                            == nextCandidateWithoutToneMark )
-                            {
-                            if ( i == aSelection )
-                                {
-                                selectionToneMarkValid = ETrue;
-
-                                // fill in input pane even if it can't be seen, for when we have to hide popup window
-                                inputPane->SetText( nextCandidateWithoutToneMark );
-                                }
-                            break;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    ptiengine->EnableToneMarks( EFalse );
-    ptiengine->SelectPhoneticSpelling( popup->CurrentSelection() + 1 );
-    // next two lines are for tonemark validity
-    ptiengine->EnableToneMarks( selectionToneMarkValid );
-    ptiengine->SelectPhoneticSpelling( selectionIndexAdjustedForToneMarkValidity
-        + 1 ); // our index is zero based, engine index is one based
-
-    // update the candidate pane.
-    if ( popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingChanged )
-        || popup->IsFlagSet( MAknFepUICtrlPinyinPopup::ESpellingNavigation ) )
-        {
-        CDesCArrayFlat* phraseCandidates = uiContainer->CandidatePane()->CandidateArray();
-        if ( editPane->GetEffictiveLength() == keystroke->Count()
-            && pinyinCountWithoutToneMarks > popup->CurrentSelection() )
-            {
-            TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates));
-            if ( ignore != KErrNone )
-                {
-                return;
-                }
-            }
-        else if ( keystroke->Count() != 0 )
-            {
-            phraseCandidates->Reset();
-            phraseCandidates->Compress();
-            TRAPD( retAddZhuyinNote, phraseCandidates->AppendL( KZhuyinNote ) );
-            if ( KErrNone != retAddZhuyinNote )
-                {
-                return;
-                }
-            }
-
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        popup->ClearFlag( MAknFepUICtrlPinyinPopup::ESpellingChanged
-            | MAknFepUICtrlPinyinPopup::ESpellingNavigation );
-        }
-    uiContainer->CandidatePane()->SetCandidateBuffer();
-    uiContainer->Enable( ETrue );
-    // need to enable the pinyin popup after the container so that it is raised to the front
-    popup->Enable( pinyinCountWithoutToneMarks > 0 );
-    UpdateIndicator();
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::InitializeStateL( void )
-    {
-    iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::UpdateIndicator()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();        
-    MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
-    TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount();
-        
-    if (candidatePane->IsFirstPage())
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse);    
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows(ETrue);    
-        }
-   
-    if (candidatePane->IsLastPage())
-        {
-        uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse);     
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowDownScrollArrows(ETrue);      
-        }
-    
-    if ( editPane->GetEffictiveLength() < keystroke->Count() ||
-        pinyinCountWithoutToneMarks == popup->CurrentSelection() )
-        {
-        uiContainer->ShowVerticalScrollArrows(EFalse);
-        }
-    else
-        {
-        uiContainer->ShowVerticalScrollArrows(ETrue);
-        }
-    }
-
-TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::CheckToneMarkBorderUpon()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
-    TPtrC ptr = keystroke->MdcaPoint( keystroke->Count() - 1 );
-    TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0]));
-    for (TInt i = 0; i< num; i++ )
-        {
-        //if ( ptr.Compare( ZhuyinToneMap[i].iValue) == 0 )
-        if ( ptr[0] == ZhuyinToneMap[i].iValue )
-            {
-            return ETrue;
-            }
-        }
-
-    return EFalse;
-    }
-
-TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyForMiniQwertyL( TInt aKey,
-    TKeyPressLength aLength )
-    {
-
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
-    RArray<TInt>* keycodeArray = editPane->KeycodeArray();
-    TInt keystrokeLength = keystroke->Count();
-
-    TBool ret = ETrue;
-
-    if ( (aKey == EPtiKeyQwertyE || aKey == EPtiKeyQwertyR || 
-        aKey == EPtiKeyQwertyY || aKey == EPtiKeyQwertyU || aKey == EStdKeySpace)
-        && (aLength == EShortKeyPress) )
-        {
-        if ( keystrokeLength == 0 )
-            {
-            iOwner->FepMan()->TryCloseUiL();
-            CommitToneMarkL( aKey );
-            return ETrue;
-            }
-        
-        if ( keystrokeLength < KMaxKeystrokeCount && 
-            !CheckToneMarkBorderUpon() )
-            {
-            if ( editPane->GetEffictiveLength() == keystrokeLength )
-            	{
-            	TBool isToneValid = ptiengine->SetToneMark(aKey);
-				TInt stringAfterLength =
-						ptiengine->GetPhoneticSpelling(1).Length();
-				TPtrC ptr = ptiengine->GetPhoneticSpelling(1);
-				TInt spellSepLen = 0;
-				TInt keySepLen = 0;
-				for (TInt i = 0; i < stringAfterLength; i++)
-					{
-					if (ptr.Mid(i, 1).Compare(KSep) == 0)
-            		{
-            		spellSepLen++;
-            		}
-            	}
-            for ( TInt j = 0; j < keystrokeLength; j++ )
-            	{
-            	if ( keystroke->MdcaPoint( j ).Compare(KSep) == 0 )
-            		{
-						keySepLen++;
-						}
-					}
-
-				// +1 is for we had add tone mark to engine, perhaps it is legal, but 
-				// We had not add it to keystroke array
-				if ((stringAfterLength - spellSepLen) == (keystrokeLength
-						- keySepLen + 1) && isToneValid)
-					{
-					inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
-
-					UIContainer()->ShowHorizontalScrollArrows(EFalse);
-					UIContainer()->ShowVerticalScrollArrows(ETrue);
-					SetInputPaneToneMark();
-					editPane->AddEffictiveLength();
-					}
-				}      
-
-            TBuf<KKeystrokeMaxLength> buf;
-            TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke(
-            		ptiengine, aKey, buf );
-            keystroke->AppendL( buf );
-            keycodeArray->AppendL( aKey );
-            ImplicitlyUpdateSelection();
-            }
-        else
-            {
-            UpdateIndicator();
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            }
-
-        }
-    else if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock
-        == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown
-        == iOwner->FepMan()->FnKeyState() )
-        {
-        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-        }
-    else if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed )
-        || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed )
-        || ((aKey == EStdKeyLeftFunc) && aLength == EShortKeyPress) )
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        ret = EFalse;
-        }
-    else if ( aKey == EKeyLeftShift || aKey ==EKeyLeftCtrl || aKey
-        == EKeyRightCtrl || aKey ==EKeyRightFunc )
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        ret = EFalse;
-        }
-    else if ( aKey == EStdKeyBackspace )
-        {
-        TBool state = ETrue;
-        if ( editPane->IsChangeState() && aLength == ELongKeyPress )
-            {
-            state = EFalse;
-            }
-        else
-            {
-            editPane->SetChangeState( EFalse );
-            }
-        if ( state )
-            {
-            if ( editPane->GetEffictiveLength() == keystrokeLength )
-                {
-                if ( iOwner->PtiEngine()->DeleteKeyPress().Length() && keystrokeLength != 1 )
-                    {
-                    editPane->DecEffictiveLength();
-                    keystroke->Delete( keystrokeLength - 1 );
-                    keycodeArray->Remove( keystrokeLength - 1 );
-                    inputPane->SetFlag( MAknFepUICtrlInputPane::EPhoneticChanged );
-                    ImplicitlyUpdateSelection();
-                    }
-                else
-                    {
-                    ClearDeliberateSelection();
-                    iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
-                    if ( aLength == ELongKeyPress )
-                        {
-                        iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue );
-                        }
-                    }
-                }
-            else
-                {
-                keystroke->Delete( keystrokeLength - 1 );
-                keycodeArray->Remove( keystrokeLength - 1 );
-                ImplicitlyUpdateSelection();
-                }
-            }
-        }
-    else if ( aKey ==EStdKeyDevice1 )//sk2
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        }
-    else if ( aKey == EStdKeyRightArrow )
-        {
-        if ( popup->IsEnabled() )
-            {
-            if ( popup->SelectNextPhrase() )
-                {
-                DeliberatelyUpdateSelection();
-                UpdateIndicator();
-                }
-            }
-        }
-    else if ( aKey == EStdKeyLeftArrow )
-        {
-        if ( popup->IsEnabled() )
-            {
-            if ( popup->SelectPrevPhrase() )
-                {
-                DeliberatelyUpdateSelection();
-                UpdateIndicator();
-                }
-            }
-        }
-    else if ( aKey == EStdKeyDownArrow || aKey == EStdKeyDevice3 || aKey
-        == EStdKeyDevice0 )//selection key
-        {
-        editPane->SetChangeState( ETrue );
-        if ( editPane->GetEffictiveLength() == keystroke->Count()
-            && ptiengine->PhoneticSpellingCount()
-                > popup->CurrentSelection() )
-            {
-            if ( popup->IsEnabled() )
-                {
-                popup->Enable( EFalse );
-                }
-            iOwner->ChangeState( ECandidate );
-            }
-        else
-            {
-            if ( keystrokeLength > 0 && keystroke->MdcaPoint( 0 )[0] == KSai )
-                {
-                UIContainer()->SetControlInVisible( EFalse );
-                iOwner->ChangeState( EMiniQwertyEdit );
-                }
-            else
-                {
-                ClearDeliberateSelection();
-                editPane->SetNeedClearDeliberateSelection( ETrue );
-                iOwner->ChangeState( EZhuyinSpelling );
-                }
-            }
-        }
-    else if ( aKey == EStdKeyEnter )//enter the characters in the entry pane into the editor
-        {
-        TInt currentIndex = uiContainer->PinyinPopupWindow()->CurrentSelection();
-        TBuf<KInputPaneLength> currentText;
-        if ( currentIndex < ptiengine->PhoneticSpellingCount() )
-            {
-            currentText.Copy(ptiengine->GetPhoneticSpelling( currentIndex + 1 ));
-            }
-        else
-            {
-            inputPane->GetText( currentText );
-            }
-        
-
-        while (currentText.Find( KSep )> 0 )
-            {
-            currentText.Replace( currentText.Find( KSep ), 1, KReplace );
-            }
-        while (currentText.Find( KLeftBracket ) >= 0 )
-            {
-            currentText.Replace( currentText.Find( KLeftBracket ), 1,
-                KReplace );
-            }
-        while (currentText.Find( KRightBracket ) >= 0 )
-            {
-            currentText.Replace( currentText.Find( KRightBracket ), 1,
-                KReplace );
-            }
-
-        if ( currentText.Length() )
-            {
-            MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-            fepMan->NewTextL( currentText );
-            fepMan->CommitInlineEditL();
-            if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) )
-                {
-                fepMan->ClearFlag( CAknFepManager::EFlagEditorFull );
-                }
-            }
-
-        iOwner->FepMan()->TryCloseUiL();
-
-        }
-    else if ( aLength == EShortKeyPress ) // don't want repeats on these keys
-        {
-        iOwner->FepMan()->SetCcpuFlag( CAknFepManager::ECcpuStateIgnoreStarUp );
-
-        if ( keystroke->Count() < KMaxKeystrokeCount
-            && (iOwner->IsValidChineseInputKeyQwerty( aKey ) || aKey
-                ==EStdKeySpace ) ) //seperator
-            {
-            TInt stringBeforeLength(0);
-            TInt stringAfterLength(0);
-
-            stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
-            stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length();
-
-            if ( stringBeforeLength != stringAfterLength )
-                {
-                if ( ptiengine->GetPhoneticSpelling(1).Length() == 1 )
-                    {
-                    iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
-                    }
-                editPane->AddEffictiveLength();
-                }
-
-            TBuf<KKeystrokeMaxLength> buf;
-            TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke(
-            		ptiengine, aKey, buf );
-            keystroke->AppendL( buf );
-            keycodeArray->AppendL( aKey );
-
-            ImplicitlyUpdateSelection();
-            }
-        else
-            {
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            }
-        }
-    return ret;
-    }
-
-TBool TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleKeyForHalfAndCustomQwertyL( TInt aKey,
-    TKeyPressLength aLength )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-
-    TBool ret = ETrue;
-
-    if((aKey == EPtiKeyQwertyE || 
-        aKey == EPtiKeyQwertyR || 
-        aKey == EPtiKeyQwertyY || 
-        aKey == EPtiKeyQwertyU ||
-        aKey == EStdKeySpace) && 
-        (aLength == EShortKeyPress))        
-        {
-        if(ptiengine->SetToneMark(aKey))
-            {
-            inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
-            
-            TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
-                                    uiContainer->CandidatePane()->IsFirstPage());
-            TInt bufLength = ptiengine->CandidatePage().Length();
-            TBool showHorizontalScrollArrows = multiplePages || bufLength>1;
-            
-            UIContainer()->ShowHorizontalScrollArrows(showHorizontalScrollArrows);
-            UIContainer()->ShowVerticalScrollArrows(multiplePages);
-            SetInputPaneToneMark();
-            ImplicitlyUpdateSelection();
-            }
-        }
-    if(( aKey == EStdKeyLeftFunc) && aLength == EShortKeyPress)     //chr key to tone mark   
-        {
-        if(ptiengine->IncrementToneMark(ETrue))
-            {
-            ImplicitlyUpdateSelection();
-            }
-        }
-    else if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() ||
-        CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() ||
-        CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState())
-        {
-        iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-        }                                               
-    else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)||
-             iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        ret = EFalse;
-        }
-    else if (aKey == EKeyLeftShift || aKey ==EKeyLeftCtrl || aKey == EKeyRightCtrl)      
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        ret = EFalse;
-        }
-    else if (aKey ==EKeyRightFunc)//fn
-        {
-        iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-        }        
-    else if(aKey == EStdKeyBackspace )
-        {
-        if (iOwner->PtiEngine()->DeleteKeyPress().Length())
-            {
-            ImplicitlyUpdateSelection();
-            }
-        else
-            {
-            ClearDeliberateSelection();
-            iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
-            if (aLength == ELongKeyPress)
-                {
-                iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue);
-                }
-            }
-        } 
-    else if(aKey ==EStdKeyDevice1)//sk2
-        {
-        iOwner->FepMan()->TryCloseUiL();
-        }
-    else if(aKey == EStdKeyRightArrow)
-        {
-        if(popup->IsEnabled())
-            {
-            if(popup->SelectNextPhrase())
-                {
-                DeliberatelyUpdateSelection();
-                }
-            }
-        }
-    else if(aKey == EStdKeyLeftArrow)
-        {
-        if(popup->IsEnabled())
-            {
-            if(popup->SelectPrevPhrase())
-                {
-                DeliberatelyUpdateSelection();
-                }
-            }
-        }
-    else if (aKey == EStdKeyDownArrow || aKey == EStdKeyDevice3 || aKey == EStdKeyDevice0)//selection key
-        {
-        if(popup->IsEnabled())
-            {
-            popup->Enable(EFalse);
-            }
-        iOwner->ChangeState(ECandidate);
-        }   
-   else if (aKey == EStdKeyEnter)//enter the characters in the entry pane into the editor
-        {
-        TBuf<KInputPaneLength> currentText;
-        inputPane->GetText(currentText);
-        
-        while(currentText.Find(KSep)> 0)
-            {
-            currentText.Replace(currentText.Find(KSep), 1,KReplace);
-            }
-        
-        
-        if(currentText.Length())
-            {            
-            MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-            fepMan->NewTextL(currentText);
-            fepMan->CommitInlineEditL();
-            if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
-                {
-                fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
-                }
-            }
-            
-        iOwner->FepMan()->TryCloseUiL();  
-          
-        }
-    else if(aLength == EShortKeyPress) // don't want repeats on these keys
-        {
-        iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);            
-        
-        if(iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey ==EStdKeySpace ) //seperator
-            {
-            TInt stringBeforeLength(0);
-            TInt stringAfterLength(0);
-        
-            stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
-            stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length();
-            
-            if (stringBeforeLength != stringAfterLength)
-                {
-                if (ptiengine->GetPhoneticSpelling(1).Length() == 1)
-                    {
-                    //iOwner->FepMan()->UpdateCbaL(R_AVKON_SOFTKEYS_EMPTY);                           iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
-                    iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
-                    }
-                
-                ImplicitlyUpdateSelection();
-                }
-            
-            else
-                {
-                iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-                }            
-            
-            }
-        else
-            {
-            iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-            }
-        }
-    return ret;
-    }
-
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::CommitToneMarkL( TInt aKey )
-    {
-    TBuf<1> ToneMarkBuf;
-    switch ( aKey )
-        {
-        case EPtiKeyQwertyE:
-            ToneMarkBuf.Append( KToneMark3 );
-            break;
-
-        case EPtiKeyQwertyR:
-            ToneMarkBuf.Append( KToneMark4 );
-            break;
-
-        case EPtiKeyQwertyY:
-            ToneMarkBuf.Append( KToneMark2 );
-            break;
-
-        case EPtiKeyQwertyU:
-            ToneMarkBuf.Append( KToneMark5 );
-            break;
-        default:
-            break;
-        }
-    MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
-    fepMan->NewCharacterL(ToneMarkBuf);
-    fepMan->CommitInlineEditL();
-    if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
-        {
-        fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
-        iOwner->FepMan()->TryCloseUiL();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleCommandL
-// Handling Command
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryMiniQwertyZhuyinPhrase::HandleCommandL(
-    TInt aCommandId )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    switch ( aCommandId )
-        {
-        // Handle the event frome command.
-        case EAknSoftkeySelect:
-            //     case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA
-            if ( popup->IsEnabled() )
-                {
-                popup->Enable( EFalse );
-                }
-            iOwner->ChangeState( ECandidate );
-            break;
-        default:
-            TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
-            break;
-        }
-    }
-// End of file   
-