--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/AknFepUiInputStateCandidateChinesePhrase.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,265 @@
+/*
+* 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 <PtiEngine.h> //CPtiEngine
+#include <aknnotewrappers.h>
+#include "aknfepzhuyinconvertion.h"
+#include "aknfepzhuyinkeyhandlerinterface.h"
+#include <PtiUserDicEntry.h>
+
+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<KMaxBufLen> pinyinshown = UIContainer()->PinyinPopupWindow()->GetEEPContent();
+ TInt count = TZhuyinSymbolsMethods::GetChineseCount(pinyinshown);
+ if ( count > text.Length() )
+ {
+ fepMan->PhraseCreation(ETrue);
+ }
+ if ( fepMan->IsPhraseCreation( ) )
+ {
+ TBuf<KMaxBufLen> buf;
+ buf.Copy( text );
+ TBool commit = TZhuyinSymbolsMethods::AppendChineseChar( buf,
+ fepMan->ZhuyinAnalyser( ), zhuyinSymbols, chineseDisped,
+ zhuyinSymbolsForChinese );
+ TBool changeState = UpdateEEPContent();
+ if ( commit )
+ {
+ TBuf<KMaxBufLen> 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<KMaxBufLen> 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<KMaxBufLen> 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