--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/fep/aknfep/src/aknfepuiinputminiqwertystrokephrasebase.cpp Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,1469 @@
+/*
+* 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 <e32cmn.h>
+#include <PtiEngine.h>
+#include <PtiDefs.h>
+#include <avkon.rsg>
+#include <aknfep.rsg>
+#include <PtiUserDicEntry.h>
+#include <aknnotewrappers.h> //CAknWarningNote
+
+// User includes
+#include "AknFepUIManagerStateInterface.h"
+#include "AknFepUICtrlInputPane.h"
+#include "aknfepuictrleditpane.h" //Stroke phrase creation
+#include "AknFepUICtrlCandidatePane.h"
+#include "AknFepManager.h"
+#include "aknfepuiinputminiqwertystrokephrasebase.h"
+
+// CONSTANTS
+
+const TInt KMaxPhraseCount = 50;
+const TInt KMaxPhraseCreationCount = 7;
+const TInt KMaxKeystrokeCount = 31;
+const TInt16 KStrokeDelimiter = 0x2022;
+const TInt16 KStrokeUnicode = 0x2461;
+const TInt16 KKey1 = 0x31;
+const TInt16 KKey6 = 0x36;
+
+_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" );
+
+// ---------------------------------------------------------------------------
+// TAknFepInputStateStrokePhraseCreationBase::TAknFepInputStateStrokePhraseCreationBase
+// C++ default constructor
+// ---------------------------------------------------------------------------
+//
+TAknFepInputMiniQwertyStrokePhraseBase::TAknFepInputMiniQwertyStrokePhraseBase(
+ MAknFepUIManagerStateInterface* aOwner,
+ MAknFepUICtrlContainerChinese* aUIContainer)
+ :TAknFepInputStateCandidateQwertyBaseChinesePhrase(aOwner, aUIContainer)
+ {
+ iOwner->PtiEngine()->SetInputMode(EPtiEngineStrokePhraseQwerty);
+ iOwner->PtiEngine()->SetCase(EPtiCaseLower);
+ iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount );
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+
+ MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
+ TBool multiplePages = !(candidatePane->IsLastPage() &&
+ candidatePane->IsFirstPage());
+ uiContainer->ShowVerticalScrollArrows(multiplePages);
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL
+// Handle system key press event.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyL(
+ TInt aKey,
+ TKeyPressLength aLength )
+ {
+ TBool ret = ETrue;
+ const TPtiKeyboardType keyboardType = iOwner->PtiEngine()->KeyboardType();
+
+ switch( aKey )
+ {
+ case EKeyLeftShift:
+ case EKeyLeftCtrl:
+ case EKeyRightCtrl:
+ case EStdKeyLeftFunc:
+ {
+ iOwner->FepMan()->TryCloseUiL();
+ ret = EFalse;
+ break;
+ }
+ case EStdKeyDevice1:// CBA2
+ {
+ iOwner->FepMan()->TryCloseUiL();
+ break;
+ }
+ case EStdKeyUpArrow:
+ case EStdKeyDownArrow:
+ case EKeyRightFunc:
+ case EStdKeyEnter:
+ {
+ iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
+ break;
+ }
+ case EStdKeyBackspace:
+ {
+ HandleKeyBackspaceL( aLength );
+ break;
+ }
+ case EStdKeyDevice0:// CBA1
+ case EStdKeyDevice3:// CBASelect
+ {
+ HandleCommitL( aLength );
+ break;
+ }
+ case EStdKeyLeftArrow:
+ {
+ if ( !MoveCursorLeft() )
+ {
+ iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+ }
+ break;
+ }
+ case EStdKeyRightArrow:
+ {
+ if ( !MoveCursorRight() )
+ {
+ iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+ }
+ break;
+ }
+ default:
+ {
+ ret = HandleDefaultL( aKey, aLength );
+ break;
+ }
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::RefreshUI
+// Update input window.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::RefreshUI()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ // get cursor position
+ if ( ( uiContainer->EditPaneWindow()->KeystrokeArray()->Count() == 0 ) &&
+ ( uiContainer->EditPaneWindow()->PhraseArray()->Count() == 0 ) )
+ {
+ TPoint baseLine;
+ TInt height(0);
+ TInt ascent(0);
+ TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent));
+ if (ret == KErrNone)
+ {
+ uiContainer->SetContainerPosition(baseLine, height);
+ }
+ }
+ if ( ( uiContainer->EditPaneWindow()->KeystrokeArray()->Count() > 0 ) ||
+ ( uiContainer->EditPaneWindow()->PhraseArray()->Count() > 0 ) )
+ {
+ ShowInfoOnEEPPane();
+ SetWarningColor();
+ ShowInfoOnCandidatePane();
+ UpdateIndicator();
+ TRAP_IGNORE( ChangeCbaL() );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::CheckFirstGroupStroke
+// check the first group stroke of keystroke.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckFirstGroupStroke()
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ TInt stringBeforeLength = 0;
+ TInt stringAfterLength = 0;
+ TInt keyCode = 0;
+ TInt pos = 0;
+ TBuf<1> delimiter;
+
+ if ( 0 == keystroke->Count() )
+ {
+ return EFalse;
+ }
+
+ delimiter.Append( KStrokeDelimiter );
+
+ //the keystroke is not delimiter the all keystroke is first group keystroke.
+ if ( 0 != keystroke->Find( delimiter, pos ) )
+ {
+ pos = keystroke->Count();
+ }
+ //first keystroke is delimiter then first group keystroke is invalid.
+ if ( 0 == pos )
+ {
+ return EFalse;
+ }
+
+ ClearPtiEngineKeystroke();
+
+ for ( TInt i = 0; i < pos; ++i )
+ {
+ //GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) );
+ keyCode = (*keycodeArray)[i];
+ stringBeforeLength =
+ ptiengine->GetPhoneticSpelling(1).Length();
+ stringAfterLength =
+ ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
+ //the keystroke is invalid.
+ if ( stringBeforeLength == stringAfterLength )
+ {
+ return EFalse;
+ }
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleCommitL
+// Handle CBA1 or select event.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::HandleCommitL(
+ TKeyPressLength aLength )
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ TInt keyCount = editPane->KeystrokeArray()->Count();
+ CDesCArrayFlat* phrase = editPane->PhraseArray();
+ TInt cdtCount = uiContainer->CandidatePane()->CandidateArray()->Count();
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+
+ if ( !CheckKeyNeedRepeat( aLength ) )
+ {
+ iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+ return;
+ }
+
+ if ( EMiniQwertyEdit == iState )
+ {
+ if ( cdtCount > 0 )
+ {
+ UIContainer()->EditPaneWindow()->SetChangeState( ETrue );
+ iOwner->ChangeState( ECandidate );
+ return;
+ }
+
+ if ( keyCount > 0 )
+ {
+ fepMan->PlaySound( EAvkonSIDErrorTone );
+ return;
+ }
+ }
+
+ if ( phrase->Count( ) <= 1 )
+ {
+ fepMan->PlaySound( EAvkonSIDErrorTone );
+ return;
+ }
+
+ TBuf<KMaxPhraseCreationCount> phraseCreated;
+ for (TInt i = 0; i < phrase->Count( ); ++i )
+ {
+ phraseCreated.Append( phrase->MdcaPoint( i ) );
+ }
+ fepMan->NewTextL( phraseCreated );
+ fepMan->CommitInlineEditL( );
+ AddPhraseToDB( phraseCreated );
+ fepMan->TryCloseUiL( );
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleAutoChangeState
+// Auto change state.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleAutoChangeState()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+ TBool FirstStrokeValid = CheckFirstGroupStroke();
+ //Auto change from EMiniQwertyEdit state to EEntry state.
+ if ( EMiniQwertyEdit == iState )
+ {
+ if ( FirstStrokeValid )
+ {
+ if ( EAutoChangeStateFromInput == editPane->GetAutoChangeStateFlag() )
+ {
+ editPane->SetChangeState( EFalse );
+ iOwner->ChangeState( EEntry );
+ return ETrue;
+ }
+ else if ( EAutoChangeStateFromCandidate == editPane->GetAutoChangeStateFlag() )
+ {
+ editPane->SetChangeState( ETrue );
+ iOwner->ChangeState( ECandidate );
+ return ETrue;
+ }
+ }
+ }
+
+ //Auto change from EEntry state to EMiniQwertyEdit state.
+ if ( EEntry == iState )
+ {
+ if ( ( 0 <= index ) && ( !FirstStrokeValid ) )
+ {
+ editPane->SetChangeState( EFalse );
+ editPane->SetAutoChangeStateFlag( EAutoChangeStateFromInput );
+ iOwner->ChangeState( EMiniQwertyEdit );
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyBackspaceL
+// Handle KeyBackspace event.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyBackspaceL(
+ TKeyPressLength aLength )
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+ CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+
+ if ( !CheckKeyNeedRepeat( aLength ) )
+ {
+ iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+ return;
+ }
+
+ 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 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;
+ }
+
+ if ( !HandleAutoChangeState() )
+ {
+ RefreshUI();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultL
+// Handle default event.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultL(
+ TInt aKey,
+ TKeyPressLength aLength )
+ {
+ TBool ret = ETrue;
+ if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() ||
+ CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() ||
+ ( CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState() && iState != ECandidate ))
+ {
+ iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
+ }
+ else if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed) ||
+ iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed))
+ {
+ iOwner->FepMan()->TryCloseUiL();
+ ret = EFalse;
+ }
+ else if ( ( EShortKeyPress == aLength ) &&
+ ( iOwner->IsValidChineseInputKeyQwerty( aKey ) ) )
+ {
+ if ( iState == ECandidate )
+ {
+ HandleKeyFromCandidateL( aKey, aLength );
+ }
+ else
+ {
+ HandleDefaultKeyL( aKey );
+ }
+ }
+ else
+ {
+ iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultKeyL
+// Handle default key press event.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::HandleDefaultKeyL( TInt aKey )
+ {
+ if ( !AddKeystrokeL( aKey ) )
+ {
+ iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
+ return;
+ }
+
+ if ( !HandleAutoChangeState() )
+ {
+ RefreshUI();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEP
+// Show the showinfo on the EEP ctrl.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEPPane()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
+ CDesCArrayFlat* phrase = editPane->PhraseArray();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+ TBuf<KMaxKeystrokeCount> 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, index + phrase->Count() );
+
+ switch ( iState )
+ {
+ case ECandidate:
+ editPane->DisableCursor();
+ break;
+ case EEntry:
+ editPane->EnableCursor();
+ editPane->DeactiveCursor();
+ break;
+ case EMiniQwertyEdit:
+ editPane->EnableCursor();
+ editPane->ActiveCursor();
+ break;
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnEEP
+// Show the showinfo on the EEP ctrl.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::ShowInfoOnCandidatePane()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ CDesCArrayFlat* phrase = uiContainer->CandidatePane()->CandidateArray();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ if ( KMaxPhraseCreationCount == editPane->PhraseArray()->Count() )
+ {
+ phrase->Reset();
+ TRAP_IGNORE( phrase->AppendL( KMaxPhraseNote ) );
+ 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->CandidatePane()->SplitPhraseCandidatesIntoPages();
+ uiContainer->CandidatePane()->SetCandidateBuffer();
+ uiContainer->Enable( ETrue );
+ TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
+ uiContainer->CandidatePane()->IsFirstPage());
+ uiContainer->ShowVerticalScrollArrows( multiplePages );
+ if ( iState == EMiniQwertyEdit )
+ {
+ UIContainer()->FocusCandidatePane( EFalse );
+ }
+ else
+ {
+ UIContainer()->FocusCandidatePane( ETrue );
+ UIContainer()->CandidatePane()->SelectFirstPhrase();
+ }
+ }
+ else
+ {
+ uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
+ uiContainer->CandidatePane()->SetCandidateBuffer();
+ uiContainer->Enable( ETrue );
+ uiContainer->ShowHorizontalScrollArrows( EFalse );
+ uiContainer->ShowVerticalScrollArrows( EFalse );
+ uiContainer->SetControlInVisible( EFalse );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleHorizontalNavigation
+//Handle horizontal navigation.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::HandleHorizontalNavigation(
+ TInt aKey )
+ {
+ MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
+ TBool response = EFalse;
+
+ // Do navigation...
+ if ( aKey == EStdKeyLeftArrow )
+ {
+ if(!candidatePane->SelectPrev())
+ {
+ candidatePane->SetCandidateBuffer();
+ candidatePane->SelectLastPhrase();
+ }
+ response = ETrue;
+ }
+ else if ( aKey == EStdKeyRightArrow )
+ {
+ if(!candidatePane->SelectNext())
+ {
+ candidatePane->SetCandidateBuffer();
+ candidatePane->SelectFirstPhrase();
+ }
+ response = ETrue;
+ }
+
+ if (response)
+ {
+ UpdateIndicator();
+ }
+
+ return response;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::UpdateIndicator
+// Update Indicator.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::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);
+ }
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ if (iOwner->FepMan()->KeyboardLayout() == EPtiKeyboardQwerty4x10)
+ {
+ if (candidatePane->VisibleCandidateCount()==1)
+ {
+ uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse);
+ uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse);
+ }
+ else
+ {
+ uiContainer->CandidatePane()->ShowLeftScrollArrows(ETrue);
+ uiContainer->CandidatePane()->ShowRightScrollArrows(ETrue);
+ }
+ }
+ else
+ {
+#endif
+ 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);
+ }
+ }
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ }
+#endif
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::DeleteKeystroke
+// Delete current keystroke.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::DeleteKeystroke()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+
+ if ( ( 0 == index ) || ( keystroke->Count() == 0 ) )
+ {
+ return EFalse;
+ }
+
+ if ( 1 == index )
+ {
+ editPane->Reset();
+ }
+
+ if ( index >= keystroke->Count() )
+ {
+ keystroke->Delete( keystroke->Count() - 1 );
+ keycodeArray->Remove( keycodeArray->Count() - 1 );
+ editPane->SetCursorIndexOfKeystroke( keystroke->Count() );
+ }
+ else
+ {
+ keystroke->Delete( index - 1 );
+ keycodeArray->Remove( index - 1 );
+ editPane->SetCursorIndexOfKeystroke( index - 1 );
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::AddPhraseToDB
+// Add phrase to DB.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::AddPhraseToDB(
+ const TDesC& aPhraseAdd )
+ {
+ TPtiUserDictionaryEntry addUdbEntry( aPhraseAdd );
+ //Add the phrase to the DB by PTI Engine
+ iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry );
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::RefreshCandidate
+// Refresh candidate
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::RefreshCandidate()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ uiContainer->CandidatePane()->SetCandidateBuffer();
+ uiContainer->Enable( ETrue );
+
+ TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
+ uiContainer->CandidatePane()->IsFirstPage());
+ uiContainer->ShowVerticalScrollArrows( multiplePages );
+
+ uiContainer->CandidatePane()->SelectFirstPhrase();
+ UpdateIndicator();
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::CheckKeyNeedRepeat
+// Check key whether need repeat.
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckKeyNeedRepeat( TKeyPressLength aLength )
+ {
+ MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
+ if ( editPane->IsChangeState() && aLength == ELongKeyPress )
+ {
+ return EFalse;
+ }
+ else
+ {
+ editPane->SetChangeState( EFalse );
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::CommitInlineEEPL
+// Commint text to EEP or editor
+// ---------------------------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::CommitInlineEEPL( const TDesC& aDes )
+ {
+ TInt charCount = aDes.Length();
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+ MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow();
+ CDesCArrayFlat* keyStoke = editpane->KeystrokeArray();
+ RArray<TInt>* keycode = editpane->KeycodeArray();
+ CDesCArrayFlat* phraseArray = editpane->PhraseArray();
+ CDesCArrayFlat* phraseShowKeyStroke = editpane->PhraseShowKeyStrokeArray();
+ RArray<TInt>* phraseKeycode = editpane->PhraseKeycodeArray();
+ TBuf<KMaxKeystrokeCount> buf;
+ TBuf<1> strokeDLT;
+ strokeDLT.Append( KStrokeDelimiter );
+
+ phraseArray->AppendL( aDes );
+
+ TInt phraseCount = phraseArray->Count();
+ TInt index = 0;
+ TInt isFound = keyStoke->Find( strokeDLT, index );
+
+ //phrase creation state
+ if ( phraseCount > 1 || ( 0 == isFound && charCount <= 1 ))
+ {
+ editpane->SetPhraseCreationFlag( ETrue );
+ if ( 0 == isFound && phraseCount < 7 && index < keyStoke->Count() - 1 )
+ {
+ for ( TInt i = 0; i <= index; i++ )
+ {
+ TPtrC ptr = keyStoke->MdcaPoint( 0 );
+ buf.Append( ptr );
+ keyStoke->Delete( 0);
+ phraseKeycode->AppendL( (*keycode)[0]);
+ keycode->Remove( 0 );
+ }
+ phraseShowKeyStroke->AppendL( buf );
+ editpane->SetCursorIndexOfKeystroke( 0 );
+ editpane->DisableCursor();
+ return ETrue;
+ }
+ else
+ {
+ TBuf<KMaxPhraseCreationCount> phraseCreated;
+ for ( TInt ii = 0; ii < phraseCount; ++ii )
+ {
+ phraseCreated.Append( phraseArray->MdcaPoint(ii) );
+ }
+ if ( 0 != isFound || ( 0 == isFound && index == keyStoke->Count() - 1 ) )
+ {
+ editpane->ResetAllArray();
+ }
+ fepMan->NewTextL( phraseCreated );
+ fepMan->CommitInlineEditL();
+ AddPhraseToDB( phraseCreated );
+ return EFalse;
+ }
+ }
+ else
+ {
+ TBuf<KMaxPhraseCreationCount> phraseCreated;
+ for ( TInt ii = 0; ii < phraseCount; ++ii )
+ {
+ phraseCreated.Append( phraseArray->MdcaPoint( ii ) );
+ }
+ editpane->ResetAllArray();
+ editpane->SetPhraseCreationFlag( EFalse );
+ fepMan->NewTextL( phraseCreated );
+ fepMan->CommitInlineEditL();
+ iOwner->PtiEngine()->SetPredictiveChineseChar( phraseCreated );
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::ClearPtiEngineKeystroke
+// clear the ptiengine keystroke;
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::ClearPtiEngineKeystroke()
+ {
+ iOwner->PtiEngine()->ClearCurrentWord();
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::AddKeystrokeL
+// Add keystroke.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::AddKeystrokeL( TInt aKey )
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+ TInt keystrokeCount = keystrokeArray->Count();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+
+ if ( phraseCount + keystrokeCount >= KMaxKeystrokeCount )
+ {
+ return EFalse;
+ }
+
+
+ TBuf<1> keystroke;
+ GetShowKeystroke( aKey, keystroke );
+ if ( index >= keystrokeCount )
+ {
+ keystrokeArray->AppendL( keystroke );
+ keycodeArray->AppendL( aKey );
+ editPane->SetCursorIndexOfKeystroke( keystrokeCount + 1 );
+ }
+ else
+ {
+ keystrokeArray->InsertL( index, keystroke );
+ keycodeArray->InsertL( aKey, index );
+ editPane->SetCursorIndexOfKeystroke( index + 1 );
+ }
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::GetCandidateL
+// Get the candidate info.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::GetCandidateL()
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* phraseCandidates =
+ uiContainer->CandidatePane()->CandidateArray();
+ CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+ phraseCandidates->Reset();
+
+ if ( keystrokeArray->Count() == 0 )
+ {
+ return;
+ }
+
+ if ( ( 0 == phraseCount ) && editPane->GetAllValidFlag() )
+ {
+ ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates );
+ return;
+ }
+
+ if ( !CheckFirstGroupStroke() )
+ {
+ return;
+ }
+
+ ptiengine->GetChinesePhraseCandidatesL( *phraseCandidates );
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::GetShowKeystroke
+// get the show keystroke.
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::GetShowKeystroke(
+ TInt aKey,
+ TDes& aKeystroke
+ )
+ {
+ CPtiEngine* ptiEngine = iOwner->PtiEngine();
+ TBuf<KMaxName> lowerdata;
+ ptiEngine->MappingDataForKey((TPtiKey)aKey, lowerdata, EPtiCaseLower);
+ TInt StrokeUnicodePosition =0;
+
+ if(lowerdata.Length()>0)
+ {
+ for(TInt i=0;i<lowerdata.Length()-1;i++)
+ {
+ if(lowerdata[i]==KStrokeUnicode)
+ {
+ StrokeUnicodePosition = i+1;
+ break;
+ }
+ }
+ if ( StrokeUnicodePosition < lowerdata.Length() )
+ {
+ aKeystroke.Copy( lowerdata.Mid( StrokeUnicodePosition, 1 ) );
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::RevertPhraseToKeystrokeL
+// Revert the phrase to keystroke.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::RevertPhraseToKeystrokeL()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ RArray<TInt>* phraseKeycodeArray = editPane->PhraseKeycodeArray();
+ CDesCArrayFlat* phrase = editPane->PhraseArray();
+ CDesCArrayFlat* phraseStroke = editPane->PhraseShowKeyStrokeArray();
+
+ TBuf<KMaxKeystrokeCount> 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 ) );
+ keycodeArray->Insert( (*phraseKeycodeArray)[phraseKeycodeArray->Count()-1], 0 );
+ phraseKeycodeArray->Remove( phraseKeycodeArray->Count()-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 )
+ {
+ if ( keystrokeArray->Count() == 0 )
+ {
+ break;
+ }
+ keystrokeArray->Delete( keystrokeArray->Count() - 1 );
+ keycodeArray->Remove( keycodeArray->Count() - 1 );
+ }
+ }
+
+ editPane->SetCursorIndexOfKeystroke( buf.Length() );
+ keystrokeArray->Compress();
+ phrase->Compress();
+ phraseStroke->Compress();
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor
+// Set warning color.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor()
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
+ CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ TInt keystrokeCount = keystrokeArray->Count();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+ TBool valid = ETrue;
+ TInt index = 0;
+ TInt count = 0;
+ TInt stringBeforeLength = 0;
+ TInt stringAfterLength = 0;
+ TInt keyCode = 0;
+ TInt invalidPos = 0;
+ TBuf<1> delimiter;
+ delimiter.Append( KStrokeDelimiter );
+
+ //set warning color stroke after 7th group when it's more than 7 groups.
+ if ( 0 == keystrokeCount )
+ {
+ return;
+ }
+
+ if ( CheckAllGroupStroke() )
+ {
+ return;
+ }
+
+ TInt delimiterCount = phraseCount + editPane->GetDelimiterCount();
+ invalidPos = editPane->GetInvalidIndex();
+ index = invalidPos;
+ ClearPtiEngineKeystroke();
+ for ( TInt i = invalidPos; i < keystrokeCount; ++i )
+ {
+ count = count + 1;
+ //GetKeystrokeCode( keyCode, keystrokeArray->MdcaPoint( i ) );
+ keyCode = (*keycodeArray)[i];
+ if ( EPtiKeyQwertySpace == keyCode )
+ {
+ delimiterCount = delimiterCount + 1;
+ if ( delimiterCount == KMaxPhraseCreationCount )
+ {
+ if ( !valid )
+ {
+ editPane->SetHighlight(
+ phraseCount + index,
+ phraseCount + keystrokeCount - 1 );
+ }
+ else
+ {
+ editPane->SetHighlight(
+ phraseCount + i,
+ phraseCount + keystrokeCount - 1 );
+ }
+ break;
+ }
+ if ( ( !valid ) || ( 0 == i ) )
+ {
+ editPane->SetHighlight(
+ phraseCount + index,
+ phraseCount + index + count - 1 );
+ }
+ else if ( i > 0 )
+ {
+ if ( 0 == keystrokeArray->MdcaPoint( i - 1 ).Compare( delimiter ) )
+ {
+ editPane->SetHighlight(
+ phraseCount + index,
+ phraseCount + index + count - 1 );
+ }
+ }
+ valid = ETrue;
+ index = i + 1;
+ count = 0;
+ ClearPtiEngineKeystroke();
+ }
+ else if ( valid )
+ {
+ stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
+ stringAfterLength =
+ ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
+ if ( stringBeforeLength == stringAfterLength )
+ {
+ valid = EFalse;
+ }
+ }
+
+ if ( ( !valid ) &&
+ ( keystrokeCount == i + 1 ) &&
+ ( EPtiKeyQwertySpace != keyCode ) )
+ {
+ editPane->SetHighlight(
+ phraseCount + index,
+ phraseCount + index + count - 1 );
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::SetWarningColor
+// Set warning color.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::ChangeCbaL()
+ {
+ MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
+ MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow();
+ TInt candidateCount = UIContainer()->CandidatePane()->CandidateArray()->Count();
+ TInt keyStrokeCount = editPane->KeystrokeArray()->Count();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+ TInt currentCBAResId = editPane->GetCurrentCBAResID();
+ if ( ( candidateCount == 0 && keyStrokeCount != 0 ) ||
+ ( phraseCount == 1 && keyStrokeCount == 0 ) )
+ {
+ if (R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY != currentCBAResId )
+ {
+ fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY );
+ editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_EMPTY_CANCEL_EMPTY );
+ }
+
+ }
+ else if ( keyStrokeCount == 0 )
+ {
+ if ( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE != currentCBAResId )
+ {
+ fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
+ editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_DONE_CANCEL_DONE );
+ }
+ }
+ else if ( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL != currentCBAResId )
+ {
+ fepMan->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
+ editPane->SetCurrentCBAResID( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
+ }
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorLeft
+// Move the cursor to Left.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorLeft()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ TInt keystrokeCount = editPane->KeystrokeArray()->Count();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+
+ if ( EMiniQwertyEdit != iState )
+ {
+ return EFalse;
+ }
+ if ( 0 == keystrokeCount )
+ {
+ return EFalse;
+ }
+
+ if ( 0 == index )
+ {
+ editPane->SetCursorIndexOfKeystroke( keystrokeCount );
+ ShowInfoOnEEPPane();
+ SetWarningColor();
+ }
+ else if ( ( phraseCount > 0 ) && ( 1 == index ) )
+ {
+ editPane->SetCursorIndexOfKeystroke( 0 );
+ ShowInfoOnEEPPane();
+ SetWarningColor();
+ }
+ else
+ {
+ editPane->MoveCursorLeft();
+ editPane->SetCursorIndexOfKeystroke( index - 1 );
+ }
+
+ editPane->SetAutoChangeStateFlag( EManualChangeState );
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorRight
+// Move the cursor to Right.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::MoveCursorRight()
+ {
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ TInt keystrokeCount = editPane->KeystrokeArray()->Count();
+ TInt index = editPane->GetCursorIndexOfKeystroke();
+
+ if ( EMiniQwertyEdit != iState )
+ {
+ return EFalse;
+ }
+ if ( 0 == keystrokeCount )
+ {
+ return EFalse;
+ }
+ if ( index >= keystrokeCount )
+ {
+ editPane->SetCursorIndexOfKeystroke( 0 );
+ ShowInfoOnEEPPane();
+ SetWarningColor();
+ }
+ else
+ {
+ editPane->MoveCursorRight();
+ editPane->SetCursorIndexOfKeystroke( index + 1 );
+ }
+
+ editPane->SetAutoChangeStateFlag( EManualChangeState );
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyFromCandidateL
+// Handle key from candidate.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::HandleKeyFromCandidateL(
+ TInt aKey, TKeyPressLength /*aLength*/ )
+ {
+ TInt index = 0;
+ MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane();
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ // it may be one of the 'valid' numbers..
+ TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout();
+ if ( EPtiKeyboardQwerty4x10 == keyboardtype || EPtiKeyboardQwerty3x11
+ == keyboardtype || EPtiKeyboardHalfQwerty == keyboardtype
+ || EPtiKeyboardCustomQwerty == keyboardtype )
+ {
+ MPtiLanguage *lang= NULL;
+ RArray < TPtiNumericKeyBinding > keybinding;
+ TBool validnumkey = EFalse;
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+
+ if( ptiengine != NULL )
+ {
+ lang = ptiengine->CurrentLanguage();
+ }
+ if ( ptiengine && lang )
+ {
+ TRAP_IGNORE(ptiengine->GetNumericModeKeysForQwertyL(lang->LanguageCode(), keybinding, keyboardtype));
+ TInt numericKeysCount = keybinding.Count();
+ while (numericKeysCount-- )
+ {
+ TPtiNumericKeyBinding numKeyBind =
+ keybinding[numericKeysCount];
+ if ( (numKeyBind.iChar >= KKey1 && numKeyBind.iChar <= KKey6)
+ &&(aKey == numKeyBind.iKey) )
+ {
+ index = numKeyBind.iChar - EPtiKey0 -1;
+ if ( candidatePane->SelectIndex( index ) )
+ {
+ validnumkey = ETrue;
+ }
+ break;
+ }
+ }
+ }
+ keybinding.Reset();
+ keybinding.Close();
+ if ( !validnumkey )
+ {
+ iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
+ return;
+ }
+ }
+ else
+ {
+#endif
+ index = MapKeyToIndex( aKey );
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ }
+#endif
+ TPtrC text = candidatePane->CurrentPhraseCandidate();
+ if ( text.Length( ) )
+ {
+ if ( !CommitInlineEEPL( text ) )
+ {
+ DoActionAfterCommit( );
+ }
+ else
+ {
+ if ( CheckFirstGroupStroke( ) )
+ {
+ RefreshUI( );
+ UIContainer()->CandidatePane()->SelectFirstPhrase( );
+ }
+ else
+ {
+ UIContainer()->EditPaneWindow()->SetAutoChangeStateFlag( EAutoChangeStateFromCandidate );
+ iOwner->ChangeState( EMiniQwertyEdit );
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::CheckAllGroupStroke
+// check the all group stroke of keystroke.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckAllGroupStroke()
+ {
+ CPtiEngine* ptiengine = iOwner->PtiEngine();
+ MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
+ MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
+ CDesCArrayFlat* keystroke = editPane->KeystrokeArray();
+ RArray<TInt>* keycodeArray = editPane->KeycodeArray();
+ TInt phraseCount = editPane->PhraseArray()->Count();
+ TInt keystrokeCount = keystroke->Count();
+ TInt keyCode = 0;
+ TInt stringBeforeLength = 0;
+ TInt stringAfterLength = 0;
+ TInt lastDLTPos = 0;
+ TBool check = ETrue;
+ TInt delimiterCount = 0;
+ //If has phrase on the entry pane then the all keystroke is invalid.
+ if ( ( phraseCount > 0 ) || ( 0 == keystrokeCount ) )
+ {
+ editPane->SetAllValidFlag( EFalse );
+ editPane->SetDelimiterCount( 0 );
+ editPane->SetInvalidIndex( 0 );
+ return EFalse;
+ }
+
+ ClearPtiEngineKeystroke();
+ for ( TInt i = 0; i < keystrokeCount; ++i )
+ {
+ //GetKeystrokeCode( keyCode, keystroke->MdcaPoint( i ) );
+ keyCode = (*keycodeArray)[i];
+ if ( EPtiKeyQwertySpace == keyCode )
+ {
+ //If first keystroke is delimiter then all keystroke is not valid.
+ if ( i == 0 )
+ {
+ editPane->SetAllValidFlag( EFalse );
+ editPane->SetDelimiterCount( 0 );
+ editPane->SetInvalidIndex( 0 );
+ return EFalse;
+ }
+ //If two delimiter is border upon then the check evaluate EFalse.
+ else if ( lastDLTPos == ( i - 1 ) )
+ {
+ check = EFalse;
+ }
+ //lastDLTPos evaluate last delimiter that has not border upon deliminter.
+ else if ( check )
+ {
+ delimiterCount = delimiterCount + 1;
+ lastDLTPos = i;
+ }
+ }
+ stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
+ stringAfterLength =
+ ptiengine->AppendKeyPress((TPtiKey)keyCode).Length();
+ if ( stringBeforeLength == stringAfterLength )
+ {
+ editPane->SetAllValidFlag( EFalse );
+ if ( 0 == lastDLTPos )
+ {
+ editPane->SetDelimiterCount( 0 );
+ editPane->SetInvalidIndex( 0 );
+ }
+ else
+ {
+ editPane->SetDelimiterCount( delimiterCount );
+ editPane->SetInvalidIndex( lastDLTPos + 1 );
+ }
+ return EFalse;
+ }
+ }
+
+ editPane->SetAllValidFlag( ETrue );
+ editPane->SetDelimiterCount( 0 );
+ editPane->SetInvalidIndex( 0 );
+ return ETrue;
+ }
+
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommit
+// Do action afer commit, change state to predictive or not.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommit()
+ {
+ TRAP_IGNORE( DoActionAfterCommitL() );
+ }
+
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommitL
+// Do action afer commit, change state to predictive or not.
+// ---------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::DoActionAfterCommitL( )
+ {
+ if ( UIContainer()->EditPaneWindow()->KeystrokeArray()->Count( ) != 0 )
+ {
+ UIContainer()->EditPaneWindow()->ResetAllArray( );
+ CAknWarningNote* errnote = new( ELeave ) CAknWarningNote();
+ errnote->SetTone( CAknNoteDialog::EWarningTone );
+ errnote->ExecuteLD( KMaxPhraseNote );
+ }
+ else if ( !UIContainer()->EditPaneWindow()->GetPhraseCreationFlag( ) )
+ {
+#ifdef RD_INTELLIGENT_TEXT_INPUT
+ TBool isEditorFull = iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagEditorFull);
+ if ( !isEditorFull )
+ {
+ iOwner->ChangeState( EPredictiveCandidate );
+ UIContainer()->EditPaneWindow()->SetChangeState(ETrue);
+ }
+ else
+ {
+ iOwner->FepMan()->ClearFlag(CAknFepManager::EFlagEditorFull);
+ iOwner->FepMan()->TryCloseUiL();
+ }
+#endif
+ }
+ else
+ {
+ iOwner->FepMan()->TryCloseUiL( );
+ }
+ }
+// ---------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::CheckSpellingDLT
+// Check the delimiter of spelling.
+// ---------------------------------------------------------
+//
+TBool TAknFepInputMiniQwertyStrokePhraseBase::CheckSpellingDLT( const TDesC& aKeystroke )
+ {
+ if ( aKeystroke.Length() == 0 )
+ {
+ return EFalse;
+ }
+ if ( KStrokeDelimiter == aKeystroke[0] )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// TAknFepInputMiniQwertyStrokePhraseBase::HandleCommandL
+// Handling Command
+// ---------------------------------------------------------------------------
+//
+void TAknFepInputMiniQwertyStrokePhraseBase::HandleCommandL( TInt aCommandId )
+ {
+ switch ( aCommandId )
+ {
+ // Handle the event frome command.
+ case EAknSoftkeySelect:
+ //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA
+ HandleCommitL( EShortKeyPress );
+ break;
+ default:
+ TAknFepInputStateChineseBase::HandleCommandL( aCommandId );
+ break;
+ }
+ }
+// End of file