diff -r 0f326f2e628e -r a7632c26d895 fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp --- a/fep/aknfep/src/aknfepuiinputstateminiqwertyzhuyinphrase.cpp Fri Jul 23 16:49:01 2010 +0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1296 +0,0 @@ -/* -* Copyright (c) 2007 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 TAknFepInputStateEntryMiniQwertyZhuyinPhrase, - * TAknFepInputStateEditingMiniQwertyZhuyinPhrase, - * TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase methods. - * -*/ - - - - - - - - - - - - -// System includes -#include -#include -#include //CAknWarningNote -#include - -// User includes -#include "AknFepUiCtrlContainerChinese.h" -#include "AknFepUICtrlCandidatePane.h" -#include "AknFepUICtrlInputPane.h" -#include "aknfepuictrleditpane.h" //phrase creation -#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase -#include "AknFepUIManagerStateInterface.h" -#include "AknFepManager.h" -#include "aknfepuiinputstateminiqwertyzhuyinphrase.h" -#include "aknfepinputstateminiqwertyzhuyinkeymap.h" - -const TInt KMaxKeystrokeCount = 31; -const TInt KMaxKeystrokeSize = 130; -const TInt KMaxPhraseLength = 7; -const TInt KMinCandidateCount = 1; -const TInt KKeystrokeMaxLength = 4; -//const TInt KTonemarkCount = 5; - -const TUint16 KToneMark1 = 0x0020; -const TUint16 KToneMark2 = 0x02CA; -const TUint16 KToneMark3 = 0x02c7; -const TUint16 KToneMark4 = 0x02CB; -const TUint16 KToneMark5 = 0x02D9; - -_LIT(KLeftBracket, "("); -_LIT(KRightBracket, ")"); -_LIT(KReplace, ""); - -_LIT( KDelimiter, "'"); -struct TToneZhuYinMap - { - TUint16 iValue; - TInt iInputTone; - }; -const TToneZhuYinMap ZhuyinToneMap[] = - { - {KToneMark1, 1}, - {KToneMark2, 2}, - {KToneMark3, 3}, - {KToneMark4, 4}, - {KToneMark5, 5} - }; -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::TAknFepInputStateEditingMiniQwertyZhuyinPhrase -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateEditingMiniQwertyZhuyinPhrase::TAknFepInputStateEditingMiniQwertyZhuyinPhrase( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EMiniQwertyEdit; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - // in the case that we are coming back to the input pane from the candidate pane, - // we need to ensure that the current selection is selected correctly - ImplicityShowInfo( ETrue ); - // so that it could handle EKeyCBA1 - iOwner->FepMan()->EntryPhrase( ETrue ); - RefreshEditPane(); - uiContainer->PinyinPopupWindow()->SetNoneHighlighted(); - TRAP_IGNORE( ChangeCbaL() ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - TBool ret = ETrue; - TBool state = ETrue; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* phraseArray = editPane->PhraseArray(); - - if ( iOwner->FepMan()->GetComposChrFlag() && aKey == EStdKeyLeftFunc ) - { - iOwner->FepMan()->SetComposChrFlag( EFalse ); - return ret; - } - - switch ( aKey ) - { - case EStdKeyLeftShift: - case EStdKeyRightShift: - case EStdKeyLeftCtrl: - case EStdKeyRightCtrl: - case EStdKeyRightFunc://fn - case EStdKeyLeftFunc: //chr key - case EStdKeyUpArrow: - case EKeyRightFunc: - case EKeyLeftFunc: - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - break; - //if the canidate is empty ,inactive;else candiniate selecting state - case EStdKeyDownArrow: - { - if ( 0 != candidatePane->VisibleCandidateCount() && phraseArray->Count() < 7 ) - { - uiContainer->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - } - break; - case EStdKeyRightArrow: - MoveCursorRight(); - break; - case EStdKeyLeftArrow: - MoveCursorLeft(); - break; - case EStdKeyDevice1: //"cancle" key - iOwner->FepMan()->TryCloseUiL(); - break; - case EStdKeyEnter: - CommitContentL( EFalse ); - break; - case EStdKeyDevice0: - case EStdKeyDevice3: - - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleCommitL(); - } - break; - case EStdKeyBackspace: - { - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleKeyBackspaceL( aLength ); - } - } - break; - default: - { - if ( aLength == EShortKeyPress && keystrokeArray->Count() < KMaxKeystrokeCount && - !iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) && - phraseArray->Count() < KMaxPhraseLength && - ( iOwner->IsValidChineseInputKeyQwerty( aKey ) || aKey == EStdKeySpace ) ) - { - AddKeystrokeL( aKey ); - RefreshUI(); - ShowEEPInfo(); - ChangeCbaL(); - } - else - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - break; - } - return ret; - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddKeystrokeL -// Add key stroke. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddKeystrokeL( TInt aKey ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt phraseCount = editPane->PhraseArray()->Count(); - TInt showKeystrokeCount = editPane->ShowKeystrokeArray()->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( phraseCount + showKeystrokeCount >= KMaxKeystrokeCount - 1 ) - { - return EFalse; - } - TBuf keystroke; - - TAknFepInputStateMiniQwertyZhuyinKeyMap::GetKeyStroke( - iOwner->PtiEngine(), aKey, keystroke ); - - if ( index >= keystrokeArray->Count() ) - { - keycodeArray->Append( aKey ); - keystrokeArray->AppendL( keystroke ); - editPane->SetCursorIndexOfKeystroke( keystrokeArray->Count() ); - } - else - { - keycodeArray->Insert( aKey, index ); - keystrokeArray->InsertL( index, keystroke ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - editPane->SetNeedClearDeliberateSelection( ETrue ); - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RevertPhraseToKeystrokeL -// Revert the phrase to keystroke. -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RevertPhraseToKeystrokeL() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystrokeArray = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - RArray* phraseKeycode = editPane->PhraseKeycodeArray(); - CDesCArrayFlat* phraseStroke = editPane->PhraseShowKeyStrokeArray(); - TBuf buf; - - if ( (phrase->Count() == 0 ) || (phraseStroke->Count() == 0 ) ) - { - return; - } - - buf.Append( phraseStroke->MdcaPoint( phraseStroke->Count() - 1 ) ); - - TInt insertIndex = 0; - while ( buf.Length() != 0 ) - { - TBuf strokeBuf; - TInt index = buf.Find( KRightBracket ); - if ( index != KErrNotFound ) - { - strokeBuf.Copy( buf.Left( index + 1 ) ); - keystrokeArray->InsertL( insertIndex, strokeBuf ); - buf.Replace( 0, index + 1, KNullDesC ); - } - else - { - keystrokeArray->InsertL( insertIndex, buf ); - insertIndex = insertIndex + 1; - break; - } - insertIndex = insertIndex + 1; - } - phrase->Delete( phrase->Count() - 1 ); - phraseStroke->Delete( phraseStroke->Count() - 1 ); - - if ( insertIndex > phraseKeycode->Count() ) - { - insertIndex = keycodeArray->Count(); - } - - for ( TInt i = 0; i < insertIndex ; ++i ) - { - keycodeArray->Insert( (*phraseKeycode)[phraseKeycode->Count() - 1 ],0 ); - phraseKeycode->Remove( phraseKeycode->Count() - 1 ); - } - - TInt keystrokeCount = keystrokeArray->Count(); - TInt lenth = phrase->Count() + keystrokeCount; - TInt deleteCount = lenth - KMaxKeystrokeCount; - - for (TInt i = 0; i < deleteCount; ++i ) - { - keycodeArray->Remove( keycodeArray->Count() - 1 ); - keystrokeArray->Delete( keystrokeArray->Count() - 1 ); - } - editPane->SetCursorIndexOfKeystroke( insertIndex ); - keystrokeArray->Compress(); - phrase->Compress(); - phraseStroke->Compress(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddPhraseToDB -// Add phrase to DB. -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::AddPhraseToDB( - const TDesC& aPhraseAdd ) - { - TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); - //Add the phrase to the DB by PTI Engine - iOwner->PtiEngine()->AddUserDictionaryEntry( addUdbEntry ); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorLeft -// Move the cursor to Left. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorLeft() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keyStrokeArray = editPane->KeystrokeArray(); - TInt keystrokeCount = 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 ); - ShowEEPInfo(); - } - else if ( phraseCount > 0 && 1 == index ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowEEPInfo(); - } - else - { - TInt stride = keyStrokeArray->MdcaPoint( index - 1 ).Length(); - editPane->MoveCursorLeft( stride ); - editPane->SetCursorIndexOfKeystroke( index - 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorRight -// Move the cursor to Right. -// --------------------------------------------------------- -// -TBool TAknFepInputStateEditingMiniQwertyZhuyinPhrase::MoveCursorRight() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - TInt keystrokeCount = keystroke->Count(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - - if ( EMiniQwertyEdit != iState ) - { - return EFalse; - } - if ( 0 == keystrokeCount ) - { - return EFalse; - } - if ( index >= keystrokeCount ) - { - editPane->SetCursorIndexOfKeystroke( 0 ); - ShowEEPInfo(); - } - else - { - TInt stride = editPane->KeystrokeArray()->MdcaPoint( index ).Length(); - editPane->MoveCursorRight( stride ); - editPane->SetCursorIndexOfKeystroke( index + 1 ); - } - return ETrue; - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyBackspace -// Handle Key Backspace -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleKeyBackspaceL( - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - - CDesCArrayFlat* keyStrokeArray = editPane->KeystrokeArray(); - RArray* keycodeArray = editPane->KeycodeArray(); - TInt keystrokeCount = keyStrokeArray->Count(); - TInt phraseCount = editPane->PhraseArray()->Count(); - - TInt cursorOfkeystrokeIndex = editPane->GetCursorIndexOfKeystroke(); - - if ( 1 == cursorOfkeystrokeIndex ) - { - editPane->Reset(); - } - - if ( cursorOfkeystrokeIndex > 0 && - ( keystrokeCount > 1 || phraseCount > 0 ) ) - { - keycodeArray->Remove( cursorOfkeystrokeIndex - 1 ); - keyStrokeArray->Delete( cursorOfkeystrokeIndex - 1 ); - editPane->SetCursorIndexOfKeystroke( cursorOfkeystrokeIndex - 1 ); - } - else if ( phraseCount > 0 && 0 == cursorOfkeystrokeIndex ) - { - RevertPhraseToKeystrokeL(); - } - else if ( 1 == cursorOfkeystrokeIndex ) - { - iOwner->FepMan()->TryCloseUiL(); - if ( aLength == ELongKeyPress ) - { - iOwner->FepMan()->SetLongClearAfterCloseUI( ETrue ); - } - return; - } - else - { - return; - } - editPane->SetNeedClearDeliberateSelection( ETrue ); - RefreshUI(); - ShowEEPInfo(); - ChangeCbaL(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::CommitContentL -// Commit content -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::CommitContentL( - TBool aAddUDB ) - { - TBuf currentText; - MAknFepManagerUIInterface* fepMan = iOwner->FepMan(); - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* keystrokeArray = editpane->KeystrokeArray(); - TInt phraseCount = phraseArray->Count(); - TInt keyStrokeCount = keystrokeArray->Count(); - - for (TInt i = 0; i < phraseCount; i++ ) - { - currentText.Append( phraseArray->MdcaPoint( i ) ); - } - for (TInt i = 0; i < keyStrokeCount; i++ ) - { - currentText.Append( keystrokeArray->MdcaPoint( i ) ); - } - - if ( currentText.Length() ) - { - while (currentText.Find( KLeftBracket ) >= 0 ) - { - currentText.Replace( currentText.Find( KLeftBracket ), 1, - KReplace ); - } - while (currentText.Find( KRightBracket ) > 0 ) - { - currentText.Replace( currentText.Find( KRightBracket ), 1, - KReplace ); - } - fepMan->NewTextL( currentText ); - fepMan->CommitInlineEditL(); - } - UIContainer()->EditPaneWindow()->ResetAllArray(); - UIContainer()->EditPaneWindow()->SetPhraseCreationFlag( EFalse ); - if ( fepMan->IsFlagSet( CAknFepManager::EFlagEditorFull ) ) - { - fepMan->ClearFlag( CAknFepManager::EFlagEditorFull ); - } - if ( aAddUDB ) - { - AddPhraseToDB( currentText ); - } - fepMan->TryCloseUiL(); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommitL -// Handle commit action -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommitL() - { - TBuf currentText; - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlCandidatePane* candidatePane = UIContainer()->CandidatePane(); - CDesCArrayFlat* phraseArray = editpane->PhraseArray(); - CDesCArrayFlat* keystrokeArray = editpane->KeystrokeArray(); - TInt phraseCount = phraseArray->Count(); - TInt keyStrokeCount = keystrokeArray->Count(); - - if ( 0 == candidatePane->VisibleCandidateCount() && ( 1 == phraseCount - || keyStrokeCount > 0 ) ) - { - return; - } - if ( 0 != candidatePane->VisibleCandidateCount() && phraseCount < KMaxPhraseLength ) - { - UIContainer()->EditPaneWindow()->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - return; - } - CommitContentL( ETrue ); - } - -// --------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RefreshUI -// Refresh UI if necessary -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::RefreshUI() - { - MAknFepUICtrlEditPane* editpane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow(); - CDesCArrayFlat* showKeystroke = editpane->ShowKeystrokeArray(); - TBuf preValidKeystroke; - TInt preValidKeystrokeCount = showKeystroke->Count(); - for (TInt i=0; i < preValidKeystrokeCount; i++ ) - { - preValidKeystroke.Append( showKeystroke->MdcaPoint( i ) ); - } - GetValidKeystroke(); - TBuf validKeystroke; - TInt validKeystrokeCount = showKeystroke->Count(); - for (TInt i=0; i < validKeystrokeCount; i++ ) - { - validKeystroke.Append( showKeystroke->MdcaPoint( i ) ); - } - if ( preValidKeystroke.Compare( validKeystroke ) != 0 ) - { - RefreshSpellingPane( ETrue ); - RefreshCandidatePane(); - } - else if ( popup->CurrentSelection() != 0 ) - { - RefreshCandidatePane(); - } - UpdateIndicator(); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ImplicityShowInfo( - TBool aGetScreenCoordinates ) - { - TRAP_IGNORE( ImplicityShowInfoL( aGetScreenCoordinates ) ); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ImplicityShowInfoL( - TBool aGetScreenCoordinates ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - if ( aGetScreenCoordinates ) - { - iOwner->FepMan()->GetScreenCoordinatesL( baseLine, height, ascent ); - uiContainer->SetContainerPosition( baseLine, height ); - } - editPane->ActiveCursor(); - } - -// --------------------------------------------------------- -// Init the show info -// --------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::ShowEEPInfo() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - CDesCArrayFlat* keystroke = editPane->KeystrokeArray(); - CDesCArrayFlat* phrase = editPane->PhraseArray(); - TInt index = editPane->GetCursorIndexOfKeystroke(); - TInt cursorPosInKeystroke = 0; - - TBuf buf; - - for (TInt i = 0; i < phrase->Count(); ++i ) - { - buf.Append( phrase->MdcaPoint( i ) ); - } - - for (TInt i = 0; i < keystroke->Count(); ++i ) - { - buf.Append( keystroke->MdcaPoint( i ) ); - } - - for (TInt i = 0; i < index; ++i ) - { - cursorPosInKeystroke = cursorPosInKeystroke + keystroke->MdcaPoint( i ).Length(); - } - - editPane->SetText( buf, phrase->Count() + cursorPosInKeystroke, ETrue ); - if ( editPane->GetEffictiveLength() == 0 ) - { - editPane->SetHighlight( phrase->Count(), buf.Length() ); - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::TAknFepInputStateSpellingMiniQwertyZhuyin -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateSpellingMiniQwertyZhuyin::TAknFepInputStateSpellingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EZhuyinSpelling; - - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - uiContainer->FocusCandidatePane( EFalse ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - uiContainer->ShowVerticalScrollArrows( ETrue ); - uiContainer->ShowHorizontalScrollArrows( EFalse ); - uiContainer->InputPane()->SetOverrideFontId( 0 ); - uiContainer->SetLayout( MAknFepUICtrlContainerChinese::ELayoutPhraseCreation ); - uiContainer->EditPaneWindow()->DeactiveCursor(); - RefreshUI(); - // however we also need to clear the deliberate selection, in case we are not - // coming back to the input pane from the candidate pane - ClearDeliberateSelection(); - UpdateIndicator(); - - iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseQwerty ); - iOwner->PtiEngine()->SetCase( EPtiCaseLower ); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateSpellingMiniQwertyZhuyin::HandleKeyL( TInt aKey, - TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TBool ret = ETrue; - - if ( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyLock - == iOwner->FepMan()->FnKeyState() || CAknFepFnKeyManager::EFnKeyDown - == iOwner->FepMan()->FnKeyState() ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return ETrue; - } - else if ( iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagShiftKeyDepressed ) - || iOwner->FepMan()->IsFlagSet( CAknFepManager::EFlagQwertyChrKeyDepressed ) ) - { - return ETrue; - } - - switch ( aKey ) - { - case EPtiKeyQwertyE: - case EPtiKeyQwertyR: - case EPtiKeyQwertyY: - case EPtiKeyQwertyU: - case EStdKeyLeftFunc: - { - if ( aLength == EShortKeyPress ) - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - } - break; - case EKeyRightFunc: - case EKeyLeftShift: - case EKeyLeftCtrl: - case EKeyRightCtrl: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - } - break; - case EStdKeyBackspace: - case EStdKeyUpArrow: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EMiniQwertyEdit ); - } - } - break; - case EStdKeyDevice1: - { - iOwner->FepMan()->TryCloseUiL(); - } - break; - case EStdKeyRightArrow: - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectNextPhrase() ) - { - RefreshVaildKeyStroke(); - RefreshCandidatePane(); - RefreshSpellingPane(); - RefreshEditPane(); - UpdateIndicator(); - } - } - } - break; - case EStdKeyLeftArrow: - { - if ( popup->IsEnabled() ) - { - if ( popup->SelectPrevPhrase() ) - { - RefreshVaildKeyStroke(); - RefreshCandidatePane(); - RefreshSpellingPane(); - RefreshEditPane(); - UpdateIndicator(); - } - } - } - break; - case EStdKeyDownArrow: - case EStdKeyDevice3: - case EStdKeyDevice0: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinCandidate ); - } - } - break; - default: - { - iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone ); - return TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL( - aKey, aLength ); - } -// break; - } - return ret; - } - -// --------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI -// Refresh UI if necessary -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - // get cursor position - TPoint baseLine = TPoint( 0, 0 ); - TInt height = 0; - TInt ascent = 0; - - TRAPD(ret,iOwner->FepMan()->GetScreenCoordinatesL(baseLine,height,ascent)); - if ( ret == KErrNone ) - { - uiContainer->SetContainerPosition( baseLine, height ); - } - - GetValidKeystroke( ); - TBool needClearDeliberateSelection = editPane->NeedClearDeliberateSelection(); - if ( needClearDeliberateSelection ) - { - editPane->SetNeedClearDeliberateSelection( EFalse ); - } - else - { - RefreshVaildKeyStroke(); - } - RefreshEditPane(); - RefreshCandidatePane( needClearDeliberateSelection ); - RefreshSpellingPane( needClearDeliberateSelection ); - } - -// --------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshUI -// Refresh vaild key stroke length -// --------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::RefreshVaildKeyStroke() - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - CDesCArrayFlat* spelling = popup->PhoneticSpellingArray(); - TInt currentSel = popup->CurrentSelection(); - if ( currentSel >= spelling->Count() ) - { - currentSel = 0; - } - TPtrC ptr = spelling->MdcaPoint( currentSel ); - TInt currentLength = ptr.Length(); - editPane->SetEffictiveLength( currentLength ); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::TAknFepInputStateCanindateSelectingMiniQwertyZhuyin -// C++ default constructor -// --------------------------------------------------------------------------- -// -TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::TAknFepInputStateCanindateSelectingMiniQwertyZhuyin( - MAknFepUIManagerStateInterface* aOwner, - MAknFepUICtrlContainerChinese* aUIContainer ) : - TAknFepInputMiniQwertyZhuyinPhraseBase( aOwner, aUIContainer) - { - iState = EZhuyinCandidate; - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - - TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() && uiContainer->CandidatePane()->IsFirstPage()); - TInt bufLength = iOwner->PtiEngine()->CandidatePage().Length(); - TBool showHorizontalScrollArrows = multiplePages || bufLength - > KMinCandidateCount; - - uiContainer->ShowHorizontalScrollArrows( showHorizontalScrollArrows ); - uiContainer->ShowVerticalScrollArrows( multiplePages ); - uiContainer->FocusCandidatePane( ETrue ); - uiContainer->CandidatePane()->ShowCandidateOrdinals( ETrue ); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleKeyL -// Handle system key press event. -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleKeyL( - TInt aKey, TKeyPressLength aLength ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow(); - TInt selected = uiContainer->CandidatePane()->SelectedIndex(); - TInt numbertotal = uiContainer->CandidatePane()->VisibleCandidateCount(); - TBool ret = ETrue; - - if (iOwner->FepMan()->GetComposChrFlag() ) - { - iOwner->FepMan()->SetComposChrFlag(EFalse); - return ETrue; - } - switch ( aKey ) - { - case EStdKeySpace: - case EStdKeyEnter: - { - iOwner->FepMan()->PlaySound( EAvkonSIDDefaultSound ); - } - break; - case EStdKeyLeftArrow: - { - if ( selected == 0 ) - { - UIContainer()->CandidatePane()->SelectIndex( numbertotal-1 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected - 1 ); - } - } - break; - case EStdKeyRightArrow: - { - if ( selected == numbertotal-1 ) - { - UIContainer()->CandidatePane()->SelectIndex( 0 ); - } - else - { - UIContainer()->CandidatePane()->SelectIndex( selected + 1 ); - } - break; - } - case EStdKeyDevice1: // cancel key - { - iOwner->FepMan()->TryCloseUiL(); - break; - } - case EStdKeyUpArrow: - { - if ( uiContainer->CandidatePane()->IsFirstPage() ) // same as the backspace - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - else // just move to the last page - { - uiContainer->CandidatePane()->PreviousCandidatePage(); - uiContainer->CandidatePane()->SetCandidateBuffer(); - uiContainer->CandidatePane()->SelectFirstPhrase(); - UpdateIndicator(); - } - break; - } - case EStdKeyDownArrow: - { - ret = TAknFepInputStateCandidateQwertyBaseChinesePhrase::HandleKeyL( aKey, aLength ); - } - break; - case EStdKeyBackspace: // - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinSpelling ); - } - } - break; - case EStdKeyDevice0: //commit to editor - case EStdKeyDevice3: - { - TBool state = ETrue; - if ( editPane->IsChangeState() && aLength == ELongKeyPress ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - } - break; - default: - if (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed)) - { - iOwner->FepMan()->PlaySound(EAvkonSIDDefaultSound); - break; - } - if ( SelectCandidate( aKey ) ) // is 1-6 key - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - else - { - return TAknFepInputMiniQwertyZhuyinPhraseBase::HandleKeyL( - aKey, aLength ); - } - break; - } - return ret; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::CommitCandidate -// commint the charater to the editor pane -// --------------------------------------------------------------------------- - -TInt TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::GetIndexOfToneMark( const TDesC& aText) - { - TInt indexOfToneMark = -1; - TInt num = sizeof(ZhuyinToneMap )/( sizeof(ZhuyinToneMap[0])); - TInt len = aText.Length(); - for( TInt j = 0; j< len ;j++ ) - { - indexOfToneMark = j; - TBuf<1> keyStorkeBuf = aText.Mid( j ,1 ); - for (TInt i = 0; iEditPaneWindow()->KeystrokeArray(); - CDesCArrayFlat* phraseKeyStrokeArray = UIContainer()->EditPaneWindow()->PhraseShowKeyStrokeArray(); - CDesCArrayFlat* phraseArray = UIContainer()->EditPaneWindow()->PhraseArray(); - TPtrC candidate = UIContainer()->CandidatePane()->CurrentPhraseCandidate(); - - RArray* keyCodeArray = UIContainer()->EditPaneWindow()->KeycodeArray(); - RArray* keyCodePhraseArray = UIContainer()->EditPaneWindow()->PhraseKeycodeArray(); - TBuf spellingText; - UIContainer()->InputPane()->GetText( spellingText ); - phraseArray->AppendL( candidate ); - TBuf keyStoke; - TInt replaceCount = 0; - TInt delimiterIndex = spellingText.Find( KDelimiter ); - if ( KErrNotFound ==delimiterIndex ) - { - delimiterIndex = -1; - } - TInt indexOfToneMark = GetIndexOfToneMark( spellingText ); - if ( delimiterIndex != KErrNotFound && indexOfToneMark >= 0 ) - { - replaceCount = Min( delimiterIndex, indexOfToneMark ); - if ( delimiterIndex > indexOfToneMark ) - { - replaceCount++; - } - } - else if ( delimiterIndex != KErrNotFound && indexOfToneMark == -1 ) - { - replaceCount = delimiterIndex; - } - else if ( delimiterIndex == KErrNotFound && indexOfToneMark != -1 ) - { - replaceCount = indexOfToneMark + 1; - } - else - { - replaceCount = spellingText.Length(); - } - for (TInt i = 0; i < replaceCount; i++ ) - { - TPtrC ptr = keyStrokeArray->MdcaPoint( 0 ); - keyStoke.Append( ptr ); - keyStrokeArray->Delete( 0 ); - // added for the keycode - TInt keyCodeValue = ( *keyCodeArray )[0]; - keyCodePhraseArray->AppendL( keyCodeValue ); - keyCodeArray->Remove( 0 ); - } - phraseKeyStrokeArray->AppendL( keyStoke ); - - if ( GetValidKeystroke() ) - { - iOwner->ChangeState( EZhuyinSpelling ); - } - else - { - iOwner->ChangeState( EMiniQwertyEdit ); - } - UIContainer()->EditPaneWindow()->SetChangeState(ETrue); - RefreshSpellingPane(); - RefreshCandidatePane(); - ChangeCbaL(); - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::CommitCandidate -// to check the select number is valid or not -// --------------------------------------------------------------------------- -// -TBool TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::SelectCandidate( - TInt aKey ) - { - TInt index = 0; - MPtiLanguage *lang= NULL; - RArray keybinding; - TBool validnumkey = EFalse; - CPtiEngine* ptiengine = iOwner->PtiEngine(); - TPtiKeyboardType keyboardtype = iOwner->FepMan()->KeyboardLayout(); - - 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 >= 0x31 && numKeyBind.iChar <= 0x36) - &&(aKey == numKeyBind.iKey) ) - { - index = numKeyBind.iChar - EPtiKey0 -1; - if ( UIContainer()->CandidatePane()->SelectIndex( index, EFalse ) ) - { - validnumkey = ETrue; - } - break; - } - } - } - keybinding.Reset(); - return validnumkey; - } -// --------------------------------------------------------------------------- -// TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateEditingMiniQwertyZhuyinPhrase::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - HandleCommitL(); - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateSpellingMiniQwertyZhuyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateSpellingMiniQwertyZhuyin::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - if ( popup->IsEnabled() ) - { - popup->Enable( EFalse ); - } - editPane->SetChangeState( ETrue ); - iOwner->ChangeState( EZhuyinCandidate ); - } - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } - -// --------------------------------------------------------------------------- -// TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleCommandL -// Handling Command -// --------------------------------------------------------------------------- -// -void TAknFepInputStateCanindateSelectingMiniQwertyZhuyin::HandleCommandL( - TInt aCommandId ) - { - MAknFepUICtrlContainerChinese* uiContainer = UIContainer(); - MAknFepUICtrlCandidatePane* candidatePane = - UIContainer()->CandidatePane(); - MAknFepUICtrlEditPane* editPane = UIContainer()->EditPaneWindow(); - TBool state = ETrue; - switch ( aCommandId ) - { - // Handle the event frome command. - case EAknSoftkeySelect: - //case (TUint16)EAknSoftkeySelect: //the Selected in soft CBA - if ( editPane->IsChangeState() ) - { - state = EFalse; - } - else - { - editPane->SetChangeState( EFalse ); - } - if ( state ) - { - editPane->SetNeedClearDeliberateSelection( ETrue ); - CommitCandidateL(); - } - - break; - default: - TAknFepInputStateChineseBase::HandleCommandL( aCommandId ); - break; - } - } -//End of File