fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp
changeset 36 a7632c26d895
parent 35 0f326f2e628e
child 42 b3eaa440ab06
--- a/fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp	Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1286 +0,0 @@
-/*
-* Copyright (c) 2008 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 TAknFepInputStateStrokePhraseCreationBase definition.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-// System includes
-#include <PtiEngine.h>
-#include <avkon.rsg>
-#include <aknfep.rsg>
-#include <PtiUserDicEntry.h>
-#include <aknnotewrappers.h> //CAknWarningNote 
-
-// User includes
-#include "AknFepUIManagerStateInterface.h"
-#include "AknFepUICtrlInputPane.h"
-#include "AknFepUICtrlPinyinPopup.h"        //Pinyin phrase
-#include "aknfepuictrleditpane.h"           //pinyin phrase creation
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepManager.h"
-#include "aknfepuiinputstatestrokephrasebase.h"
-
-// Constant definition
-const TInt KMinCnadidateCount = 1;
-const TInt KMaxPhraseCount = 50;
-const TInt KEnginePhoneticIndex = 1;
-const TInt KMaxPhraseCreationCount = 7;
-const TInt KMaxKeystrokeCount = 31;
-const TInt KKey0Code = 48;
-const TInt KKey1Code = 49;
-const TInt KKey2Code = 50;
-const TInt KKey3Code = 51;
-const TInt KKey4Code = 52;
-const TInt KKey5Code = 53;
-const TInt KKey6Code = 54;
-const TInt KAutoChangeState = 1;
-const TInt KManualChangeState = 0; 
-const TUint16 KDelimiter = 0x2022;
-const TUint16 KStrokeKey1 = 0x4E00;
-const TUint16 KStrokeKey2 = 0x4E28;
-const TUint16 KStrokeKey3 = 0x4E3F;
-const TUint16 KStrokeKey4 = 0x4E36;
-const TUint16 KStrokeKey5 = 0x4E5B;
-const TUint16 KStrokeKey6 = 0x003F;
-
-const TUint16 KSegment = 0x0020;
-
-_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" );
-
-const TKeyMap StrokeMap[] = 
-    {
-    {KDelimiter, KKey0Code},
-    {KStrokeKey1, KKey1Code},
-    {KStrokeKey2, KKey2Code},
-    {KStrokeKey3, KKey3Code},
-    {KStrokeKey4, KKey4Code},
-    {KStrokeKey5, KKey5Code},
-    {KStrokeKey6, KKey6Code}
-    };
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase
-// C++ default constructor
-// ---------------------------------------------------------------------------
-//
-TAknFepInputStateStrokePhraseBase::TAknFepInputStateStrokePhraseBase(
-    MAknFepUIManagerStateInterface* aOwner,
-    MAknFepUICtrlContainerChinese* aUIContainer)
-    :TAknFepInputStateChineseBase(aOwner, aUIContainer)
-    {
-    if ( iOwner->PtiEngine()->InputMode() != EPtiEngineStrokeByPhrase )
-        {
-        iOwner->PtiEngine()->SetInputMode( EPtiEngineStrokeByPhrase );
-        }
-    iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount );
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    uiContainer->SetFepMan( iOwner->FepMan() );
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleKeyL
-// Handle system key press event.
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::HandleKeyL( 
-                                        TInt aKey, 
-                                        TKeyPressLength aLength )
-    {    
-    switch( aKey )
-        {
-        case EKeyBackspace:
-            {
-            if ( CheckKeyNeedRepeat( aLength ) )
-                {
-                HandleKeyBackspaceL( aLength );
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                }
-            break;
-            }
-        case EKeyUpArrow:
-            {
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            break;
-            }
-        case EKeyDownArrow:
-            {
-            if ( EStrokeSequenceEdit == iState )
-                {
-                if ( CheckFirstGroupStroke() )
-                    {
-                    UIContainer()->PinyinPopupWindow()->SetChangeState( ETrue );
-                    iOwner->ChangeState( EEntry );
-                    }
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                }
-            break;
-            }
-        case EKeyLeftArrow:
-            {
-            if ( EStrokeSequenceEdit == iState )
-                {
-                MoveCursorLeft();
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                }
-            break;
-            }    
-        case EKeyRightArrow:
-            {
-            if ( EStrokeSequenceEdit == iState )
-                {
-                MoveCursorRight();
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-                }
-            break;
-            }
-        case EKeyOK:
-        case EKeyCBA1:
-            {
-            if ( CheckKeyNeedRepeat( aLength ) )
-                {
-                HandleKeyCBA1OrKeyOKL( aLength );
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-                }
-            break;
-            }
-        case EKeyCBA2:
-            {
-            iOwner->FepMan()->TryCloseUiL();
-            break;
-            }
-        default:
-            {
-            if ( ( EShortKeyPress == aLength ) && 
-                ( iOwner->IsValidChineseInputKey( aKey ) ) )
-                {
-                HandleDefaultKeyL( aKey );
-                }
-            else
-                {
-                iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-                }
-            break;
-            }
-        }
-    
-    return ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::RefreshUI
-// Update input window.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::RefreshUI( TBool aRefresh )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    // get cursor position
-    if ( aRefresh )
-        {
-        TPoint baseLine;
-        TInt height(0);
-        TInt ascent(0);
-        TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent));
-        if (ret == KErrNone)
-            {
-            uiContainer->SetContainerPosition(baseLine, height);    
-            }
-        }
-    
-    ShowInfoOnEEPPane();
-    if ( !CheckAllKeystroke() )
-        {
-        SetWarningColor();
-        }
-    ShowInfoOnCandidatePane();
-    UpdateIndicator();
-    TRAP_IGNORE( ChangeCbaL() );
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation
-// Handle horizontal navigation.
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::CheckFirstGroupStroke()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    CDesCArrayFlat* keystroke = uiContainer->
-        PinyinPopupWindow()->KeystrokeArrayForStroke();
-    
-    TInt stringBeforeLength = 0;
-    TInt stringAfterLength = 0;
-    TInt keyCode = 0;
-    TInt pos = 0;
-    if ( 0 == keystroke->Count() )
-        {
-        return EFalse;
-        }
-    
-    ClearPtiEngineKeystroke();
-    TBuf<1> delimiter;
-    delimiter.Append( KDelimiter );
-    if ( 0 == keystroke->Find( delimiter, pos ) )
-        {
-        if ( 0 == pos )
-            {
-            return EFalse;
-            }
-        }
-    else
-        {
-        pos = keystroke->Count();
-        }
-    
-    for ( TInt i = 0; i < pos; ++i )
-        {
-        GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) );
-        stringBeforeLength = 
-            ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length();
-        stringAfterLength = 
-            ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
-        //the keystroke is invalid.
-        if ( stringBeforeLength == stringAfterLength )
-            {
-            ClearPtiEngineKeystroke();
-            return EFalse;
-            }
-        } 
-    return ETrue;
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL
-// Handle KeyBackspace event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL(
-                                                    TKeyPressLength aLength )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke();
-    TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count();
-    TBool firstGroup = CheckFirstGroupStroke();
-    
-    if ( ( 0 == index ) && ( phraseCount != 0 ) )
-        {
-        RevertPhraseToKeystrokeL();
-        }
-    else if ( ( 0 == index ) && ( keystroke->Count() > 0 ) )
-        {
-        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-        return;
-        }
-    else
-        {
-        if ( !DeleteKeystroke() )
-            {
-            iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-            return;
-            }
-        }
-    
-    if ( popup->ChooseChineseCharacterArrayForStroke()->Count() == 0 )
-        {
-        iOwner->FepMan()->PhraseCreation( EFalse );
-        }
-    
-    //if the keystroke is null and phrase is null then close input window.
-    if ( ( 0 == phraseCount ) && ( keystroke->Count() == 0 ) )
-        {
-        iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
-        if ( aLength == ELongKeyPress )
-            {
-            iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue );
-            }
-        return;
-        }
-    
-    //Auto change from EStrokeSequenceEdit state to EEntry state. 
-    if ( EStrokeSequenceEdit == iState )
-        {
-        if ( ( KAutoChangeState == popup->GetState() ) && 
-              ( !firstGroup ) && CheckFirstGroupStroke() )
-            {
-            popup->SetChangeState( EFalse );
-            iOwner->ChangeState( EEntry );
-            return;
-            }
-        }
-    
-    //Auto change from EEntry state to EStrokeSequenceEdit state.
-    if ( EEntry == iState )
-        {
-        if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) )
-            {
-            popup->SetChangeState( EFalse );
-            popup->SetState( KAutoChangeState );
-            iOwner->ChangeState( EStrokeSequenceEdit );
-            return;
-            }
-        }
-    
-    RefreshUI();
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntryL
-// Entry handle CBA1 or OK key press event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntry(
-                                                    TKeyPressLength aLength )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    TBool state = ETrue;
-    if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
-        {
-        state = EFalse;
-        }
-    else
-        {
-        popup->SetChangeState( EFalse );
-        }
-    
-    if ( state )
-        {
-        popup->SetChangeState( ETrue );
-        iOwner->ChangeState( ECandidate );        
-        }    
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL
-// Edit state handle CBA1 or OK key press event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke();
-    CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke();
-    TBuf<KMaxPhraseCreationCount> phraseCreated;
-    if ( (phrase->Count() >= 2 ) && ( 0 == keystrokeArray->Count() ) )
-        {
-        //commit the chinese character.
-        for (TInt i = 0; i < phrase->Count(); ++i )
-            {
-            phraseCreated.Append( phrase->MdcaPoint( i ) );
-            }
-        AddPhraseToDB( phraseCreated );
-        iOwner->FepMan()->NewTextL( phraseCreated );
-        iOwner->FepMan()->CommitInlineEditL();
-        iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
-        }
-    else if ( CheckFirstGroupStroke() )
-        {
-        popup->SetState( KManualChangeState );
-        popup->SetChangeState( ETrue );
-        iOwner->ChangeState( EEntry );
-        }
-    else
-        {
-        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-        }
-    
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL
-// Handle CBA1 or OK key press event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL(
-                                                    TKeyPressLength aLength )
-    {
-    if ( EStrokeSequenceEdit == iState )
-        {
-        HandleKeyCBA1OrKeyOKEditL();
-        }
-    else if ( EEntry == iState )
-        {
-        HandleKeyCBA1OrKeyOKEntry( aLength );
-        }
-    else
-        {
-        iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL
-// Handle default key press event.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL( TInt aKey )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    TBool firstGroup = CheckFirstGroupStroke();
-    
-    if ( !AddKeystrokeL( aKey ) )
-        {
-        iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
-        return;
-        }
-    
-    //Auto change from EStrokeSequenceEdit state to EEntry state. 
-    if ( EStrokeSequenceEdit == iState )
-        {
-        if ( ( KAutoChangeState == popup->GetState() ) && 
-              ( !firstGroup ) && CheckFirstGroupStroke() )
-            {
-            popup->SetChangeState( ETrue );
-            iOwner->ChangeState( EEntry );
-            return;
-            }
-        }
-    
-    //Auto change from EEntry state to EStrokeSequenceEdit state.
-    if ( EEntry == iState )
-        {
-        if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) )
-            {
-            popup->SetState( KAutoChangeState );
-            popup->SetChangeState( ETrue );
-            iOwner->ChangeState( EStrokeSequenceEdit );
-            return;
-            }
-        }
-    
-    RefreshUI();
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP
-// Show the showinfo on the EEP ctrl.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::ShowInfoOnEEPPane()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke();
-    CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    TBuf<KMaxKeystrokeCount> showInfo;
-    
-    for (TInt i = 0; i < phrase->Count(); ++i )
-        {
-        showInfo.Append( phrase->MdcaPoint( i ) );
-        }
-
-    for (TInt ii = 0; ii < keystroke->Count(); ++ii )
-        {
-        showInfo.Append( keystroke->MdcaPoint( ii ) );
-        }
-    
-    editPane->SetText( showInfo, phrase->Count() + index );
-    if ( EStrokeSequenceEdit == iState )
-        {
-        editPane->ActiveCursor();
-        }
-    else if ( EEntry == iState )
-        {
-        editPane->DeactiveCursor();
-        }
-    else
-        {
-        editPane->DisableCursor();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP
-// Show the showinfo on the EEP ctrl.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::ShowInfoOnCandidatePane()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    uiContainer->SetControlInVisible( ETrue );
-    CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray();
-    if ( KMaxPhraseCreationCount == uiContainer->PinyinPopupWindow()->
-            ChooseChineseCharacterArrayForStroke()->Count() )
-        {
-        phrase->Reset();
-        TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) );
-        uiContainer->SetControlInVisible( ETrue );
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( EFalse );
-        }
-    
-    TRAP_IGNORE( GetCandidateL() );
-    if ( phrase->Count() > 0 )
-        {
-        // layout candidate and fill candidate buffer for first display page
-        uiContainer->SetControlInVisible( ETrue );
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowVerticalScrollArrows( ETrue );
-        }
-    else
-        {
-        uiContainer->SetControlInVisible( EFalse );
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( EFalse );
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::GetShowKeystroke
-//Handle horizontal navigation.
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::GetShowKeystroke(
-                                                        TInt aKey, 
-                                                        TDes& aKeystroke )
-    {
-    TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] );
-    for ( TInt i = 0; i < count ; i++ )
-        {
-        if (aKey == StrokeMap[i].iKeyCode)
-            {
-            aKeystroke.Append(StrokeMap[i].iValue);
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation
-//Handle horizontal navigation.
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation(
-                                                                   TInt aKey )
-    {
-    MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
-    TBool response = EFalse;
-
-    // Do navigation...
-    if (aKey == EKeyLeftArrow)
-        {        
-        if(!candidatePane->SelectPrev())
-            {
-            candidatePane->SetCandidateBuffer();
-            candidatePane->SelectLastPhrase();
-            }
-        response = ETrue;
-        }
-    else if (aKey == EKeyRightArrow)
-        {              
-        if(!candidatePane->SelectNext())
-            {
-            candidatePane->SetCandidateBuffer();
-            candidatePane->SelectFirstPhrase();
-            }
-        response = ETrue;
-        }
-        
-    if (response)
-        {
-        UpdateIndicator();
-        }   
-             
-    return response;
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::UpdateIndicator
-// Update Indicator.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::UpdateIndicator()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();        
-    MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
-    
-    if ( candidatePane->IsFirstPage() )
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse );
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue );
-        }
-
-    if ( candidatePane->IsLastPage() )
-        {
-        uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse );
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue );
-        }
-    }      
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::DeleteKeystroke
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::DeleteKeystroke()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    
-    if ( ( 0 == index ) || ( keystrokeArray->Count() == 0 ) )
-        {
-        return EFalse;
-        }
-    
-    if ( 1 == index )
-        {
-        keystrokeArray->Delete( 0 );
-        editPane->SetCursorIndexOfKeystroke( 0 );
-        editPane->Reset();
-        }
-    else if ( index >= keystrokeArray->Count() )
-        {
-        keystrokeArray->Delete( keystrokeArray->Count() - 1 );
-        editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() );
-        }
-    else
-        {
-        keystrokeArray->Delete( index - 1 );
-        editPane->SetCursorIndexOfKeystroke( index - 1 );
-        }
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::AddPhraseToDB
-// Add phrase to DB.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::AddPhraseToDB( 
-                                                     const TDesC& aPhraseAdd )
-    {   
-    TPtiUserDictionaryEntry addUdbEntry( aPhraseAdd );
-    //Add the phrase to the DB by PTI Engine
-    iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry );
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::RefreshCandidate
-// Refresh candidate
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::RefreshCandidate()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    uiContainer->CandidatePane()->SetCandidateBuffer();
-    uiContainer->Enable( ETrue );
-
-    TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && 
-            uiContainer->CandidatePane()->IsFirstPage());
-    TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length();
-    TBool showArrows = multiplePages || bufLength > KMinCnadidateCount;
-
-    uiContainer->ShowHorizontalScrollArrows( showArrows );
-    uiContainer->ShowVerticalScrollArrows( multiplePages );
-
-    uiContainer->CandidatePane()->SelectFirstPhrase();
-    UpdateIndicator();
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat
-//  Check key whether need repeat.
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat( TKeyPressLength aLength )
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
-        {
-        return EFalse;
-        }
-    else
-        {
-        popup->SetChangeState( EFalse );
-        }
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke
-// clear the ptiengine keystroke;
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke()
-    {
-    iOwner->PtiEngine()->ClearCurrentWord();
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::AddKeystrokeL
-// Add keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::AddKeystrokeL( TInt aKey )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke();
-    TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    
-    if ( phraseCount + keystrokeArray->Count() >= KMaxKeystrokeCount )
-        {
-        return EFalse;
-        }
-    
-    TBuf<1> keystroke;
-    GetShowKeystroke( aKey, keystroke );
-    if ( index >= keystrokeArray->Count() )
-        {
-        keystrokeArray->AppendL( keystroke );
-        editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() );
-        }
-    else
-        {
-        keystrokeArray->InsertL( index, keystroke );
-        editPane->SetCursorIndexOfKeystroke( index + 1 );
-        }
-    return ETrue;
-    }
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::GetCandidateL
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::GetCandidateL()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* phraseCandidates = 
-        uiContainer->CandidatePane()->CandidateArray();
-    CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke();
-    phraseCandidates->Reset();
-    TBuf<KMaxKeystrokeCount> buf;
-    TBuf<1> delimiter;
-    delimiter.Append( KDelimiter );
-    if ( !CheckFirstGroupStroke() )
-        {
-        return;
-        }
-    else if ( CheckAllKeystroke() )
-        {
-        for( TInt i = 0; i < keystroke->Count(); ++i )
-            {
-            buf.Append( keystroke->MdcaPoint( i ) );
-            }
-        }
-    else
-        {
-        TInt pos = 0;
-        if ( 0 == keystroke->Find( delimiter,pos ) )
-            {
-            for( TInt i = 0; i < pos; ++i )
-                {
-                buf.Append( keystroke->MdcaPoint( i ) );
-                }
-            }
-        else
-            {
-            for( TInt i = 0; i < keystroke->Count(); ++i )
-                {
-                buf.Append( keystroke->MdcaPoint( i ) );
-                }
-            }
-        }
-    extern void CleanArray( TAny* aAny );
-    RPointerArray<HBufC> list;
-    TCleanupItem cleanitem( CleanArray, &list );
-    CleanupStack::PushL( cleanitem );
-    HBufC* retString = ptiengine->GetCandidatesByInputString( 
-                                              buf, 
-                                              list,
-                                              EFalse );
-    
-    delete retString;
-    retString = NULL;
-    
-    for ( TInt i = 0; i < list.Count(); ++i )
-        {
-        phraseCandidates->AppendL( *(list[i]) );
-        }
-    CleanupStack::PopAndDestroy();   
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::GetKeystrokeCode
-// get Code of the key stroke. 
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::GetKeystrokeCode(
-                                                     TInt& aKey, 
-                                                     const TDesC& aKeystroke )
-    {
-    TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] );
-    for ( TInt i = 0; i < count ; i++ )
-        {
-        TBuf<1> buf;
-        buf.Append(StrokeMap[i].iValue);
-        if (0 == aKeystroke.Compare(buf))
-            {
-            aKey = StrokeMap[i].iKeyCode;
-            break;
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::CheckAllKeystroke
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateStrokePhraseBase::CheckAllKeystroke()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    CDesCArrayFlat* keystrokeArray = uiContainer->
-        PinyinPopupWindow()->KeystrokeArrayForStroke();
-    
-    TInt chineseCount = uiContainer->PinyinPopupWindow()->
-        ChooseChineseCharacterArrayForStroke()->Count();
-    TInt stringBeforeLength = 0;
-    TInt stringAfterLength = 0;
-    TInt keyCode = 0;
-    TInt delimiterCount = 0; 
-    TBuf<1> delimiter;
-    delimiter.Append( KDelimiter );
-    if ( chineseCount > 0 )
-        {
-        return EFalse;
-        }
-    
-    if ( keystrokeArray->Count() > 0 )
-        {
-        if ( 0 == keystrokeArray->MdcaPoint( 0 ).Compare( delimiter ) )
-            {
-            return EFalse;
-            }
-        }
-    ClearPtiEngineKeystroke();
-    for ( TInt i = 0; i < keystrokeArray->Count(); ++i )
-        {
-        if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) )
-            {
-            delimiterCount = delimiterCount + 1;
-            }
-        GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) );
-        stringBeforeLength = 
-            ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length();
-        stringAfterLength = 
-            ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
-
-        if ( stringBeforeLength == stringAfterLength )
-            {
-            ClearPtiEngineKeystroke();
-            return EFalse;
-            }
-        }
-    if ( delimiterCount >= KMaxPhraseCreationCount )
-        {
-        return EFalse;
-        }
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL
-// Revert the phrase to keystroke.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke();
-    CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke();
-    CDesCArrayFlat* phraseStroke = 
-        popup->ChooseChineseCharacterArrayKeystrokeForStroke();
-
-    TBuf<KMaxKeystrokeCount> buf;
-    if ( ( phrase->Count() == 0 ) || ( phraseStroke->Count() == 0 ) )
-        {
-        return;
-        }
-    
-    buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) );
-    
-    for ( TInt i = buf.Length() - 1; i >= 0; --i )
-        {
-        keystrokeArray->InsertL( 0, buf.Mid( i, 1 ) );
-        }
-    phrase->Delete( phrase->Count() - 1 );
-    phraseStroke->Delete( phraseStroke->Count() - 1 );
-    
-    TInt leng = phrase->Count() + keystrokeArray->Count();
-    if ( leng > KMaxKeystrokeCount )
-        {
-        for ( TInt i = 0; i < leng - KMaxKeystrokeCount; ++i )
-            {
-            keystrokeArray->Delete( keystrokeArray->Count() - 1 );
-            }
-        }
-    editPane->SetCursorIndexOfKeystroke( buf.Length() );
-    keystrokeArray->Compress();
-    phrase->Compress();
-    phraseStroke->Compress();
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::SetWarningColor
-// Set warning color.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::SetWarningColor()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    CDesCArrayFlat* keystrokeArray = UIContainer()->
-        PinyinPopupWindow()->KeystrokeArrayForStroke();
-    MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
-    TInt phraseCount = UIContainer()->PinyinPopupWindow()->
-        ChooseChineseCharacterArrayForStroke()->Count();
-
-    TInt indexStart = phraseCount;
-    TInt keyCode = 0;
-    TInt stringBeforeLength = 0;
-    TInt stringAfterLength = 0;
-    TInt keystrokeCount = 0;
-    TInt validKeystrokeCountOfPti = 0;
-    TBool valid = ETrue;
-    TInt delimiterCount = 0;
-    TInt delimiterADD = 0;
-    TBuf<1> delimiter;
-    delimiter.Append( KDelimiter );
-    ClearPtiEngineKeystroke();
-
-    for ( TInt i = 0; i < keystrokeArray->Count(); ++i )
-        {
-        keystrokeCount = keystrokeCount + 1;
-        if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount )
-            {
-            break;
-            }
-        if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) )
-            {
-            delimiterADD = i;
-            delimiterCount = delimiterCount + 1;
-            }
-        GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) );
-        stringBeforeLength = ptiengine->GetPhoneticSpelling(
-            KEnginePhoneticIndex).Length();
-        stringAfterLength = 
-            ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
-
-        if ( stringBeforeLength == stringAfterLength )
-            {
-            valid = EFalse;
-            }
-        else if ( valid )
-            {
-            validKeystrokeCountOfPti = validKeystrokeCountOfPti + 1;
-            }
-
-        if ( ( i == keystrokeArray->Count() - 1 ) && ( KKey0Code != keyCode )
-            && ( 1 != keystrokeCount ) && ( !valid ) )
-            {
-            editPane->SetHighlight( indexStart, indexStart + keystrokeCount - 1 );
-            validKeystrokeCountOfPti = 0;
-            keystrokeCount = 0;
-            valid = ETrue;
-            }
-
-        if ( KKey0Code == keyCode )
-            {
-            ClearPtiEngineKeystroke();
-            if ( 0 == i )
-                {
-                editPane->SetHighlight( indexStart, indexStart
-                    + keystrokeCount - 1 );
-                indexStart = phraseCount + i + 1;
-                validKeystrokeCountOfPti = 0;
-                keystrokeCount = 0;
-                valid = ETrue;
-                }
-            else
-                {
-                if ( ( 0 == keystrokeArray->MdcaPoint( i ).
-                Compare( delimiter ) ) && ( 0
-                    == keystrokeArray->MdcaPoint( i - 1 ).
-                    Compare( delimiter ) ) )
-                    {
-                    editPane->SetHighlight( indexStart, indexStart
-                        + keystrokeCount - 1 );
-                    indexStart = phraseCount + i + 1;
-                    validKeystrokeCountOfPti = 0;
-                    keystrokeCount = 0;
-                    valid = ETrue;
-                    }
-                else
-                    {
-                    if (  ( !valid ) && ( 1 != keystrokeCount ) && 
-                        ( validKeystrokeCountOfPti < keystrokeCount - 1 ) )
-                        {
-                        editPane->SetHighlight( indexStart, indexStart
-                            + keystrokeCount - 1 );
-                        indexStart = phraseCount + i + 1;
-                        validKeystrokeCountOfPti = 0;
-                        keystrokeCount = 0;
-                        valid = ETrue;
-                        }
-                    else
-                        {
-                        indexStart = phraseCount + i + 1;
-                        validKeystrokeCountOfPti = 0;
-                        keystrokeCount = 0;
-                        valid = ETrue;
-                        }
-                    }
-                }
-            }
-        }
-    
-    if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount )
-        {
-        editPane->SetHighlight( 
-                phraseCount + delimiterADD, 
-                phraseCount + keystrokeArray->Count() );
-        }
-
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::SetWarningColor
-// Set warning color.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::ChangeCbaL()
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count();
-    TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count();
-    TInt lastRes = popup->GetLastResouce();
-    
-    TBool first = CheckFirstGroupStroke();
-    CheckAllKeystroke();
-    if ( phraseCount == KMaxPhraseCreationCount )
-        {
-        if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE )
-            {
-            return;
-            }
-        //User cba done-done-cancel
-        iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
-        popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
-        }
-    else if ( 0 != keystrokeCount && first )
-        {
-        if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT )
-            {
-            return;
-            }
-        //User cba select-select-cancel
-        iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT );
-        popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT );
-        }
-    else if ( phraseCount > 1 && 0 == keystrokeCount )
-        {
-        if ( lastRes == R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE )
-            {
-            return;
-            }
-        //User cba done-done-cancel
-        iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
-        popup->SetLastResouce( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
-        }
-    else
-        {
-        if ( lastRes == R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY )
-            {
-            return;
-            }
-        iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY );
-        popup->SetLastResouce( R_AKNFEP_SOFTKEYS__PHRASE_CREATION_EMPTY_CANCEL_EMPTY );
-        }
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::MoveCursorLeft
-// Move the cursor to Left.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::MoveCursorLeft()
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
-    TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    if ( 0 == keystrokeCount )
-        {
-        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-        return;
-        }
-    else
-        {
-        popup->SetState( KManualChangeState );
-        }
-    
-    if ( index > 1 )
-        {
-        editPane->SetCursorIndexOfKeystroke( index - 1 );
-        editPane->MoveCursorLeft();
-        }
-    else
-        {
-        if ( 1 == index )
-            {
-            editPane->SetCursorIndexOfKeystroke( 0 );
-            }
-        else
-            {
-            editPane->SetCursorIndexOfKeystroke( keystrokeCount );
-            }
-        ShowInfoOnEEPPane();
-        if ( !CheckAllKeystroke() )
-            {
-            SetWarningColor();
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::MoveCursorRight
-// Move the cursor to Right.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::MoveCursorRight()
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
-    TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    if ( 0 == keystrokeCount )
-        {
-        iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
-        return;
-        }
-    else
-        {
-        popup->SetState( KManualChangeState );
-        }
-    
-    if ( index < keystrokeCount )
-        {
-        editPane->SetCursorIndexOfKeystroke( index + 1 );
-        editPane->MoveCursorRight();
-        }
-    else
-        {
-        editPane->SetCursorIndexOfKeystroke( 0 );
-        ShowInfoOnEEPPane();
-        if ( !CheckAllKeystroke() )
-            {
-            SetWarningColor();
-            }
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateStrokePhraseBase::GetNewCandidatesL 
-// Get new candidate
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateStrokePhraseBase::GetNewCandidatesL(const TDesC& aSource, 
-                                                    RPointerArray<HBufC>& aList)
-    {
-    TInt start = 0;
-    TInt length = 0;
-
-    for (TInt ii = 0; ii < aSource.Length(); ii++)
-        {
-        if (aSource[ii] == KSegment)
-            {
-            TPtrC segment(aSource.Ptr() + start, length);
-            aList.AppendL(segment.AllocL());
-            start += (length + 1);
-            length = 0;
-            }
-        else
-            {
-            length++;
-            }
-        }
-
-    if (length)
-        {
-        TPtrC segm(aSource.Ptr() + start, length);
-        aList.AppendL(segm.AllocL());
-        }
-    }
-
-// End of file