--- a/fep/aknfep/src/AknFepUiInputStateEntryPinyinPhrase.cpp Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1463 +0,0 @@
-/*
-* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0""
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:
-* Provides the CAknFepUIInputStatePinyinPhrase methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepPanic.h"
-#include "AknFepUiInputStateEntryPinyinPhrase.h"
-#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface
-#include "AknFepUiCtrlContainerChinese.h"
-#include "AknFepUICtrlInputPane.h"
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase
-#include "AknFepManager.h"
-
-#include <PtiEngine.h> //CPtiEngine
-#include <PtiDefs.h> //keys
-#include <avkon.rsg>
-#include <aknfep.rsg>
-#include <aknnotewrappers.h>
-
-const TText KPinyinTone0Valid = 0x02C9;
-const TText KPinyinTone1Valid = 0x02CA;
-const TText KPinyinTone2Valid = 0x02C7;
-const TText KPinyinTone3Valid = 0x02CB;
-const TText KPinyinTone4Valid = 0x02D9;
-const TText KPinyinTone4Invalid = 0x0020;
-
-const TInt KMaxPhraseCount = 100;
-const TInt KMaxKeystrokeCount = 100;
-const TInt KMaxShowKeystrokeCount = 31;
-
-const TInt KMaxPinyinLength = 60;
-
-const TInt KMaxStarCount = 5;
-
-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 KKey7Code = 55;
-const TInt KKey8Code = 56;
-const TInt KKey9Code = 57;
-
-_LIT( KPinyinListSeparator, "'" );
-_LIT( KPinyinStar, "*" );
-_LIT( KPinyinNote,"\x9020\x65B0\x8BCD" );
-_LIT( KPinyinManualSeparator, "\x002E");
-
-TAknFepInputStateEntryPinyinPhrase::TAknFepInputStateEntryPinyinPhrase(
- MAknFepUIManagerStateInterface* aOwner,
- MAknFepUICtrlContainerChinese* aUIContainer)
- :TAknFepInputStateChineseBase(aOwner, aUIContainer)
- {
- iState = EEntry;
-
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- uiContainer->FocusCandidatePane(EFalse);
- uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse);
- uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput);
- uiContainer->CandidatePane()->SelectFirstPhrase();
- uiContainer->ShowVerticalScrollArrows(ETrue);
- uiContainer->ShowHorizontalScrollArrows(EFalse);
- uiContainer->InputPane()->SetOverrideFontId(0);
-
- iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinByPhrase);
- iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount);
- uiContainer->PinyinPopupWindow()->SetTonemarkState( ETrue );
- // set the state is in input state,
- // so that it could handle EKeyCBA1
- iOwner->FepMan()->EntryPhrase( ETrue );
- uiContainer->SetFepMan( iOwner->FepMan() );
-
- ClearKeystrokeBuf();
- // in the case that we are coming back to the input pane from the candidate pane,
- // we need to ensure that the current selection is selected correctly
- ImplicitlyUpdateSelection();
- // however we also need to clear the deliberate selection, in case we are not
- // coming back to the input pane from the candidate pane
- if ( uiContainer->PinyinPopupWindow()->GetFromCandidateChangeStateFlag() )
- {
- uiContainer->PinyinPopupWindow()->SetFromCandidateChangeStateFlag( EFalse );
- }
- else
- {
- ClearDeliberateSelection();
- }
-
- UpdateIndicator();
- TRAP_IGNORE( ChangeCbaL() );
- }
-
-void TAknFepInputStateEntryPinyinPhrase::HandleCommandL( TInt aCommandId)
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine( );
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer( );
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow( );
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray( );
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray( );
- CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray( );
- TInt currentSelect = popup->CurrentSelection( );
- TInt inEffectSpellingCount = ptiengine->PhoneticSpellingCount( );
- TBuf<KMaxKeystrokeCount> keystrokeBuf;
- 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
- if ( (currentSelect < inEffectSpellingCount)
- && (keystrokeArray->Count( )
- == inEffectKeystrokeArray->Count( ) )
- && (popup->GetTonemarkState( ) ) )
- {
- if ( popup->IsEnabled( ) )
- {
- popup->Enable( EFalse );
- }
- iOwner->FepMan()->PinyinPhraseCreation( EFalse );
- popup->SetChangeState( ETrue );
- iOwner->ChangeState( ECandidate );
- }
- else
- {
- GetKeystrokeBuf( *keystrokeArray, keystrokeBuf );
- iOwner->FepMan()->PinyinPhraseCreation( ETrue );
- popup->SetChangeState( ETrue );
- popup->SetPhraseCreationState( ETrue );
- if ( GetChangeState( ) )
- {
- ClearDeliberateSelection( );
- popup->Enable( EFalse );
- iOwner->ChangeState( ESpellingSelection );
- }
- else
- {
- ClearDeliberateSelection( );
- popup->Enable( EFalse );
- iOwner->ChangeState( EKeySequenceEdit );
- }
- }
- break;
- default:
- DeliberatelyUpdateSelection( );
- break;
- }
-
- }
-
-TBool TAknFepInputStateEntryPinyinPhrase::HandleKeyL( TInt aKey, TKeyPressLength aLength )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray();
- TInt currentSelect = popup->CurrentSelection();
- TInt inEffectSpellingCount = ptiengine->PhoneticSpellingCount();
- TInt offset = 0;
-
- TBuf<1> keyBuf;
- TBuf<1> keyShow;
- TBuf<KMaxKeystrokeCount> keystrokeBuf;
-
- if(aKey == EKeyBackspace)
- {
- TBool state = ETrue;
- if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
- {
- state = EFalse;
- }
- else
- {
- popup->SetChangeState( EFalse );
- }
- if ( state )
- {
- DeleteCurrentKeystroke();
- showKeystrokeArray->Delete( showKeystrokeArray->Count() - 1 );
- showKeystrokeArray->Compress();
- if ( inEffectKeystrokeArray->Count()> 0 )
- {
- ImplicitlyUpdateSelection();
- }
- else
- {
- ClearDeliberateSelection();
- iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
- if (aLength == ELongKeyPress)
- {
- iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue);
- }
- }
- }
- }
- else if(aKey == EKeyRightArrow)
- {
- if(popup->IsEnabled())
- {
- if(popup->SelectNextPhrase())
- {
- DeliberatelyUpdateSelection();
- }
- }
- }
- else if(aKey == EKeyLeftArrow)
- {
- if(popup->IsEnabled())
- {
- if(popup->SelectPrevPhrase())
- {
- DeliberatelyUpdateSelection();
- }
- }
- }
- else if( ( aKey == EKeyOK || aKey == EKeyDownArrow || aKey == EKeyCBA1)
- && aLength == EShortKeyPress)
- {
- if ( ( currentSelect < inEffectSpellingCount) &&
- ( keystrokeArray->Count() == inEffectKeystrokeArray->Count() ) &&
- ( popup->GetTonemarkState() ) )
- {
- if(popup->IsEnabled())
- {
- popup->Enable(EFalse);
- }
- iOwner->FepMan()->PinyinPhraseCreation( EFalse );
- popup->SetChangeState( ETrue );
- iOwner->ChangeState(ECandidate);
- }
- else
- {
- GetKeystrokeBuf( *keystrokeArray, keystrokeBuf );
- iOwner->FepMan()->PinyinPhraseCreation( ETrue );
- popup->SetChangeState( ETrue );
- popup->SetPhraseCreationState( ETrue );
- if ( GetChangeState() )
- {
- ClearDeliberateSelection();
- popup->Enable( EFalse );
- iOwner->ChangeState(ESpellingSelection);
- }
- else
- {
- ClearDeliberateSelection();
- popup->Enable( EFalse );
- iOwner->ChangeState(EKeySequenceEdit);
- }
- }
- }
- else if (aLength == EShortKeyPress) // don't want repeats on these keys
- {
- iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);
-
- if ( ( iOwner->IsValidChineseInputKey(aKey) ) &&
- ( CheckKeystroke( aKey, *keystrokeArray ) ) )
- {
- TInt stringBeforeLength(0);
- TInt stringAfterLength(0);
- GetKeystrokeNum( aKey, keyBuf );
- keystrokeArray->AppendL( keyBuf );
- showKeystrokeArray->AppendL( keyBuf );
-
- if ( popup->GetTonemarkState() )
- {
- stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
- stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length();
- if (stringBeforeLength != stringAfterLength)
- {
- if (ptiengine->GetPhoneticSpelling(1).Length() == 1)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT);
- }
- inEffectKeystrokeArray->AppendL(keyBuf);
- ImplicitlyUpdateSelection();
- }
- else
- {
- ptiengine->EnableToneMarks(ETrue);
- UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged);
- RefreshUI(0);
- }
- }
- else
- {
- ImplicitlyUpdateSelection();
- }
- }
- else if ( ( aKey == EPtiKeyStar ) &&
- ( CheckKeystroke( aKey, *keystrokeArray ) ) ) // we increment the tone mark.
- {
- keyBuf.Append( EPtiKeyStar );
-
- if ( keystrokeArray->Count() == inEffectKeystrokeArray->Count() )
- {
- inEffectKeystrokeArray->AppendL(keyBuf);
- keystrokeArray->AppendL( keyBuf );
- GetPinyinToneMark( *keystrokeArray, keyShow );
- ShowKeystrokeAppendL( *showKeystrokeArray, *keystrokeArray, keyShow );
- CheckTonemarkL();
- }
- else
- {
- keystrokeArray->AppendL( keyBuf );
- GetPinyinToneMark( *keystrokeArray, keyShow );
- ShowKeystrokeAppendL( *showKeystrokeArray, *keystrokeArray, keyShow );
- for ( TInt i = keystrokeArray->Count() - 1; i >= 0; i-- )
- {
- if ( 0 == keystrokeArray->MdcaPoint( i ).
- Compare( KPinyinStar ) )
- {
- offset = offset + 1;
- }
- else
- {
- break;
- }
- }
- if ( offset > KMaxStarCount )
- {
- for ( TInt j = 0; j < KMaxStarCount; ++j )
- {
- keystrokeArray->Delete( keystrokeArray->Count() - 1 );
- }
- keystrokeArray->Compress();
- }
- }
- ImplicitlyUpdateSelection();
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- }
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// Optimize spelling
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::OptimizeSpellingL( CDesCArrayFlat& aOptimizeBefore, CDesCArrayFlat& aOptimizeAfter )
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- TBool checkSeparator = EFalse;
- TBuf<KMaxPinyinLength> spellingBuf;
- TInt bufLength = 0;
- TInt countSeparator = 0;
-
- TInt countBuf[KMaxPhraseCount];
- memset( countBuf, 0, sizeof( countBuf ) );
-
- TInt position = 0;
- TInt i = 0;
- TInt j = 0;
-
- if ( 0 == inEffectKeystrokeArray->Count() )
- {
- return;
- }
-
- for ( i = 0 ; i < inEffectKeystrokeArray->Count(); ++i )
- {
- if ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinListSeparator ) )
- {
- checkSeparator = ETrue;
- countBuf[countSeparator] = j;
- countSeparator = countSeparator + 1;
- }
- else
- {
- if ( 0 == i )
- {
- j = j + 1;
- }
- else
- {
- if ( ( 0 == inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) ) &&
- ( 0 != inEffectKeystrokeArray->MdcaPoint( i - 1 ).Compare( KPinyinStar ) ))
- {
- j = j + 1;
- }
- else if ( 0 != inEffectKeystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
- {
- j = j + 1;
- }
- }
- }
- }
-
- j = 0;
- for ( i = 0; i < aOptimizeBefore.Count(); ++i )
- {
- j = 0;
- bufLength = 0;
- position = 0;
- spellingBuf.Size();
- spellingBuf.Copy( aOptimizeBefore.MdcaPoint( i ) );
- bufLength = spellingBuf.Length();
- while( j < bufLength )
- {
- position = spellingBuf.Find( KPinyinListSeparator );
- if ( position != KErrNotFound )
- {
- spellingBuf.Replace( position, 1, KPinyinManualSeparator );
- j = position + 1;
- }
- else
- {
- break;
- }
- }
- aOptimizeAfter.AppendL( spellingBuf );
- }
-
- if ( !checkSeparator )
- {
- return;
- }
-
- aOptimizeBefore.Reset();
- aOptimizeBefore.Compress();
-
- for ( i = 0; i < aOptimizeAfter.Count(); ++i )
- {
- aOptimizeBefore.AppendL( aOptimizeAfter.MdcaPoint( i ) );
- }
-
- aOptimizeAfter.Reset();
- aOptimizeAfter.Compress();
-
-
- for ( TInt k = 0; k < aOptimizeBefore.Count(); ++k )
- {
- j = 0;
- bufLength = 0;
- position = 0;
- spellingBuf.Size();
- spellingBuf.Copy( aOptimizeBefore.MdcaPoint( k ) );
- bufLength = spellingBuf.Length();
- for ( TInt kk = 0; kk < bufLength; ++kk )
- {
- if ( 0 == spellingBuf.Mid( kk, 1 ).Compare( KPinyinManualSeparator ) )
- {
- for ( TInt kkk = 0; kkk < countSeparator; ++kkk)
- {
- if ( j == countBuf[kkk] )
- {
- spellingBuf.Replace( kk, 1, KPinyinListSeparator );
- }
- }
- }
- else
- {
- j = j + 1;
- }
- }
- aOptimizeAfter.AppendL( spellingBuf );
- }
- }
-void TAknFepInputStateEntryPinyinPhrase::DeliberatelyUpdateSelection()
- {
- TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection();
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
-
- TInt selected = popup->CurrentSelection();
- ptiengine->EnableToneMarks(EFalse);
- TPtrC spelling = ptiengine->GetPhoneticSpelling(selected + 1); // our index is zero based, engine index is one based
- deliberateSelection = spelling.Left(
- MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark);
- ptiengine->EnableToneMarks(ETrue);
- UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingNavigation);
- RefreshUI(popup->CurrentVisibleSelection());
- }
-
-void TAknFepInputStateEntryPinyinPhrase::ImplicitlyUpdateSelection()
- {
- TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
- TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length();
- CPtiEngine* ptiengine = iOwner->PtiEngine();
-
- // previously selected is compared in turn to each of the new candidates
- ptiengine->EnableToneMarks(EFalse);
- TInt pinyinCount = ptiengine->PhoneticSpellingCount();
- TInt newSelection = 0;
- for(TInt i = 0; i < pinyinCount; i++)
- {
- TPtrC spelling = ptiengine->GetPhoneticSpelling(i + 1); // our index is zero based, engine index is one based
- TInt spellingLength = spelling.Length();
-
- // figure out how many characters we are comparing, this depends on the
- // direction of the edit
- TInt compareLength = oldDeliberateSelectionLength <= spellingLength ?
- oldDeliberateSelectionLength : spellingLength;
-
- if(oldDeliberateSelection.Left(compareLength) == spelling.Left(compareLength))
- {
- // as soon as a substring match is found, the
- // highlight position is set to that candidate in the new list.
- // note that in the case of the first character entered, the
- // oldBuf will be empty so it will always match... which is
- // fine as we want to select the top one anyway, so we will
- // quit the loop early.
- newSelection = i;
- break;
- }
- }
-
- ptiengine->EnableToneMarks(ETrue);
- UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged);
- RefreshUI(newSelection);
- }
-
-void TAknFepInputStateEntryPinyinPhrase::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;
- }
-
-void TAknFepInputStateEntryPinyinPhrase::RefreshUI(TInt aSelection)
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray();
- CDesCArrayFlat* optimizeSpelling = popup->PhoneticSpellingArray();
- CDesCArrayFlat* spelling = popup->OptimizeSpelling();
-
- TBuf<KMaxKeystrokeCount> keystrokeBuf;
-
- // get cursor position
- TPoint baseLine = TPoint(0,0);
- TInt height = 0;
- TInt ascent = 0;
-
- TBool checkTonemark = popup->GetTonemarkState();
- TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent));
- if (ret == KErrNone)
- {
- uiContainer->SetContainerPosition(baseLine, height);
- }
-
- TText toneMark;
- TBool toneMarkEntered = ptiengine->ToneMark(toneMark);
- TBuf<1> validToneMarkBuf;
- if(toneMarkEntered)
- {
- // override specific invalid tonemark character only, the others are the same character
- // when both valid and invalid
- if(toneMark == KPinyinTone4Invalid)
- toneMark = KPinyinTone4Valid;
- validToneMarkBuf.Append(toneMark);
- }
-
- // to start with, disable the tone marks so we can get the list of all pinyin matches
- // later we will figure out which ones are invalid
- ptiengine->EnableToneMarks(EFalse);
- TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount();
- if(pinyinCountWithoutToneMarks > 0)
- {
- if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged))
- {
- if ( ( inEffectKeystrokeArray->Count() < keystrokeArray->Count() ) ||
- ( !checkTonemark ) )
- {
- spelling->Reset();
- optimizeSpelling->Reset();
- spelling->Compress();
- optimizeSpelling->Compress();
- }
- else
- {
- spelling->Reset();
- optimizeSpelling->Reset();
- spelling->Compress();
- optimizeSpelling->Compress();
- TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling));
- if (ignore != KErrNone)
- {
- return;
- }
-
- TRAPD( iOptimize, OptimizeSpellingL( *spelling, *optimizeSpelling ) );
- if ( KErrNone != iOptimize )
- {
- return;
- }
- }
-
- GetKeystrokeBuf( *showKeystrokeArray, keystrokeBuf );
-
- TRAPD( retOptimize, optimizeSpelling->AppendL( keystrokeBuf ) );
- if ( KErrNone != retOptimize )
- {
- return;
- }
- popup->SplitPhraseSpellingIntoPages();
- }
-
- // set display page for delibrate selection
- popup->SetDisplayPage(aSelection);
- popup->SetPhraseItemTexts();
-
- // fill in input pane although it's invisible
- if ( inEffectKeystrokeArray->Count() < keystrokeArray->Count() )
- {
- inputPane->SetText( keystrokeBuf );
- }
- else
- {
- if ( optimizeSpelling->Count() > popup->CurrentSelection() )
- {
- inputPane->SetText( optimizeSpelling->MdcaPoint( popup->CurrentSelection() ) );
- }
- else
- {
- inputPane->SetText( KNullDesC );
- }
- }
- popup->PopupSizeChanged(); // phrase input
- }
- // turn tone marks back on so that we know where we are.
- ptiengine->EnableToneMarks(ETrue);
-
- // this is where we start to figure out whether the tonemarks are valid,
- // whether the selected tonemark is valid, and what is the index of the
- // selected candidate in the list of candidates with tonemarks...
- TBool selectionToneMarkValid = EFalse;
- TInt selectionIndexAdjustedForToneMarkValidity = popup->CurrentSelection();
-
- // we only need to deal with tone marks if there is one
- if(toneMarkEntered)
- {
- if(pinyinCountWithoutToneMarks > 0)
- {
- for(TInt i = 0; i < pinyinCountWithoutToneMarks; i++)
- {
- TBool valid = EFalse;
-
- TBuf<MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark> nextCandidateWithoutToneMark;
- nextCandidateWithoutToneMark.Copy(ptiengine->GetPhoneticSpelling(i + 1).Left(
- MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark));
-
- ptiengine->EnableToneMarks(EFalse);
- ptiengine->SelectPhoneticSpelling(i + 1);
-
- valid = ptiengine->IsToneMarkValidForSpelling();
- if(valid)
- {
- ptiengine->EnableToneMarks(ETrue);
- TInt pinyinCountWithToneMarks = ptiengine->PhoneticSpellingCount();
-
- for(TInt j = 0; j < pinyinCountWithToneMarks; j++)
- {
- // use j here not i as we are looking at the list with tonemarks
- TPtrC nextCandidateWithToneMark = ptiengine->GetPhoneticSpelling(j + 1);
- if(nextCandidateWithToneMark == nextCandidateWithoutToneMark)
- {
- if(i == aSelection)
- {
- selectionToneMarkValid = ETrue;
-
- // fill in input pane even if it can't be seen, for when we have to hide popup window
- inputPane->SetText(nextCandidateWithoutToneMark);
- }
- break;
- }
- }
- }
- }
- }
- }
- ptiengine->EnableToneMarks(EFalse);
- ptiengine->SelectPhoneticSpelling(popup->CurrentSelection() + 1);
- // next two lines are for tonemark validity
- ptiengine->EnableToneMarks(selectionToneMarkValid);
- ptiengine->SelectPhoneticSpelling(selectionIndexAdjustedForToneMarkValidity + 1); // our index is zero based, engine index is one based
-
- // update the candidate pane.
- if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged)
- || popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingNavigation))
- {
- CDesCArrayFlat* phraseCandidates = uiContainer->CandidatePane()->CandidateArray();
- if ( ( pinyinCountWithoutToneMarks > popup->CurrentSelection() ) &&
- ( inEffectKeystrokeArray->Count() == keystrokeArray->Count() ) &&
- checkTonemark )
- {
- TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates));
- if (ignore != KErrNone)
- {
- return;
- }
- }
- else if ( keystrokeArray->Count() != 0 )
- {
- phraseCandidates->Reset();
- TRAPD( retAddPinyinNote, phraseCandidates->AppendL( KPinyinNote ) );
- if ( KErrNone != retAddPinyinNote )
- {
- return;
- }
- }
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- popup->ClearFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged
- | MAknFepUICtrlPinyinPopup::ESpellingNavigation);
- }
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable(ETrue);
- // need to enable the pinyin popup after the container so that it is raised to the front
- popup->Enable(pinyinCountWithoutToneMarks > 0);
- UpdateIndicator();
- }
-
-void TAknFepInputStateEntryPinyinPhrase::InitializeStateL(void)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT);
- }
-
-void TAknFepInputStateEntryPinyinPhrase::UpdateIndicator()
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length();
- 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);
- }
- }
-// ---------------------------------------------------------
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::DeleteCurrentKeystroke()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- TInt i = keystrokeArray->Count() - 1;
- TInt count = keystrokeArray->Count() - 1;
- TInt inECTKeystrokeCount = inEffectKeystrokeArray->Count();
- TInt validCount = 0;
-
- if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() )
- {
- for ( i = keystrokeArray->Count() - 1; i >= 0; i-- )
- {
- if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
- {
- keystrokeArray->Delete( i );
- }
- else
- {
- if ( i == count )
- {
- keystrokeArray->Delete( i );
- break;
- }
- break;
- }
- }
- }
- else
- {
- for ( TInt j = 0; j < inECTKeystrokeCount; ++j )
- {
- if ( 0 != inEffectKeystrokeArray->
- MdcaPoint( j ).Compare( KPinyinStar ) )
- {
- validCount = validCount + 1;
- }
- if ( j > 1 )
- {
- if ( ( 0 != inEffectKeystrokeArray->MdcaPoint( j ).
- Compare( KPinyinStar ) ) &&
- ( 0 == inEffectKeystrokeArray->MdcaPoint( j - 1).
- Compare( KPinyinStar ) ) )
- {
- validCount = validCount + 1;
- }
- if ( ( j == inECTKeystrokeCount - 1 ) &&
- ( 0 == inEffectKeystrokeArray->MdcaPoint( j ).
- Compare( KPinyinStar ) ) )
- {
- validCount = validCount + 1;
- }
- }
- }
-
- if ( inEffectKeystrokeArray->Count() > 0 )
- {
- if ( 0 == inEffectKeystrokeArray->MdcaPoint(
- inEffectKeystrokeArray->Count() - 1 ).Compare( KPinyinStar ) )
- {
- popup->SetTonemarkState( ETrue );
- }
- }
-
- if ( 0 == keystrokeArray->MdcaPoint( keystrokeArray->Count() - 1 ).
- Compare( KPinyinStar ) )
- {
- ptiengine->DeleteKeyPress();
- for ( i = keystrokeArray->Count() - 1; i >= 0; i-- )
- {
- if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
- {
- keystrokeArray->Delete( i );
- inEffectKeystrokeArray->Delete(i);
- }
- else
- {
- break;
- }
- }
- }
- else
- {
- keystrokeArray->Delete( i );
- inEffectKeystrokeArray->Delete(i);
- ptiengine->DeleteKeyPress();
- }
- }
- keystrokeArray->Compress();
- inEffectKeystrokeArray->Compress();
- }
-
-// ---------------------------------------------------------
-// Add current keystroke.
-// ---------------------------------------------------------
-void TAknFepInputStateEntryPinyinPhrase::AddCurrentKeystrokeL( const TDesC& keystroke )
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- const TInt offsetSize = 4;
- TInt count = keystrokeArray->Count();
- TInt offset = 0;
- TInt i = count - 1;
-
- if ( 0 != keystroke.Compare( KPinyinStar ) )
- {
- if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() )
- {
- keystrokeArray->AppendL( keystroke );
- keystrokeArray->Compress();
- return;
- }
- else
- {
- keystrokeArray->AppendL( keystroke );
- keystrokeArray->Compress();
- inEffectKeystrokeArray->AppendL( keystroke );
- inEffectKeystrokeArray->Compress();
- return;
- }
- }
-
- for ( i = count - 1; i >= 0; i-- )
- {
- if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( KPinyinStar ) )
- {
- offset = offset + 1;
- }
- else
- {
- break;
- }
- }
- if ( ( 0 <= offset ) && ( offset <= offsetSize ) )
- {
- if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() )
- {
- keystrokeArray->AppendL( keystroke );
- keystrokeArray->Compress();
- }
- else
- {
- keystrokeArray->AppendL( keystroke );
- keystrokeArray->Compress();
- inEffectKeystrokeArray->AppendL( keystroke );
- inEffectKeystrokeArray->Compress();
- }
- }
- else
- {
- if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() )
- {
- for ( TInt ii = 0; ii < offsetSize; ++ii )
- {
- keystrokeArray->Delete( count - 1 -ii );
- }
- keystrokeArray->Compress();
- }
- else
- {
- for ( TInt ii = 0; ii < offsetSize; ++ii )
- {
- keystrokeArray->Delete( count - 1 -ii );
- inEffectKeystrokeArray->Delete( count - 1 -ii );
- }
- keystrokeArray->Compress();
- inEffectKeystrokeArray->Compress();
- }
- }
- }
-
-
-// ---------------------------------------------------------
-// Get the keystroke.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::GetKeystrokeNum( TInt aKey, TDes& aKeystroke )
- {
- switch(aKey)
- {
- case KKey0Code:
- aKeystroke.Append( KPinyinListSeparator );
- break;
- case KKey1Code:
- aKeystroke.Append( KPinyinListSeparator );
- break;
- case KKey2Code:
- aKeystroke.Append(EPtiKey2);
- break;
- case KKey3Code:
- aKeystroke.Append(EPtiKey3);
- break;
- case KKey4Code:
- aKeystroke.Append(EPtiKey4);
- break;
- case KKey5Code:
- aKeystroke.Append(EPtiKey5);
- break;
- case KKey6Code:
- aKeystroke.Append(EPtiKey6);
- break;
- case KKey7Code:
- aKeystroke.Append(EPtiKey7);
- break;
- case KKey8Code:
- aKeystroke.Append(EPtiKey8);
- break;
- case KKey9Code:
- aKeystroke.Append(EPtiKey9);
- break;
- default:
- aKeystroke.Append(EPtiKeyStar);
- break;
- }
- }
-
-// ---------------------------------------------------------
-// Get the keystroke buf.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::GetKeystrokeBuf(const CDesCArrayFlat& aKeystrokeArray, TDes& aKeystrokeBuf )
- {
- for ( TInt i = 0; i < aKeystrokeArray.Count(); ++i )
- {
- aKeystrokeBuf.Append(aKeystrokeArray.MdcaPoint(i));
- }
- }
-
-// ---------------------------------------------------------
-// clear keystroke.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::ClearKeystrokeBuf()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray();
- CDesCArrayFlat* chooseChineseArray = popup->ChooseChineseCharacterArray();
- CDesCArrayFlat* chooseChienseKeystroke = popup->ChooseChineseCharacterArrayKeystroke();
-
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- TInt pinyinCount = ptiengine->PhoneticSpellingCount();
- chooseChineseArray->Reset();
- chooseChienseKeystroke->Reset();
-
- if ( 0 == pinyinCount )
- {
- keystrokeArray->Reset();
- inEffectKeystrokeArray->Reset();
- showKeystrokeArray->Reset();
- }
- }
-
-// ---------------------------------------------------------
-// Get tome mark.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::GetPinyinToneMark( const CDesCArrayFlat& aKeystrokeArray, TDes& aPinyinToneMark )
- {
- TInt starCount = 0;
- TInt pinyinToneMark;
- TBuf<1> buf;
- TInt count = aKeystrokeArray.Count();
- const TInt toneMark0 = 0;
- const TInt toneMark1 = 1;
- const TInt toneMark2 = 2;
- const TInt toneMark3 = 3;
- const TInt toneMark4 = 4;
-
- if ( 0 == count )
- {
- aPinyinToneMark.Append( KPinyinTone0Valid );
- return;
- }
-
- for ( TInt i = count - 1; i >= 0; --i )
- {
- buf = aKeystrokeArray.MdcaPoint( i );
- if ( 0 == buf.Compare( KPinyinStar ) )
- {
- starCount = starCount + 1;
- }
- else
- {
- break;
- }
- }
-
- if ( 0 == starCount )
- {
- aPinyinToneMark.Append( KPinyinTone0Valid );
- }
- else
- {
- pinyinToneMark = starCount % KMaxStarCount;
- switch ( pinyinToneMark )
- {
- case toneMark0:
- aPinyinToneMark.Append( KPinyinTone4Valid );
- break;
- case toneMark1:
- aPinyinToneMark.Append( KPinyinTone0Valid );
- break;
- case toneMark2:
- aPinyinToneMark.Append( KPinyinTone1Valid );
- break;
- case toneMark3:
- aPinyinToneMark.Append( KPinyinTone2Valid );
- break;
- case toneMark4:
- aPinyinToneMark.Append( KPinyinTone3Valid );
- break;
- default:
- break;
- }
- }
- }
-
-// ---------------------------------------------------------
-// Check keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateEntryPinyinPhrase::CheckKeystroke( TInt aKey, const CDesCArrayFlat& aKeystrokeArray )
- {
- CDesCArrayFlat* showKeystrokeArray = UIContainer()->
- PinyinPopupWindow()->ShowKeystrokeArray();
-
- TInt count = showKeystrokeArray->Count();
- TBuf<1> keyBuf;
-
- if ( count >= KMaxShowKeystrokeCount )
- {
- if ( ( 0 != aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ).
- Compare( KPinyinStar ) ) || ( aKey != EPtiKeyStar ) )
- {
- return EFalse;
- }
- }
-
- GetKeystrokeNum( aKey, keyBuf );
-
- if ( 0 == aKeystrokeArray.Count() )
- {
- if ( ( 0 == keyBuf.Compare ( KPinyinStar ) ) || ( 0 == keyBuf.Compare ( KPinyinListSeparator ) ) )
- {
- return EFalse;
- }
- }
- else
- {
- if ( 0 == aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ).Compare( KPinyinStar ) &&
- ( 0 == keyBuf.Compare ( KPinyinListSeparator ) ) )
- {
- return EFalse;
- }
-
- if ( 0 == aKeystrokeArray.MdcaPoint( aKeystrokeArray.Count() - 1 ).Compare( KPinyinListSeparator ) &&
- ( 0 == keyBuf.Compare ( KPinyinStar ) ) )
- {
- return EFalse;
- }
- }
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// Check tome mark.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::CheckTonemarkL()
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
- CDesCArrayFlat* keystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* showKeystrokeArray = popup->ShowKeystrokeArray();
- CDesCArrayFlat* spelling = popup->OptimizeSpelling();
-
- TInt tonemarkCount = 0;
- TInt spellTonemarkCount = 0;
- TInt keystrokeStarCount = 0;
-
- TInt offset = 0;
- TInt i = 0;
- TBool checkReturn = EFalse;
-
- TBuf<1> buf;
- TBuf<1> lastTonemark;
- TBuf<1> lastSpellTonemark;
- TBuf<1> tonmarkBuf0;
- TBuf<1> tonmarkBuf1;
- TBuf<1> tonmarkBuf2;
- TBuf<1> tonmarkBuf3;
- TBuf<1> tonmarkBuf4;
- TBuf<KMaxPinyinLength> spellBuf;
-
- tonmarkBuf0.Append( KPinyinTone0Valid );
- tonmarkBuf1.Append( KPinyinTone1Valid );
- tonmarkBuf2.Append( KPinyinTone2Valid );
- tonmarkBuf3.Append( KPinyinTone3Valid );
- tonmarkBuf4.Append( KPinyinTone4Valid );
-
- if ( 0 == inEffectKeystrokeArray->Count() )
- {
- popup->SetTonemarkState( EFalse );
- return;
- }
-
- if ( keystrokeArray->Count() > inEffectKeystrokeArray->Count() )
- {
- popup->SetTonemarkState( EFalse );
- return;
- }
-
- for ( i = 0; i < showKeystrokeArray->Count(); ++i )
- {
- buf.Copy( showKeystrokeArray->MdcaPoint( i ) );
- if ( 0 == buf.Compare( tonmarkBuf0 ) )
- {
- tonemarkCount = tonemarkCount + 1;
- lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) );
- }
- else if ( 0 == buf.Compare( tonmarkBuf1 ) )
- {
- tonemarkCount = tonemarkCount + 1;
- lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) );
- }
- else if ( 0 == buf.Compare( tonmarkBuf2 ) )
- {
- tonemarkCount = tonemarkCount + 1;
- lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) );
- }
- else if ( 0 == buf.Compare( tonmarkBuf3 ) )
- {
- tonemarkCount = tonemarkCount + 1;
- lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) );
- }
- else if ( 0 == buf.Compare( tonmarkBuf4 ) )
- {
- tonemarkCount = tonemarkCount + 1;
- lastTonemark.Copy( showKeystrokeArray->MdcaPoint( i ) );
- }
- }
-
- if ( 0 == tonemarkCount )
- {
- popup->SetTonemarkState( ETrue );
- return;
- }
-
- for( i = 0; i < inEffectKeystrokeArray->Count(); ++i )
- {
- if ( 0 == inEffectKeystrokeArray->MdcaPoint(
- inEffectKeystrokeArray->Count() - 1 - i ).Compare( KPinyinStar ) )
- {
- keystrokeStarCount = keystrokeStarCount + 1;
- }
- else
- {
- break;
- }
- }
- if ( keystrokeStarCount > 1 )
- {
- ptiengine->DeleteKeyPress();
- }
-
- if ( keystrokeStarCount > KMaxStarCount )
- {
- offset = 1;
- for ( i = 0; i < KMaxStarCount; ++i )
- {
- keystrokeArray->Delete( keystrokeArray->Count() - 1 );
- inEffectKeystrokeArray->Delete( inEffectKeystrokeArray->Count() - 1 );
- }
- }
- else
- {
- offset = keystrokeStarCount;
- }
-
- if ( 0 == offset )
- {
- popup->SetTonemarkState( ETrue );
- return;
- }
- else
- {
- for( i = 0; i < offset; ++i )
- {
- ptiengine->IncrementToneMark( ETrue );
- spelling->Reset();
- spelling->Compress();
- ptiengine->GetPhoneticSpellingsL(*spelling);
- for ( TInt j = 0; j < spelling->Count(); ++j )
- {
- spellTonemarkCount = 0;
- spellBuf.Copy( spelling->MdcaPoint( j ) );
- for ( TInt jj = 0; jj < spellBuf.Length(); ++jj )
- {
- if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf0 ) )
- {
- spellTonemarkCount = spellTonemarkCount + 1;
- lastSpellTonemark.Copy( tonmarkBuf0 );
- }
- else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf1 ) )
- {
- spellTonemarkCount = spellTonemarkCount + 1;
- lastSpellTonemark.Copy( tonmarkBuf1 );
- }
- else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf2 ) )
- {
- spellTonemarkCount = spellTonemarkCount + 1;
- lastSpellTonemark.Copy( tonmarkBuf2 );
- }
- else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf3 ) )
- {
- spellTonemarkCount = spellTonemarkCount + 1;
- lastSpellTonemark.Copy( tonmarkBuf3 );
- }
- else if ( 0 == spellBuf.Mid( jj, 1 ).Compare( tonmarkBuf4 ) )
- {
- spellTonemarkCount = spellTonemarkCount + 1;
- lastSpellTonemark.Copy( tonmarkBuf4 );
- }
- }
-
- if ( ( tonemarkCount != spellTonemarkCount ) ||
- ( 0 != lastSpellTonemark.Compare( lastTonemark ) ))
- {
- checkReturn = EFalse;
- break;
- }
- else
- {
- checkReturn = ETrue;
- }
- }
- if ( checkReturn )
- {
- break;
- }
- }
- }
-
- spelling->Reset();
- spelling->Compress();
-
- if ( checkReturn )
- {
- popup->SetTonemarkState( ETrue );
- return;
- }
- else
- {
- popup->SetTonemarkState( EFalse );
- return;
- }
-
- }
-
-// ---------------------------------------------------------
-// Get change state.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStateEntryPinyinPhrase::GetChangeState()
- {
- MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
- CDesCArrayFlat* KeystrokeArray = popup->KeystrokeArray();
- CDesCArrayFlat* inEffectKeystrokeArray = popup->InEffectKeystrokeArray();
- TInt firstIndex = -1;
- TInt count = inEffectKeystrokeArray->Count() - 1;
-
-
-
- if ( 2 > inEffectKeystrokeArray->Count() )
- {
- return ETrue;
- }
-
- for ( TInt i = count; i >= 0; i-- )
- {
- if ( 0 != inEffectKeystrokeArray->MdcaPoint( i ).
- Compare( KPinyinStar ) )
- {
- firstIndex = i;
- break;
- }
- }
-
- if ( ( 0 == firstIndex ) && ( !popup->GetTonemarkState() ) )
- {
- return EFalse;
- }
-
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// Append show keystroke.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::ShowKeystrokeAppendL(
- CDesCArrayFlat& aShowKeystrokeArray,
- const CDesCArrayFlat& aKeystrokeArray,
- const TDesC& aPinyinToneMark )
- {
- TInt showCount = 0;
- TInt count = 0;
- TBuf<1> buf;
- count = aKeystrokeArray.Count();
- showCount = aShowKeystrokeArray.Count();
-
- if ( ( count > 2 ) && ( showCount > 1 ) )
- {
- if ( 0 == aKeystrokeArray.MdcaPoint( count - 2 ).Compare( KPinyinStar ) )
- {
- aShowKeystrokeArray.Delete( showCount - 1 );
- aShowKeystrokeArray.Compress();
- aShowKeystrokeArray.AppendL( aPinyinToneMark );
- }
- else
- {
- aShowKeystrokeArray.AppendL( aPinyinToneMark );
- }
- }
- else
- {
- aShowKeystrokeArray.AppendL( aPinyinToneMark );
- }
- }
-
-// ---------------------------------------------------------
-// change CBA.
-// ---------------------------------------------------------
-//
-void TAknFepInputStateEntryPinyinPhrase::ChangeCbaL()
- {
- MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
- TInt lastRes = popup->GetLastResouce();
- if ( lastRes == R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT )
- {
- return;
- }
- iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT );
- popup->SetLastResouce( R_AKNFEP_SOFTKEYS_PHRASE_CREATION_SELECT_CANCEL_SELECT );
- }
-
-// End of file