diff -r ebd48d2de13c -r ecbabf52600f textinput/peninputgenerichwr/src/peninputhwrarabicstateendwriting.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenerichwr/src/peninputhwrarabicstateendwriting.cpp Wed Sep 01 12:23:33 2010 +0100 @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2002-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: Implementation of the hwr ui state machine (Pen Wndwriting State) +* +*/ + + +// System includes +#include +#include +#include +#include // ERangeNumber +// user includes +//#include "peninputhwrevent.h" +#include "peninputhwrarabic.hrh" +#include "peninputhwrarabiclayout.h" +#include "peninputhwrarabicdatamgr.h" // use data mgr +#include "peninputhwrarabicwindow.h" // use hwr window, which derived from base window +#include "peninputhwrarabicstateendwriting.h" + +// constant definition +//const TUint16 KBackRep = 0x2408; +// convert displayable backspace +const TUint16 KBackRep = 0x2190; +const TUint16 KEnterRep = 0xF801; +const TInt KMaxCandidateLen = 128; + +// ======== MEMBER FUNCTIONS ======== + +// Implementation of Class CPeninputHwrBxAbStateEndWriting + +// ----------------------------------------------------------------------------- +// CPeninputHwrBxAbStateEndWriting::NewL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBxAbStateEndWriting* CPeninputHwrBxAbStateEndWriting::NewL(MPeninputUiStateMgr* aUiStateMgr, + MPeninputLayoutContext* aContext) + { + CPeninputHwrBxAbStateEndWriting* self = new ( ELeave ) CPeninputHwrBxAbStateEndWriting(aUiStateMgr,aContext); + CleanupStack::PushL(self); + self->Construct(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBxAbStateEndWriting::~CPeninputHwrBxAbStateEndWriting +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBxAbStateEndWriting::~CPeninputHwrBxAbStateEndWriting() + { + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBxAbStateEndWriting::HandleControlEventPenL +// (other items were commented in a header). +// --------------------------------------------------------------------------- +// +void CPeninputHwrBxAbStateEndWriting::HandleControlEventPenL( TInt aEventType, + const TDesC& aEventData, CPeninputHwrBxAbLayout& aUiLayout, TDes& aCharCode, TBool& aHandled ) + { + aHandled = EFalse; + switch (aEventType) + { + case EEventHwrStrokeStarted: + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateBeginWriting); + static_cast(aUiLayout.LayoutWindow())->OnStrokeStarted(); + aHandled = ETrue; + } + break; + case EEventHwrStrokeFinished: + { + static_cast(aUiLayout.LayoutWindow())->GetCandidate(0, aCharCode); + static_cast(aUiLayout.LayoutWindow())->OnStrokeFinished(); + + //aUiLayout.SubmitL(aCharCode); + + TPtrC16 ptrBack; + TPtrC16 ptrEnter; + ptrBack.Set(&KBackRep, sizeof(KBackRep)/2); + ptrEnter.Set(&KEnterRep, sizeof(KEnterRep)/2); + + //if char code is backspace or enter + if (aCharCode.CompareC(ptrBack) == 0 + || aCharCode.CompareC(ptrEnter) == 0) + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateStandby); + } + else + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateCandidateSelecting); + } + aHandled = ETrue; + } + break; + case EEventHwrCharacterTimerOut: + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateCandidateSelecting); + static_cast(aUiLayout.LayoutWindow())->OnStrokeCharacterTimerOut(); + aHandled = ETrue; + } + break; + case EPeninputLayoutHwrEventCandidateSelected: + { + //cancel writing timer + static_cast(aUiLayout.LayoutWindow())->CancelWriting(); + //There must be a charcode and length at least + if (aEventData.Length() > 1) + { + //get the candidate index + const TInt cellNo = aEventData[aEventData.Length()-1]; + + //get and submit the candidate to fep + TBuf charCode; + static_cast(aUiLayout.LayoutWindow())->GetCandidate(cellNo, charCode); + aUiLayout.SubmitL(charCode); + + TInt dataType = CPeninputDataConverter::AnyToInt(aUiLayout.RequestData( EPeninputDataTypeCurrentRange )); + if (dataType == ERangeNative) + { + static_cast(aUiLayout.LayoutWindow())->ResetAndShowDropdownList(); + } + aHandled = ETrue; + } + } + break; + case EEventHwrStrokeCanceled: + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateStandby); + static_cast(aUiLayout.LayoutWindow())->OnStrokeCanceled(); + aHandled = ETrue; + } + break; + case EPeninputLayoutEventBack: + { + aUiLayout.UiStateMgr()->SetCurrentUiState(EPeninputHwrBxAbStateStandby); + static_cast(aUiLayout.LayoutWindow())->HandleBackspaceKeyEvent(); + aHandled = ETrue; + } + break; + default: + aHandled = EFalse; + break; + } + + } + +// ----------------------------------------------------------------------------- +// CPeninputHwrBxAbStateEndWriting::CPeninputHwrBxAbStateEndWriting +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CPeninputHwrBxAbStateEndWriting::CPeninputHwrBxAbStateEndWriting(MPeninputUiStateMgr* aUiStateMgr, + MPeninputLayoutContext* aContext) + :CPeninputHwrBxAbStateBase(aUiStateMgr,aContext) + { + } + +void CPeninputHwrBxAbStateEndWriting::ToCandidateSelecting(CPeninputHwrBxAbLayout& /*aUiLayout*/) + { + } + +// End Of File