diff -r f1bdd6b078d1 -r 2cb9bae34d17 fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateBaseChinesePhrase.cpp Tue Jul 06 14:38:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1120 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Implementation of candidate base chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateBaseChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepManagerUIInterface.h" -#include "AknFepManager.h" //FepMan flag - -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" -#include //CPtiEngine - -#include //CAknInformationNote - -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "aknfepzhuyinconvertion.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include "AknFepZhuyinAnalyserDb.h" -#include "AknFepZhuyinAnalyser.h" - -_LIT( KPinyinListSeparator, "'" ); -_LIT( KPinyinStar, "*" ); -_LIT( KPinyinTone0ValidStr, "\x02C9"); -_LIT( KPinyinTone1ValidStr, "\x02CA"); -_LIT( KPinyinTone2ValidStr, "\x02C7"); -_LIT( KPinyinTone3ValidStr, "\x02CB"); -_LIT( KPinyinTone4ValidStr, "\x02D9"); - -const TText KPinyinTone0Valid = 0x02C9; -const TText KPinyinTone1Valid = 0x02CA; -const TText KPinyinTone2Valid = 0x02C7; -const TText KPinyinTone3Valid = 0x02CB; -const TText KPinyinTone4Valid = 0x02D9; -const TInt KKey0Code = 48; -const TInt KKey2Code = 50; -const TInt KKey3Code = 51; -const TInt KKey4Code = 52; -const TInt KKey5Code = 53; -const TInt KKey6Code = 54; -const TInt KKey7Code = 55; -const TInt KKey8Code = 56; -const TInt KKey9Code = 57; - -const TInt KMaxKeystrokeCount = 100; -const TInt KMaxPinyinLength = 60; - -const TInt KStarCount1 = 1; -const TInt KStarCount2 = 2; -const TInt KStarCount3 = 3; -const TInt KStarCount4 = 4; -const TInt KStarCount5 = 5; - -const TUint16 KSegment = 0x0020; - -_LIT( KKey0Num, "0"); -_LIT( KKey1Num, "1"); -_LIT( KKey2Num, "2"); -_LIT( KKey3Num, "3"); -_LIT( KKey4Num, "4"); -_LIT( KKey5Num, "5"); -_LIT( KKey6Num, "6"); -_LIT( KKey7Num, "7"); -_LIT( KKey8Num, "8"); -_LIT( KKey9Num, "9"); -_LIT( KPinyinSysSeparator, "\x002E"); - -TAknFepInputStateCandidateBaseChinesePhrase::TAknFepInputStateCandidateBaseChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBase(aOwner, aUIContainer) - { - } - -void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - // it may be one of the 'valid' numbers.. - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeyCancel: - // case (TUint16)EAknSoftkeyCancel: //the Cancle in soft CBA - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - HandleCommitL(); - break; - default: - TAknFepInputStateCandidateBase::HandleCommandL( aCommandId ); - break; - } - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - if ( aKey == EPtiKeyStar ) - { - if ( fepMan->IsEnableKeyStar() ) - { - iOwner->FepMan()->TryCloseUiL(); - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return EFalse; - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - if ( !(HandleVerticalNavigation( aKey, aLength ) - || HandleHorizontalNavigation( aKey )) ) - { - // it may be one of the 'valid' numbers.. - TInt index = MapKeyToIndex( aKey ); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - if ( candidatePane->SelectIndex( index, EFalse ) || aKey - == EKeyOK || aKey == EKeyCBA1 ) - { - HandleCommitL(); - } - } - } - return ETrue; - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleHorizontalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { -// if (candidatePane->SelectedIndex() == 0 && -// candidatePane->IsFirstPage() ) -// { -// return ETrue; -// } - - if(!candidatePane->SelectPrev()) - { -// candidatePane->PreviousCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { -// if (candidatePane->IsLastPage() && -// (candidatePane->SelectedIndex() == candidatePane->VisibleCandidateCount() - 1)) -// { -// return ETrue; -// } - - if(!candidatePane->SelectNext()) - { -// candidatePane->NextCandidatePage(); - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - if (aKey == EKeyDownArrow) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - if ( iState != EPredictiveCandidate && - iState != EPredictiveInput ) - { - if (candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage() ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray(); - RPointerArray list; - TRAP_IGNORE( - GetNewCandidatesL(iOwner->PtiEngine()->CandidatePage(), list); - for (TInt i = 0; i < list.Count(); ++i) - { - phraseCandidates->AppendL( *(list[i])); - } - list.ResetAndDestroy();); - } - } - } - candidatePane->NextCandidatePage(); - } - else if (aKey == EKeyUpArrow) - { - if ( candidatePane->IsFirstPage() && iState != EPredictiveCandidate ) - { - zhuyinKeyHandler->SetState(0); - iOwner->ChangeState(EZhuyinSequenceEdit); - return EFalse; - } - else if ( candidatePane->IsFirstPage() ) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - return ETrue; - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::HandleVerticalNavigation(TInt aKey, TKeyPressLength aLength) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - - if (aKey == EKeyDownArrow) - { - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - if ( state ) - { - if (candidatePane->IsLastPage()) - { - return ETrue; - } - if ( iState != EPredictiveCandidate && - iState != EPredictiveInput ) - { - if (candidatePane->NeedGetNewCandidatePage() ) - { - if ( !iOwner->PtiEngine()->NextCandidatePage( ) ) - { - if ( candidatePane->IsLastPage() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - } - else - { - CDesCArrayFlat* phraseCandidates = - candidatePane->CandidateArray( ); - RPointerArray list; - TRAP_IGNORE( - GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list ); - for (TInt i = 0; i < list.Count( ); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - list.ResetAndDestroy();); - } - } - } - candidatePane->NextCandidatePage(); - } - } - else if (aKey == EKeyUpArrow) - { - if (candidatePane->IsFirstPage() ) - { - return ETrue; - } - candidatePane->PreviousCandidatePage(); - } - else - { - return EFalse; - } - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - UpdateIndicator(); - return ETrue; - } - -void TAknFepInputStateCandidateBaseChinesePhrase::UpdateIndicator() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - 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); - } - } - -// --------------------------------------------------------- -// get the valid keystroke -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::GetValidkeystrokeL( ) - { - TInt keyCode; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TBuf<1> keystroke; - TBuf<1> keystrokeTmp; - - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer( ); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow( ); - - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray( ); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( ); - - inEffectKeystrokeArray->Reset( ); - inEffectKeystrokeArray->Compress( ); - - for (TInt i = 0; i < keystrokeArray->Count( ); ++i ) - { - stringBeforeLength = 0; - stringAfterLength = 0; - keystroke.Copy( keystrokeArray->MdcaPoint( i ) ); - if ( 0 == i ) - { - if ( ( 0 == keystroke.Compare( KPinyinStar ) ) || ( 0 - == keystroke.Compare( KPinyinListSeparator ) ) ) - { - return; - } - } - else - { - keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) ); - if ( 0 == keystroke.Compare( KPinyinListSeparator ) ) - { - if ( ( 0 != keystrokeTmp.Compare( KPinyinListSeparator ) ) - && ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - } - return; - } - } - - if ( i >= 1 ) - { - keystrokeTmp.Copy( keystrokeArray->MdcaPoint( i - 1 ) ); - if ( ( 0 == keystroke.Compare( KPinyinStar ) ) && ( 0 - == keystrokeTmp.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - ptiengine->IncrementToneMark( ETrue ); - } - else if ( ( 0 != keystrokeTmp.Compare( KPinyinStar ) ) && ( 0 - == keystroke.Compare( KPinyinStar ) ) ) - { - inEffectKeystrokeArray->AppendL( keystroke ); - ptiengine->IncrementToneMark( ETrue ); - } - else if ( ( 0 != keystroke.Compare( KPinyinStar ) ) && ( 0 - == keystrokeTmp.Compare( KPinyinStar ) ) ) - { - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - DeleteTonMarkFromInEffectKeytrokeArray( ); - } - return; - } - } - - if ( 0 != keystroke.Compare( KPinyinStar ) ) - { - - inEffectKeystrokeArray->AppendL( keystrokeArray->MdcaPoint( i ) ); - GetKeystrokeCode( keyCode, keystroke ); - stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length( ); - stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)keyCode).Length( ); - if ( stringBeforeLength == stringAfterLength ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - - 1 ); - inEffectKeystrokeArray->Compress( ); - return; - } - if ( 0 == keystroke.Compare( KPinyinListSeparator ) ) - { - return; - } - - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - inEffectKeystrokeArray->Delete( i ); - return; - } - } - else - { - if ( i == keystrokeArray->Count( ) - 1 ) - { - if ( !CheckSpellingOfPtiEngine( ) ) - { - ptiengine->DeleteKeyPress( ); - DeleteTonMarkFromInEffectKeytrokeArray( ); - return; - } - } - } - } - } - -// --------------------------------------------------------- -// Check the Spelling of PtiEngine. -// --------------------------------------------------------- -// -TBool TAknFepInputStateCandidateBaseChinesePhrase::CheckSpellingOfPtiEngine( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - TInt count = ptiengine->PhoneticSpellingCount( ); - - for (TInt i = 1; i <= count; ++i ) - { - TPtrC spelling = ptiengine->GetPhoneticSpelling( i ); - if ( KErrNotFound == spelling.Find( KPinyinListSeparator ) ) - { - return ETrue; - } - } - - return EFalse; - } - -void TAknFepInputStateCandidateBaseChinesePhrase::GetKeystrokeCode( - TInt& aKey, const TDesC& aKeystroke ) - { - if ( 0 == aKeystroke.Compare( KKey0Num ) ) - { - aKey = KKey0Code; - } - else if ( 0 == aKeystroke.Compare( KKey1Num ) ) - { - aKey = KKey0Code; - } - else if ( 0 == aKeystroke.Compare( KKey2Num ) ) - { - aKey = KKey2Code; - } - else if ( 0 == aKeystroke.Compare( KKey3Num ) ) - { - aKey = KKey3Code; - } - else if ( 0 == aKeystroke.Compare( KKey4Num ) ) - { - aKey = KKey4Code; - } - else if ( 0 == aKeystroke.Compare( KKey5Num ) ) - { - aKey = KKey5Code; - } - else if ( 0 == aKeystroke.Compare( KKey6Num ) ) - { - aKey = KKey6Code; - } - else if ( 0 == aKeystroke.Compare( KKey7Num ) ) - { - aKey = KKey7Code; - } - else if ( 0 == aKeystroke.Compare( KKey8Num ) ) - { - aKey = KKey8Code; - } - else if ( 0 == aKeystroke.Compare( KKey9Num ) ) - { - aKey = KKey9Code; - } - else if ( 0 == aKeystroke.Compare( KPinyinListSeparator ) ) - { - aKey = KKey0Code; - } - - } -// --------------------------------------------------------- -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::ClearPtiEngineKeystroke( ) - { - CDesCArrayFlat* inEffectKeystrokeArray = UIContainer()->PinyinPopupWindow()->InEffectKeystrokeArray( ); - - for (TInt i = 0; i < KMaxKeystrokeCount; ++i ) - { - iOwner->PtiEngine()->DeleteKeyPress( ); - } - inEffectKeystrokeArray->Reset( ); - inEffectKeystrokeArray->Compress( ); - } - -// --------------------------------------------------------- -// delete tonmark from in effect keystroke array -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::DeleteTonMarkFromInEffectKeytrokeArray( ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray(); - TInt count = inEffectKeystrokeArray->Count() - 1; - TInt checkCount = 0; - for ( TInt i = count; i > 0 ; i-- ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - inEffectKeystrokeArray->Delete( i ); - inEffectKeystrokeArray->Compress(); - checkCount = checkCount + 1; - } - else - { - break; - } - } - - if ( checkCount > 0 ) - { - if ( inEffectKeystrokeArray->Count() > 0 ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count() -1 ); - } - iOwner->PtiEngine()->DeleteKeyPress(); - } - } - -// --------------------------------------------------------- -// get the valid keystroke -// --------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::CheckTonemarkL( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine( ); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow( ); - CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( ); - CDesCArrayFlat* spelling = popup->OptimizeSpelling( ); - - TInt keystrokeStarCount = 0; - TInt validSpellCount = 0; - TInt i = 0; - TBuf<1> buf; - - TBuf<1> lastSpellTonemark; - TBuf<1> tonmarkBuf0; - TBuf<1> tonmarkBuf1; - TBuf<1> tonmarkBuf2; - TBuf<1> tonmarkBuf3; - TBuf<1> tonmarkBuf4; - TBuf spellBuf; - tonmarkBuf0.Append( KPinyinTone0Valid ); - tonmarkBuf1.Append( KPinyinTone1Valid ); - tonmarkBuf2.Append( KPinyinTone2Valid ); - tonmarkBuf3.Append( KPinyinTone3Valid ); - tonmarkBuf4.Append( KPinyinTone4Valid ); - - if ( 0 == inEffectKeystrokeArray->Count( ) ) - { - return; - } - - for (i = inEffectKeystrokeArray->Count( ) - 1; i >= 0; i-- ) - { - if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) - { - keystrokeStarCount = keystrokeStarCount + 1; - } - else - { - break; - } - } - - if ( 0 == keystrokeStarCount ) - { - return; - } - - switch ( keystrokeStarCount ) - { - case KStarCount1: - buf.Copy( tonmarkBuf0 ); - break; - case KStarCount2: - buf.Copy( tonmarkBuf1 ); - break; - case KStarCount3: - buf.Copy( tonmarkBuf2 ); - break; - case KStarCount4: - buf.Copy( tonmarkBuf3 ); - break; - case KStarCount5: - buf.Copy( tonmarkBuf4 ); - break; - default: - break; - } - - spelling->Reset( ); - spelling->Compress( ); - - ptiengine->GetPhoneticSpellingsL( *spelling ); - - for (i = 0; i < spelling->Count( ); ++i ) - { - spellBuf.Copy( spelling->MdcaPoint( i ) ); - TInt position = spellBuf.Find( KPinyinListSeparator ); - if ( KErrNotFound == position ) - { - lastSpellTonemark.Copy( spellBuf.Mid( spellBuf.Length( ) - 1, 1 ) ); - if ( 0 == lastSpellTonemark.Compare( buf ) ) - { - validSpellCount = 1; - break; - } - } - } - - spelling->Reset( ); - spelling->Compress( ); - - if ( validSpellCount > 0 ) - { - return; - } - - for (i = 0; i < keystrokeStarCount; ++i ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) -1 ); - } - - ptiengine->DeleteKeyPress( ); - - if ( inEffectKeystrokeArray->Count( ) > 0 ) - { - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 ); - } - inEffectKeystrokeArray->Compress( ); - - ptiengine->DeleteKeyPress( ); - - while (inEffectKeystrokeArray->Count( ) > 0 ) - { - spelling->Reset( ); - spelling->Compress( ); - ptiengine->GetPhoneticSpellingsL( *spelling ); - - for (i = 0; i < spelling->Count( ); ++i ) - { - if ( KErrNotFound == spelling->MdcaPoint( i ).Find( KPinyinListSeparator ) ) - { - spelling->Reset( ); - spelling->Compress( ); - return; - } - } - ptiengine->DeleteKeyPress( ); - inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count( ) - 1 ); - } - - spelling->Reset( ); - spelling->Compress( ); - } - -TBool TAknFepInputStateCandidateBaseChinesePhrase::IsValid( const TDesC& aDesC, TInt aCount ) - { - TBool lastIsToneMark = EFalse; - TBool ret = ETrue; - TInt charCount = aCount; - for ( TInt i = 0; i < aDesC.Length(); i++ ) - { - if ( ( aDesC.Mid( i, 1 ) == KPinyinSysSeparator ) || - ( aDesC.Mid( i, 1 ) == KPinyinListSeparator ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone0Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone1Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone2Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone3Valid ) || - ( *aDesC.Mid( i , 1 ).Ptr() == KPinyinTone4Valid ) ) - { - if ( lastIsToneMark && charCount <= 0 ) - { - ret = EFalse; - } - lastIsToneMark = ETrue; - charCount--; - } - else - { - lastIsToneMark = EFalse; - } - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL -// Handle CBA1 or select event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCandidateBaseChinesePhrase::HandleCommitL() - { - // it may be one of the 'valid' numbers.. - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() ) - { - //commit and show char in editor - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - TInt i = 0; - CDesCArrayFlat* keystroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - if ( keystroke->Count() != 0 && keystroke->Count() - > text.Length() ) - { - TBuf seq; - for (i = 0; i < keystroke->Count(); ++i ) - { - seq.Append( keystroke->MdcaPoint( i ) ); - } - TInt count = 0; - - TBufC buf1; - TPtr ptr1 = buf1.Des(); - TBufC keyseqBuf; - TPtr ptr2 = keyseqBuf.Des(); - TBuf ptr2Left; - ptr2.Copy( seq ); - if ( ptiengine->SelectedPhoneticSpelling() == 1 ) - { - ptr1 = ptiengine->GetPhoneticSpelling(1); - } - else - { - UIContainer()->InputPane()->GetText( ptr1 ); - } - TInt pos = 0; - TInt len = 0; - - CDesCArray - * chineseCharacterArrayKeystroke = - UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArrayKeystroke(); - chineseCharacterArrayKeystroke->Reset(); - for (i = 0; i < ptr1.Length() && count < text.Length() - && ptr2.Length() != 0; i++ ) - { - if ( ptr1.Mid( i, 1 ) == KPinyinSysSeparator || ptr1.Mid( - i, 1 ) == KPinyinListSeparator ) - { - pos = i - len - count; - if ( pos < 0 ) - { - pos = 0; - } - - if ( pos == ptr2.Length() ) - { - pos = ptr2.Length() - 1; - } - - if ( ptr2.Mid( pos, 1 ) == KPinyinListSeparator ) - { - i++; - pos += 1; - chineseCharacterArrayKeystroke->AppendL( - ptr2.Left( pos ) ); - ptr2 = ptr2.Mid( pos ); - } - else - { - chineseCharacterArrayKeystroke->AppendL( - ptr2.Left( pos ) ); - ptr2 = ptr2.Mid( pos ); - } - len += pos; - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid ) - { - pos = i + 1 - len - count; - len += pos; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 1 ) ); - ptr2Left.Append( KPinyinTone0ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid ) - { - pos = i + 2 - len - count; - len += pos - 1; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 2 ) ); - ptr2Left.Append( KPinyinTone1ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid ) - { - pos = i + 3 - len - count; - len += pos - 2; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 3 ) ); - ptr2Left.Append( KPinyinTone2ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid ) - { - pos = i + 4 - len - count; - len += pos - 3; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 4 ) ); - ptr2Left.Append( KPinyinTone3ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - else if ( *ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid ) - { - pos = i + 5 - len - count; - len += pos - 4; - ptr2Left.Zero(); - ptr2Left.Copy( ptr2.Left( pos - 5 ) ); - ptr2Left.Append( KPinyinTone4ValidStr ); - chineseCharacterArrayKeystroke->AppendL( ptr2Left ); - ptr2 = ptr2.Mid( pos ); - count++; - } - } - - TInt totalCount = 0; - for (i = 0; i < ptr1.Length(); i++ ) - { - if ( (ptr1.Mid( i, 1 ) == KPinyinSysSeparator) - || (ptr1.Mid( i, 1 ) == KPinyinListSeparator) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone0Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone1Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone2Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone3Valid) - || (*ptr1.Mid( i, 1 ).Ptr() == KPinyinTone4Valid) ) - { - totalCount++; - } - } - - if ( !((ptr1.Right( 1 ) == KPinyinListSeparator) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone0Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone1Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone2Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone3Valid) - || (*ptr1.Right( 1 ).Ptr() == KPinyinTone4Valid)) ) - { - totalCount++; - } - - if ( totalCount > text.Length() ) - { - CDesCArray - * chineseCharacterArray = - UIContainer()->PinyinPopupWindow()->ChooseChineseCharacterArray(); - chineseCharacterArray->Reset(); - for (i = 0; i < text.Length(); i++ ) - { - chineseCharacterArray->AppendL( text.Mid( i, 1 ) ); - } - //set key stroke - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - for (i = 0; i < ptr2.Length(); i++ ) - { - keyStroke->AppendL( ptr2.Mid( i, 1 ) ); - } - //set show stroke - CDesCArray - * showStroke = - UIContainer()->PinyinPopupWindow()->ShowKeystrokeArray(); - showStroke->Reset(); - TInt pinyinStarCount = 0; - for (i = 0; i < ptr2.Length(); ) - { - pinyinStarCount = 0; - if ( ptr2.Mid( i, 1 ) == KPinyinStar ) - { - while (i < ptr2.Length() && ptr2.Mid( i, 1 ) - == KPinyinStar ) - { - pinyinStarCount++; - i++; - } - switch ( pinyinStarCount ) - { - case 1: - showStroke->AppendL( KPinyinTone0ValidStr ); - break; - case 2: - showStroke->AppendL( KPinyinTone1ValidStr ); - break; - case 3: - showStroke->AppendL( KPinyinTone2ValidStr ); - break; - case 4: - showStroke->AppendL( KPinyinTone3ValidStr ); - break; - case 5: - showStroke->AppendL( KPinyinTone4ValidStr ); - break; - default: - break; - } - } - else - { - showStroke->AppendL( ptr2.Mid( i, 1 ) ); - i++; - } - } - fepMan->PinyinPhraseCreation( ETrue ); - ClearPtiEngineKeystroke(); - GetValidkeystrokeL(); - CheckTonemarkL(); - - CDesCArrayFlat* inEffectKeystrokeArray = - popup->InEffectKeystrokeArray(); - - if ( inEffectKeystrokeArray->Count() == 0 || !IsValid( - ptr1, text.Length() ) ) - { - UIContainer()->SetControlInVisible( EFalse ); - popup->SetPhraseCreationState( ETrue ); - iOwner->ChangeState( EKeySequenceEdit ); - } - else - { - popup->SetPhraseCreationState( ETrue ); - iOwner->ChangeState( ESpellingSelection ); - } - } - else - { - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - //commit and show char in editor - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - fepMan->PinyinPhraseCreation( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - else - { - CDesCArray* keyStroke = - UIContainer()->PinyinPopupWindow()->KeystrokeArray(); - keyStroke->Reset(); - //commit and show char in editor - fepMan->NewTextL( text ); - fepMan->CommitInlineEditL(); - fepMan->PinyinPhraseCreation( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - } - } - else - { - // No candidates available. Back to Entry state. - iOwner->ChangeState( EEntry ); - } - } - -void TAknFepInputStateCandidateBaseChinesePhrase::GetNewCandidatesL(const TDesC& aSource, - RPointerArray& 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