fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp
changeset 40 2cb9bae34d17
parent 31 f1bdd6b078d1
child 49 37f5d84451bd
--- a/fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp	Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1084 +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 TAknFepInputStateEntryPinyinPhraseCreation methods.
- *
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include <PtiEngine.h>                          //CPtiEngine
-#include <PtiUserDicEntry.h>
-#include <avkon.rsg>
-#include <aknfep.rsg>
-
-#include "aknfepinputstatepinyinphrasecreationbase.h"
-#include "AknFepPanic.h"
-#include "AknFepUIManagerStateInterface.h"      //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h"           //MAknFepManagerUIInterface
-#include "AknFepUiCtrlContainerChinese.h"
-#include "AknFepUICtrlPinyinPopup.h"    //Pinyin phrase
-#include "aknfepuictrleditpane.h" 
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepUICtrlInputPane.h"
-
-const TUint16 KToneMarkLib[] = 
-    {
-    0x02C9, 0x02CA, 0x02C7, 0x02CB, 0x02D9
-    };
-
-const TUint16 KDelimiter =0x0027; 
-const TInt KToneMarkMax = 5;
-const TInt KMaxKeystrokeCount = 31;
-const TInt KMaxPhraseCreationCount = 7;
-
-_LIT( KKey2, "2");
-_LIT( KKey3, "3");
-_LIT( KKey4, "4");
-_LIT( KKey5, "5");
-_LIT( KKey6, "6");
-_LIT( KKey7, "7");
-_LIT( KKey8, "8");
-_LIT( KKey9, "9");
-//KMaxPhraseNote means the max phrase is seven
-_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" );
-
-// ---------------------------------------------------------
-// C++ constructor
-// ---------------------------------------------------------
-//
-TAknFepInputStatePinyinPhraseCreationBase::TAknFepInputStatePinyinPhraseCreationBase(
-    MAknFepUIManagerStateInterface* aOwner,
-    MAknFepUICtrlContainerChinese* aUIContainer ) :
-    TAknFepInputStateCandidateBase( aOwner, aUIContainer )
-    {    
-    }
-
-// ---------------------------------------------------------
-// Add keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystroke( TInt aKey )
-    {
-    TBool result = ETrue;
-    TRAPD( ret, result = AddKeystrokeL( aKey ) );
-    if ( KErrNone != ret )
-        {
-        return EFalse;
-        }
-    return result;
-    }
-
-// ---------------------------------------------------------
-// Add tone mark.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMark()
-    {
-    TBool result = ETrue;
-    TRAPD( ret, result = AddToneMarkL() );
-    if ( KErrNone != ret )
-        {
-        return EFalse;
-        }
-    return result;
-    }
-
-// ---------------------------------------------------------
-// get the valid keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystroke()
-    {
-    TBool result = ETrue;
-    TRAPD( ret, result = GetValidKeystrokeL() );
-    if ( KErrNone != ret )
-        {
-        return EFalse;
-        }
-    return result;
-    }
-
-// ---------------------------------------------------------
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::DeleteCurrentKeystroke()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    
-    if ( 0 == index )
-        {
-        return EFalse;
-        }
-    
-    showKeystroke->Delete( index - 1 );
-    editPane->SetCursorIndexOfKeystroke( index - 1 );
-    
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystroke()
-    {
-    TBool result = ETrue;
-    TRAPD( ret, result = ChineseRevertKeystrokeL() );
-    if ( KErrNone != ret )
-        {
-        return EFalse;
-        }
-    return result;
-    }
-
-// ---------------------------------------------------------
-// show info to the eep ctrl.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ShowInfo()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    
-    TBuf<KMaxKeystrokeCount> buf;
-    
-    for ( TInt i = 0; i < chinese->Count(); ++i )
-        {
-        buf.Append( chinese->MdcaPoint( i ) );
-        }
-    
-    for ( TInt i = 0; i < showKeystroke->Count(); ++i )
-        {
-        buf.Append( showKeystroke->MdcaPoint( i ) );
-        }
-    
-    if ( showKeystroke->Count() == 0 )
-        {
-        editPane->SetCursorIndexOfKeystroke( 0 );
-        index = 0;
-        }
-    
-    editPane->SetText( buf, chinese->Count() + index );
-    }
-
-// ---------------------------------------------------------
-// set the show info warning color.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::SetWarningColor()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    TInt showKeystrokeCount = popup->ShowKeystrokeArray()->Count();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    TInt validKeytrokeCount = popup->KeystrokeArray()->Count();
-    if ( 0 == validKeytrokeCount )
-        {
-        editPane->SetHighlight( chineseCount, chineseCount + showKeystrokeCount );
-        }
-    }
-
-// ---------------------------------------------------------
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::GetCandidate( TInt aSelection )
-    {
-    TRAP_IGNORE( GetCandidateL( aSelection ) );
-    }
-
-// ---------------------------------------------------------
-// Change CBA
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ChangeCba()
-    {
-    TRAP_IGNORE( ChangeCbaL() );
-    }
-
-// ---------------------------------------------------------
-// Refresh UI
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::RefreshCandidate()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    CDesCArrayFlat* candidateArray = 
-        uiContainer->CandidatePane()->CandidateArray();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    // have valid keystroke.
-    if ( validKeystroke->Count() > 0 )
-        {
-        uiContainer->SetControlInVisible( ETrue );
-        // set display page for delibrate selection
-        ClearDeliberateSelection();
-        GetCandidate( );
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( ETrue );
-        }
-    else
-        {
-        candidateArray->Reset();
-        if ( KMaxPhraseCreationCount == chineseCount )
-            {
-            uiContainer->SetControlInVisible( ETrue );
-            TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) );
-            }
-        else
-            {
-            uiContainer->SetControlInVisible( EFalse );
-            }
-        
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( EFalse );
-        }    
-        
-    if (  EKeySequenceEdit == iState )
-        {
-        //popup->SetNoneHighlighted();
-        }
-    uiContainer->Enable(ETrue);
-    popup->Enable( validKeystroke->Count() > 0 );    
-    UpdateIndicator();
-    }
-
-// ---------------------------------------------------------
-// Refresh UI
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::RefreshUI(TInt aSelection)
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-    CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    CDesCArrayFlat* candidateArray = 
-        uiContainer->CandidatePane()->CandidateArray();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    // have valid keystroke.
-    if ( validKeystroke->Count() > 0 )
-        {
-        uiContainer->SetControlInVisible( ETrue );
-        popup->SplitPhraseSpellingIntoPages();
-        inputPane->SetText( spelling->MdcaPoint( aSelection ) );
-        // set display page for delibrate selection
-        popup->SetDisplayPage(aSelection);
-        popup->SetPhraseItemTexts();
-        popup->PopupSizeChanged();
-        GetCandidate( aSelection );
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( ETrue );
-        }
-    else
-        {
-        candidateArray->Reset();
-        if ( KMaxPhraseCreationCount == chineseCount )
-            {
-            uiContainer->SetControlInVisible( ETrue );
-            TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) );
-            }
-        else
-            {
-            uiContainer->SetControlInVisible( EFalse );
-            }
-        
-        uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
-        uiContainer->CandidatePane()->SetCandidateBuffer();
-        uiContainer->Enable( ETrue );
-        uiContainer->ShowHorizontalScrollArrows( EFalse );
-        uiContainer->ShowVerticalScrollArrows( EFalse );
-        }    
-        
-    if (  EKeySequenceEdit == iState )
-        {
-        popup->SetNoneHighlighted();
-        }
-    uiContainer->Enable(ETrue);
-    popup->Enable( validKeystroke->Count() > 0 );    
-    UpdateIndicator();
-    }
-
-// ---------------------------------------------------------
-// clear selection.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ClearDeliberateSelection()
-    {
-    // we must have just deleted the last character, 
-    // or we are starting a new pinyin session, so wipe the last deliberate selection
-    TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
-    oldDeliberateSelection = KNullDesC;
-    }
-
-// ---------------------------------------------------------
-// clear the keystroke of PtiEngine.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ClearPtiEngineKeystroke()
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    for ( TInt i = 0; i < KMaxKeystrokeCount; ++i )
-        {
-        ptiengine->DeleteKeyPress();
-        }
-    }
-
-
-// ---------------------------------------------------------
-// Get the code of Keystroke in ITUT.
-// ---------------------------------------------------------
-//
-TInt TAknFepInputStatePinyinPhraseCreationBase::GetKeystrokeCode(
-                                                       TPtiKey& aKey, 
-                                                       const TDesC& aKeystroke )
-    {    
-    if ( aKeystroke.Length() < 1 )
-        {
-        return EKeyStrokeNull;
-        }
-    
-    // the input key is delimiter the return -1.
-    if ( KDelimiter == aKeystroke[0] )
-        {
-        aKey = EPtiKey1;
-        return EKeyDelimiter;
-        }
-    // the input key is tone mark return tone mark.
-    for ( TInt i = 0; i < KToneMarkMax; ++i )
-        {
-        if ( KToneMarkLib[i] == aKeystroke[0] )
-            {
-            return i + 1;
-            }
-        }
-    // the keystroke is 2 - 9.
-    if ( 0 == aKeystroke.Compare( KKey2 ) )
-        {
-        aKey = EPtiKey2;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey3 ) )
-        {
-        aKey = EPtiKey3;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey4 ) )
-        {
-        aKey = EPtiKey4;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey5 ) )
-        {
-        aKey = EPtiKey5;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey6 ) )
-        {
-        aKey = EPtiKey6;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey7 ) )
-        {
-        aKey = EPtiKey7;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey8 ) )
-        {
-        aKey = EPtiKey8;
-        }
-    else if ( 0 == aKeystroke.Compare( KKey9 ) )
-        {
-        aKey = EPtiKey9;
-        }
-    return EkeyNumber;
-    }
-
-
-// ---------------------------------------------------------
-// Append the key to the ptiengine.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AppendKeyPressL( 
-                                                 TPtiKey& aKey,
-                                                 TBool aAddSpellingFlag
-                                                 )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* tempSpelling = popup->TempSpelling();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    CDesCArrayFlat* afterCheck = popup->OptimizeSpelling();
-    
-    tempSpelling->Reset();
-    afterCheck->Reset();
-    TInt stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
-    TInt stringAfterLength = ptiengine->AppendKeyPress(aKey).Length();
-    // the pti can't append key.
-    if ( stringBeforeLength == stringAfterLength )
-        {
-        return EFalse;
-        }
-    // get the spelling by pti.
-    ptiengine->GetPhoneticSpellingsL( *tempSpelling );
-    // delete the phrase spelling.
-    CheckSpellingL( tempSpelling, afterCheck );
-    if ( afterCheck->Count() > 0 )
-        {
-        if ( !aAddSpellingFlag )
-            {
-            for( TInt i = afterCheck->Count() - 1; i >= 0; --i )
-                {
-                spelling->InsertL( 0, afterCheck->MdcaPoint( i ) );
-                }
-            }
-        return ETrue;            
-        }
-    
-    return EFalse;
-    }
-
-// ---------------------------------------------------------
-// Append the tone mark to the ptiengine.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AppendToneMarkL( TInt& aToneMark )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* tempSpelling = popup->TempSpelling();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();    
-    
-    for ( TInt i = 0; i < aToneMark; ++i )
-        {
-        tempSpelling->Reset();
-        ptiengine->IncrementToneMark( ETrue );
-        // get the spelling by pti.
-        ptiengine->GetPhoneticSpellingsL( *tempSpelling );
-        if ( CheckToneMark( aToneMark ) )
-            {
-            break;
-            }
-        }
-    
-    if ( tempSpelling->Count() > 0 )
-        {
-        for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i )
-            {
-            spelling->InsertL( 0, tempSpelling->MdcaPoint( i ) );
-            }
-        return ETrue;
-        }
-    
-    return EFalse;
-    }
-
-// ---------------------------------------------------------
-// check the spelling delete the phrase spelling.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::CheckSpellingL(
-                                               CDesCArrayFlat* aTempSpelling,
-                                               CDesCArrayFlat* aAfterCheck
-                                               )
-    {
-    TBuf<1> buf;
-    buf.Append( KDelimiter );
-    for (TInt i = 0; i < aTempSpelling->Count(); ++i )
-        {
-        if ( KErrNotFound == aTempSpelling->MdcaPoint(i).Find( buf ) )
-            {
-            aAfterCheck->AppendL( aTempSpelling->MdcaPoint(i) );
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// check the tone mark and delete the phrase spelling.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::CheckToneMark( TInt& aToneMark )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* tempSpelling = popup->TempSpelling();
-    TBuf<1> delimiter;
-    delimiter.Append( KDelimiter );
-    
-    for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i )
-        {
-        if ( KErrNotFound != tempSpelling->MdcaPoint( i ).Find( delimiter ) )
-            {
-            tempSpelling->Delete( i );
-            }
-        else
-            {
-            if ( KToneMarkLib[ aToneMark - 1 ] != 
-                tempSpelling->MdcaPoint( i ).Right( 1 )[0] )
-                {
-                tempSpelling->Delete( i );
-                }
-            }
-        }
-    tempSpelling->Compress();
-    return tempSpelling->Count();
-    }
-
-
-// ---------------------------------------------------------
-// Add keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystrokeL( TInt aKey )
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    TBuf<1> key;
-    
-    if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount )
-        {
-        return EFalse;
-        }
-    
-    if ( KMaxPhraseCreationCount == chineseCount )
-        {
-        return EFalse;
-        }
-    
-    switch( (TPtiKey)aKey )
-        {
-        case EPtiKey0:
-            key.Append( KDelimiter );
-            break;
-        case EPtiKey1:
-            key.Append( KDelimiter );
-            break;
-        case EPtiKey2:
-            key.Append( EPtiKey2 );
-            break;
-        case EPtiKey3:
-            key.Append( EPtiKey3 );
-            break;
-        case EPtiKey4:
-            key.Append( EPtiKey4 );
-            break;
-        case EPtiKey5:
-            key.Append( EPtiKey5 );
-            break;
-        case EPtiKey6:
-            key.Append( EPtiKey6 );
-            break;  
-        case EPtiKey7:
-            key.Append( EPtiKey7 );
-            break;
-        case EPtiKey8:
-            key.Append( EPtiKey8 );
-            break;
-        case EPtiKey9:
-            key.Append( EPtiKey9 );
-            break;
-        default:
-            return EFalse;
-        }
-    
-    if ( index > showKeystroke->Count() )
-        {
-        index = showKeystroke->Count();
-        }
-    
-    showKeystroke->InsertL( index, key );
-    editPane->SetCursorIndexOfKeystroke( index + 1 );
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// Add tone mark.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMarkL()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    TBuf<1> key;
-    TInt toneMark( 0 );
-    
-    if ( KMaxPhraseCreationCount == chineseCount )
-        {
-        return EFalse;
-        }
-    
-    if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount )
-        {
-        if ( 0 == index )
-            {
-            return EFalse;
-            }
-        for ( TInt i = 0; i < KToneMarkMax; ++i )
-            {
-            if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] )
-                {
-                toneMark = i + 1;
-                break;
-                }
-            }
-        if ( 0 == toneMark )
-            {
-            return EFalse;
-            }
-        }
-    
-    if ( 0 == index )
-        {
-        key.Append( KToneMarkLib[0] );
-        showKeystroke->InsertL( 0, key );
-        editPane->SetCursorIndexOfKeystroke( 1 );
-        return ETrue;
-        }
-    
-    for ( TInt i = 0; i < KToneMarkMax; ++i )
-        {
-        if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] )
-            {
-            toneMark = i + 1;
-            break;
-            }
-        }
-    
-    if ( 0 == toneMark )
-        {
-        key.Append( KToneMarkLib[0] );
-        showKeystroke->InsertL( index, key );
-        editPane->SetCursorIndexOfKeystroke( index + 1 );
-        }
-    else if ( KToneMarkMax == toneMark )
-        {
-        key.Append( KToneMarkLib[0] );
-        showKeystroke->Delete( index - 1 );
-        showKeystroke->InsertL( index - 1, key );
-        }
-    else
-        {
-        key.Append( KToneMarkLib[toneMark] );
-        showKeystroke->Delete( index - 1 );
-        showKeystroke->InsertL( index - 1, key );
-        }
-    
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-//  check the keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::IsToneMark( const TDesC& aInput )
-    {
-    for ( TInt i = 0; i < KToneMarkMax; ++i )
-        {
-        if ( KToneMarkLib[i] == aInput[0] )
-            {
-            return ETrue;
-            }
-        }
-    return EFalse;
-    }
-// ---------------------------------------------------------
-//  check the keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::CheckKeystroke()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    TBuf<1> buf;
-    buf.Append( KDelimiter );
-    // if the keystroke is null then the keystroke is invalid.
-    if ( 0 == showKeystroke->Count() )
-        {
-        return EFalse;
-        }
-    // if the first keystroke is delimiter then keytroke is invalid. 
-    if ( KDelimiter == showKeystroke->MdcaPoint( 0 )[0] )
-        {
-        return EFalse;
-        }
-    // if the first keystroke is Tone mark then keytroke is invalid.
-    for ( TInt i = 0; i < KToneMarkMax; ++i )
-        {
-        if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( 0 )[0] )
-            {
-            return EFalse;
-            }            
-        }
-    // the first keystroke is not delimiter and tone mark, if the number of keystroke
-    // is not more than two then must the keytroke are all valid.
-    if ( showKeystroke->Count() <= 2 )
-        {
-        return ETrue;
-        }
-    
-    return ETrue;
-    }
-
-// ---------------------------------------------------------
-// get the valid keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystrokeL()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    CDesCArrayFlat* allValidKeystroke = popup->KeystrokeArray();
-    CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
-    TInt allValidKeyLen = allValidKeystroke->Count();
-    TPtiKey key;
-    TInt retCode(0);
-    TBool nextIsToneMark = EFalse;
-    TBuf<1> delimiter;
-    TBuf<KMaxKeystrokeCount> beforeBuf;
-    TBuf<KMaxKeystrokeCount> afterBuf;
-    
-    delimiter.Append( KDelimiter );
-    
-    for ( TInt i = 0; i < allValidKeyLen; ++i )
-        {
-        if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) )
-            {
-            break;
-            }
-        beforeBuf.Append( allValidKeystroke->MdcaPoint( i ) );
-        }
-    
-    spelling->Reset();
-    validKeystroke->Reset();
-    allValidKeystroke->Reset();
-    
-    ClearPtiEngineKeystroke();
-    if ( !CheckKeystroke() )
-        {
-        if ( allValidKeyLen > 0 )
-            {
-            popup->SetValidKeystrokeChange( ETrue );
-            }
-        else
-            {
-            popup->SetValidKeystrokeChange( EFalse );
-            }
-        return EFalse;
-        }
-    
-    // the firts keystroke is key 2 - 9.    
-    for ( TInt i = 0; i < showKeystroke->Count(); ++i )
-        {
-        retCode = GetKeystrokeCode( key, showKeystroke->MdcaPoint( i ) );
-        //the keystroke is delimiter.
-        if ( -1 == retCode )
-            {
-            validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-            allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-            break;
-            }
-        //the keystroke is 2 - 9
-        else if ( 0 == retCode )
-            {
-            //if the next keystroke is tone mark, then current keystroke and 
-            //the next keystroke need to whole check. 
-            if ( i < showKeystroke->Count() - 1 )
-                {
-                TPtiKey keyTmp;
-                if ( GetKeystrokeCode( keyTmp, 
-                    showKeystroke->MdcaPoint( i  + 1) ) > 0 )
-                    {
-                    nextIsToneMark = ETrue;
-                    }
-                }
-            if ( AppendKeyPressL( key, nextIsToneMark ) )
-                {
-                //the next keystroke is not tone mark.
-                if ( !nextIsToneMark )
-                    {
-                    validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-                    allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-                    }
-                }
-            else
-                {
-                break;
-                }
-            }
-        else
-            {
-            if ( AppendToneMarkL( retCode ) )
-                {
-                validKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) );
-                validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-                allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) );
-                allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
-                }
-            break;
-            }
-        }
-    for ( TInt i = 0; i < allValidKeystroke->Count(); ++i )
-        {
-        if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) )
-            {
-            break;
-            }
-        afterBuf.Append( allValidKeystroke->MdcaPoint( i ) );
-        }
-    
-    if ( allValidKeystroke->Count() > 0 )
-        {
-        if ( ( 0 == allValidKeyLen ) ||  
-            ( 0 != afterBuf.Compare( beforeBuf ) ) )
-            {
-            popup->SetValidKeystrokeChange( ETrue );
-            }
-        else
-            {
-            popup->SetValidKeystrokeChange( EFalse );
-            }
-        return ETrue;
-        }
-    
-    return EFalse;
-    }
-
-// ---------------------------------------------------------
-// Revert the current chinse to keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystrokeL()
-    {
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
-    CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
-    CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray();
-    CDesCArrayFlat* chineseKeystroke = 
-        popup->ChooseChineseCharacterArrayKeystroke();
-    TInt index = editPane->GetCursorIndexOfKeystroke();
-    
-    if ( ( 0 != index ) || ( 0 == chinese->Count() ) )
-        {
-        return EFalse;
-        }
-    
-    if ( chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() < 1 )
-        {
-        return EFalse;
-        }
-    
-    for( TInt i = chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).
-        Length() - 1; i >= 0 ; --i )
-        {
-        showKeystroke->InsertL( 0, chineseKeystroke->MdcaPoint( 
-            chineseKeystroke->Count() - 1 ).Mid( i, 1 ) );
-        }
-    
-    editPane->SetCursorIndexOfKeystroke( 
-        chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() );
-    chinese->Delete( chinese->Count() - 1 );
-    chineseKeystroke->Delete( chineseKeystroke->Count() - 1 );
-    
-    // if the show inof's length more than KMaxKeystrokeCount, delete more inof.   
-    for ( TInt i = chinese->Count() + showKeystroke->Count() - KMaxKeystrokeCount; 
-        i > 0; --i )
-        {
-        showKeystroke->Delete( showKeystroke->Count() - 1 );
-        }
-        
-    showKeystroke->Compress();
-    chinese->Compress();
-    chineseKeystroke->Compress();
-    return ETrue;
-    }
-
-
-// ---------------------------------------------------------
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::GetCandidateL( TInt aSelection )
-    {
-    CPtiEngine* ptiengine = iOwner->PtiEngine();
-    MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-    MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-    CDesCArrayFlat* phraseCandidates = 
-        uiContainer->CandidatePane()->CandidateArray();
-    CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-    
-    phraseCandidates->Reset();
-    if ( ( aSelection > spelling->Count() ) || ( 0 == spelling->Count() ) )
-        {
-        return;
-        }
-    extern void CleanArray( TAny* aAny );
-    RPointerArray<HBufC> list;
-    TCleanupItem cleanitem( CleanArray, &list );
-    CleanupStack::PushL( cleanitem );
-    TPtrC curSpell = spelling->MdcaPoint( aSelection );
-    HBufC* retString = ptiengine->GetCandidatesByInputString( 
-                                              spelling->MdcaPoint( aSelection ), 
-                                              list,
-                                              EFalse );
-    
-    CleanupStack::PushL( retString );
-    for (int index = 0; index < ptiengine->PhoneticSpellingCount(); index++)
-        {
-        TPtrC ptr = ptiengine->GetPhoneticSpelling(index + 1);               
-        if (ptr.Length() == curSpell.Length())
-            {
-            ptiengine->SelectPhoneticSpelling(index + 1);
-            ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates);
-            break;
-            }
-        }
-    
-    CleanupStack::PopAndDestroy( retString );
-    CleanupStack::PopAndDestroy(); // cleanitem   
-    }
-
-// ---------------------------------------------------------
-// Change CBA
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ChangeCbaL()
-    {
-    MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
-    TInt keystrokeCount = popup->ShowKeystrokeArray()->Count();
-    TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
-    TInt validKeystrokeCount = popup->InEffectKeystrokeArray()->Count();
-    TInt lastRes = popup->GetLastResouce();
-
-    if ( ( chineseCount == KMaxPhraseCreationCount ) ||
-        ( ( 0 == keystrokeCount ) && ( chineseCount > 1 ) ) )
-        {
-        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 ) && ( 0 != validKeystrokeCount ) )
-        {
-        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 ( 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 );
-        }
-    }
-
-// ---------------------------------------------------------
-// Update Indicator.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::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 );
-        }
-
-    if ( candidatePane->SelectedIndex() == 0
-        && candidatePane->IsFirstPage() )
-        {
-        uiContainer->CandidatePane()->ShowLeftScrollArrows( EFalse );
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowLeftScrollArrows( ETrue );
-        }
-
-    if ( candidatePane->IsLastPage() && (candidatePane->SelectedIndex()
-        == candidatePane->VisibleCandidateCount() - 1 ) )
-        {
-        uiContainer->CandidatePane()->ShowRightScrollArrows( EFalse );
-        }
-    else
-        {
-        uiContainer->CandidatePane()->ShowRightScrollArrows( ETrue );
-        }
-    }
-
-// End of file