diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp --- a/fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /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 //CPtiEngine -#include -#include -#include - -#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 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 beforeBuf; - TBuf 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 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