diff -r ebd48d2de13c -r ecbabf52600f textinput/peninputgenericitut/src/peninputitutchnuistatestrokezhuyincomposition.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenericitut/src/peninputitutchnuistatestrokezhuyincomposition.cpp Wed Sep 01 12:23:33 2010 +0100 @@ -0,0 +1,312 @@ +/* +* Copyright (c) 2002-2005 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: drop-down list control +* +*/ + + +#include +#include +#include +#include +#include +#include +#include + +#include "peninputitutchnuistatestrokezhuyincomposition.h" +#include "peninputgenericitutuimgrbase.h" +#include "peninputgenericitutdatamgr.h" +#include "peninputgenericitutlayoutcontext.h" +#include "peninputgenericitutconverter.h" +#include "peninputgenericitutwindowmanager.h" + +CChnItutUiStateStrokeZhuyinComposition* CChnItutUiStateStrokeZhuyinComposition::NewL( + CGenericItutUiMgrBase* aOwner) + { + CChnItutUiStateStrokeZhuyinComposition* self = + new (ELeave) CChnItutUiStateStrokeZhuyinComposition(aOwner); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CChnItutUiStateStrokeZhuyinComposition::~CChnItutUiStateStrokeZhuyinComposition() + { + } + +CChnItutUiStateStrokeZhuyinComposition::CChnItutUiStateStrokeZhuyinComposition( + CGenericItutUiMgrBase* aOwner):CGenericItutUiStateBase(aOwner) + { + } + +void CChnItutUiStateStrokeZhuyinComposition::OnEntryL() + { + TInt immode = iOwner->DataMgr()->InputMode(); + + if (immode == EStroke) + { + TInt resID; + if (iOwner->DataMgr()->InputLanguage() == ELangPrcChinese) + { + resID = R_FINGER_INPUT_KEYPAD_STROKE_COMPOSITION_PRC; + } + else + { + resID = R_FINGER_INPUT_KEYPAD_STROKE_COMPOSITION_TRA; + } + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, + resID); + } + else if (immode == EZhuyin) + { + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyKeypadResourceId, + R_FINGER_INPUT_KEYPAD_ZHUYIN_COMPOSITION); + } + + // update resource id of keypad, candidate drop list + iOwner->DataMgr()->NotifyChangeControlLayout( + MItutPropertySubscriber::EItutPropertyCandidateListResourceId, + R_AKN_FEP_NORMAL_CAND_DROP_DOWN_LIST); + + // show spell + CFepInputContextField* spellctrl = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdSpellICF)); + TFepInputContextFieldData spelldata; + spelldata.iCmd = EPeninputICFInitial; + spelldata.iStartPos = 0; + spelldata.iLength = 0; + spelldata.iText.Set( KNullDesC ); + spelldata.iCurSel = TCursorSelection(0, 0); + spelldata.iCursorVisibility = ETrue; + spelldata.iCursorSelVisible = ETrue; + spellctrl->SetTextL(spelldata); + spellctrl->Hide(EFalse); + + // show candidate drop list + CFepCtrlDropdownList* candlist = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdStdCandsList)); + candlist->Hide(EFalse); + + //hide navi button + iOwner->LayoutContext()->ShowArrowBtn(0); + + //hide indicator + iOwner->LayoutContext()->Control(ECtrlIdIndicator)->Hide(ETrue); + + // Show ICF, Backspace after position changed to avoid flick + iOwner->LayoutContext()->Control(ECtrlIdICF)->Hide( EFalse ); + iOwner->LayoutContext()->Control(ECtrlIdBackspace)->Hide( EFalse ); + } + +void CChnItutUiStateStrokeZhuyinComposition::OnExit() + { + // hide dropdownlist & reset its status + CFepCtrlDropdownList* candlist = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdStdCandsList)); + iOwner->DataMgr()->ClearChnCandidates(EItutCandidates); + candlist->Hide(ETrue); + + CFepInputContextField* spellctrl = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdSpellICF)); + spellctrl->Hide(ETrue); + iOwner->DataMgr()->PtiEngine()->ClearCurrentWord(); + } + +TBool CChnItutUiStateStrokeZhuyinComposition::HandleKeyL(TInt /*aCmd*/, TInt aKey) + { + TInt immode = iOwner->DataMgr()->InputMode(); + + if (immode != EStroke && immode != EZhuyin) + { + return EFalse; + } + + if (!(aKey == EKeyBackspace || + (aKey >= EPtiKey0 && aKey <= EPtiKey9) || + (aKey == EPtiKeyStar))) + { + return EFalse; + } + + if (aKey == EKeyBackspace) + { + if (!iOwner->DataMgr()->PtiEngine()->DeleteKeyPress().Length()) + { + iOwner->SetCurrentStateL(CGenericItutUiMgrBase::EStateStandby); + + iOwner->SetClrConsume(ETrue); + + return ETrue; + } + } + else if (aKey == EPtiKeyStar) + { + if (immode == EStroke) + { + //iOwner->DataMgr()->PtiEngine()->ClearCurrentWord(); + //iOwner->SetCurrentStateL(CGenericItutUiMgrBase::EStateStandby); + + return ETrue; + } + else + { + // input mode is zhuyin + // input tonemark + if (!iOwner->DataMgr()->PtiEngine()->IncrementToneMark(ETrue)) + { + // tonemark did not set correctly, everything unchanged + return ETrue; + } + } + } + else + { + if (immode == EZhuyin || + (immode == EStroke && aKey >= EPtiKey0 && aKey <= EPtiKey6)) + { + // append keypress + iOwner->DataMgr()->PtiEngine()->AppendKeyPress(TPtiKey(aKey)); + } + else if (immode == EStroke && aKey >= EPtiKey7 && aKey <= EPtiKey9) + { + // just ignore + return ETrue; + } + } + + // display 1st spell, ptiengine's phonetic spelling start index is 1, not 0 + iOwner->DataMgr()->PtiEngine()->SelectPhoneticSpelling(1); + + CFepInputContextField* spellctrl = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdSpellICF)); + TPtrC spelltext = iOwner->DataMgr()->PtiEngine()->GetPhoneticSpelling(1); + + TFepInputContextFieldData spelldata; + + spelldata.iCmd = EPeninputICFInitial; + spelldata.iStartPos = 0; + spelldata.iLength = spelltext.Length(); + spelldata.iMidPos = -1; + spelldata.iText.Set(spelltext); + + spelldata.iCurSel = TCursorSelection(spelltext.Length(), spelltext.Length()); + spelldata.iCursorVisibility = EFalse; + spelldata.iCursorSelVisible = EFalse; + + spellctrl->SetTextL(spelldata); + + // get candidates of 1st spell + TPtrC cands = iOwner->DataMgr()->PtiEngine()->CandidatePage(); + + iOwner->DataMgr()->ClearChnCandidates(EItutCandidates); + RPointerArray& candslist = + TItutDataConverter::AnyToRptrArray(iOwner->DataMgr()->RequestData(EChnCandidates)); + TItutDataConverter::ConvertChnPhraseCandidateL(cands, candslist); + + CFepCtrlDropdownList* canddroplist = + static_cast(iOwner->LayoutContext()->Control(ECtrlIdStdCandsList)); + canddroplist->SetCandidatesL(candslist, CFepCtrlDropdownList::EListExpandableWithBubble); + + return ETrue; + } + +CGenericItutUiMgrBase::TUiState CChnItutUiStateStrokeZhuyinComposition::StateType() + { + return CGenericItutUiMgrBase::EStateComposition; + } + +TBool CChnItutUiStateStrokeZhuyinComposition::HandleCtrlEventL(TInt aEventType, + CFepUiBaseCtrl* aCtrl, + const TDesC& aEventData) + { + switch (aEventType) + { + case EItutCmdCandidateSelected: + { + if (aCtrl->ControlId() == ECtrlIdStdCandsList) + { + iOwner->SetCurrentStateL(CGenericItutUiMgrBase::EStatePredict); + return iOwner->CurrentState()->HandleCtrlEventL(aEventType, + aCtrl, + aEventData); + } + } + break; + case EItutCmdGetNextCandidatePage: + { + if (aCtrl->ControlId() == ECtrlIdStdCandsList) + { + RPointerArray& candslist = TItutDataConverter::AnyToRptrArray( + iOwner->DataMgr()->RequestData(EChnCandidates)); + + // original candidate count before fetch new candidate + TInt candscnt = candslist.Count(); + if (iOwner->DataMgr()->GetNextPageCandidateL(candslist) == KErrNone) + { + static_cast(aCtrl)->AddCandidatesL(candslist); + } + + return ETrue; + } + } + break; + case EItutCmdCandidateExisted: + { + if (aCtrl->ControlId() == ECtrlIdStdCandsList) + { + static_cast(aCtrl)->SetFlagCandidateExist( + iOwner->DataMgr()->NextPageCandidateExist()); + return ETrue; + } + } + break; + // consume star key at zhuyin composition state + case EEventRawKeyDownEvent: + { + if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent()) + { + const TKeyEvent *key = reinterpret_cast(aEventData.Ptr()); + + if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin) + { + HandleKeyL(ECmdPenInputFingerKeyPress, EPtiKeyStar); + return ETrue; + } + } + } + break; + case EEventRawKeyUpEvent: + { + if ( iOwner->UiManager()->IsAllowHandleRawKeyEvent()) + { + const TKeyEvent *key = reinterpret_cast(aEventData.Ptr()); + + if (key->iScanCode == EStdKeyNkpAsterisk && iOwner->DataMgr()->InputMode() == EZhuyin) + { + return ETrue; + } + } + } + break; + default: + break; + } + + return EFalse; + } + +// End Of File