diff -r f1bdd6b078d1 -r 2cb9bae34d17 fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingModel.cpp --- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlDualLanguageSettingModel.cpp Tue Jul 06 14:38:41 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,326 +0,0 @@ -/* -* Copyright (c) 2009 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: -* -*/ - - - - - - - - - - - -#include -#include //For CAknAppUi -#include //CAknTitlePane -#include //For R_SECONDARY_WRITING_LANG_NONE -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "AknFepUIAvkonCtrlDualLanguageSettingModel.h" - -const TInt KAkFepDualLanguageMask = 0x03FF; -const TInt KAkFepDualLanguageBufSize128 = 128; - -CAknFepDualLanguageSettingModel* CAknFepDualLanguageSettingModel::NewL() - { - CAknFepDualLanguageSettingModel* self = new( ELeave ) CAknFepDualLanguageSettingModel(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -void CAknFepDualLanguageSettingModel::ConstructL() - { - iAknFepRepository = CRepository::NewL( KCRUidAknFep ); - } - -CAknFepDualLanguageSettingModel::~CAknFepDualLanguageSettingModel() - { - if(iAknFepRepository) - delete iAknFepRepository; - } -void CAknFepDualLanguageSettingModel::GetSecondaryInputLanguagesL( - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames, - CCoeEnv* aCoeEnv) - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - CArrayFix* languageCodeArray = aSeedLanguages; - ptiEngine->GetAvailableLanguagesL( languageCodeArray ); - languageCodeArray->InsertL(0,0); // No secondary input language as the first item - - TInt count = languageCodeArray->Count(); - for ( TInt index = 0; index < count; ++index ) - { - const TInt langCode = languageCodeArray->At(index); - if(langCode == ELangTaiwanChinese || - langCode == ELangHongKongChinese || - langCode == ELangPrcChinese || - langCode == ELangJapanese || - langCode == ELangKorean ) - { - languageCodeArray->Delete(index); - count--; - index--; - } - } - - HBufC* noneString = StringLoader::LoadLC( R_SECONDARY_WRITING_LANG_NONE, aCoeEnv); - TPtr nonePtr( noneString->Des() ); - aLanguageNames->AppendL(nonePtr); - CleanupStack::PopAndDestroy( noneString ); - - HBufC* buffer = HBufC::NewLC( KAkFepDualLanguageBufSize128 ); - for ( TInt index = 1; index < count; ++index ) - { - const TInt langId = languageCodeArray->At( index ); - - TPtr ptrToBuffer( buffer->Des() ); - ptiEngine->GetLocalizedLanguageName( langId & KAkFepDualLanguageMask, - ptrToBuffer ); - - aLanguageNames->AppendL( ptrToBuffer ); - - ptrToBuffer.Zero(); - } - - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( ptiEngine ); - } -void CAknFepDualLanguageSettingModel::ShowDualInputLanguageSettingListL(CCoeEnv* aCoeEnv) - { - CAknAppUi* appUi = static_cast(aCoeEnv->AppUi()); - - CAknTitlePane* titlePane = static_cast( appUi->StatusPane()->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - const TDesC* appTitle = titlePane->Text(); - HBufC* oldTitle = appTitle->AllocL(); - CleanupStack::PushL(oldTitle); - HBufC* title = StringLoader::LoadLC( R_INPUT_LANGUAGE_SETTINGS_TITLE, aCoeEnv); - titlePane->SetTextL( *title ); - CleanupStack::PopAndDestroy(title); - - //Launch dialog - - titlePane->SetTextL( *oldTitle ); - CleanupStack::PopAndDestroy(oldTitle); - } - - -// ================= DATA ACCESS FUNCTIONS ================== - -// ---------------------------------------------------------------------------- -// CAknFepDualLanguageSettingModel::GetLanguagesFromPtiL -// -// Utility routine to get available languages with Symbian OS codes -// ---------------------------------------------------------------------------- -// -void CAknFepDualLanguageSettingModel::GetLanguagesFromPtiL( - CArrayFix* aInstalledLangCodes, - CArrayFix* aSeedLanguages, - CDesCArray* aLanguageNames ) - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - CArrayFix* languageCodeArray = aSeedLanguages; - if ( aInstalledLangCodes ) - { - languageCodeArray = aInstalledLangCodes; - } - else - { - ptiEngine->GetAvailableLanguagesL( languageCodeArray ); - } - - HBufC* buffer = HBufC::NewLC( KAkFepDualLanguageBufSize128 ); - const TInt count = languageCodeArray->Count(); - for ( TInt index = 0; index < count; ++index ) - { - const TInt langId = languageCodeArray->At( index ); - - TPtr ptrToBuffer( buffer->Des() ); - ptiEngine->GetLocalizedLanguageName( langId & KAkFepDualLanguageMask, - ptrToBuffer ); - - if ( aInstalledLangCodes ) - { - aSeedLanguages->AppendL( langId ); - } - aLanguageNames->AppendL( ptrToBuffer ); - - ptrToBuffer.Zero(); - } - - CleanupStack::PopAndDestroy( buffer ); - CleanupStack::PopAndDestroy( ptiEngine ); - } - -TInt CAknFepDualLanguageSettingModel::LanguageL( TLanguageType aType ) - { - TInt Language = KErrNone; - switch ( aType ) - { - case EAknFepDualLanguageSettingInputLanguage: - { - User::LeaveIfError( - iAknFepRepository->Get( KAknFepInputTxtLang, Language ) ); - } - break; - case EAknFepDualLanguageSettingInputLanguageSecondary: - { - User::LeaveIfError( - iAknFepRepository->Get( KAknFepInputTxtLangSecondary, Language ) ); - } - break; - default: - break; - } - return Language; - - } - - -TBool CAknFepDualLanguageSettingModel::SetLanguageL( TLanguageType aType, TInt aLanguage ) - { - TBool ret = ETrue; - - switch( aType ) - { - case EAknFepDualLanguageSettingInputLanguage: - { - if( iAknFepRepository->Set( KAknFepInputTxtLang, - aLanguage ) != KErrNone ) - { - ret = EFalse; - } - - if(ret) - { - // now inform all open apps of the switch - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - CAknEnv::Static()->SettingCache().Update(KEikInputLanguageChange); - } - - // See if it cannot do predictive text entry - if( !CheckDictionaryFromPtiL( aLanguage ) ) - { - CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog( ); - dlg->ExecuteDlgLD( - CAknNoteDialog::EShortTimeout, - CAknNoteDialog::ENoTone, - R_AVKON_T9_NOTE_NO_AVAILABLE ); - - } - } - break; - case EAknFepDualLanguageSettingInputLanguageSecondary: - { - if( iAknFepRepository->Set( KAknFepInputTxtLangSecondary, - aLanguage ) != KErrNone ) - { - ret = EFalse; - } - if(ret) - { - // now inform all open apps of the switch - // same event as primary input language change - TWsEvent event; - event.SetType(KEikInputLanguageChange); - CEikonEnv::Static()->WsSession().SendEventToAllWindowGroups(event); - CAknEnv::Static()->SettingCache().Update(KEikInputLanguageChange); - } - // Secondary input language does not need prediction - // so we don't check for it - } - break; - default: - break; - - } - return ret; - } - -// ---------------------------------------------------------------------------- -// CGSLangModel::CheckDictionaryFromPtiL -// -// Checks if the selected language supports predictive text input. -// In case this returns EFalse, the UI display's "Not available" -// for Predictive text input. -// ---------------------------------------------------------------------------- -// -TBool CAknFepDualLanguageSettingModel::CheckDictionaryFromPtiL( TInt aLangCode ) - { - TBool langSupport = EFalse; - - if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) || - FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) - { - langSupport = ETrue; - } - else - { - CPtiEngine* ptiEngine = CPtiEngine::NewL(); - CleanupStack::PushL( ptiEngine ); - - MPtiLanguage* ptiLang = ptiEngine->GetLanguage( aLangCode ); - if ( ptiLang ) - { - // the check here should be based on the keyboard - TInt keyboardLayout = 0; - RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); - TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; - switch(layout) - { - case EPtiKeyboardHalfQwerty: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEngineHalfQwertyPredictive); - break; - case EPtiKeyboardQwerty4x12: - case EPtiKeyboardQwerty4x10: - case EPtiKeyboardQwerty3x11: - case EPtiKeyboardCustomQwerty: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEngineQwertyPredictive); - break; - case EPtiKeyboardNone: - case EPtiKeyboard12Key: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEnginePredictive); - break; - default: - langSupport = ptiLang->HasInputMode( (TPtiEngineInputMode)EPtiEnginePredictive); - break; - } - - } - CleanupStack::PopAndDestroy( ptiEngine ); - ptiLang = NULL; - } - - return langSupport; - }