diff -r 000000000000 -r eb1f2e154e89 fep/aknfep/src/dbmanagement.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fep/aknfep/src/dbmanagement.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,335 @@ +/* +* Copyright (c) 2008 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: DB Engine +* +*/ + + + + + + + + + + + + +//system include files +#include +#include +#include +#include + +//user inlucde files +#include "dbmanagement.h" +#include "AknFepGlobalEnums.h" +#include "AknFepManager.h" +#include "AknFepSharedDataInterface.h" + +// CONSTANTS +const TInt KInputPhraseMaxLength = 7; +const TInt KInvalidPhrase = -103; +const TInt KPhraseExisted = -104; +const TInt KPhraseNotExisted = -105; +const TInt KInputPhraseOutRange = -106; +const TInt KDBHasNoSpace = -150; + +// --------------------------------------------------------- +// Symbian constructor +// --------------------------------------------------------- +// +CDBManagement* CDBManagement::NewL( CAknFepManager* aFepManager ) + { + CDBManagement* self = new( ELeave ) CDBManagement(); + CleanupStack::PushL( self ); + self->ConstructL(aFepManager); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------- +// +CDBManagement::CDBManagement() + { + } + +// --------------------------------------------------------- +// Second phase constructor +// --------------------------------------------------------- +// +void CDBManagement::ConstructL( CAknFepManager* aFepManager ) + { + iAknFepSharedDataInterface = CAknFepSharedDataInterface::NewL( aFepManager ); + iFepManager = aFepManager; + iPtiEngineOfFep = iFepManager->PtiEngine(); + iPtiEngine = CPtiEngine::NewL(ETrue); + } + +// --------------------------------------------------------- +// destructor +// --------------------------------------------------------- +// +CDBManagement::~CDBManagement() + { + delete iAknFepSharedDataInterface; + delete iPtiEngine; + } + +// --------------------------------------------------------- +// Add phrase to DB. +// --------------------------------------------------------- +// +TBool CDBManagement::AddPhraseToDB( const TDesC& aPhraseAdd ) + { + TInt retCode; + TPtiUserDictionaryEntry addUdbEntry(aPhraseAdd); + TRAP_IGNORE( ActivateLanguageOfFepL() ); + //Add the phrase to the DB by PTI Engine + iPtiEngineOfFep->AddUserDictionaryEntry( addUdbEntry ); + retCode = iPtiEngine->AddUserDictionaryEntry( addUdbEntry ); + if ( KErrNone != retCode ) + { + GetDBErrMsg( retCode ); + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------- +// Edit phrase from DB +// --------------------------------------------------------- +// +TBool CDBManagement::EditPhraseFromDB( const TDesC& aPhraseOld, + const TDesC& aPhraseNew ) + { + TBool retCode; + //Add the new phrase to the DB by PTI Engine + retCode = AddPhraseToDB( aPhraseNew ); + if ( !retCode ) + { + GetDBErrMsg( retCode ); + return EFalse; + } + retCode = RemovePhraseFromDB( aPhraseOld ); + if ( !retCode ) + { + GetDBErrMsg( retCode ); + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------- +// Remove phrase from DB +// --------------------------------------------------------- +// +TBool CDBManagement::RemovePhraseFromDB(const TDesC& aPhraseRemove ) + { + TInt retCode; + TPtiUserDictionaryEntry removeUdbEntry( aPhraseRemove ); + //Remove the phrase from the DB by PTI Engine + TRAP_IGNORE( ActivateLanguageOfFepL() ); + iPtiEngineOfFep->RemoveEntryFromUserDictionary( removeUdbEntry ); + retCode = iPtiEngine->RemoveEntryFromUserDictionary( removeUdbEntry ); + if( KErrNone != retCode ) + { + GetDBErrMsg( retCode ); + return EFalse; + } + return ETrue; + } + +// --------------------------------------------------------- +// Get phrases from DB +// --------------------------------------------------------- +// +TBool CDBManagement::GetPhraseFromDBL( CDesCArray& aPhraseGet ) + { + TPtiUserDictionaryEntry getUdbEntry; + TInt retCode; + TInt i = 0; + ActivateLanguage(); + + retCode = iPtiEngine->GetUserDictionaryEntry(i, getUdbEntry); + + while (retCode == KErrNone) + { + aPhraseGet.AppendL(getUdbEntry.Word()); + i++; + retCode = iPtiEngine->GetUserDictionaryEntry(i, getUdbEntry); + } + + return ETrue; + } + +// --------------------------------------------------------- +// Get Error Message +// --------------------------------------------------------- +// +void CDBManagement::GetErrMsg( TDes& aErrMsg ) + { + aErrMsg.Copy(iErrMsg); + } + +// --------------------------------------------------------- +// Check the input phrase +// --------------------------------------------------------- +// +TBool CDBManagement::InputPhraseCheck( TDes& aPhraseInput ) + { + const TUint16 KChineseUnicodeMin = 0x4E00; + const TUint16 KChineseUnicodeMax = 0x9FA5; + const TUint16 KSpaceUnicode = 0x0020; + const TUint16 KKeytroke2Unicode = 0x4E28; + const TUint16 KKeytroke3Unicode = 0x4E3F; + const TUint16 KKeytroke4Unicode = 0x4E36; + const TUint16 KKeytroke5Unicode = 0x4E5B; + TBuf inputText; + aPhraseInput.TrimAll(); + TBool inValidFlg = EFalse; + //the input phrase length more than the max length + if ( aPhraseInput.Length() > KInputPhraseMaxLength ) + { + return EFalse; + } + //check every character of input phrase + for ( TInt i = 0; i < aPhraseInput.Length(); ++i ) + { + if ( ( (TInt)aPhraseInput[i] >= KChineseUnicodeMin ) && + ( (TInt)aPhraseInput[i] <= KChineseUnicodeMax ) ) + { + if ( ( KKeytroke2Unicode == (TInt)aPhraseInput[i] ) || + ( KKeytroke3Unicode == (TInt)aPhraseInput[i] ) || + ( KKeytroke4Unicode == (TInt)aPhraseInput[i] ) || + ( KKeytroke5Unicode == (TInt)aPhraseInput[i] ) ) + { + inValidFlg = ETrue; + } + else + { + inputText.Append( aPhraseInput[i] ); + } + } + else + { + if ( KSpaceUnicode != (TInt)aPhraseInput[i] ) + { + inValidFlg = ETrue; + } + } + } + + //out the chinese phrase. + aPhraseInput = inputText; + + if ( inValidFlg ) + { + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_ONLY_CHINESE_TEXT ); + return EFalse; + } + + if ( aPhraseInput.Length() < 2 ) + { + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_TOO_SHORT_TEXT ); + return EFalse; + } + + return ETrue; + } + +// --------------------------------------------------------- +// Set language +// --------------------------------------------------------- +// +void CDBManagement::ActivateLanguageL() + { + TInt epocLanguageID = iAknFepSharedDataInterface->InputTextLanguage(); + iPtiEngine->ActivateLanguageL((TLanguage)epocLanguageID); + switch(epocLanguageID) + { + case ELangHongKongChinese: + iPtiEngine->SetInputMode( EPtiEngineStrokeByPhrase ); + break; + case ELangTaiwanChinese: + iPtiEngine->SetInputMode( EPtiEngineZhuyinByPhrase ); + break; + case ELangPrcChinese: + iPtiEngine->SetInputMode( EPtiEnginePinyinByPhrase ); + break; + } + } + +// --------------------------------------------------------- +// Set language +// --------------------------------------------------------- +// +void CDBManagement::ActivateLanguageOfFepL() + { + TInt epocLanguageID = iAknFepSharedDataInterface->InputTextLanguage(); + iPtiEngineOfFep->ActivateLanguageL((TLanguage)epocLanguageID); + switch(epocLanguageID) + { + case ELangHongKongChinese: + iPtiEngineOfFep->SetInputMode( EPtiEngineStroke ); + break; + case ELangTaiwanChinese: + iPtiEngineOfFep->SetInputMode( EPtiEngineZhuyinByPhrase ); + break; + case ELangPrcChinese: + iPtiEngineOfFep->SetInputMode( EPtiEnginePinyin ); + break; + } + } + +// --------------------------------------------------------- +// Set language +// --------------------------------------------------------- +// +void CDBManagement::ActivateLanguage() + { + TRAP_IGNORE( ActivateLanguageL() ); + } + +// --------------------------------------------------------- +// Get the ptiengine's error +// --------------------------------------------------------- +// +void CDBManagement::GetDBErrMsg( TInt aErrCode ) + { + switch( aErrCode ) + { + case KInvalidPhrase: + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_INVALID_PHRASE_TEXT ); + break; + case KPhraseExisted: + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_PHRASE_EXISTED_TEXT ); + break; + case KPhraseNotExisted: + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_NOT_EXISTED_TEXT ); + break; + case KInputPhraseOutRange: + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_PHRASE_TOO_LONG_TEXT ); + break; + case KDBHasNoSpace: + StringLoader::Load( iErrMsg, R_AKNFEP_CHINESE_USER_DB_NOTE_DB_HAVE_NO_SPACE_TEXT ); + break; + default: + break; + } + } + +//End of File