--- a/fep/aknfep/src/aknfepuiinputstateentryhalfqwertyphrase.cpp Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1243 +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 TAknFepInputStateEntryMiniQwertyPinyinPhrase methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include "AknFepUIManagerStateInterface.h" //MAknFepUIManagerStateInterface
-#include "AknFepUiCtrlContainerChinese.h"
-#include "AknFepManagerUIInterface.h" //MAknFepManagerUIInterface
-#include "AknFepUICtrlCandidatePane.h"
-#include "aknfepuiinputstateentryhalfqwertyphrase.h"
-
-#include "AknFepManager.h" //FepMan flag
-#include "AknFepUICtrlInputPane.h"
-#include "AknFepUICtrlPinyinPopup.h" //Pinyin phrase
-#include "AknFepUiCtrlContainerChinese.h"
-#include <aknfep.rsg>
-#include <PtiEngine.h> //CPtiEngine
-#include <e32keys.h> //keys
-#include <avkon.rsg>
-
-const TInt KFnMappedCharacters = 5;
-const TInt KInputPaneLength = 32;
-const TText KPinyinTone4Valid = 0x02D9;
-const TText KPinyinTone4Invalid = 0x0020;
-const TInt KMaxPhraseCount = 150;
-
-//For Pinyin
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::TAknFepInputStateEntryHalfQwertyPinyinPhrase
-// the construt funtion
-// ---------------------------------------------------------------------------
-//
-TAknFepInputStateEntryHalfQwertyPinyinPhrase::TAknFepInputStateEntryHalfQwertyPinyinPhrase(
- MAknFepUIManagerStateInterface* aOwner,
- MAknFepUICtrlContainerChinese* aUIContainer)
- :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer)
- {
- iState = EEntry;
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- uiContainer->FocusCandidatePane(EFalse);
- uiContainer->CandidatePane()->ShowCandidateOrdinals(EFalse);
- uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput);
- uiContainer->CandidatePane()->SelectFirstPhrase();
- uiContainer->ShowHorizontalScrollArrows(EFalse);
- uiContainer->ShowVerticalScrollArrows(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
- ImplicitlyUpdateSelection();
- UpdateIndicator();
- ClearDeliberateSelection();
- iOwner->PtiEngine()->SetInputMode(EPtiEnginePinyinPhraseHalfQwerty);
- iOwner->PtiEngine()->SetCandidatePageLength(KMaxPhraseCount);
- iOwner->PtiEngine()->SetCase(EPtiCaseLower);
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepUiInputStateCandidateMiniQwertyZhuyinPhrase::HandleKeyL
-// handle key event
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateEntryHalfQwertyPinyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength)
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
- TBool state = ETrue;
- TPtrC text;
- TBool ret = ETrue;
- if ( aLength == EShortKeyPress )
- {
- switch (aKey)
- {
- case EPtiKeyQwerty1:
- {
- aKey = EPtiKeyQwertyE;
- break;
- }
- case EPtiKeyQwerty2:
- {
- aKey = EPtiKeyQwertyT;
- break;
- }
- case EPtiKeyQwerty3:
- {
- aKey = EPtiKeyQwertyU;
- break;
- }
- case EPtiKeyQwerty4:
- {
- aKey = EPtiKeyQwertyD;
- break;
- }
- case EPtiKeyQwerty5:
- {
- aKey = EPtiKeyQwertyG;
- break;
- }
- case EPtiKeyQwerty6:
- {
- aKey = EPtiKeyQwertyJ;
- break;
- }
- case EPtiKeyQwerty7:
- {
- aKey = EPtiKeyQwertyC;
- break;
- }
- case EPtiKeyQwerty8:
- {
- aKey = EPtiKeyQwertyB;
- break;
- }
- case EPtiKeyQwerty9:
- {
- aKey = EPtiKeyQwertyM;
- break;
- }
- case EPtiKeyQwerty0:
- {
- aKey = EPtiKeyQwertySpace;
- break;
- }
- }
- }
-
- if ( aKey != EStdKeyLeftFunc &&
- (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ||
- iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)))
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- return ETrue;
- }
- if(( aKey == EStdKeyLeftFunc || aKey == EStdKeyFullStop) && aLength == EShortKeyPress) //chr and punctuation key to tone mark
- {
- if(ptiengine->IncrementToneMark(ETrue))
- {
- ImplicitlyUpdateSelection();
- }
- }
- else if( CAknFepFnKeyManager::EFnKeyNext == iOwner->FepMan()->FnKeyState() || //
- CAknFepFnKeyManager::EFnKeyLock == iOwner->FepMan()->FnKeyState() ||
- CAknFepFnKeyManager::EFnKeyDown == iOwner->FepMan()->FnKeyState())
- {
- popup->SetPreStateIsPredictive( EFalse );
- iOwner->FepMan()->TryCloseUiL();
- ret = EFalse;
- }
- else if(aKey == EStdKeyBackspace )
- {
- if ( popup->IsChangeStatet() && aLength == ELongKeyPress )
- {
- state = EFalse;
- }
- else
- {
- popup->SetChangeState( EFalse );
- }
- if ( state )
- {
- if (iOwner->PtiEngine()->DeleteKeyPress().Length())
- {
- ImplicitlyUpdateSelection();
- }
- else
- {
- iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
- popup->SetPreStateIsPredictive( EFalse );
- if ( aLength == ELongKeyPress )
- {
- iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue);
- }
- }
- }
- }
- else if(aKey ==EStdKeyDevice1)//sk2
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- }
- else if(aKey == EStdKeyRightArrow)
- {
- if(popup->IsEnabled())
- {
- if(popup->SelectNextPhrase())
- {
- DeliberatelyUpdateSelection();
- }
- }
- }
- else if(aKey == EStdKeyLeftArrow)
- {
- if(popup->IsEnabled())
- {
- if(popup->SelectPrevPhrase())
- {
- DeliberatelyUpdateSelection();
- }
- }
- }
- else if (aKey == EStdKeyDownArrow
- || aKey == EStdKeyDevice3
- || aKey == EStdKeyDevice0
- ||aKey == EStdKeyEnter) //Downkey,sk1,selection,enter key
- {
- if(popup->IsEnabled())
- {
- popup->Enable(EFalse);
- }
- iOwner->ChangeState(ECandidate);
- popup->SetPreStateIsPredictive( EFalse );
- popup->SetChangeState( ETrue );
- }
- else if ( aKey == EStdKeyUpArrow )
- {
- if ( !candidatePane->IsFirstPage() )
- {
- candidatePane->PreviousCandidatePage();
- candidatePane->SetCandidateBuffer();
- candidatePane->SelectFirst();
- UpdateIndicator();
- }
- }
- else if(aLength == EShortKeyPress)
- {
- iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);
-
- if(iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey ==EStdKeySpace ) //seperator
- {
- TInt stringBeforeLength(0);
- TInt stringAfterLength(0);
- stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
- stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length();
- if (stringAfterLength==0 && aKey == EPtiKeyQwertyU ) //u,i should not as first character in pinyin
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- iOwner->FepMan()->UpdateCbaL(NULL);
-// iOwner->ChangeState(EQwerty);
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- return ETrue;
- }
- if (stringBeforeLength != stringAfterLength)
- {
- if (ptiengine->GetPhoneticSpelling(1).Length() == 1)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
- }
- ImplicitlyUpdateSelection();
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- if ( popup->PhoneticSpellingArray()->Count() > 0 &&
- popup->PhoneticSpellingArray()->MdcaPoint( 0 ).Length() > 1 )
- {
- popup->SetPreStateIsPredictive( EFalse );
- }
- }
- else
- {
- if ( popup->GetPreStateIsPredictive() &&
- popup->PhoneticSpellingArray()->Count() > 0 &&
- popup->PhoneticSpellingArray()->MdcaPoint( 0 ).Length() == 1) //long press fn mode character should inputted
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- if (aKey == EStdKeyEnter)
- {
- // PtiEngine does not have mapping for the enter key.
- const TText KAknFEPLineFeedSymbol = 0x21B2;
- TBuf<1> lineFeed;
- lineFeed.Zero();
- lineFeed.Append(KAknFEPLineFeedSymbol);
- text.Set(lineFeed);
- }
- else
- {
- TBuf<KFnMappedCharacters> allFnMappedCharacters;
- ptiengine->MappingDataForKey((TPtiKey)aKey, allFnMappedCharacters, EPtiCaseFnLower);
- text.Set(allFnMappedCharacters);
- }
- if (text.Length() > 0)
- {
- TBuf<1> chr;
- chr.Append(text[0]);
- iOwner->FepMan()->NewCharacterL(chr);
- iOwner->FepMan()->CommitInlineEditL();
- ptiengine->ClearCurrentWord();
- ret = ETrue;
- }
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::DeliberatelyUpdateSelection
-// DeliberatelyUpdateSelection
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::DeliberatelyUpdateSelection()
- {
- TPtr deliberateSelection = iOwner->GetLatestDeliberateSelection();
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- TInt selected = popup->CurrentSelection();
- ptiengine->EnableToneMarks(EFalse);
- // our index is zero based, engine index is one based
- TPtrC spelling = ptiengine->GetPhoneticSpelling(selected + 1);
- deliberateSelection = spelling.Left(MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark);
- ptiengine->EnableToneMarks(ETrue);
- UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingNavigation);
- RefreshUI(popup->CurrentVisibleSelection());
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::ImplicitlyUpdateSelection
-// update the selection
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::ImplicitlyUpdateSelection()
- {
- TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
- TInt oldDeliberateSelectionLength = oldDeliberateSelection.Length();
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- // previously selected is compared in turn to each of the new candidates
- ptiengine->EnableToneMarks(EFalse);
- TInt pinyinCount = ptiengine->PhoneticSpellingCount();
- TInt newSelection = 0;
- for(TInt i = 0; i < pinyinCount; i++)
- {
- TPtrC spelling = ptiengine->GetPhoneticSpelling(i + 1); // our index is zero based, engine index is one based
- TInt spellingLength = spelling.Length();
- // figure out how many characters we are comparing, this depends on the
- // direction of the edit
- TInt compareLength = oldDeliberateSelectionLength <= spellingLength ?
- oldDeliberateSelectionLength : spellingLength;
- if(oldDeliberateSelection.Left(compareLength) == spelling.Left(compareLength))
- {
- // as soon as a substring match is found, the
- // highlight position is set to that candidate in the new list.
- // note that in the case of the first character entered, the
- // oldBuf will be empty so it will always match... which is
- // fine as we want to select the top one anyway, so we will
- // quit the loop early.
- newSelection = i;
- break;
- }
- }
- ptiengine->EnableToneMarks(ETrue);
- UIContainer()->PinyinPopupWindow()->SetFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged);
- RefreshUI(newSelection);
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::ClearDeliberateSelection
-// clear the deliberate selection
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::ClearDeliberateSelection()
- {
- MAknFepUICtrlPinyinPopup* popup = UIContainer()->PinyinPopupWindow();
- TInt spellingCount = popup->PhoneticSpellingArray()->Count();
- // we must have just deleted the last character,
- // or we are starting a new zhuyin session, so wipe the last deliberate selection
- if ( 0 == spellingCount )
- {
- TPtr oldDeliberateSelection = iOwner->GetLatestDeliberateSelection();
- oldDeliberateSelection = KNullDesC;
- }
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::RefreshUI
-// refresh ui
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::RefreshUI(TInt aSelection)
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- // 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);
- }
- TText toneMark;
- TBool toneMarkEntered = ptiengine->ToneMark(toneMark);
- TBuf<1> validToneMarkBuf;
- if(toneMarkEntered)
- {
- // override specific invalid tonemark character only, the others are the same character
- // when both valid and invalid
- if(toneMark == KPinyinTone4Invalid)
- toneMark = KPinyinTone4Valid;
- validToneMarkBuf.Append(toneMark);
- }
- // to start with, disable the tone marks so we can get the list of all zhuyin matches
- // later we will figure out which ones are invalid
- ptiengine->EnableToneMarks(EFalse);
- TInt pinyinCountWithoutToneMarks = ptiengine->PhoneticSpellingCount();
- if(pinyinCountWithoutToneMarks > 0)
- {
- if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged))
- {
- CDesCArrayFlat* spelling = popup->PhoneticSpellingArray();
- TRAPD(ignore, ptiengine->GetPhoneticSpellingsL(*spelling));
- if (ignore != KErrNone)
- {
- return;
- }
- popup->SplitPhraseSpellingIntoPages();
- }
- // set display page for delibrate selection
- popup->SetDisplayPage(aSelection);
- popup->SetPhraseItemTexts();
- // fill in input pane although it's invisible
- inputPane->SetText(ptiengine->GetPhoneticSpelling(popup->CurrentSelection() + 1));
- popup->PopupSizeChanged(); // phrase input
- }
- // turn tone marks back on so that we know where we are.
- ptiengine->EnableToneMarks(ETrue);
- // this is where we start to figure out whether the tonemarks are valid,
- // whether the selected tonemark is valid, and what is the index of the
- // selected candidate in the list of candidates with tonemarks...
- TBool selectionToneMarkValid = EFalse;
- TInt selectionIndexAdjustedForToneMarkValidity = popup->CurrentSelection();
- // we only need to deal with tone marks if there is one
- if(toneMarkEntered)
- {
- if(pinyinCountWithoutToneMarks > 0)
- {
- for(TInt i = 0; i < pinyinCountWithoutToneMarks; i++)
- {
- TBool valid = EFalse;
-
- TBuf<MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark> nextCandidateWithoutToneMark;
- nextCandidateWithoutToneMark.Copy(ptiengine->GetPhoneticSpelling
- (i + 1).Left(MAknFepUICtrlInputPane::EMaxInputCharsPinyinPopupNotIncludingToneMark));
- ptiengine->EnableToneMarks(EFalse);
- ptiengine->SelectPhoneticSpelling(i + 1);
- valid = ptiengine->IsToneMarkValidForSpelling();
- if(valid)
- {
- ptiengine->EnableToneMarks(ETrue);
- TInt pinyinCountWithToneMarks = ptiengine->PhoneticSpellingCount();
- for(TInt j = 0; j < pinyinCountWithToneMarks; j++)
- {
- // use j here not i as we are looking at the list with tonemarks
- TPtrC nextCandidateWithToneMark = ptiengine->GetPhoneticSpelling(j + 1);
- if(nextCandidateWithToneMark == nextCandidateWithoutToneMark)
- {
- if(i == aSelection)
- {
- selectionToneMarkValid = ETrue;
-
- // fill in input pane even if it can't be seen, for when we have to hide popup window
- inputPane->SetText(nextCandidateWithoutToneMark);
- }
- break;
- }
- }
- }
- }
- }
- }
- ptiengine->EnableToneMarks(EFalse);
- ptiengine->SelectPhoneticSpelling(popup->CurrentSelection() + 1);
- // next two lines are for tonemark validity
- ptiengine->EnableToneMarks(selectionToneMarkValid);
- ptiengine->SelectPhoneticSpelling(selectionIndexAdjustedForToneMarkValidity + 1); // our index is zero based, engine index is one based
- // update the candidate pane.
- if(popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingChanged)
- || popup->IsFlagSet(MAknFepUICtrlPinyinPopup::ESpellingNavigation))
- {
- TRAPD(ignore, ptiengine->GetChinesePhraseCandidatesL(*(uiContainer->CandidatePane()->CandidateArray())));
- if (ignore != KErrNone)
- {
- return;
- }
- uiContainer->CandidatePane()->SplitPhraseCandidatesIntoPages();
- popup->ClearFlag(MAknFepUICtrlPinyinPopup::ESpellingChanged
- | MAknFepUICtrlPinyinPopup::ESpellingNavigation);
- }
- uiContainer->CandidatePane()->SetCandidateBuffer();
- uiContainer->Enable(ETrue);
- // need to enable the pinyin popup after the container so that it is raised to the front
- popup->Enable(pinyinCountWithoutToneMarks > 0);
- UpdateIndicator();
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::InitializeStateL
-// updata the cba
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::InitializeStateL(void)
- {
- iOwner->FepMan()->UpdateCbaL( R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL );
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::UpdateIndicator
-// updata the indicator
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyPinyinPhrase::UpdateIndicator()
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
-
- uiContainer->CandidatePane()->ShowUpScrollArrows(EFalse);
- uiContainer->CandidatePane()->ShowDownScrollArrows(EFalse);
- uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse);
- uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse);
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyPinyinPhrase::IsCharacterKey
-// to check whether the key is character or not
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateEntryHalfQwertyPinyinPhrase::IsCharacterKey(
- const TInt aKey )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine( );
- // Max length doesn't matter because we'll need only the first character.
- TBuf<KMaxName> lowerdata;
- ptiengine->MappingDataForKey( (TPtiKey)aKey, lowerdata, EPtiCaseLower );
- if ( lowerdata.Length( ) > 0 )
- {
- TChar lower = lowerdata[0];
- TUint upper = lower.GetUpperCase( );
- if ( TUint( lower ) != upper )
- {
- return ETrue;
- }
- }
- return EFalse;
- }
-
-//For stroke
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyStrokePhrase::TAknFepInputStateEntryHalfQwertyStrokePhrase
-// the construt funtion
-// ---------------------------------------------------------------------------
-//
-TAknFepInputStateEntryHalfQwertyStrokePhrase::TAknFepInputStateEntryHalfQwertyStrokePhrase(
- MAknFepUIManagerStateInterface* aOwner,
- MAknFepUICtrlContainerChinese* aUIContainer)
- :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner,aUIContainer)
- {
- iState = EEntry;
- iOwner->PtiEngine()->SetInputMode( EPtiEngineStrokePhraseHalfQwerty );
- iOwner->PtiEngine()->SetCase( EPtiCaseLower );
- iOwner->PtiEngine()->SetCandidatePageLength( KMaxPhraseCount );
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
- uiContainer->CandidatePane()->IsFirstPage());
- uiContainer->ShowHorizontalScrollArrows(EFalse);
- uiContainer->ShowVerticalScrollArrows(multiplePages);
- uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse );
- UpdateIndicator();
- }
-
-//For stroke
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyStrokePhrase::HandleKeyL
-// handle the key event of stroke
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateEntryHalfQwertyStrokePhrase::HandleKeyL(TInt aKey,
- TKeyPressLength aLength )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
- MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
- TBuf<KInputPaneLength> currentText;
- TPtrC text;
- TBool state = ETrue;
- TInt spellingLen = 0;
- TBool ret = ETrue;
-
- if ( aKey == EPtiKeyQwerty0 )
- {
- aKey = EPtiKeyQwertySpace;
- }
-
- if ( aKey != EStdKeyLeftFunc &&
- (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ||
- iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)))
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- return ETrue;
- }
- switch (aKey)
- {
- case EStdKeyBackspace:
- {
- if (popup->IsChangeStatet() && aLength == ELongKeyPress)
- {
- state = EFalse;
- }
- else
- {
- popup->SetChangeState(EFalse);
- }
- if (state)
- {
- if (iOwner->PtiEngine()->DeleteKeyPress().Length())
- {
- inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
- RefreshUI();
- }
- else
- {
- iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
- popup->SetPreStateIsPredictive( EFalse );
- if (aLength == ELongKeyPress)
- {
- iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue);
- }
- }
- }
- break;
- }
- case EStdKeyDevice1://sk2
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- break;
- }
- case EStdKeyUpArrow:
- {
- if ( !candidatePane->IsFirstPage() )
- {
- candidatePane->PreviousCandidatePage();
- candidatePane->SetCandidateBuffer();
- candidatePane->SelectFirst();
- UpdateIndicator();
- }
- break;
- }
- case EStdKeyRightArrow:
- {
- if (candidatePane->VisibleCandidateCount()!= 1)
- {
- iOwner->ChangeState(ECandidate);
- popup->SetPreStateIsPredictive( EFalse );
- candidatePane->SelectNext();
- }
- break;
- }
- case EStdKeyLeftArrow:
- {
- if (candidatePane->VisibleCandidateCount()!= 1)
- {
- iOwner->ChangeState(ECandidate);
- popup->SetPreStateIsPredictive( EFalse );
- TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount();
- UIContainer()->CandidatePane()->SelectIndex(numbertotal-1);
- }
- break;
- }
- case EStdKeyDownArrow:
- {
- if ( candidatePane->IsLastPage() )
- {
- return ETrue;
- }
- if ( candidatePane->NeedGetNewCandidatePage( ) )
- {
- if ( !iOwner->PtiEngine()->NextCandidatePage( ) )
- {
- if ( candidatePane->IsLastPage() )
- {
- iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
- return ETrue;
- }
- }
- else
- {
- CDesCArrayFlat* phraseCandidates =
- candidatePane->CandidateArray( );
- RPointerArray<HBufC> list;
- GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list );
- for (TInt i = 0; i < list.Count( ); ++i )
- {
- phraseCandidates->AppendL( *(list[i]) );
- }
- list.ResetAndDestroy();
- }
- }
- candidatePane->NextCandidatePage();
- candidatePane->SetCandidateBuffer();
- candidatePane->SelectFirstPhrase();
- UpdateIndicator();
- break;
- }
- case EStdKeyDevice3://Select
- case EStdKeyDevice0://sk1
- case EStdKeyEnter:
- {
- uiContainer->PinyinPopupWindow()->Enable(EFalse);
- TPtrC currentPhraseText = UIContainer()->CandidatePane()->CurrentPhraseCandidate();
- if(currentPhraseText.Length())
- {
- fepMan->NewTextL(currentPhraseText);
- fepMan->CommitInlineEditL();
- iOwner->PtiEngine()->SetPredictiveChineseChar(currentPhraseText);
- if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
- {
- fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- }
- else
- {
- iOwner->ChangeState(EPredictiveCandidate);
- popup->SetPreStateIsPredictive( EFalse );
- }
- }
- break;
- }
- default:
- {
- if (aLength == EShortKeyPress)
- {
- iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);
- if (iOwner->IsValidChineseInputKeyQwerty(aKey) ||
- aKey ==EStdKeySpace ||
- aKey == EStdKeyFullStop ||
- aKey == EStdKeyLeftFunc ) //seperator
- {
- TInt stringBeforeLength(0);
- TInt stringAfterLength(0);
- stringBeforeLength = ptiengine->GetPhoneticSpelling(1).Length();
- stringAfterLength = ptiengine->AppendKeyPress((TPtiKey)aKey).Length();
- if (stringBeforeLength != stringAfterLength)
- {
- if (ptiengine->GetPhoneticSpelling(1).Length() == 1)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
- }
- inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
- RefreshUI();
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- inputPane->GetText(currentText);
- spellingLen = currentText.Length();
- if ( spellingLen > 1 )
- {
- popup->SetPreStateIsPredictive( EFalse );
- }
- }
- else if ( popup->GetPreStateIsPredictive() && 0 == spellingLen) //long press fn mode character should inputted
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
-
- TBuf<KFnMappedCharacters> allFnMappedCharacters;
- ptiengine->MappingDataForKey( (TPtiKey)aKey,
- allFnMappedCharacters, EPtiCaseFnLower );
- text.Set( allFnMappedCharacters );
- if ( text.Length( ) > 0 )
- {
- TBuf<1> chr;
- chr.Append( text[0] );
- iOwner->FepMan()->NewCharacterL( chr );
- iOwner->FepMan()->CommitInlineEditL();
- ptiengine->ClearCurrentWord();
- ret = ETrue;
- }
- }
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyStrokePhrase::InitializeStateL
-// change the cba
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyStrokePhrase::InitializeStateL(void)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyStrokePhrase::IsCharacterKey
-// to check whether the key is character or not
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateEntryHalfQwertyStrokePhrase::IsCharacterKey(
- const TInt aKey )
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine( );
- // Max length doesn't matter because we'll need only the first character.
- TBuf<KMaxName> lowerdata;
- ptiengine->MappingDataForKey( (TPtiKey)aKey, lowerdata, EPtiCaseLower );
- if ( lowerdata.Length( ) > 0 )
- {
- TChar lower = lowerdata[0];
- TUint upper = lower.GetUpperCase( );
-
- if ( TUint( lower ) != upper )
- {
- return ETrue;
- }
- }
-
- return EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyStrokePhrase::UpdateIndicator
-// updata the indicator
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyStrokePhrase::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);
- }
-
- uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse);
- uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse);
- }
-
-//for zhuyin
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::TAknFepInputStateEntryHalfQwertyZhuyinPhrase
-// c++ construct funtion
-// ---------------------------------------------------------------------------
-//
-TAknFepInputStateEntryHalfQwertyZhuyinPhrase::TAknFepInputStateEntryHalfQwertyZhuyinPhrase(
- MAknFepUIManagerStateInterface* aOwner,
- MAknFepUICtrlContainerChinese* aUIContainer)
- :TAknFepInputStateEntryQwertyBaseChinesePhrase(aOwner, aUIContainer)
- {
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- uiContainer->SetLayout(MAknFepUICtrlContainerChinese::ELayoutInput);
- uiContainer->CandidatePane()->SelectFirstPhrase();
- uiContainer->InputPane()->SetOverrideFontId(0);
- uiContainer->CandidatePane()->ShowCandidateOrdinals( EFalse );
- TBool multiplePages = !(uiContainer->CandidatePane()->IsLastPage() &&
- uiContainer->CandidatePane()->IsFirstPage());
- uiContainer->ShowHorizontalScrollArrows(EFalse);
- uiContainer->ShowVerticalScrollArrows(multiplePages);
- iOwner->PtiEngine()->SetInputMode( EPtiEngineZhuyinPhraseHalfQwerty );
- iOwner->PtiEngine()->SetCase( EPtiCaseLower );
- UpdateIndicator();
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::HandleKeyL
-// handle the key of zhuyin
-// ---------------------------------------------------------------------------
-//
-TBool TAknFepInputStateEntryHalfQwertyZhuyinPhrase::HandleKeyL(TInt aKey, TKeyPressLength aLength)
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
- MAknFepUICtrlPinyinPopup* popup = uiContainer->PinyinPopupWindow();
- MAknFepUICtrlCandidatePane* candidatePane = uiContainer->CandidatePane();
- MAknFepManagerUIInterface* fepMan = iOwner->FepMan();
- TInt originalKey = aKey;
- TPtrC text;
- TInt spellingLen = 0;
- TBool state = ETrue;
- TBool ret = ETrue;
- TBuf<KInputPaneLength> currentText;
- if ( aKey != EStdKeyLeftFunc &&
- (iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagQwertyChrKeyDepressed) ||
- iOwner->FepMan()->IsFlagSet(CAknFepManager::EFlagShiftKeyDepressed)))
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- return ETrue;
- }
- switch (aKey)
- {
- case EPtiKeyQwertyE:
- aKey = EPtiKey1;
- break;
- case EPtiKeyQwertyT:
- aKey = EPtiKey2;
- break;
- case EPtiKeyQwertyU:
- aKey = EPtiKey3;
- break;
- case EPtiKeyQwertyD:
- aKey = EPtiKey4;
- break;
- case EPtiKeyQwertyG:
- aKey = EPtiKey5;
- break;
- case EPtiKeyQwertyJ:
- aKey = EPtiKey6;
- break;
- case EPtiKeyQwertyC:
- aKey = EPtiKey7;
- break;
- case EPtiKeyQwertyB:
- aKey = EPtiKey8;
- break;
- case EPtiKeyQwertyM:
- aKey = EPtiKey9;
- break;
- case EPtiKeyQwertySpace:
- aKey = EPtiKey0;
- break;
- }
- if( (aKey == EStdKeyLeftFunc || aKey == EStdKeyFullStop )&&
- aLength == EShortKeyPress )
- {
- if( ptiengine->IncrementToneMark( ETrue ) )
- {
- inputPane->SetFlag( MAknFepUICtrlInputPane::EPhoneticChanged );
- RefreshUI();
- return ETrue;
- }
- }
- switch (aKey)
- {
- case EStdKeyBackspace:
- {
- if (popup->IsChangeStatet() && aLength == ELongKeyPress)
- {
- state = EFalse;
- }
- else
- {
- popup->SetChangeState(EFalse);
- }
- if (state)
- {
- if (iOwner->PtiEngine()->DeleteKeyPress().Length())
- {
- inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
- RefreshUI();
- }
- else
- {
- iOwner->FepMan()->TryCloseUiL(); //no more keys, close the UI.
- popup->SetPreStateIsPredictive( EFalse );
- if (aLength == ELongKeyPress)
- {
- iOwner->FepMan()->SetLongClearAfterCloseUI(ETrue);
- }
- }
- }
- break;
- }
- case EStdKeyDevice1://sk2
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- break;
- }
- case EStdKeyUpArrow:
- {
- if ( !candidatePane->IsFirstPage() )
- {
- candidatePane->PreviousCandidatePage();
- candidatePane->SetCandidateBuffer();
- candidatePane->SelectFirst();
- UpdateIndicator();
- }
- break;
- }
- case EStdKeyRightArrow:
- {
- if (candidatePane->VisibleCandidateCount()!= 1)
- {
- iOwner->ChangeState(ECandidate);
- popup->SetPreStateIsPredictive( EFalse );
- candidatePane->SelectNext();
- }
- break;
- }
- case EStdKeyLeftArrow:
- {
- if (candidatePane->VisibleCandidateCount()!= 1)
- {
- iOwner->ChangeState(ECandidate);
- popup->SetPreStateIsPredictive( EFalse );
- TInt numbertotal = UIContainer()->CandidatePane()->VisibleCandidateCount();
- UIContainer()->CandidatePane()->SelectIndex(numbertotal-1);
- }
- break;
- }
- case EStdKeyDownArrow:
- {
- if ( candidatePane->IsLastPage() )
- {
- return ETrue;
- }
- if ( candidatePane->NeedGetNewCandidatePage( ) )
- {
- if ( !iOwner->PtiEngine()->NextCandidatePage( ) )
- {
- if ( candidatePane->IsLastPage() )
- {
- iOwner->FepMan()->PlaySound( EAvkonSIDErrorTone );
- return ETrue;
- }
- }
- else
- {
- CDesCArrayFlat* phraseCandidates =
- candidatePane->CandidateArray( );
- RPointerArray<HBufC> list;
- GetNewCandidatesL( iOwner->PtiEngine()->CandidatePage( ), list );
- for (TInt i = 0; i < list.Count( ); ++i )
- {
- phraseCandidates->AppendL( *(list[i]) );
- }
- list.ResetAndDestroy();
- }
- }
- candidatePane->NextCandidatePage();
- candidatePane->SetCandidateBuffer();
- candidatePane->SelectFirstPhrase();
- UpdateIndicator();
- break;
- }
- case EStdKeyDevice3://Select
- case EStdKeyDevice0://sk1
- case EStdKeyEnter:
- {
- uiContainer->PinyinPopupWindow()->Enable(EFalse);
- TPtrC phraseText = UIContainer()->CandidatePane()->CurrentPhraseCandidate();
- if(phraseText.Length())
- {
- fepMan->NewTextL(phraseText);
- fepMan->CommitInlineEditL();
- iOwner->PtiEngine()->SetPredictiveChineseChar(phraseText);
- if (fepMan->IsFlagSet(CAknFepManager::EFlagEditorFull))
- {
- fepMan->ClearFlag(CAknFepManager::EFlagEditorFull);
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
- }
- else
- {
- iOwner->ChangeState(EPredictiveCandidate);
- popup->SetPreStateIsPredictive( EFalse );
- }
- }
- break;
- }
- case EPtiKeyQwertyQ:
- case EPtiKeyQwertyA:
- case EPtiKeyQwertyO:
- case EPtiKeyQwertyL:
- case EPtiKeyQwertyZ:
- {
- ret = ETrue;
- break;
- }
- default:
- {
- if (aLength == EShortKeyPress)
- {
- iOwner->FepMan()->SetCcpuFlag(CAknFepManager::ECcpuStateIgnoreStarUp);
-
- if (iOwner->IsValidChineseInputKeyQwerty(aKey) || aKey
- ==EStdKeySpace) //seperator
- {
- ptiengine->AppendKeyPress((TPtiKey)aKey);
- SetInputPaneToneMark();
- if (ptiengine->GetPhoneticSpelling(1).Length() == 1)
- {
- iOwner->FepMan()->UpdateCbaL(R_AKNFEP_SOFTKEYS_OK_SELECT_CANCEL);
- }
- inputPane->SetFlag(MAknFepUICtrlInputPane::EPhoneticChanged);
- RefreshUI();
- }
- else
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- inputPane->GetText(currentText);
- spellingLen = currentText.Length();
- if ( spellingLen > 1 )
- {
- popup->SetPreStateIsPredictive( EFalse );
- }
- }
- else if ( popup->GetPreStateIsPredictive() && 0 == spellingLen) //long press fn mode character should inputted
- {
- iOwner->FepMan()->TryCloseUiL();
- popup->SetPreStateIsPredictive( EFalse );
-
- TBuf<KFnMappedCharacters> allFnMappedCharacters;
- ptiengine->MappingDataForKey( (TPtiKey)originalKey,
- allFnMappedCharacters, EPtiCaseFnLower );
- text.Set( allFnMappedCharacters );
- if ( text.Length( ) > 0 )
- {
- TBuf<1> chr;
- chr.Append( text[0] );
- iOwner->FepMan()->NewCharacterL( chr );
- iOwner->FepMan()->CommitInlineEditL();
- ptiengine->ClearCurrentWord();
- ret = ETrue;
- }
- }
- }
- }
- return ret;
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::KeyTimerExpired
-//
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyZhuyinPhrase::KeyTimerExpired()
- {
- CPtiEngine* ptiengine = iOwner->PtiEngine();
- MAknFepUICtrlContainerChinese* uiContainer = UIContainer();
- MAknFepUICtrlInputPane* inputPane = uiContainer->InputPane();
-
- // set container's 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);
- }
- TPtrC ptr = ptiengine->GetPhoneticSpelling(1);
- inputPane->SetText(ptr);
- TBuf<KInputPaneLength> currentText;
- inputPane->GetText(currentText);
- if (ptr.Length() < currentText.Length())
- {
- iOwner->FepMan()->PlaySound(EAvkonSIDErrorTone);
- }
- UpdateIndicator();
- }
-
-// ---------------------------------------------------------------------------
-// TAknFepInputStateEntryHalfQwertyZhuyinPhrase::UpdateIndicator
-// updata the indicator
-// ---------------------------------------------------------------------------
-//
-void TAknFepInputStateEntryHalfQwertyZhuyinPhrase::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);
- }
-
- uiContainer->CandidatePane()->ShowLeftScrollArrows(EFalse);
- uiContainer->CandidatePane()->ShowRightScrollArrows(EFalse);
- }
-
-//End Of File