diff -r 000000000000 -r eb1f2e154e89 textinput/peninputgenerichwr/src/peninputgenericrecognizer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputgenerichwr/src/peninputgenericrecognizer.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,436 @@ +/* +* 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 "peninputgenericrecognizer.h" + + +// ======== MEMBER FUNCTIONS ======== + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::NewL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputGenericRecognizer* CPeninputGenericRecognizer::NewL(CPtiEngine* aPtiEngine) + { + CPeninputGenericRecognizer* self = + new ( ELeave ) CPeninputGenericRecognizer(aPtiEngine); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::NewL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputGenericRecognizer* CPeninputGenericRecognizer::NewL( TInt aLanguage ) + { + CPeninputGenericRecognizer* self = + new ( ELeave ) CPeninputGenericRecognizer( aLanguage ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::CPeninputGenericRecognizer +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputGenericRecognizer::CPeninputGenericRecognizer(CPtiEngine* aPtiEngine) + : iPtiEngine( aPtiEngine ), iLanguage( 0 ),iMode( ERangeInvalid ), + iCaseSensitive( EFalse ), iEnabled( EFalse ), iRecognizerInited(EFalse) + + { + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::CPeninputGenericRecognizer +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputGenericRecognizer::CPeninputGenericRecognizer( TInt aLanguage ) + : iLanguage( aLanguage ) + { + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::ConstructL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::ConstructL() + { + iIdle = CIdle::NewL(CActive::EPriorityIdle); + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::~CPeninputGenericRecognizer +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +CPeninputGenericRecognizer::~CPeninputGenericRecognizer() + { + delete iIdle; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::RecognizeL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +TInt CPeninputGenericRecognizer::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; + } + +// --------------------------------------------------------------------------- +// CPeninputGenericRecognizer::BackgroundConstructL +// Do background construct. +// --------------------------------------------------------------------------- +// +TInt CPeninputGenericRecognizer::BackgroundTaskL(TAny* aPtr) + { + CPeninputGenericRecognizer* self = static_cast(aPtr); + self->DoIdleConstructL(); + return EFalse; + } + +void CPeninputGenericRecognizer::DoIdleConstructL() + { + iRecognizerInited = ETrue; + InitRecognizerL(); + SetMode(iMode); + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetLanguage +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::SetLanguage( TInt aLanguage ) + { + if ( iLanguage != aLanguage ) + { + iLanguage = aLanguage; + iRecognizerInited = EFalse; + iHwrEngine = NULL; + iIdle->Start(TCallBack(BackgroundTaskL,this)); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::GetLanguage +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +TInt CPeninputGenericRecognizer::GetLanguage( ) + { + return iLanguage; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetCase +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::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; + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetCaseSensitive +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::SetCaseSensitive( TBool aCaseSensitive ) + { + iCaseSensitive = aCaseSensitive; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetMode +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// + void CPeninputGenericRecognizer::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; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetTopGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::GetTopGuideLinePos( TInt& aPos ) + { + if ( iHwrEngine ) + { + iHwrEngine->GetTopGuideLinePos( aPos ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetBottomGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::GetBottomGuideLinePos( TInt& aPos ) + { + if ( iHwrEngine ) + { + iHwrEngine->GetBottomGuideLinePos( aPos ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetBottomGuideLinePos +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::SetPermittedCharSet( const TDesC& /*aSymbolSet*/) + { + if ( iHwrEngine ) + { + //iHwrEngine->SetPermittedSymbolSet( aSymbolSet ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetInputAreaSize +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::SetInputAreaSize( TSize& aSize ) + { + if ( iHwrEngine ) + { + iHwrEngine->SetInputAreaSize( aSize ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::EnableWordRecognition +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::EnableWordRecognition( const TBool aValue ) + { + if ( iHwrEngine ) + { + iHwrEngine->EnableWordRecognition( aValue ); + } + iEnabled = aValue; + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::SetNumberMode +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::SetNumberMode( + const TAknEditorNumericKeymap aNumberMode ) + { + if ( iHwrEngine ) + { + iHwrEngine->SetNumberMode( aNumberMode ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::InitRecognizerL +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::InitRecognizerL() + { + // Select suitable hwr recognizer according to language + if ( iPtiEngine ) + { + iHwrEngine = iPtiEngine->GetHwrRecognizerL( TLanguage( iLanguage ) ); + } + } + +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::AdjustResultCase +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +void CPeninputGenericRecognizer::AdjustResultCase( + RPointerArray& aResult ) + { + for ( TInt i = 0; i < aResult.Count(); i++ ) + { + HBufC* res = aResult[i]; + TPtr des = res->Des(); + + if ( ( iCase == ECaseText ) && + (( iMode == ERangeEnglish ) || + ((iMode == ERangeNative) && + (iLanguage == ELangGreek || iLanguage == ELangUkrainian)))) + { + 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; + } + } + } +// -------------------------------------------------------------------------- +// CPeninputGenericRecognizer::EnableGuideline +// (other items were commented in a header) +// -------------------------------------------------------------------------- +// +TInt CPeninputGenericRecognizer::EnableGuideline(const TBool aFlag) + { + if(!(iLanguage == ELangThai || iLanguage == ELangVietnamese)) + { + return KErrNotSupported; + } + if ( iHwrEngine ) + { + return iHwrEngine->EnableGuideline( aFlag ); + } + else + { + return KErrNotSupported; + } + } + +//End of file