--- a/fep/aknfep/src/aknfepinputstatepinyinphrasecreationbase.cpp Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1084 +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 TAknFepInputStateEntryPinyinPhraseCreation methods.
- *
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include <PtiEngine.h> //CPtiEngine
-#include <PtiUserDicEntry.h>
-#include <avkon.rsg>
-#include <aknfep.rsg>
-
-#include "aknfepinputstatepinyinphrasecreationbase.h"
-#include "AknFepPanic.h"
-#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface
-#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface
-#include "AknFepUiCtrlContainerChinese.h"
-#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase
-#include "aknfepuictrleditpane.h"
-#include "AknFepUICtrlCandidatePane.h"
-#include "AknFepUICtrlInputPane.h"
-
-const TUint16 KToneMarkLib[] =
- {
- 0x02C9, 0x02CA, 0x02C7, 0x02CB, 0x02D9
- };
-
-const TUint16 KDelimiter =0x0027;
-const TInt KToneMarkMax = 5;
-const TInt KMaxKeystrokeCount = 31;
-const TInt KMaxPhraseCreationCount = 7;
-
-_LIT( KKey2, "2");
-_LIT( KKey3, "3");
-_LIT( KKey4, "4");
-_LIT( KKey5, "5");
-_LIT( KKey6, "6");
-_LIT( KKey7, "7");
-_LIT( KKey8, "8");
-_LIT( KKey9, "9");
-//KMaxPhraseNote means the max phrase is seven
-_LIT( KMaxPhraseNote,"\x8BCD\x7EC4\x6700\x957F\x4E3A\x4E03\x5B57" );
-
-// ---------------------------------------------------------
-// C++ constructor
-// ---------------------------------------------------------
-//
-TAknFepInputStatePinyinPhraseCreationBase::TAknFepInputStatePinyinPhraseCreationBase(
- MAknFepUIManagerStateInterface* aOwner,
- MAknFepUICtrlContainerChinese* aUIContainer ) :
- TAknFepInputStateCandidateBase( aOwner, aUIContainer )
- {
- }
-
-// ---------------------------------------------------------
-// Add keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystroke( TInt aKey )
- {
- TBool result = ETrue;
- TRAPD( ret, result = AddKeystrokeL( aKey ) );
- if ( KErrNone != ret )
- {
- return EFalse;
- }
- return result;
- }
-
-// ---------------------------------------------------------
-// Add tone mark.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMark()
- {
- TBool result = ETrue;
- TRAPD( ret, result = AddToneMarkL() );
- if ( KErrNone != ret )
- {
- return EFalse;
- }
- return result;
- }
-
-// ---------------------------------------------------------
-// get the valid keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystroke()
- {
- TBool result = ETrue;
- TRAPD( ret, result = GetValidKeystrokeL() );
- if ( KErrNone != ret )
- {
- return EFalse;
- }
- return result;
- }
-
-// ---------------------------------------------------------
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::DeleteCurrentKeystroke()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- TInt index = editPane->GetCursorIndexOfKeystroke();
-
- if ( 0 == index )
- {
- return EFalse;
- }
-
- showKeystroke->Delete( index - 1 );
- editPane->SetCursorIndexOfKeystroke( index - 1 );
-
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// Delete current keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystroke()
- {
- TBool result = ETrue;
- TRAPD( ret, result = ChineseRevertKeystrokeL() );
- if ( KErrNone != ret )
- {
- return EFalse;
- }
- return result;
- }
-
-// ---------------------------------------------------------
-// show info to the eep ctrl.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ShowInfo()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray();
- TInt index = editPane->GetCursorIndexOfKeystroke();
-
- TBuf<KMaxKeystrokeCount> buf;
-
- for ( TInt i = 0; i < chinese->Count(); ++i )
- {
- buf.Append( chinese->MdcaPoint( i ) );
- }
-
- for ( TInt i = 0; i < showKeystroke->Count(); ++i )
- {
- buf.Append( showKeystroke->MdcaPoint( i ) );
- }
-
- if ( showKeystroke->Count() == 0 )
- {
- editPane->SetCursorIndexOfKeystroke( 0 );
- index = 0;
- }
-
- editPane->SetText( buf, chinese->Count() + index );
- }
-
-// ---------------------------------------------------------
-// set the show info warning color.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::SetWarningColor()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- TInt showKeystrokeCount = popup->ShowKeystrokeArray()->Count();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- TInt validKeytrokeCount = popup->KeystrokeArray()->Count();
- if ( 0 == validKeytrokeCount )
- {
- editPane->SetHighlight( chineseCount, chineseCount + showKeystrokeCount );
- }
- }
-
-// ---------------------------------------------------------
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::GetCandidate( TInt aSelection )
- {
- TRAP_IGNORE( GetCandidateL( aSelection ) );
- }
-
-// ---------------------------------------------------------
-// Change CBA
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ChangeCba()
- {
- TRAP_IGNORE( ChangeCbaL() );
- }
-
-// ---------------------------------------------------------
-// Refresh UI
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::RefreshCandidate()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
- CDesCArrayFlat* candidateArray =
- uiContainer->CandidatePane()->CandidateArray();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- // have valid keystroke.
- if ( validKeystroke->Count() > 0 )
- {
- uiContainer->SetControlInVisible( ETrue );
- // set display page for delibrate selection
- ClearDeliberateSelection();
- GetCandidate( );
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable( ETrue );
- uiContainer->ShowHorizontalScrollArrows( EFalse );
- uiContainer->ShowVerticalScrollArrows( ETrue );
- }
- else
- {
- candidateArray->Reset();
- if ( KMaxPhraseCreationCount == chineseCount )
- {
- uiContainer->SetControlInVisible( ETrue );
- TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) );
- }
- else
- {
- uiContainer->SetControlInVisible( EFalse );
- }
-
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable( ETrue );
- uiContainer->ShowHorizontalScrollArrows( EFalse );
- uiContainer->ShowVerticalScrollArrows( EFalse );
- }
-
- if ( EKeySequenceEdit == iState )
- {
- //popup->SetNoneHighlighted();
- }
- uiContainer->Enable(ETrue);
- popup->Enable( validKeystroke->Count() > 0 );
- UpdateIndicator();
- }
-
-// ---------------------------------------------------------
-// Refresh UI
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::RefreshUI(TInt aSelection)
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
- CDesCArrayFlat* candidateArray =
- uiContainer->CandidatePane()->CandidateArray();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- // have valid keystroke.
- if ( validKeystroke->Count() > 0 )
- {
- uiContainer->SetControlInVisible( ETrue );
- popup->SplitPhraseSpellingIntoPages();
- inputPane->SetText( spelling->MdcaPoint( aSelection ) );
- // set display page for delibrate selection
- popup->SetDisplayPage(aSelection);
- popup->SetPhraseItemTexts();
- popup->PopupSizeChanged();
- GetCandidate( aSelection );
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable( ETrue );
- uiContainer->ShowHorizontalScrollArrows( EFalse );
- uiContainer->ShowVerticalScrollArrows( ETrue );
- }
- else
- {
- candidateArray->Reset();
- if ( KMaxPhraseCreationCount == chineseCount )
- {
- uiContainer->SetControlInVisible( ETrue );
- TRAP_IGNORE( candidateArray->AppendL( KMaxPhraseNote ) );
- }
- else
- {
- uiContainer->SetControlInVisible( EFalse );
- }
-
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable( ETrue );
- uiContainer->ShowHorizontalScrollArrows( EFalse );
- uiContainer->ShowVerticalScrollArrows( EFalse );
- }
-
- if ( EKeySequenceEdit == iState )
- {
- popup->SetNoneHighlighted();
- }
- uiContainer->Enable(ETrue);
- popup->Enable( validKeystroke->Count() > 0 );
- UpdateIndicator();
- }
-
-// ---------------------------------------------------------
-// clear selection.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ClearDeliberateSelection()
- {
- // we must have just deleted the last character,
- // or we are starting a new pinyin session, so wipe the last deliberate selection
- TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
- oldDeliberateSelection = KNullDesC;
- }
-
-// ---------------------------------------------------------
-// clear the keystroke of PtiEngine.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ClearPtiEngineKeystroke()
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- for ( TInt i = 0; i < KMaxKeystrokeCount; ++i )
- {
- ptiengine->DeleteKeyPress();
- }
- }
-
-
-// ---------------------------------------------------------
-// Get the code of Keystroke in ITUT.
-// ---------------------------------------------------------
-//
-TInt TAknFepInputStatePinyinPhraseCreationBase::GetKeystrokeCode(
- TPtiKey& aKey,
- const TDesC& aKeystroke )
- {
- if ( aKeystroke.Length() < 1 )
- {
- return EKeyStrokeNull;
- }
-
- // the input key is delimiter the return -1.
- if ( KDelimiter == aKeystroke[0] )
- {
- aKey = EPtiKey1;
- return EKeyDelimiter;
- }
- // the input key is tone mark return tone mark.
- for ( TInt i = 0; i < KToneMarkMax; ++i )
- {
- if ( KToneMarkLib[i] == aKeystroke[0] )
- {
- return i + 1;
- }
- }
- // the keystroke is 2 - 9.
- if ( 0 == aKeystroke.Compare( KKey2 ) )
- {
- aKey = EPtiKey2;
- }
- else if ( 0 == aKeystroke.Compare( KKey3 ) )
- {
- aKey = EPtiKey3;
- }
- else if ( 0 == aKeystroke.Compare( KKey4 ) )
- {
- aKey = EPtiKey4;
- }
- else if ( 0 == aKeystroke.Compare( KKey5 ) )
- {
- aKey = EPtiKey5;
- }
- else if ( 0 == aKeystroke.Compare( KKey6 ) )
- {
- aKey = EPtiKey6;
- }
- else if ( 0 == aKeystroke.Compare( KKey7 ) )
- {
- aKey = EPtiKey7;
- }
- else if ( 0 == aKeystroke.Compare( KKey8 ) )
- {
- aKey = EPtiKey8;
- }
- else if ( 0 == aKeystroke.Compare( KKey9 ) )
- {
- aKey = EPtiKey9;
- }
- return EkeyNumber;
- }
-
-
-// ---------------------------------------------------------
-// Append the key to the ptiengine.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AppendKeyPressL(
- TPtiKey& aKey,
- TBool aAddSpellingFlag
- )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* tempSpelling = popup->TempSpelling();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
- CDesCArrayFlat* afterCheck = popup->OptimizeSpelling();
-
- tempSpelling->Reset();
- afterCheck->Reset();
- TInt stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
- TInt stringAfterLength = ptiengine->AppendKeyPress(aKey).Length();
- // the pti can't append key.
- if ( stringBeforeLength == stringAfterLength )
- {
- return EFalse;
- }
- // get the spelling by pti.
- ptiengine->GetPhoneticSpellingsL( *tempSpelling );
- // delete the phrase spelling.
- CheckSpellingL( tempSpelling, afterCheck );
- if ( afterCheck->Count() > 0 )
- {
- if ( !aAddSpellingFlag )
- {
- for( TInt i = afterCheck->Count() - 1; i >= 0; --i )
- {
- spelling->InsertL( 0, afterCheck->MdcaPoint( i ) );
- }
- }
- return ETrue;
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// Append the tone mark to the ptiengine.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AppendToneMarkL( TInt& aToneMark )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* tempSpelling = popup->TempSpelling();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-
- for ( TInt i = 0; i < aToneMark; ++i )
- {
- tempSpelling->Reset();
- ptiengine->IncrementToneMark( ETrue );
- // get the spelling by pti.
- ptiengine->GetPhoneticSpellingsL( *tempSpelling );
- if ( CheckToneMark( aToneMark ) )
- {
- break;
- }
- }
-
- if ( tempSpelling->Count() > 0 )
- {
- for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i )
- {
- spelling->InsertL( 0, tempSpelling->MdcaPoint( i ) );
- }
- return ETrue;
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// check the spelling delete the phrase spelling.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::CheckSpellingL(
- CDesCArrayFlat* aTempSpelling,
- CDesCArrayFlat* aAfterCheck
- )
- {
- TBuf<1> buf;
- buf.Append( KDelimiter );
- for (TInt i = 0; i < aTempSpelling->Count(); ++i )
- {
- if ( KErrNotFound == aTempSpelling->MdcaPoint(i).Find( buf ) )
- {
- aAfterCheck->AppendL( aTempSpelling->MdcaPoint(i) );
- }
- }
- }
-
-// ---------------------------------------------------------
-// check the tone mark and delete the phrase spelling.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::CheckToneMark( TInt& aToneMark )
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* tempSpelling = popup->TempSpelling();
- TBuf<1> delimiter;
- delimiter.Append( KDelimiter );
-
- for ( TInt i = tempSpelling->Count() - 1; i >= 0; --i )
- {
- if ( KErrNotFound != tempSpelling->MdcaPoint( i ).Find( delimiter ) )
- {
- tempSpelling->Delete( i );
- }
- else
- {
- if ( KToneMarkLib[ aToneMark - 1 ] !=
- tempSpelling->MdcaPoint( i ).Right( 1 )[0] )
- {
- tempSpelling->Delete( i );
- }
- }
- }
- tempSpelling->Compress();
- return tempSpelling->Count();
- }
-
-
-// ---------------------------------------------------------
-// Add keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddKeystrokeL( TInt aKey )
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- TInt index = editPane->GetCursorIndexOfKeystroke();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- TBuf<1> key;
-
- if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount )
- {
- return EFalse;
- }
-
- if ( KMaxPhraseCreationCount == chineseCount )
- {
- return EFalse;
- }
-
- switch( (TPtiKey)aKey )
- {
- case EPtiKey0:
- key.Append( KDelimiter );
- break;
- case EPtiKey1:
- key.Append( KDelimiter );
- break;
- case EPtiKey2:
- key.Append( EPtiKey2 );
- break;
- case EPtiKey3:
- key.Append( EPtiKey3 );
- break;
- case EPtiKey4:
- key.Append( EPtiKey4 );
- break;
- case EPtiKey5:
- key.Append( EPtiKey5 );
- break;
- case EPtiKey6:
- key.Append( EPtiKey6 );
- break;
- case EPtiKey7:
- key.Append( EPtiKey7 );
- break;
- case EPtiKey8:
- key.Append( EPtiKey8 );
- break;
- case EPtiKey9:
- key.Append( EPtiKey9 );
- break;
- default:
- return EFalse;
- }
-
- if ( index > showKeystroke->Count() )
- {
- index = showKeystroke->Count();
- }
-
- showKeystroke->InsertL( index, key );
- editPane->SetCursorIndexOfKeystroke( index + 1 );
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// Add tone mark.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::AddToneMarkL()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- TInt index = editPane->GetCursorIndexOfKeystroke();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- TBuf<1> key;
- TInt toneMark( 0 );
-
- if ( KMaxPhraseCreationCount == chineseCount )
- {
- return EFalse;
- }
-
- if ( showKeystroke->Count() + chineseCount >= KMaxKeystrokeCount )
- {
- if ( 0 == index )
- {
- return EFalse;
- }
- for ( TInt i = 0; i < KToneMarkMax; ++i )
- {
- if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] )
- {
- toneMark = i + 1;
- break;
- }
- }
- if ( 0 == toneMark )
- {
- return EFalse;
- }
- }
-
- if ( 0 == index )
- {
- key.Append( KToneMarkLib[0] );
- showKeystroke->InsertL( 0, key );
- editPane->SetCursorIndexOfKeystroke( 1 );
- return ETrue;
- }
-
- for ( TInt i = 0; i < KToneMarkMax; ++i )
- {
- if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( index - 1 )[0] )
- {
- toneMark = i + 1;
- break;
- }
- }
-
- if ( 0 == toneMark )
- {
- key.Append( KToneMarkLib[0] );
- showKeystroke->InsertL( index, key );
- editPane->SetCursorIndexOfKeystroke( index + 1 );
- }
- else if ( KToneMarkMax == toneMark )
- {
- key.Append( KToneMarkLib[0] );
- showKeystroke->Delete( index - 1 );
- showKeystroke->InsertL( index - 1, key );
- }
- else
- {
- key.Append( KToneMarkLib[toneMark] );
- showKeystroke->Delete( index - 1 );
- showKeystroke->InsertL( index - 1, key );
- }
-
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// check the keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::IsToneMark( const TDesC& aInput )
- {
- for ( TInt i = 0; i < KToneMarkMax; ++i )
- {
- if ( KToneMarkLib[i] == aInput[0] )
- {
- return ETrue;
- }
- }
- return EFalse;
- }
-// ---------------------------------------------------------
-// check the keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::CheckKeystroke()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- TBuf<1> buf;
- buf.Append( KDelimiter );
- // if the keystroke is null then the keystroke is invalid.
- if ( 0 == showKeystroke->Count() )
- {
- return EFalse;
- }
- // if the first keystroke is delimiter then keytroke is invalid.
- if ( KDelimiter == showKeystroke->MdcaPoint( 0 )[0] )
- {
- return EFalse;
- }
- // if the first keystroke is Tone mark then keytroke is invalid.
- for ( TInt i = 0; i < KToneMarkMax; ++i )
- {
- if ( KToneMarkLib[i] == showKeystroke->MdcaPoint( 0 )[0] )
- {
- return EFalse;
- }
- }
- // the first keystroke is not delimiter and tone mark, if the number of keystroke
- // is not more than two then must the keytroke are all valid.
- if ( showKeystroke->Count() <= 2 )
- {
- return ETrue;
- }
-
- return ETrue;
- }
-
-// ---------------------------------------------------------
-// get the valid keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::GetValidKeystrokeL()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
- CDesCArrayFlat* allValidKeystroke = popup->KeystrokeArray();
- CDesCArrayFlat* validKeystroke = popup->InEffectKeystrokeArray();
- TInt allValidKeyLen = allValidKeystroke->Count();
- TPtiKey key;
- TInt retCode(0);
- TBool nextIsToneMark = EFalse;
- TBuf<1> delimiter;
- TBuf<KMaxKeystrokeCount> beforeBuf;
- TBuf<KMaxKeystrokeCount> afterBuf;
-
- delimiter.Append( KDelimiter );
-
- for ( TInt i = 0; i < allValidKeyLen; ++i )
- {
- if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) )
- {
- break;
- }
- beforeBuf.Append( allValidKeystroke->MdcaPoint( i ) );
- }
-
- spelling->Reset();
- validKeystroke->Reset();
- allValidKeystroke->Reset();
-
- ClearPtiEngineKeystroke();
- if ( !CheckKeystroke() )
- {
- if ( allValidKeyLen > 0 )
- {
- popup->SetValidKeystrokeChange( ETrue );
- }
- else
- {
- popup->SetValidKeystrokeChange( EFalse );
- }
- return EFalse;
- }
-
- // the firts keystroke is key 2 - 9.
- for ( TInt i = 0; i < showKeystroke->Count(); ++i )
- {
- retCode = GetKeystrokeCode( key, showKeystroke->MdcaPoint( i ) );
- //the keystroke is delimiter.
- if ( -1 == retCode )
- {
- validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- break;
- }
- //the keystroke is 2 - 9
- else if ( 0 == retCode )
- {
- //if the next keystroke is tone mark, then current keystroke and
- //the next keystroke need to whole check.
- if ( i < showKeystroke->Count() - 1 )
- {
- TPtiKey keyTmp;
- if ( GetKeystrokeCode( keyTmp,
- showKeystroke->MdcaPoint( i + 1) ) > 0 )
- {
- nextIsToneMark = ETrue;
- }
- }
- if ( AppendKeyPressL( key, nextIsToneMark ) )
- {
- //the next keystroke is not tone mark.
- if ( !nextIsToneMark )
- {
- validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- }
- }
- else
- {
- break;
- }
- }
- else
- {
- if ( AppendToneMarkL( retCode ) )
- {
- validKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) );
- validKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i - 1 ) );
- allValidKeystroke->AppendL( showKeystroke->MdcaPoint( i ) );
- }
- break;
- }
- }
- for ( TInt i = 0; i < allValidKeystroke->Count(); ++i )
- {
- if ( 0 == allValidKeystroke->MdcaPoint( i ).Compare( delimiter ) )
- {
- break;
- }
- afterBuf.Append( allValidKeystroke->MdcaPoint( i ) );
- }
-
- if ( allValidKeystroke->Count() > 0 )
- {
- if ( ( 0 == allValidKeyLen ) ||
- ( 0 != afterBuf.Compare( beforeBuf ) ) )
- {
- popup->SetValidKeystrokeChange( ETrue );
- }
- else
- {
- popup->SetValidKeystrokeChange( EFalse );
- }
- return ETrue;
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------
-// Revert the current chinse to keystroke.
-// ---------------------------------------------------------
-//
-TBool TAknFepInputStatePinyinPhraseCreationBase::ChineseRevertKeystrokeL()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlEditPane* editPane = uiContainer->EditPaneWindow();
- CDesCArrayFlat* showKeystroke = popup->ShowKeystrokeArray();
- CDesCArrayFlat* chinese = popup->ChooseChineseCharacterArray();
- CDesCArrayFlat* chineseKeystroke =
- popup->ChooseChineseCharacterArrayKeystroke();
- TInt index = editPane->GetCursorIndexOfKeystroke();
-
- if ( ( 0 != index ) || ( 0 == chinese->Count() ) )
- {
- return EFalse;
- }
-
- if ( chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() < 1 )
- {
- return EFalse;
- }
-
- for( TInt i = chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).
- Length() - 1; i >= 0 ; --i )
- {
- showKeystroke->InsertL( 0, chineseKeystroke->MdcaPoint(
- chineseKeystroke->Count() - 1 ).Mid( i, 1 ) );
- }
-
- editPane->SetCursorIndexOfKeystroke(
- chineseKeystroke->MdcaPoint( chineseKeystroke->Count() - 1 ).Length() );
- chinese->Delete( chinese->Count() - 1 );
- chineseKeystroke->Delete( chineseKeystroke->Count() - 1 );
-
- // if the show inof's length more than KMaxKeystrokeCount, delete more inof.
- for ( TInt i = chinese->Count() + showKeystroke->Count() - KMaxKeystrokeCount;
- i > 0; --i )
- {
- showKeystroke->Delete( showKeystroke->Count() - 1 );
- }
-
- showKeystroke->Compress();
- chinese->Compress();
- chineseKeystroke->Compress();
- return ETrue;
- }
-
-
-// ---------------------------------------------------------
-// Get the candidate info.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::GetCandidateL( TInt aSelection )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- CDesCArrayFlat* phraseCandidates =
- uiContainer->CandidatePane()->CandidateArray();
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
-
- phraseCandidates->Reset();
- if ( ( aSelection > spelling->Count() ) || ( 0 == spelling->Count() ) )
- {
- return;
- }
- extern void CleanArray( TAny* aAny );
- RPointerArray<HBufC> list;
- TCleanupItem cleanitem( CleanArray, &list );
- CleanupStack::PushL( cleanitem );
- TPtrC curSpell = spelling->MdcaPoint( aSelection );
- HBufC* retString = ptiengine->GetCandidatesByInputString(
- spelling->MdcaPoint( aSelection ),
- list,
- EFalse );
-
- CleanupStack::PushL( retString );
- for (int index = 0; index < ptiengine->PhoneticSpellingCount(); index++)
- {
- TPtrC ptr = ptiengine->GetPhoneticSpelling(index + 1);
- if (ptr.Length() == curSpell.Length())
- {
- ptiengine->SelectPhoneticSpelling(index + 1);
- ptiengine->GetChinesePhraseCandidatesL(*phraseCandidates);
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( retString );
- CleanupStack::PopAndDestroy(); // cleanitem
- }
-
-// ---------------------------------------------------------
-// Change CBA
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::ChangeCbaL()
- {
- MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
- TInt keystrokeCount = popup->ShowKeystrokeArray()->Count();
- TInt chineseCount = popup->ChooseChineseCharacterArray()->Count();
- TInt validKeystrokeCount = popup->InEffectKeystrokeArray()->Count();
- TInt lastRes = popup->GetLastResouce();
-
- if ( ( chineseCount == KMaxPhraseCreationCount ) ||
- ( ( 0 == keystrokeCount ) && ( chineseCount > 1 ) ) )
- {
- 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 ) && ( 0 != validKeystrokeCount ) )
- {
- 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 ( 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 );
- }
- }
-
-// ---------------------------------------------------------
-// Update Indicator.
-// ---------------------------------------------------------
-//
-void TAknFepInputStatePinyinPhraseCreationBase::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 );
- }
-
- 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 );
- }
- }
-
-// End of file