diff -r 000000000000 -r eb1f2e154e89 textinput/ptienginev2/src/PtiTruiEngine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/ptienginev2/src/PtiTruiEngine.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,410 @@ +/* +* Copyright (c) 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: Implement of class CTruiPtiEngine +* +*/ + + + +#include + +#include "PtiTruiEngine.h" +#include "PtiSymbolList.h" + + +// ===================== Constant Definition ======================= +_LIT( KSymbolPath, "c:\\PredicH\\TrainUISymbol.dat" ); +_LIT( KShortCutPath, "c:\\PredicH\\TrainUiShortcut.dat" ); +_LIT( KPresetPath, "c:\\PredicH\\TrainUiPreset.dat"); +_LIT( KPresetRomPath, "z:\\resource\\TrainUiPreset.dat" ); + +// ======== MEMBER FUNCTIONS ======== + +CTruiPtiEngine::CTruiPtiEngine() + { + iScript = EPtiHwrScriptAny; + iHl = 0; + iBl = 0; + } + +void CTruiPtiEngine::ConstructL( CHwrRecognizer* aHwrEngine ) + { + // Load the file + iSymboList.Reset(); + iHwrEngine = aHwrEngine; + User::LeaveIfError( iFsSession.Connect() ); + } + + +CTruiPtiEngine* CTruiPtiEngine::NewL( CHwrRecognizer* aHwrEngine ) + { + CTruiPtiEngine* self = CTruiPtiEngine::NewLC( aHwrEngine ); + CleanupStack::Pop( self ); + return self; + } + +CTruiPtiEngine* CTruiPtiEngine::NewLC( CHwrRecognizer* aHwrEngine ) + { + CTruiPtiEngine* self = new( ELeave ) CTruiPtiEngine; + CleanupStack::PushL( self ); + self->ConstructL( aHwrEngine ); + return self; + } + +CTruiPtiEngine::~CTruiPtiEngine() + { + iSymboList.DeleteAll(); + delete iPreSetList; + iPreSetList = NULL; + iFsSession.Close(); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Set current trained character's Language Script. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::SetLanguageScriptL( TInt aLanguageScript ) + { + iScript = aLanguageScript; + + LoadUdmL( EUdmSymbol ); + LoadUdmL( EUdmShortcut ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Check if character has model. +// --------------------------------------------------------------------------- +// +TBool CTruiPtiEngine::CharacterModelExist( const TDesC& aChar ) + { + TRAPD( err, LoadUdmL( EUdmSymbol ) ); + if ( err != KErrNone ) + { + return err; + } + + THwrUdmRange range = { iScript, EPtiHwrRangeAny }; + return iSymboList[EUdmSymbol]->CheckSymbolModel( aChar, range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Get character model. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::GetCharacterModelL( const TDesC& aChar, RArray& aModel ) + { + LoadUdmL( EUdmSymbol ); + THwrUdmRange range = { iScript, EPtiHwrRangeAny }; + TUint presetCode = 0; + iSymboList[EUdmSymbol]->GetSymbolModelL( aChar, aModel, presetCode,range ); + } + + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Set character model. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::SetCharacterModelL( const TDesC& aChar, RArray& aModel, TInt aSubRange, TDes& aSimilarChar ) + { + THwrUdmRange script = { iScript, aSubRange }; + User::LeaveIfError( iHwrEngine->SymbolModelValid( aChar, aModel, script, aSimilarChar ) ); + + LoadUdmL( EUdmSymbol ); + THwrUdmRange range = { iScript, aSubRange }; + iSymboList[EUdmSymbol]->SetSymbolModelL( aChar, aModel, iHl,iBl,range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Delete character model. +// --------------------------------------------------------------------------- +// +TInt CTruiPtiEngine::DeleteCharacterModel( const TDesC& aChar ) + { + TRAPD( errUdm, LoadUdmL( EUdmSymbol ) ); + if ( errUdm != KErrNone ) + { + return errUdm; + } + + THwrUdmRange range = { iScript, EPtiHwrRangeAny }; + TRAPD( err,iSymboList[EUdmSymbol]->DeleteSymbolModelL( aChar, range ) ); + return err; + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Get text list of all the shortcuts. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::GetShortcutTextListL( RPointerArray& aShortcutTextList ) + { + LoadUdmL( EUdmShortcut ); + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + iSymboList[EUdmShortcut]->GetModelTextListL( aShortcutTextList, range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Check if shortcut has model. +// --------------------------------------------------------------------------- +// +TBool CTruiPtiEngine::CheckShortcutModel( const TDesC& aText ) + { + TRAPD( err, LoadUdmL( EUdmShortcut ) ); + if ( err != KErrNone ) + return EFalse; + + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + return iSymboList[EUdmShortcut]->CheckSymbolModel( aText, range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Get Shortcut model. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::GetShortcutModelL( const TDesC& aText, RArray& aModel,TUint& aUnicode ) + { + LoadUdmL( EUdmShortcut ); + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + iSymboList[EUdmShortcut]->GetSymbolModelL( aText, aModel, aUnicode, range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Set Shortcut model. +// --------------------------------------------------------------------------- +void CTruiPtiEngine::SetShortcutModelL( const TDesC& aText, RArray& aModel, TDes& aSimilarText ) + { + THwrUdmRange script = { iScript, EPtiHwrRangeAny }; + User::LeaveIfError( iHwrEngine->SymbolModelValid( aText, aModel, script, aSimilarText ) ); + + LoadUdmL( EUdmShortcut ); + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + return iSymboList[EUdmShortcut]->SetSymbolModelL( aText, aModel, iHl, iBl, range ); + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// Delete Shortcut model. +// --------------------------------------------------------------------------- +TInt CTruiPtiEngine::DeleteShortcutModel( const TDesC& aText ) + { + TRAPD( errUdm, LoadUdmL( EUdmShortcut ) ); + if ( errUdm != KErrNone ) + { + return errUdm; + } + + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + TRAPD( err,iSymboList[EUdmShortcut]->DeleteSymbolModelL( aText, range ) ); + return err; + } + +// --------------------------------------------------------------------------- +// From class MTruiEngine. +// hange the text of an existing shortcut. +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::ChangeShortcutTextL( const TDesC& aOldText, + const TDesC& aNewText ) + { + LoadUdmL( EUdmShortcut ); + + THwrUdmRange range = { EPtiHwrScriptAny, EPtiHwrRangeAny }; + TRAP_IGNORE( iSymboList[EUdmShortcut]->ChangeSymbolTextL( aOldText, aNewText, range ) ); + } + +// --------------------------------------------------------------------------- +// Get guiding line pos +// --------------------------------------------------------------------------- +// +TInt CTruiPtiEngine::GetGuidingLinePos( const TSize& aSize, TInt& aTop , TInt& aBottom) + { + iHl = aTop = aSize.iHeight * 65 / 135; + iBl = aBottom = aSize.iHeight * 88 / 135; + return KErrNone; + } + +// --------------------------------------------------------------------------- +// Get the number of the maximum of shortcuts +// --------------------------------------------------------------------------- +// +TInt CTruiPtiEngine::MaxShortCutLength() + { + return 10; + } + + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::SavePresetShortcutL( TUint aUnicode, const TDesC& aShortcut ) + { + LoadUdmL( EUdmShortcut ); + iSymboList[EUdmShortcut]->SavePresetShortcutL( aUnicode, aShortcut ) ; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::GetAllPresetSymbolsL( RArray& aPresets ) + { + LoadUdmL( EUdmShortcut ); + iSymboList[EUdmShortcut]->GetAllPresetSymbolsL( aPresets ) ; + } + +// --------------------------------------------------------------------------- +// --------------------------------------------------------------------------- +// +void CTruiPtiEngine::GetPresetSymbolByUnicodeL( TUint aUnicode, RArray& aModel, TDes& aShortcut ) + { + LoadUdmL( EUdmShortcut ); + iSymboList[EUdmShortcut]->GetPresetSymbolByUnicodeL( aUnicode, aModel, aShortcut ) ; + } + +void CTruiPtiEngine::LoadUdmL( TUdmType aType ) + { + if ( iSymboList[aType] ) + { + return; + } + + iSymboList[EUdmSymbol] = CSymbolList::NewL( KSymbolPath(), NULL ); + iSymboList[EUdmSymbol]->ExternalizeL(); + + // well , EUdmPreset belong to shourtcut + if ( !iPreSetList ) + { + // copy the data from rom if not exist on KPresetPath + TInt retCode = BaflUtils::CopyFile( iFsSession, KPresetRomPath(), KPresetPath(), 0 ); + TUint attPresetDataFile = 0; + iFsSession.Att( KPresetPath, attPresetDataFile ); + if ( attPresetDataFile & KEntryAttReadOnly ) + { + attPresetDataFile &= ~KEntryAttReadOnly; + iFsSession.SetAtt( KPresetPath(), attPresetDataFile, KEntryAttReadOnly ); + } + if ( KErrNone == retCode || KErrAlreadyExists == retCode ) + { + iPreSetList = CSymbolList::NewL( KPresetPath(), NULL ); + } + } + iSymboList[EUdmShortcut] = CSymbolList::NewL( KShortCutPath(), iPreSetList ); + } + +void CTruiPtiEngine::UnLoadUdm( TUdmType aType ) + { + if ( iSymboList[aType] ) + { + delete iSymboList[aType]; + iSymboList[aType] = NULL; + } + } + +void CTruiPtiEngine::GetModelIndexListL( TUdmType aType, RArray& aList, const THwrUdmRange& aRange) + { + CSymbolList* temp = iSymboList[aType]; + TBool tempB = !iSymboList[aType]; + LoadUdmL( aType ); + + THwrUdmRange range = aRange; + ConvertUdmRange( range ); + iSymboList[aType]->GetModelIndexListL( aList, range ); + } + + + +void CTruiPtiEngine::GetSymbolModelL( TUdmType aType,TInt aIndex, TPtrC& aSymbolName,RArray& aModel, TInt& aHelpLine, TInt& aBaseLine ) + { + LoadUdmL( aType ); + + iSymboList[aType]->GetSymbolDataRef( aIndex, aSymbolName, aModel, aHelpLine, aBaseLine); + } + +void CTruiPtiEngine::ConvertUdmRange( THwrUdmRange& aRange ) + { + switch ( aRange.iScript ) + { + case ELangEnglish: + case ELangAustralian: + case ELangNewZealand: + case ELangInternationalEnglish: + case ELangSouthAfricanEnglish: + case ELangCanadianEnglish: + case ELangAmerican: + case ELangSwissFrench: + case ELangBelgianFrench: + case ELangInternationalFrench: + case ELangFrench: + case ELangCanadianFrench: + case ELangGerman: + case ELangSwissGerman: + case ELangSpanish: + case ELangLatinAmericanSpanish: + case ELangSwissItalian: + case ELangItalian: + case ELangFinlandSwedish: + case ELangSwedish: + case ELangFinnish: +// case ELangAlbanian: + case ELangDanish: + case ELangDutch: + case ELangIcelandic: + case ELangNorwegian: + case ELangPortuguese: + case ELangIndonesian: + case ELangMalay: + case ELangTagalog: + case ELangCroatian: + case ELangCzech: + case ELangHungarian: + case ELangPolish: + case ELangRomanian: + case ELangSlovak: + case ELangSlovenian: +// case ELangSerbian: + case ELangEstonian: + case ELangLatvian: + case ELangLithuanian: + case ELangTurkish: + aRange.iScript = EPtiHwrScriptLatin; + break; + case ELangGreek: + case ELangCyprusGreek: + aRange.iScript = EPtiHwrScriptGreek; + break; + case ELangBelarussian: + case ELangRussian: + case ELangUkrainian: + case ELangBulgarian: + aRange.iScript = EPtiHwrScriptCyrillic; + break; + case ELangHebrew: + aRange.iScript = EPtiHwrScriptHebrew; + break; + case ELangArabic: + aRange.iScript = EPtiHwrScriptArabic; + break; + default: + break; + } + } + +// end of line