diff -r f1bdd6b078d1 -r 2cb9bae34d17 fep/aknfep/src/AknFepUiInputStateCandidateChinesePhrase.cpp --- a/fep/aknfep/src/AknFepUiInputStateCandidateChinesePhrase.cpp Tue Jul 06 14:38:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,265 +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 chinese phrase state -* -*/ - - - - - - - - - - - - -#include "AknFepUiInputStateCandidateChinesePhrase.h" -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" -#include "AknFepUICtrlCandidatePane.h" //MAknFepUICtrlCandidatePane -#include //CPtiEngine -#include -#include "aknfepzhuyinconvertion.h" -#include "aknfepzhuyinkeyhandlerinterface.h" -#include - -const TInt KMaxBufLen = 100; -const TInt KInputPhraseMaxLength = 7; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); -/////////////////// -// Candidate state -/////////////////// - -TAknFepInputStateCandidateChinesePhrase::TAknFepInputStateCandidateChinesePhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateCandidateBaseChinesePhrase(aOwner, aUIContainer) - { - iState = ECandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength>1; - - uiContainer->ShowHorizontalScrollArrows(showHorizontalScrollArrows); - uiContainer->ShowVerticalScrollArrows(multiplePages); - uiContainer->FocusCandidatePane(ETrue); - uiContainer->CandidatePane()->ShowCandidateOrdinals(ETrue); - UpdateIndicator(); - UIContainer()->EditPaneWindow()->DisableCursor(); - } - -TBool TAknFepInputStateCandidateChinesePhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength) - { - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - CDesCArrayFlat* zhuyinSymbols = uiContainer->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = uiContainer->PinyinPopupWindow()->ChineseCharsDisped(); - CDesCArrayFlat* zhuyinSymbolsForChinese = uiContainer->PinyinPopupWindow()->ZhuyinSymbolsForChineseCharsDisped(); - CDesCArrayFlat* candidateList = uiContainer->CandidatePane()->CandidateArray(); - MZhuyinKeyHandler* zhuyinKeyHandler = iOwner->ZhuyinKeyHandler(); - - TInt index = MapKeyToIndex(aKey); - - if(aKey == EKeyBackspace) - { - zhuyinKeyHandler->SetStatusChgFlag(MZhuyinKeyHandler::EFromCandidateToEntry); - iOwner->ChangeState(EEntry); - return ETrue; - } - - // for fix bug when press left or right arrow play err-tone - if ( HandleVerticalNavigation( aKey ) || HandleHorizontalNavigation( aKey ) ) - { - return ETrue; - } - - if ( aLength == EShortKeyPress && ( candidatePane->SelectIndex(index,EFalse) - || aKey == EKeyOK || aKey == EKeyCBA1 )) - { - TPtrC text = candidatePane->CurrentPhraseCandidate(); - if ( text.Length() == 0 ) - { - return ETrue; - } - TBuf pinyinshown = UIContainer()->PinyinPopupWindow()->GetEEPContent(); - TInt count = TZhuyinSymbolsMethods::GetChineseCount(pinyinshown); - if ( count > text.Length() ) - { - fepMan->PhraseCreation(ETrue); - } - if ( fepMan->IsPhraseCreation( ) ) - { - TBuf buf; - buf.Copy( text ); - TBool commit = TZhuyinSymbolsMethods::AppendChineseChar( buf, - fepMan->ZhuyinAnalyser( ), zhuyinSymbols, chineseDisped, - zhuyinSymbolsForChinese ); - TBool changeState = UpdateEEPContent(); - if ( commit ) - { - TBuf commitbuf; - TZhuyinSymbolsMethods::Convert2Des(chineseDisped, commitbuf); - fepMan->NewTextL(commitbuf); - fepMan->CommitInlineEditL(); - AddPhraseToDB(commitbuf); - if ( chineseDisped->Count() < KInputPhraseMaxLength || - zhuyinSymbols->Count() == 0 ) - { - iOwner->FepMan()->TryCloseUiL(); - } - else - { - CAknWarningNote* errnote = new( ELeave ) CAknWarningNote(); - errnote->SetTone( CAknNoteDialog::EWarningTone ); - errnote->ExecuteLD( KMaxPhraseNote ); - fepMan->TryCloseUiL(); - } - popup->ResetStrokeArray(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - if ( changeState ) - { - for ( TInt i = 0; i < candidateList->Count(); i++ ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( - candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - if ( candidateList->Count() > 0 ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - else - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSequenceEdit ); - } - } - } - else - { - TBuf textbuf; - for ( TInt i = 0; i < chineseDisped->Count(); i++ ) - { - textbuf.Append(chineseDisped->MdcaPoint(i)); - } - textbuf.Append(text); - fepMan->NewTextL(textbuf); - fepMan->CommitInlineEditL(); - AddPhraseToDB(textbuf); - popup->ResetStrokeArray(); - if ( text.Length() <= KInputPhraseMaxLength && !fepMan->IsPhraseCreation() ) - { - if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull)) - { - fepMan->ClearFlag(CAknFepManager::EFlagEditorFull); - iOwner->FepMan()->TryCloseUiL(); - } - else - { - iOwner->ChangeState( EPredictiveCandidate ); - } - } - else - { - fepMan->TryCloseUiL(); - } - } - } - else if ( aKey == EPtiKeyStar ) - { - return ETrue; - } - else if ( aKey == EKeyCBA2 ) - { - popup->ResetStrokeArray(); - iOwner->FepMan()->EntryPhrase( EFalse ); - iOwner->FepMan()->TryCloseUiL(); - } - else if ( !iOwner->IsValidChineseInputKey(aKey) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - return ETrue; - } - -TBool TAknFepInputStateCandidateChinesePhrase::UpdateEEPContent( ) - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesCArrayFlat* zhuyinSymbols = UIContainer()->PinyinPopupWindow()->ZhuyinSymbols(); - CDesCArrayFlat* chineseDisped = UIContainer()->PinyinPopupWindow()->ChineseCharsDisped(); - CAknFepZhuyinAnalyser* analyser = iOwner->ZhuyinAnalyser(); - CDesCArrayFlat* candidateList = UIContainer()->CandidatePane()->CandidateArray(); - TBuf buf; - TBool isPhraseCreation = EFalse; - TBool valid = TZhuyinSymbolsMethods::UpdateEEPContent( - ptiengine, - analyser, - zhuyinSymbols, - chineseDisped, - candidateList, - buf, - isPhraseCreation - ); - - if ( chineseDisped->Count() != 0 || zhuyinSymbols->Count() > 1 ) - { - for ( TInt i = 0; i < candidateList->Count(); ++i ) - { - if ( TZhuyinSymbolsMethods::IsZhuyinSymbol( candidateList->MdcaPoint( i ) ) ) - { - candidateList->Delete( i, 1 ); - break; - } - } - } - iOwner->FepMan()->PhraseCreation(isPhraseCreation); - UIContainer()->PinyinPopupWindow()->SetEEPContent(buf); - UIContainer()->PinyinPopupWindow()->SetEEPContentValid(valid); - return valid; - } -void TAknFepInputStateCandidateChinesePhrase::AddPhraseToDB( TDes& aPhrase ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhrase ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// End of file