--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/aknfepuiinputstatezhuyinphrasecreationbase.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,632 @@
+/*
+* 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 TAknFepInputStateEntryZhuyinPhraseCreation methods.
+ *
+*/
+
+
+
+
+
+
+
+
+
+
+
+
+#include <PtiEngine.h> //CPtiEngine
+#include <avkon.rsg>
+#include <AknFep.rsg>
+
+#include "aknfepuiinputstatezhuyinphrasecreationbase.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"
+#include "aknfepzhuyinkeyhandlerinterface.h" //MZhuyinKeyHandler
+#include "AknFepZhuyinAnalyser.h"
+#include "aknfepzhuyinconvertion.h" //TZhuyinSymbolsMethods
+
+_LIT( KStrokeManualSeparator, "\x002E");
+_LIT( KToneMark1, "\x0020" );
+_LIT( KToneMark2, "\x02CA" );
+_LIT( KToneMark3, "\x02C7" );
+_LIT( KToneMark4, "\x02CB" );
+_LIT( KToneMark5, "\x02D9" );
+
+const TInt KMaxBufLen = 100;
+const TInt KMaxKeystrokeCount = 100;
+const TInt KMaxInputLength = 31;
+const TInt KMaxPhraseCreationCount = 7;
+
+// ---------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------
+//
+TAknFepInputStateZhuyinPhraseCreationBase::TAknFepInputStateZhuyinPhraseCreationBase(
+ MAknFepUIManagerStateInterface* aOwner,
+ MAknFepUICtrlContainerChinese* aUIContainer ) :
+ TAknFepInputStateCandidateBase( aOwner, aUIContainer )
+ {
+ iState = EEntry;
+
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
+
+ uiContainer->FocusCandidatePane(EFalse);
+
+ TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
+ uiContainer->CandidatePane()->IsFirstPage());
+ TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length();
+ TBool showHorizontalScrollArrows = multiplePages || bufLength>1;
+
+ uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows);
+ uiContainer->ShowVerticalScrollArrows(multiplePages);
+ uiContainer->FocusCandidatePane(ETrue);
+ candidatePane->SetHighlighted(ETrue);
+ candidatePane->ShowCandidateOrdinals(EFalse);
+ candidatePane->SelectFirstPhrase();
+ }
+
+TBool TAknFepInputStateZhuyinPhraseCreationBase::AddKeystrokeL( TInt aKey )
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols();
+ TInt chineseCount = popup->ChineseCharsDisped()->Count();
+ TInt currentIndex = editPane->GetCursorIndexOfKeystroke();
+ TBuf<1> buf;
+ TBuf<KMaxBufLen> showbuf;
+ showbuf = uiContainer->PinyinPopupWindow()->GetEEPContent();
+
+ TInt ret = iOwner->ZhuyinKeyHandler()->GetZhuyinSymbol( (TPtiKey)aKey, buf );
+ TInt showbufLen = showbuf.Length();
+
+ if ( showbufLen >= KMaxInputLength )
+ {
+ if ( ( 0 == currentIndex ) || ( 1 == ret ) )
+ {
+ iOwner->ZhuyinKeyHandler()->Reset();
+ return EFalse;
+ }
+ return ReplaceKeystrokeL( currentIndex,
+ chineseCount,
+ buf,
+ zhuyinSymbol
+ );
+ }
+
+ if ( showbufLen == KMaxInputLength - 1 )
+ {
+ if ( 0 == currentIndex )
+ {
+ iOwner->ZhuyinKeyHandler()->Reset();
+ return EFalse;
+ }
+ else if ( 1 == ret )
+ {
+ zhuyinSymbol->InsertL( currentIndex, buf );
+ if ( CheckKeystrokeCountL( chineseCount, zhuyinSymbol ) )
+ {
+ editPane->SetCursorIndexOfKeystroke( currentIndex + 1 );
+ return ETrue;
+ }
+ else
+ {
+ iOwner->ZhuyinKeyHandler()->Reset();
+ zhuyinSymbol->Delete( currentIndex );
+ return EFalse;
+ }
+ }
+ else
+ {
+ return ReplaceKeystrokeL( currentIndex,
+ chineseCount,
+ buf,
+ zhuyinSymbol
+ );
+ }
+ }
+
+ if ( ( 0 == currentIndex ) &&
+ ( KMaxInputLength <= showbufLen ) )
+ {
+ return EFalse;
+ }
+ else if ( ( 0 != currentIndex ) &&
+ ( KMaxInputLength <= showbufLen ) )
+ {
+ if ( 0 == ret )
+ {
+ zhuyinSymbol->Delete( currentIndex - 1 );
+ zhuyinSymbol->InsertL( currentIndex - 1, buf );
+ return ETrue;
+ }
+ else
+ {
+ iOwner->ZhuyinKeyHandler()->Reset();
+ return EFalse;
+ }
+ }
+ else if ( ( 0 == currentIndex ) &&
+ ( KMaxInputLength > showbufLen ) )
+ {
+ zhuyinSymbol->InsertL( currentIndex, buf );
+ editPane->SetCursorIndexOfKeystroke( currentIndex + 1 );
+ return ETrue;
+ }
+ else if ( ( 0 != currentIndex ) &&
+ ( KMaxInputLength > showbufLen ) )
+ {
+ if ( 0 == ret )
+ {
+ zhuyinSymbol->Delete( currentIndex - 1 );
+ zhuyinSymbol->InsertL( currentIndex - 1, buf );
+ return ETrue;
+ }
+ else if ( 1 == ret )
+ {
+ zhuyinSymbol->InsertL( currentIndex, buf );
+ editPane->SetCursorIndexOfKeystroke( currentIndex + 1 );
+ return ETrue;
+ }
+ }
+ return ETrue;
+ }
+
+TBool TAknFepInputStateZhuyinPhraseCreationBase::AddToneMarkL()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler();
+ CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols();
+
+ TBuf<1> baseBuf;
+ TBuf<1> buf;
+ baseBuf.Zero();
+ TInt strokePos = editPane->GetCursorIndexOfKeystroke();
+
+ TBuf<KMaxBufLen> showbuf;
+ showbuf = popup->GetEEPContent();
+
+ if ( strokePos > 0 )
+ {
+ baseBuf.Append( zhuyinSymbols->MdcaPoint( strokePos - 1 ) );
+ }
+ TInt insert = zhuyinKeyHandler->GetToneMark( baseBuf, buf );
+ if ( insert == 0 )
+ {
+ zhuyinSymbols->Delete ( strokePos - 1, 1 );
+ zhuyinSymbols->InsertL(strokePos - 1, buf);
+ }
+ // for insert
+ else if ( insert == 1)
+ {
+ if ( showbuf.Length() >= KMaxInputLength )
+ {
+ return EFalse;
+ }
+ zhuyinSymbols->InsertL(strokePos, buf);
+ editPane->SetCursorIndexOfKeystroke(strokePos + 1);
+ }
+ return ETrue;
+ }
+
+TBool TAknFepInputStateZhuyinPhraseCreationBase::DeleteZhuyinSymbolOrChinese()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
+ CDesCArrayFlat* zhuyinSymbols = popup->ZhuyinSymbols();
+ CDesCArrayFlat* chineseDisped = popup->ChineseCharsDisped();
+ CDesCArrayFlat* zhuyinSymbolsForChinese = popup->ZhuyinSymbolsForChineseCharsDisped();
+ TInt keyStrokePos = editPane->GetCursorIndexOfKeystroke();
+
+ if ( 1 == keyStrokePos )
+ {
+ editPane->Reset();
+ }
+
+ if ( keyStrokePos != 0 )
+ {
+ TZhuyinSymbolsMethods::DeleteZhuyinSymbol(
+ zhuyinSymbols,
+ keyStrokePos);
+ editPane->SetCursorIndexOfKeystroke(keyStrokePos-1);
+ }
+ else if ( chineseDisped->Count() )
+ {
+ TInt oldLen = zhuyinSymbols->Count();
+ TZhuyinSymbolsMethods::DeleteChineseChar(
+ zhuyinSymbols,
+ chineseDisped,
+ zhuyinSymbolsForChinese
+ );
+ TInt newLen = zhuyinSymbols->Count();
+ editPane->SetCursorIndexOfKeystroke(newLen - oldLen);
+ }
+ return ETrue;
+ }
+
+TBool TAknFepInputStateZhuyinPhraseCreationBase::UpdateEEPContent()
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ CDesCArrayFlat* zhuyinSymbols = UIContainer()->PinyinPopupWindow()->ZhuyinSymbols();
+ CDesCArrayFlat* chineseDisped = UIContainer()->PinyinPopupWindow()->ChineseCharsDisped();
+ CAknFepZhuyinAnalyser* analyser = iOwner->ZhuyinAnalyser();
+ CDesCArrayFlat* candidateList = UIContainer()->CandidatePane()->CandidateArray();
+ TBuf<KMaxBufLen> buf;
+ TBool isPhraseCreation = EFalse;
+ TInt extLen = chineseDisped->Count() + zhuyinSymbols->Count() - KMaxInputLength;
+
+ if ( extLen > 0 )
+ {
+ TInt keyStrokePos = UIContainer()->EditPaneWindow()->GetCursorIndexOfKeystroke();
+ zhuyinSymbols->Delete ( zhuyinSymbols->Count() - extLen, extLen );
+ if ( keyStrokePos > zhuyinSymbols->Count() )
+ {
+ UIContainer()->EditPaneWindow()->SetCursorIndexOfKeystroke( zhuyinSymbols->Count() );
+ }
+ }
+
+ TBool valid = TZhuyinSymbolsMethods::UpdateEEPContent(
+ ptiengine,
+ analyser,
+ zhuyinSymbols,
+ chineseDisped,
+ candidateList,
+ buf,
+ isPhraseCreation
+ );
+
+ if ( ( chineseDisped->Count() != 0 || zhuyinSymbols->Count() > 1 ) &&
+ ( candidateList->Count() != 0 ) )
+ {
+ for ( TInt i = 0; i < candidateList->Count(); ++i )
+ {
+ if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( candidateList->MdcaPoint( i ) ) )
+ {
+ candidateList->Delete( i, 1 );
+ break;
+ }
+ }
+ }
+ UIContainer()->PinyinPopupWindow()->SetEEPContentValid(valid);
+ UIContainer()->CandidatePane()->SplitPhraseCandidatesIntoPages();
+ if ( !valid || candidateList->Count() == 0 )
+ {
+ DeleteSeparatorWhenInvaild( buf );
+ valid = EFalse;
+ }
+ CheckShowInfo( buf, zhuyinSymbols );
+ UIContainer()->PinyinPopupWindow()->SetEEPContent(buf);
+ return valid;
+ }
+
+void TAknFepInputStateZhuyinPhraseCreationBase::UpdateIndicator()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
+ TInt candidateCount = candidatePane->CandidateArray()->Count();
+
+ if ( candidatePane->IsFirstPage() || candidateCount== 0 )
+ {
+ uiContainer->CandidatePane()->ShowUpScrollArrows( EFalse );
+ }
+ else
+ {
+ uiContainer->CandidatePane()->ShowUpScrollArrows( ETrue );
+ }
+
+ if ( candidatePane->IsLastPage() || candidateCount== 0 )
+ {
+ uiContainer->CandidatePane()->ShowDownScrollArrows( EFalse );
+ }
+ else
+ {
+ uiContainer->CandidatePane()->ShowDownScrollArrows( ETrue );
+ }
+ }
+
+// ---------------------------------------------------------
+// Get high light begine position.
+// ---------------------------------------------------------
+//
+TInt TAknFepInputStateZhuyinPhraseCreationBase::BegPosOfMoreThanSeven()
+ {
+ TInt i = 0;
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ TBuf<KMaxBufLen> buf;
+ buf = uiContainer->PinyinPopupWindow()->GetEEPContent();
+ TInt characterCount = uiContainer->PinyinPopupWindow()->ChineseCharsDisped()->Count();
+ TInt allTextCount = characterCount;
+
+ // calculate the total number of character according to stroke
+ for (i = 0; i < buf.Length() && allTextCount < KMaxPhraseCreationCount; i++ )
+ {
+ if ( ( buf.Mid( i, 1 ) == KStrokeManualSeparator )||
+ ( buf.Mid( i, 1 ) == KToneMark1 ) ||
+ ( buf.Mid( i, 1 ) == KToneMark2 ) ||
+ ( buf.Mid( i, 1 ) == KToneMark3 ) ||
+ ( buf.Mid( i, 1 ) == KToneMark4 ) ||
+ ( buf.Mid( i, 1 ) == KToneMark5 ) )
+ {
+ allTextCount++;
+ }
+ }
+
+ allTextCount++;
+
+ if ( allTextCount > KMaxPhraseCreationCount )
+ {
+ return i;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+// ---------------------------------------------------------
+// Set high light.
+// ---------------------------------------------------------
+//
+void TAknFepInputStateZhuyinPhraseCreationBase::HighlightMoreThanSeven( TInt aBegPos )
+ {
+ MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
+ TBuf<KMaxBufLen> buf;
+ buf = UIContainer()->PinyinPopupWindow()->GetEEPContent();
+ TInt EndPos = buf.Length();
+ editPane->SetHighlight( aBegPos, EndPos );
+ }
+
+// ---------------------------------------------------------
+// replace the keystroke.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputStateZhuyinPhraseCreationBase::ReplaceKeystrokeL(
+ TInt aIndex,
+ TInt aChineseCount,
+ const TDesC& aSymbol,
+ CDesCArrayFlat* aZhuyinSymbol )
+ {
+ TBuf<1> bufTmp;
+ bufTmp.Append( aZhuyinSymbol->MdcaPoint( aIndex - 1 ) );
+ aZhuyinSymbol->Delete( aIndex - 1 );
+ aZhuyinSymbol->InsertL( aIndex - 1, aSymbol );
+ if ( CheckKeystrokeCountL( aChineseCount, aZhuyinSymbol ) )
+ {
+ return ETrue;
+ }
+ else
+ {
+ aZhuyinSymbol->Delete( aIndex - 1 );
+ aZhuyinSymbol->InsertL( aIndex - 1, bufTmp );
+ return EFalse;
+ }
+ }
+
+void TAknFepInputStateZhuyinPhraseCreationBase::RefreshUI()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols();
+ CDesCArrayFlat* chineseDisped = uiContainer->PinyinPopupWindow()->ChineseCharsDisped();
+
+ CDesCArrayFlat* candidateList = uiContainer->CandidatePane()->CandidateArray();
+
+ // get cursor position
+ TPoint baseLine;
+ TInt height(0);
+ TInt ascent(0);
+ TRAPD(ret,iOwner->FepMan()->
+ GetScreenCoordinatesL(baseLine,height,ascent));
+ if ( ret == KErrNone )
+ {
+ uiContainer->SetContainerPosition( baseLine, height );
+ }
+ TBuf<KMaxBufLen> seed;
+ TBool valid = ETrue;
+ TBuf<KMaxBufLen> buf;
+ buf = uiContainer->PinyinPopupWindow()->GetEEPContent();
+ valid = uiContainer->PinyinPopupWindow()->GetEEPContentValid();
+
+ TBool isHighlight = EFalse;
+ TInt zhuyinBegPos = chineseDisped->Count();
+
+ TRAP_IGNORE( isHighlight = !iOwner->ZhuyinAnalyser()->AnalyzeL( buf.Mid( zhuyinBegPos ) ) );
+ CheckShowInfo( buf, zhuyinSymbols );
+
+ TInt keyStrokePos = editPane->GetCursorIndexOfKeystroke();
+ if ( keyStrokePos > zhuyinSymbols->Count() + 1 )
+ {
+ keyStrokePos = zhuyinSymbols->Count();
+ editPane->SetCursorIndexOfKeystroke( keyStrokePos );
+ }
+ TInt newCursorPos = TZhuyinSymbolsMethods::RefreshCursorPos(
+ chineseDisped->Count(),buf,keyStrokePos);
+
+ TZhuyinSymbolsMethods::Convert2Des(zhuyinSymbols,seed);
+ editPane->SetTextForZhuyin(buf,newCursorPos,chineseDisped->Count(),seed,keyStrokePos,!valid);
+ if ( !valid || isHighlight
+ || candidateList->Count()== 0 || zhuyinSymbols->Count() == 0 )
+ {
+ uiContainer->CandidatePane()->SetInVisiable();
+ editPane->SetHighlight(chineseDisped->Count(),buf.Length()-1);
+ uiContainer->SetControlInVisible( EFalse );
+ uiContainer->Enable( ETrue );
+ uiContainer->ShowHorizontalScrollArrows( EFalse );
+ uiContainer->ShowVerticalScrollArrows( EFalse );
+ }
+ else
+ {
+ uiContainer->SetControlInVisible( ETrue );
+ uiContainer->CandidatePane()->SetCandidateBuffer();
+ uiContainer->CandidatePane()->SelectFirstPhrase();
+ uiContainer->Enable( ETrue );
+ uiContainer->ShowVerticalScrollArrows( ETrue );
+ }
+ TInt begPos = BegPosOfMoreThanSeven();
+
+ if ( begPos )
+ {
+ HighlightMoreThanSeven( begPos );
+ }
+
+ UpdateIndicator();
+ }
+
+// ---------------------------------------------------------
+// Check the keystroke count.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputStateZhuyinPhraseCreationBase::CheckKeystrokeCountL(
+ TInt aChineseCount,
+ CDesCArrayFlat* aZhuyinSymbol )
+ {
+ TBuf<KMaxKeystrokeCount> inputBuf;
+
+ for (TInt i = 0; i < aZhuyinSymbol->Count(); ++i )
+ {
+ inputBuf.Append( aZhuyinSymbol->MdcaPoint( i ) );
+ }
+
+ if ( !iOwner->ZhuyinAnalyser()->AnalyzeL( inputBuf ) )
+ {
+ return ETrue;
+ }
+ else
+ {
+ HBufC* showBuf = iOwner->ZhuyinAnalyser()->LastAnalysisResult();
+ if ( showBuf->Length() > KMaxInputLength - aChineseCount )
+ {
+ return EFalse;
+ }
+ }
+ return ETrue;
+ }
+
+void TAknFepInputStateZhuyinPhraseCreationBase::HandleCommandL(TInt /*aCommandId*/)
+ {
+ RefreshUI();
+ }
+
+void TAknFepInputStateZhuyinPhraseCreationBase::CheckShowInfo( TDes& aOutDes,
+ CDesCArrayFlat* aZhuyinSymbol )
+ {
+ if( aOutDes.Length() <= KMaxInputLength )
+ {
+ return;
+ }
+ TInt extLen = aOutDes.Length() - KMaxInputLength;
+ TInt delCount = 0;
+ TBuf<KMaxInputLength> delBuf;
+ delBuf.Copy( aOutDes.Mid( KMaxInputLength ) );
+ aOutDes.Delete( KMaxInputLength, extLen );
+ if ( aOutDes.Mid( KMaxInputLength - 1, 1 ).
+ Compare( KStrokeManualSeparator ) == 0 )
+ {
+ aOutDes.Delete( KMaxInputLength - 1, 1 );
+ }
+
+ for ( TInt i = 0; i < delBuf.Length(); i++ )
+ {
+ if ( delBuf.Mid( i, 1 ).Compare( KStrokeManualSeparator ) != 0 )
+ {
+ delCount++;
+ }
+ }
+
+ for ( TInt i = 0; i < delCount; i++ )
+ {
+ aZhuyinSymbol->Delete( aZhuyinSymbol->Count() - 1 );
+ }
+ }
+
+// ---------------------------------------------------------
+// Change CBA
+// ---------------------------------------------------------
+//
+void TAknFepInputStateZhuyinPhraseCreationBase::ChangeCbaL()
+ {
+ MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
+ CDesCArrayFlat* zhuyinSymbol = popup->ZhuyinSymbols();
+ CDesCArrayFlat* chineseArray = popup->ChineseCharsDisped( );
+ CDesCArrayFlat* candidateArray = UIContainer()->CandidatePane()->CandidateArray( );
+ TBool vaild = popup->GetEEPContentValid( );
+ TInt lastRes = popup->GetLastResouce();
+
+ if ( chineseArray->Count( ) == 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 != zhuyinSymbol->Count( ) ) && (candidateArray->Count( )
+ != 0 ) && vaild )
+ {
+ 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 ( (chineseArray->Count( ) > 1 )
+ && ( 0 == zhuyinSymbol->Count( ) ) )
+ {
+ 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 );
+ }
+ }
+
+void TAknFepInputStateZhuyinPhraseCreationBase::DeleteSeparatorWhenInvaild( TDes& aDes )
+ {
+ TInt count = aDes.Length();
+ for ( TInt i = count - 1; i > 0; i-- )
+ {
+ if ( aDes.Mid( i, 1 ).Compare( KStrokeManualSeparator ) == 0 )
+ {
+ aDes.Delete( i, 1 );
+ }
+ }
+ }
+
+// End of file