textinput/ptienginev2/src/PtiTruiEngine.cpp
changeset 0 eb1f2e154e89
--- /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 <bautils.h>
+
+#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<TPoint>& 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<TPoint>& 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<HBufC>& 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<TPoint>& 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<TPoint>& 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<TUint>& aPresets ) 
+    {
+    LoadUdmL( EUdmShortcut );
+    iSymboList[EUdmShortcut]->GetAllPresetSymbolsL( aPresets ) ;
+    }
+    
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void CTruiPtiEngine::GetPresetSymbolByUnicodeL( TUint aUnicode, RArray<TPoint>& 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<TInt>& 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<TPoint>& 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