diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenerichwr/src/peninputhwrarabicengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenerichwr/src/peninputhwrarabicengine.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,413 @@ +/* +* 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: Implementation of handwriting recognition +* +*/ + + +// System includes +#include +#include +#include + +// User includes +#include "peninputhwrarabicengine.h" + + +// ======== MEMBER FUNCTIONS ======== + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::NewL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputHwrBxAbEngine* CPeninputHwrBxAbEngine::NewL(CPtiEngine* aPtiEngine) + { + CPeninputHwrBxAbEngine* self = + new ( ELeave ) CPeninputHwrBxAbEngine(aPtiEngine); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::NewL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputHwrBxAbEngine* CPeninputHwrBxAbEngine::NewL( TInt aLanguage ) + { + CPeninputHwrBxAbEngine* self = + new ( ELeave ) CPeninputHwrBxAbEngine( aLanguage ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::CPeninputHwrBxAbEngine +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputHwrBxAbEngine::CPeninputHwrBxAbEngine(CPtiEngine* aPtiEngine) + : iPtiEngine( aPtiEngine ), iLanguage( 0 ),iMode( ERangeInvalid ), + iCaseSensitive( EFalse ), iEnabled( EFalse ), iRecognizerInited(EFalse) + + { + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::CPeninputHwrBxAbEngine +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputHwrBxAbEngine::CPeninputHwrBxAbEngine( TInt aLanguage ) + : iLanguage( aLanguage ) + { + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::ConstructL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::ConstructL() + { + iIdle = CIdle::NewL(CActive::EPriorityIdle); + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::~CPeninputHwrBxAbEngine +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputHwrBxAbEngine::~CPeninputHwrBxAbEngine() + { + delete iIdle; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::RecognizeL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +TInt CPeninputHwrBxAbEngine::Recognize( const RArray& aTraceData, + RPointerArray& aResult ) + { + TInt err = KErrGeneral; + + if (!iRecognizerInited) + { + TRAP_IGNORE(DoIdleConstructL()); + } + + if ( iHwrEngine ) + { + aResult.ResetAndDestroy(); + err = iHwrEngine->Recognize( aTraceData, aResult ); + // Convert according the shift mode:remove when recognizer provides + AdjustResultCase( aResult ); + } + + return err; + } + +// --------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::BackgroundConstructL +// Do background construct. +// --------------------------------------------------------------------------- +// +TInt CPeninputHwrBxAbEngine::BackgroundTaskL(TAny* aPtr) + { + CPeninputHwrBxAbEngine* self = static_cast(aPtr); + self->DoIdleConstructL(); + return EFalse; + } + +void CPeninputHwrBxAbEngine::DoIdleConstructL() + { + iRecognizerInited = ETrue; + InitRecognizerL(); + SetMode(iMode); + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetLanguage +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetLanguage( TInt aLanguage ) + { + if ( iLanguage != aLanguage ) + { + iLanguage = aLanguage; + iRecognizerInited = EFalse; + iHwrEngine = NULL; + iIdle->Start(TCallBack(BackgroundTaskL,this)); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::GetLanguage +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +TInt CPeninputHwrBxAbEngine::GetLanguage( ) + { + return iLanguage; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetCase +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetCase( TInt aCase ) + { + if ( ( iCaseSensitive && ( iMode == ERangeNative ) ) || + ( iMode == ERangeEnglish ) ) + { + TInt order = -1; + switch ( aCase ) + { + case ECaseUpper: + case ECaseText: + { + order = ( TInt ) EUpperFirst; + } + break; + case ECaseLower: + case ECaseInverseText: + { + order = ( TInt ) ELowerFirst; + } + break; + default: + break; + } + + if ( iHwrEngine && ( order != -1 ) ) + { + iHwrEngine->SetFirstLetterOrder( ( TLatinLetterOrder ) order ); + } + + iCase = aCase; + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetCaseSensitive +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetCaseSensitive( TBool aCaseSensitive ) + { + iCaseSensitive = aCaseSensitive; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetMode +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// + void CPeninputHwrBxAbEngine::SetMode( TInt aMode ) + { + TRecognitionRange range; + + range.iLanguage = TLanguage( iLanguage ); + switch ( aMode ) + { + case ERangeNumber: + { + range.iSubRange = EPtiRangeNumber; + } + break; + case ERangeSymbol: + { + range.iSubRange = EPtiRangeSymbol; + } + break; + case ERangeEnglish: + { + range.iSubRange = EPtiRangeLatin; + } + break; + case ERangeNative: + { + range.iSubRange = EPtiRangeNative; + } + break; + case ERangeNativeNumber: + { + range.iSubRange = EPtiRangeNativeNumber; + } + break; + default: + { + range.iSubRange = EPtiRangeNumber; + } + break; + } + + if ( iHwrEngine ) + { + iHwrEngine->SetRange( range ); + } + + iMode = aMode; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetTopGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::GetTopGuideLinePos( TInt& aPos ) + { + if ( iHwrEngine ) + { + iHwrEngine->GetTopGuideLinePos( aPos ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetBottomGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::GetBottomGuideLinePos( TInt& aPos ) + { + if ( iHwrEngine ) + { + iHwrEngine->GetBottomGuideLinePos( aPos ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetBottomGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetPermittedCharSet( const TDesC& /*aSymbolSet*/) + { + if ( iHwrEngine ) + { + //iHwrEngine->SetPermittedSymbolSet( aSymbolSet ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetInputAreaSize +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetInputAreaSize( TSize& aSize ) + { + if ( iHwrEngine ) + { + iHwrEngine->SetInputAreaSize( aSize ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::EnableWordRecognition +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::EnableWordRecognition( const TBool aValue ) + { + if ( iHwrEngine ) + { + iHwrEngine->EnableWordRecognition( aValue ); + } + iEnabled = aValue; + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::SetNumberMode +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::SetNumberMode( + const TAknEditorNumericKeymap aNumberMode ) + { + if ( iHwrEngine ) + { + iHwrEngine->SetNumberMode( aNumberMode ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::InitRecognizerL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::InitRecognizerL() + { + // Select suitable hwr recognizer according to language + if ( iPtiEngine ) + { + iHwrEngine = iPtiEngine->GetHwrRecognizerL( TLanguage( iLanguage ) ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputHwrBxAbEngine::AdjustResultCase +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputHwrBxAbEngine::AdjustResultCase( + RPointerArray& aResult ) + { + for ( TInt i = 0; i < aResult.Count(); i++ ) + { + HBufC* res = aResult[i]; + TPtr des = res->Des(); + + if ( ( iCase == ECaseText ) && + ( iMode == ERangeEnglish )) + { + HBufC* rep = NULL; + + TRAP_IGNORE( rep = HBufC::NewL( res->Length() ) ); + TPtr repp = rep->Des(); + + TChar c; + TBuf<1> buf; + + for ( TInt j = 0; j < res->Length(); j++ ) + { + c = des[j]; + buf.Zero(); + buf.Append( c ); + if ( j == 0 ) + { + buf.UpperCase(); + } + else + { + buf.LowerCase(); + } + repp.Append( buf ); + } + des.Copy( *rep ); + delete rep; + } + } + } +//End of File