--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarstatemanager.cpp Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,572 @@
+/*
+* Copyright (c) 2009 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 for arabic peninput finger hwr
+*
+*/
+
+#include <peninputcmd.h>
+
+#include "peninputfingerhwrarlayout.h"
+#include "peninputfingerhwrarwnd.h"
+#include "peninputfingerhwrarstatemanager.h"
+#include "peninputfingerhwrardatastore.h"
+#include "peninputfingerhwrarevent.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrArStateHandlerBase class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateHandlerBase::CPeninputFingerHwrArStateHandlerBase()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateHandlerBase::CPeninputFingerHwrArStateHandlerBase(
+CPeninputFingerHwrArStateManagerBase& aStateManager )
+ :iStateManager( aStateManager ),
+ iDataStore( aStateManager.HwrLayout().DataStore() )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateHandlerBase::~CPeninputFingerHwrArStateHandlerBase()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateHandlerBase::~CPeninputFingerHwrArStateHandlerBase()
+ {
+
+ }
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrStateManager class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateManager::CPeninputFingerHwrStateManager()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateManagerBase::CPeninputFingerHwrArStateManagerBase(
+ CPeninputFingerHwrArLayout* aLayout )
+ :iLayout(aLayout)
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateManager::~CPeninputFingerHwrStateManager()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateManagerBase::~CPeninputFingerHwrArStateManagerBase()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateManager::CosntructL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManagerBase::BaseConstructL()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManagerBase::SetState()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManagerBase::SetState( TInt /*aState*/ )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManagerBase::IsStandbyState()
+// .
+// -----------------------------------------------------------------------------
+//
+TBool CPeninputFingerHwrArStateManagerBase::IsStandbyState()
+ {
+ if(iCurrentState == 0)
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManagerBase::HandleEventL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManagerBase::HandleEventL( const TInt /*aEventType*/,
+ const TDesC& /*aEventData*/)
+ {
+
+ }
+
+CPeninputFingerHwrArLayout& CPeninputFingerHwrArStateManagerBase::HwrLayout()
+ {
+ return *iLayout;
+ }
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrStateManager class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::NewL()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateManager* CPeninputFingerHwrArStateManager::NewL(
+ CPeninputFingerHwrArLayout* aLayout )
+ {
+ CPeninputFingerHwrArStateManager* self = new( ELeave )
+ CPeninputFingerHwrArStateManager( aLayout );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::CPeninputFingerHwrStateManager()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateManager::CPeninputFingerHwrArStateManager(
+ CPeninputFingerHwrArLayout* aLayout )
+ :CPeninputFingerHwrArStateManagerBase( aLayout )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::~CPeninputFingerHwrStateManager()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateManager::~CPeninputFingerHwrArStateManager()
+ {
+ for( int i = 0; i < EPeninputFingerHwrArStateCount; ++i )
+ {
+ delete iStateHandlers[i];
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::CosntructL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManager::ConstructL()
+ {
+ BaseConstructL();
+
+ TInt i = 0;
+
+ iStates[i] = EPeninputFingerHwrArStateStandby;
+ iStateHandlers[i] = CPeninputFingerHwrArStateStandby::NewL( *this );
+
+ iStates[++i] = EPeninputFingerHwrArStateWriting;
+ iStateHandlers[i] = CPeninputFingerHwrArStateWriting::NewL( *this );
+
+ iStates[++i] = EPeninputFingerHwrArStateCandidateSelecting;
+ iStateHandlers[i] =
+ CPeninputFingerHwrArStateCandidateSelecting::NewL( *this );
+
+ iCurrentStateHandler = iStateHandlers[0];
+ iCurrentState = EPeninputFingerHwrArStateStandby;
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::SetState()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManager::SetState( TInt aState )
+ {
+ if( iCurrentState == aState )
+ {
+ return;
+ }
+
+ CPeninputFingerHwrArStateHandlerBase* newStateHandler = Find( (TPeninputFingerHwrArState)aState );
+ if( newStateHandler )
+ {
+ iCurrentState = (TPeninputFingerHwrArState)aState;
+ iCurrentStateHandler->OnExit();
+ iCurrentStateHandler = newStateHandler;
+ iCurrentStateHandler->OnEntry();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::Find()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateHandlerBase* CPeninputFingerHwrArStateManager::Find(
+ TPeninputFingerHwrArState aState )
+ {
+ for( TInt i = 0; i < EPeninputFingerHwrArStateCount; i++ )
+ {
+ if( iStates[i] == aState )
+ {
+ return iStateHandlers[i];
+ }
+ }
+ return NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateManager::HandleEventL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateManager::HandleEventL( const TInt aEventType,
+ const TDesC& aEventData )
+ {
+ iCurrentStateHandler->HandleEventL( aEventType, aEventData );
+ }
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrStateHandlerStandby class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerStandby::CPeninputFingerHwrStateHandlerStandby()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateStandby::CPeninputFingerHwrArStateStandby(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ :CPeninputFingerHwrArStateHandlerBase( aStateManager )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerStandby::NewL()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateStandby* CPeninputFingerHwrArStateStandby::NewL(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ {
+ CPeninputFingerHwrArStateStandby* self = new( ELeave )
+ CPeninputFingerHwrArStateStandby( aStateManager );
+
+ return self;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerStandby::HandleEventL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateStandby::HandleEventL( const TInt aEventType,
+ const TDesC& /*aEventData*/ )
+ {
+ switch( aEventType )
+ {
+ case EEventHwrStrokeStarted:
+ {
+ iStateManager.SetState(
+ CPeninputFingerHwrArStateManager::EPeninputFingerHwrArStateWriting );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerStandby::OnEntry()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateStandby::OnEntry()
+ {
+// iDataStore.TriggerStr()->DeleteAll();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerStandby::OnExit()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateStandby::OnExit()
+ {
+
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrStateHandlerWriting class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::CPeninputFingerHwrStateHandlerWriting()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateWriting::CPeninputFingerHwrArStateWriting(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ :CPeninputFingerHwrArStateHandlerBase( aStateManager )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::NewL()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateWriting* CPeninputFingerHwrArStateWriting::NewL(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ {
+ CPeninputFingerHwrArStateWriting* self = new( ELeave )
+ CPeninputFingerHwrArStateWriting( aStateManager );
+
+ return self;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::HandleEventL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateWriting::HandleEventL( const TInt aEventType,
+ const TDesC& aEventData )
+ {
+ switch( aEventType )
+ {
+ case EEventHwrStrokeFinished:
+ {
+ OnEndStrokeL(aEventData);
+ }
+ break;
+ case EEventHwrCharacterTimerOut:
+ {
+ OnEndWritingL( aEventData );
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::OnEndStrokeL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateWriting::OnEndStrokeL( const TDesC& aEventData )
+ {
+ const RArray<TPoint>* aTraceData = ( RArray<TPoint>* )aEventData.Ptr();
+ iDataStore.DoRecognizeL( *aTraceData );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::OnEndWriting()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateWriting::OnEndWritingL( const TDesC& /*aEventData*/ )
+ {
+ // record the default cell highlight flag.
+ iDataStore.SetHighlight(ETrue);
+ // This is a workarround to clear the recognizer.
+ RArray<TPoint> stroke_array;
+ stroke_array.Reset();
+ // Call recognize with a empty array of stroke is the condition
+ // to clear the context>
+ iDataStore.DoRecognizeL(stroke_array );
+
+ RPointerArray<HBufC> candidates = iDataStore.Candidate();
+ if ( candidates.Count() > 0 )
+ {
+ if(iStateManager.HwrLayout().IsAllowedToSubmitDefaultCandiate())
+ {
+ iStateManager.HwrLayout().SubmitStringToFep( *candidates[0]);
+ }
+ iStateManager.SetState( CPeninputFingerHwrArStateManager::
+ EPeninputFingerHwrArStateCandidateSelecting );
+
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::OnEntry()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateWriting::OnEntry()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateWriting::OnExit()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateWriting::OnExit()
+ {
+
+ }
+
+// ============================ MEMBER FUNCTIONS ===============================
+// CPeninputFingerHwrStateHandlerCandidateSelecting class
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateCandidateSelecting::
+// CPeninputFingerHwrArStateCandidateSelecting()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateCandidateSelecting::
+ CPeninputFingerHwrArStateCandidateSelecting(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ :CPeninputFingerHwrArStateHandlerBase( aStateManager )
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateCandidateSelecting::NewL()
+// .
+// -----------------------------------------------------------------------------
+//
+CPeninputFingerHwrArStateCandidateSelecting*
+ CPeninputFingerHwrArStateCandidateSelecting::NewL(
+ CPeninputFingerHwrArStateManager& aStateManager )
+ {
+ CPeninputFingerHwrArStateCandidateSelecting* self = new( ELeave )
+ CPeninputFingerHwrArStateCandidateSelecting( aStateManager );
+
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrArStateCandidateSelecting::HandleEventL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateCandidateSelecting::HandleEventL( const TInt aEventType,
+ const TDesC& aEventData )
+ {
+ switch( aEventType )
+ {
+ case EHwrEventCandidateSelected:
+ {
+ OnSelectedCandidatesL( aEventData );
+ }
+ break;
+ case EHwrEventKeyBack:
+ {
+ OnClickBackSpaceL();
+ }
+ break;
+ case EEventHwrStrokeStarted:
+ {
+ iStateManager.SetState( CPeninputFingerHwrArStateManager::
+ EPeninputFingerHwrArStateWriting );
+ }
+ break;
+ default:
+ break;
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerCandidateSelecting::OnSelectedCandidatesL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateCandidateSelecting::OnSelectedCandidatesL(
+ const TDesC& aEventData )
+ {
+ //get the candidate index
+ const TInt cellNo = aEventData[aEventData.Length()-1];
+ if (!iDataStore.IsValidCandidate( cellNo ))
+ {
+ iStateManager.SetState( CPeninputFingerHwrArStateManager::
+ EPeninputFingerHwrArStateStandby );
+ return;
+ }
+
+ TPtrC ptr;
+ ptr.Set( ( aEventData.Left( aEventData.Length() - 1 ) ) );
+ if(!iStateManager.HwrLayout().IsAllowedToSubmitDefaultCandiate())
+ {
+ iStateManager.HwrLayout().SubmitStringToFep( ptr);
+ }
+ else
+ {
+ RPointerArray<HBufC> candidates = iDataStore.Candidate();
+ //the selected char is not same as default
+ //replace the default candidate
+ HBufC* defaultCandidate = candidates[0];
+ if( *defaultCandidate != ptr )
+ {
+ iStateManager.HwrLayout().Replace( *defaultCandidate, ptr, EFalse);
+ }
+ }
+ iDataStore.SetArabicSymbolL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerCandidateSelecting::OnClickBackSpaceL()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateCandidateSelecting::OnClickBackSpaceL()
+ {
+ iDataStore.SetHighlight(EFalse);
+ iDataStore.SetArabicSymbolL();
+ iStateManager.SetState( CPeninputFingerHwrArStateManager::
+ EPeninputFingerHwrArStateStandby );
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerCandidateSelecting::OnEntry()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateCandidateSelecting::OnEntry()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPeninputFingerHwrStateHandlerCandidateSelecting::OnExit()
+// .
+// -----------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArStateCandidateSelecting::OnExit()
+ {
+
+ }
+//End of file