diff -r f1bdd6b078d1 -r 2cb9bae34d17 fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp --- a/fep/aknfep/src/aknfepuiinputstatestrokephrasebase.cpp Tue Jul 06 14:38:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1286 +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 TAknFepInputStateStrokePhraseCreationBase definition. -* -*/ - - - - - - - - - - - - - -// System includes -#include -#include -#include -#include -#include //CAknWarningNote - -// User includes -#include "AknFepUIManagerStateInterface.h" -#include "AknFepUICtrlInputPane.h" -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "aknfepuictrleditpane.h" //pinyin phrase creation -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepManager.h" -#include "aknfepuiinputstatestrokephrasebase.h" - -// Constant definition -const TInt KMinCnadidateCount = 1; -const TInt KMaxPhraseCount = 50; -const TInt KEnginePhoneticIndex = 1; -const TInt KMaxPhraseCreationCount = 7; -const TInt KMaxKeystrokeCount = 31; -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 KAutoChangeState = 1; -const TInt KManualChangeState = 0; -const TUint16 KDelimiter = 0x2022; -const TUint16 KStrokeKey1 = 0x4E00; -const TUint16 KStrokeKey2 = 0x4E28; -const TUint16 KStrokeKey3 = 0x4E3F; -const TUint16 KStrokeKey4 = 0x4E36; -const TUint16 KStrokeKey5 = 0x4E5B; -const TUint16 KStrokeKey6 = 0x003F; - -const TUint16 KSegment = 0x0020; - -_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" ); - -const TKeyMap StrokeMap[] = - { - {KDelimiter, KKey0Code}, - {KStrokeKey1, KKey1Code}, - {KStrokeKey2, KKey2Code}, - {KStrokeKey3, KKey3Code}, - {KStrokeKey4, KKey4Code}, - {KStrokeKey5, KKey5Code}, - {KStrokeKey6, KKey6Code} - }; - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateStrokePhraseBase::TAknFepInputStateStrokePhraseBase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer) - :TAknFepInputStateChineseBase(aOwner, aUIContainer) - { - if ( iOwner->PtiEngine()->InputMode() != EPtiEngineStrokeByPhrase ) - { - iOwner->PtiEngine()->SetInputMode( EPtiEngineStrokeByPhrase ); - } - iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount ); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetFepMan( iOwner->FepMan() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::HandleKeyL( - TInt aKey, - TKeyPressLength aLength ) - { - switch( aKey ) - { - case EKeyBackspace: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - HandleKeyBackspaceL( aLength ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyUpArrow: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - break; - } - case EKeyDownArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - if ( CheckFirstGroupStroke() ) - { - UIContainer()->PinyinPopupWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyLeftArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - MoveCursorLeft(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyRightArrow: - { - if ( EStrokeSequenceEdit == iState ) - { - MoveCursorRight(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - } - case EKeyOK: - case EKeyCBA1: - { - if ( CheckKeyNeedRepeat( aLength ) ) - { - HandleKeyCBA1OrKeyOKL( aLength ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - case EKeyCBA2: - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - default: - { - if ( ( EShortKeyPress == aLength ) && - ( iOwner->IsValidChineseInputKey( aKey ) ) ) - { - HandleDefaultKeyL( aKey ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - break; - } - } - - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RefreshUI -// Update input window. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RefreshUI( TBool aRefresh ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - // get cursor position - if ( aRefresh ) - { - TPoint baseLine; - TInt height(0); - TInt ascent(0); - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if (ret == KErrNone) - { - uiContainer->SetContainerPosition(baseLine, height); - } - } - - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - ShowInfoOnCandidatePane(); - UpdateIndicator(); - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation -// Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckFirstGroupStroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* keystroke = uiContainer-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt pos = 0; - if ( 0 == keystroke->Count() ) - { - return EFalse; - } - - ClearPtiEngineKeystroke(); - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( 0 == keystroke->Find( delimiter, pos ) ) - { - if ( 0 == pos ) - { - return EFalse; - } - } - else - { - pos = keystroke->Count(); - } - - for ( TInt i = 0; i < pos; ++i ) - { - GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) ); - stringBeforeLength = - ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - //the keystroke is invalid. - if ( stringBeforeLength == stringAfterLength ) - { - ClearPtiEngineKeystroke(); - return EFalse; - } - } - return ETrue; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL -// Handle KeyBackspace event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyBackspaceL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( ( 0 == index ) && ( phraseCount != 0 ) ) - { - RevertPhraseToKeystrokeL(); - } - else if ( ( 0 == index ) && ( keystroke->Count() > 0 ) ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - if ( !DeleteKeystroke() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - } - - if ( popup->ChooseChineseCharacterArrayForStroke()->Count() == 0 ) - { - iOwner->FepMan()->PhraseCreation( EFalse ); - } - - //if the keystroke is null and phrase is null then close input window. - if ( ( 0 == phraseCount ) && ( keystroke->Count() == 0 ) ) - { - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return; - } - - //Auto change from EStrokeSequenceEdit state to EEntry state. - if ( EStrokeSequenceEdit == iState ) - { - if ( ( KAutoChangeState == popup->GetState() ) && - ( !firstGroup ) && CheckFirstGroupStroke() ) - { - popup->SetChangeState( EFalse ); - iOwner->ChangeState( EEntry ); - return; - } - } - - //Auto change from EEntry state to EStrokeSequenceEdit state. - if ( EEntry == iState ) - { - if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) ) - { - popup->SetChangeState( EFalse ); - popup->SetState( KAutoChangeState ); - iOwner->ChangeState( EStrokeSequenceEdit ); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntryL -// Entry handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEntry( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool state = ETrue; - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - - if ( state ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( ECandidate ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL -// Edit state handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKEditL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TBuf phraseCreated; - if ( (phrase->Count() >= 2 ) && ( 0 == keystrokeArray->Count() ) ) - { - //commit the chinese character. - for (TInt i = 0; i < phrase->Count(); ++i ) - { - phraseCreated.Append( phrase->MdcaPoint( i ) ); - } - AddPhraseToDB( phraseCreated ); - iOwner->FepMan()->NewTextL( phraseCreated ); - iOwner->FepMan()->CommitInlineEditL(); - iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI. - } - else if ( CheckFirstGroupStroke() ) - { - popup->SetState( KManualChangeState ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL -// Handle CBA1 or OK key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleKeyCBA1OrKeyOKL( - TKeyPressLength aLength ) - { - if ( EStrokeSequenceEdit == iState ) - { - HandleKeyCBA1OrKeyOKEditL(); - } - else if ( EEntry == iState ) - { - HandleKeyCBA1OrKeyOKEntry( aLength ); - } - else - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL -// Handle default key press event. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::HandleDefaultKeyL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool firstGroup = CheckFirstGroupStroke(); - - if ( !AddKeystrokeL( aKey ) ) - { - iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone); - return; - } - - //Auto change from EStrokeSequenceEdit state to EEntry state. - if ( EStrokeSequenceEdit == iState ) - { - if ( ( KAutoChangeState == popup->GetState() ) && - ( !firstGroup ) && CheckFirstGroupStroke() ) - { - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EEntry ); - return; - } - } - - //Auto change from EEntry state to EStrokeSequenceEdit state. - if ( EEntry == iState ) - { - if ( ( firstGroup ) && ( !CheckFirstGroupStroke() ) ) - { - popup->SetState( KAutoChangeState ); - popup->SetChangeState( ETrue ); - iOwner->ChangeState( EStrokeSequenceEdit ); - return; - } - } - - RefreshUI(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ShowInfoOnEEPPane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TBuf showInfo; - - for (TInt i = 0; i < phrase->Count(); ++i ) - { - showInfo.Append( phrase->MdcaPoint( i ) ); - } - - for (TInt ii = 0; ii < keystroke->Count(); ++ii ) - { - showInfo.Append( keystroke->MdcaPoint( ii ) ); - } - - editPane->SetText( showInfo, phrase->Count() + index ); - if ( EStrokeSequenceEdit == iState ) - { - editPane->ActiveCursor(); - } - else if ( EEntry == iState ) - { - editPane->DeactiveCursor(); - } - else - { - editPane->DisableCursor(); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ShowInfoOnEEP -// Show the showinfo on the EEP ctrl. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ShowInfoOnCandidatePane() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->SetControlInVisible( ETrue ); - CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray(); - if ( KMaxPhraseCreationCount == uiContainer->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count() ) - { - phrase->Reset(); - TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) ); - uiContainer->SetControlInVisible( ETrue ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - - TRAP_IGNORE( GetCandidateL() ); - if ( phrase->Count() > 0 ) - { - // layout candidate and fill candidate buffer for first display page - uiContainer->SetControlInVisible( ETrue ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowVerticalScrollArrows( ETrue ); - } - else - { - uiContainer->SetControlInVisible( EFalse ); - uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->ShowVerticalScrollArrows( EFalse ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetShowKeystroke -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetShowKeystroke( - TInt aKey, - TDes& aKeystroke ) - { - TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] ); - for ( TInt i = 0; i < count ; i++ ) - { - if (aKey == StrokeMap[i].iKeyCode) - { - aKeystroke.Append(StrokeMap[i].iValue); - break; - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation -//Handle horizontal navigation. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::HandleHorizontalNavigation( - TInt aKey ) - { - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - TBool response = EFalse; - - // Do navigation... - if (aKey == EKeyLeftArrow) - { - if(!candidatePane->SelectPrev()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectLastPhrase(); - } - response = ETrue; - } - else if (aKey == EKeyRightArrow) - { - if(!candidatePane->SelectNext()) - { - candidatePane->SetCandidateBuffer(); - candidatePane->SelectFirstPhrase(); - } - response = ETrue; - } - - if (response) - { - UpdateIndicator(); - } - - return response; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::UpdateIndicator -// Update Indicator. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::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 ); - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::DeleteKeystroke -// Delete current keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::DeleteKeystroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( ( 0 == index ) || ( keystrokeArray->Count() == 0 ) ) - { - return EFalse; - } - - if ( 1 == index ) - { - keystrokeArray->Delete( 0 ); - editPane->SetCursorIndexOfKeystroke( 0 ); - editPane->Reset(); - } - else if ( index >= keystrokeArray->Count() ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keystrokeArray->Delete( index - 1 ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TPtiUserDictionaryEntry addUdbEntry( aPhraseAdd ); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RefreshCandidate -// Refresh candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RefreshCandidate() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->Enable( ETrue ); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && - uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showArrows = multiplePages || bufLength > KMinCnadidateCount; - - uiContainer->ShowHorizontalScrollArrows( showArrows ); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat -// Check key whether need repeat. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckKeyNeedRepeat( TKeyPressLength aLength ) - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - if ( popup->IsChangeStatet() && aLength == ELongKeyPress ) - { - return EFalse; - } - else - { - popup->SetChangeState( EFalse ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke -// clear the ptiengine keystroke; -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ClearPtiEngineKeystroke() - { - iOwner->PtiEngine()->ClearCurrentWord(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::AddKeystrokeL -// Add keystroke. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( phraseCount + keystrokeArray->Count() >= KMaxKeystrokeCount ) - { - return EFalse; - } - - TBuf<1> keystroke; - GetShowKeystroke( aKey, keystroke ); - if ( index >= keystrokeArray->Count() ) - { - keystrokeArray->AppendL( keystroke ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keystrokeArray->InsertL( index, keystroke ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - return ETrue; - } -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetCandidateL -// Get the candidate info. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetCandidateL() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* phraseCandidates = - uiContainer->CandidatePane()->CandidateArray(); - CDesCArrayFlat* keystroke = popup->KeystrokeArrayForStroke(); - phraseCandidates->Reset(); - TBuf buf; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( !CheckFirstGroupStroke() ) - { - return; - } - else if ( CheckAllKeystroke() ) - { - for( TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - else - { - TInt pos = 0; - if ( 0 == keystroke->Find( delimiter,pos ) ) - { - for( TInt i = 0; i < pos; ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - else - { - for( TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - } - } - extern void CleanArray( TAny* aAny ); - RPointerArray list; - TCleanupItem cleanitem( CleanArray, &list ); - CleanupStack::PushL( cleanitem ); - HBufC* retString = ptiengine->GetCandidatesByInputString( - buf, - list, - EFalse ); - - delete retString; - retString = NULL; - - for ( TInt i = 0; i < list.Count(); ++i ) - { - phraseCandidates->AppendL( *(list[i]) ); - } - CleanupStack::PopAndDestroy(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetKeystrokeCode -// get Code of the key stroke. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::GetKeystrokeCode( - TInt& aKey, - const TDesC& aKeystroke ) - { - TInt count = sizeof( StrokeMap )/sizeof( StrokeMap[0] ); - for ( TInt i = 0; i < count ; i++ ) - { - TBuf<1> buf; - buf.Append(StrokeMap[i].iValue); - if (0 == aKeystroke.Compare(buf)) - { - aKey = StrokeMap[i].iKeyCode; - break; - } - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::CheckAllKeystroke -// Get the candidate info. -// --------------------------------------------------------- -// -TBool TAknFepInputStateStrokePhraseBase::CheckAllKeystroke() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - CDesCArrayFlat* keystrokeArray = uiContainer-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - - TInt chineseCount = uiContainer->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count(); - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keyCode = 0; - TInt delimiterCount = 0; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - if ( chineseCount > 0 ) - { - return EFalse; - } - - if ( keystrokeArray->Count() > 0 ) - { - if ( 0 == keystrokeArray->MdcaPoint( 0 ).Compare( delimiter ) ) - { - return EFalse; - } - } - ClearPtiEngineKeystroke(); - for ( TInt i = 0; i < keystrokeArray->Count(); ++i ) - { - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) ) - { - delimiterCount = delimiterCount + 1; - } - GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) ); - stringBeforeLength = - ptiengine->GetPhoneticSpelling(KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - - if ( stringBeforeLength == stringAfterLength ) - { - ClearPtiEngineKeystroke(); - return EFalse; - } - } - if ( delimiterCount >= KMaxPhraseCreationCount ) - { - return EFalse; - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL -// Revert the phrase to keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::RevertPhraseToKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = popup->KeystrokeArrayForStroke(); - CDesCArrayFlat* phrase = popup->ChooseChineseCharacterArrayForStroke(); - CDesCArrayFlat* phraseStroke = - popup->ChooseChineseCharacterArrayKeystrokeForStroke(); - - TBuf buf; - if ( ( phrase->Count() == 0 ) || ( phraseStroke->Count() == 0 ) ) - { - return; - } - - buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) ); - - for ( TInt i = buf.Length() - 1; i >= 0; --i ) - { - keystrokeArray->InsertL( 0, buf.Mid( i, 1 ) ); - } - phrase->Delete( phrase->Count() - 1 ); - phraseStroke->Delete( phraseStroke->Count() - 1 ); - - TInt leng = phrase->Count() + keystrokeArray->Count(); - if ( leng > KMaxKeystrokeCount ) - { - for ( TInt i = 0; i < leng - KMaxKeystrokeCount; ++i ) - { - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - } - } - editPane->SetCursorIndexOfKeystroke( buf.Length() ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::SetWarningColor() - { - CPtiEngine* ptiengine = iOwner->PtiEngine(); - CDesCArrayFlat* keystrokeArray = UIContainer()-> - PinyinPopupWindow()->KeystrokeArrayForStroke(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt phraseCount = UIContainer()->PinyinPopupWindow()-> - ChooseChineseCharacterArrayForStroke()->Count(); - - TInt indexStart = phraseCount; - TInt keyCode = 0; - TInt stringBeforeLength = 0; - TInt stringAfterLength = 0; - TInt keystrokeCount = 0; - TInt validKeystrokeCountOfPti = 0; - TBool valid = ETrue; - TInt delimiterCount = 0; - TInt delimiterADD = 0; - TBuf<1> delimiter; - delimiter.Append( KDelimiter ); - ClearPtiEngineKeystroke(); - - for ( TInt i = 0; i < keystrokeArray->Count(); ++i ) - { - keystrokeCount = keystrokeCount + 1; - if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount ) - { - break; - } - if ( 0 == keystrokeArray->MdcaPoint( i ).Compare( delimiter ) ) - { - delimiterADD = i; - delimiterCount = delimiterCount + 1; - } - GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) ); - stringBeforeLength = ptiengine->GetPhoneticSpelling( - KEnginePhoneticIndex).Length(); - stringAfterLength = - ptiengine->AppendKeyPress((TPtiKey)keyCode).Length(); - - if ( stringBeforeLength == stringAfterLength ) - { - valid = EFalse; - } - else if ( valid ) - { - validKeystrokeCountOfPti = validKeystrokeCountOfPti + 1; - } - - if ( ( i == keystrokeArray->Count() - 1 ) && ( KKey0Code != keyCode ) - && ( 1 != keystrokeCount ) && ( !valid ) ) - { - editPane->SetHighlight( indexStart, indexStart + keystrokeCount - 1 ); - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - - if ( KKey0Code == keyCode ) - { - ClearPtiEngineKeystroke(); - if ( 0 == i ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - if ( ( 0 == keystrokeArray->MdcaPoint( i ). - Compare( delimiter ) ) && ( 0 - == keystrokeArray->MdcaPoint( i - 1 ). - Compare( delimiter ) ) ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - if ( ( !valid ) && ( 1 != keystrokeCount ) && - ( validKeystrokeCountOfPti < keystrokeCount - 1 ) ) - { - editPane->SetHighlight( indexStart, indexStart - + keystrokeCount - 1 ); - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - else - { - indexStart = phraseCount + i + 1; - validKeystrokeCountOfPti = 0; - keystrokeCount = 0; - valid = ETrue; - } - } - } - } - } - - if ( phraseCount + delimiterCount >= KMaxPhraseCreationCount ) - { - editPane->SetHighlight( - phraseCount + delimiterADD, - phraseCount + keystrokeArray->Count() ); - } - - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::SetWarningColor -// Set warning color. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::ChangeCbaL() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt phraseCount = popup->ChooseChineseCharacterArrayForStroke()->Count(); - TInt lastRes = popup->GetLastResouce(); - - TBool first = CheckFirstGroupStroke(); - CheckAllKeystroke(); - if ( phraseCount == KMaxPhraseCreationCount ) - { - 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 && first ) - { - 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 ( phraseCount > 1 && 0 == keystrokeCount ) - { - 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 ( 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 ); - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::MoveCursorLeft() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - if ( 0 == keystrokeCount ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - popup->SetState( KManualChangeState ); - } - - if ( index > 1 ) - { - editPane->SetCursorIndexOfKeystroke( index - 1 ); - editPane->MoveCursorLeft(); - } - else - { - if ( 1 == index ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - } - else - { - editPane->SetCursorIndexOfKeystroke( keystrokeCount ); - } - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - } - } - -// --------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::MoveCursorRight() - { - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TInt keystrokeCount = popup->KeystrokeArrayForStroke()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - if ( 0 == keystrokeCount ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return; - } - else - { - popup->SetState( KManualChangeState ); - } - - if ( index < keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( index + 1 ); - editPane->MoveCursorRight(); - } - else - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowInfoOnEEPPane(); - if ( !CheckAllKeystroke() ) - { - SetWarningColor(); - } - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateStrokePhraseBase::GetNewCandidatesL -// Get new candidate -// --------------------------------------------------------------------------- -// -void TAknFepInputStateStrokePhraseBase::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