diff -r 000000000000 -r eb1f2e154e89 textinput/GSLangPlugin/src/GSLangContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/GSLangPlugin/src/GSLangContainer.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,1333 @@ +/* +* Copyright (c) 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: Container for GSLangPlugin. +* +*/ + + +// INCLUDE FILES +#include "GSLangContainer.h" +#include "GSLangPlugin.h" +#include "GSLangPlugin.hrh" +#include "GSLangModel.h" +#include // CGSListBoxItemTextArray +#include +#include + +#include + +#include +#include +#include +#include +#include +//#include // CApProtHandler +//#include // CApUtils +#include // CCommsDatabase +//#include +#include +#include +#include +#include +#include +#include + +// CONSTANTS + +// ========================= MEMBER FUNCTIONS ================================ + +// ----------------------------------------------------------------------------- +// CGSLangContainer::CGSLangContainer +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CGSLangContainer::CGSLangContainer() + { + } + +// --------------------------------------------------------------------------- +// CGSLangContainer::ConstructL(const TRect& aRect) +// Symbian OS two phased constructor +// +// --------------------------------------------------------------------------- +// +void CGSLangContainer::ConstructL( const TRect& aRect ) + { + iModel = CGSLangModel::NewL( this ); + iUpdateITL = EFalse; + iListBox = new( ELeave ) CAknSettingStyleListBox; + BaseConstructL( aRect, R_GS_LANG_PLUGIN_TITLE, R_LANG_LBX ); + } + + +// --------------------------------------------------------------------------- +// CGSLangContainer::ConstructListBoxL(TInt aResLbxId) +// Construct the listbox items +// +// --------------------------------------------------------------------------- +// +void CGSLangContainer::ConstructListBoxL( TInt aResLbxId ) + { + iListBox->ConstructL( this, EAknListBoxSelectionList ); + + iListboxItemArray = CGSListBoxItemTextArray::NewL( aResLbxId, + *iListBox, *iCoeEnv ); + iListBox->Model()->SetItemTextArray( iListboxItemArray ); + iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray ); + + // Set up UI language arrays - Display Text Language Construction + CArrayFixFlat* systemEpocLanguageCodes = 0; + // This creates the list itself + TInt error = SysLangUtil::GetInstalledLanguages( systemEpocLanguageCodes ); + if ( error != KErrNone ) + { + delete systemEpocLanguageCodes; + User::Leave( error ); + } + CleanupStack::PushL( systemEpocLanguageCodes ); + + delete iDtLanguagesCodes; + iDtLanguagesCodes = 0; + iDtLanguagesCodes = new (ELeave)CArrayFixFlat(10); + iDtLanguagesCodes->AppendL(0); // This is the code for "Automatic" + + delete iDtLanguageItems; + iDtLanguageItems = 0; + iDtLanguageItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_DISPLAY_TEXT_LANGUAGE_SETTING_PAGE_LBX); + + //This is for display text language + iModel->GetLanguagesFromPtiL( systemEpocLanguageCodes, + iDtLanguagesCodes, iDtLanguageItems ); + + CleanupStack::PopAndDestroy(); // systemEpocLanguageCode + + // Input Text Language Constrution + iWtLanguagesCodes = new(ELeave)CArrayFixFlat(10); + iWtLanguageItems = new(ELeave)CDesCArrayFlat(10); + + //This is for input text language + iModel->GetLanguagesFromPtiL( NULL, iWtLanguagesCodes, iWtLanguageItems ); + + //Number modes + iAHNumberModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_AH_DEFAULT_INPUT_METHOD_LBX ); + + iHindiNumberModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_HI_DEFAULT_INPUT_METHOD_LBX ); + + // Predictive Text Language Construction + iOnOffItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_T9_ON_OFF_SETTING_PAGE_LBX ); + iOnOffNotAvailable = + iCoeEnv->AllocReadResourceL( R_T9_ONOFF_NOT_AVAILABLE ); + + //Japanese specific features + iJapPredTxtOnOffItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_T9_ON_OFF_SETTING_PAGE_LBX ); + iKeypressTimeoutItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_KEYPRESS_TIMEOUT_SETTING_PAGE_LBX ); + iJapQwertyCommaItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_JAP_QWERTY_COMMA_SETTING_PAGE_LBX ); + iJapQwertyPeriodItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_JAP_QWERTY_PERIOD_SETTING_PAGE_LBX ); + iJapQwertyWidthOfSpaceItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_JAP_QWERTY_WIDTH_FULL_HALF_SETTING_PAGE_LBX ); + + iChiCangJieItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_CHI_CANGJIE_SETTING_PAGE_LBX ); + // Word Autocompletion + iPredictiveModeItems = iCoeEnv->ReadDesC16ArrayResourceL( + R_PREDICTIVE_MODE_SETTING_PAGE_LBX ); + iInputMethodItems = 0; + + CreateListBoxItemsL(); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::CreateListBoxItemsL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::CreateListBoxItemsL() + { + MakeDTLItemL(); + + const TInt uiLang = iModel->LanguageL( CGSLangModel::EGSUiLanguage ); + if (( uiLang == ELangArabic || User::Language() == ELangArabic ) || + ( uiLang == ELangUrdu || User::Language() == ELangUrdu ) || + (uiLang == ELangFarsi || User::Language() == ELangFarsi) && iElaf ) + { + MakeAHNumberModeItemL(); + } + if ( uiLang == ELangHindi || User::Language() == ELangHindi || + uiLang == ELangMarathi || User::Language() == ELangMarathi ) + { + MakeHindiNumberModeItemL(); + } + // if Japanese language variant is flashed + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeEngPredTxtItemL(); + MakeResetATOKDictionaryItemL(); + MakeJnpPredTxtItemL(); + MakeKeypressTimeoutItemL(); + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) ) + { + MakeJapQwertyItemL( EGSLangIdJQC ); + MakeJapQwertyItemL( EGSLangIdJQP ); + MakeJapQwertyItemL( EGSLangIdJQWSP ); + } + } + else + { + MakeITLItemL(); //because we don't need this item in japanese + MakeT9LItemL(); +#ifndef RD_INTELLIGENT_TEXT_INPUT + MakePredictiveModeItemL(); +#else + MakePredictiveOptionsItemL(); +#endif + } + + const TInt inputLang = iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + if( FeatureManager::FeatureSupported( KFeatureIdChinese ) && + ( inputLang == ELangPrcChinese || inputLang == ELangHongKongChinese || + inputLang == ELangTaiwanChinese ) ) + { + MakeDIMItemL(); + } + + // check for input language even if it is done also in CheckDictionary... + // CangJie is only supported for HK Chinese variant + if ( iModel->DefaultInputMethodL() == ECangJie && + iModel->CheckCangjieSupportL( inputLang ) ) + { + MakeCangJieItemL(); + } + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::~CGSLangContainer +// Destructor. +// +// ----------------------------------------------------------------------------- +// +CGSLangContainer::~CGSLangContainer() + { + if( iModel ) + { + delete iModel; + } + if ( iDtLanguageItems ) + { + delete iDtLanguageItems; + } + if ( iDtLanguagesCodes ) + { + delete iDtLanguagesCodes; + } + if ( iWtLanguageItems ) + { + delete iWtLanguageItems; + } + if ( iWtLanguagesCodes ) + { + delete iWtLanguagesCodes; + } + if ( iAHNumberModeItems ) + { + delete iAHNumberModeItems; + } + if ( iHindiNumberModeItems ) + { + delete iHindiNumberModeItems; + } + if ( iInputMethodItems ) + { + delete iInputMethodItems; + } + if ( iOnOffItems ) + { + delete iOnOffItems; + } + if ( iOnOffNotAvailable ) + { + delete iOnOffNotAvailable; + } + if ( iListboxItemArray ) + { + delete iListboxItemArray; + } + if ( iJapPredTxtOnOffItems ) + { + delete iJapPredTxtOnOffItems; + } + if ( iKeypressTimeoutItems ) + { + delete iKeypressTimeoutItems; + } + if ( iJapQwertyCommaItems ) + { + delete iJapQwertyCommaItems; + } + if ( iJapQwertyPeriodItems ) + { + delete iJapQwertyPeriodItems; + } + if ( iJapQwertyWidthOfSpaceItems ) + { + delete iJapQwertyWidthOfSpaceItems; + } + if ( iChiCangJieItems ) + { + delete iChiCangJieItems; + } + delete iPredictiveModeItems; + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::CountComponentControls +// +// +// ----------------------------------------------------------------------------- +// +TInt CGSLangContainer::CountComponentControls() const + { + return 1; + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::ComponentControl +// +// +// ----------------------------------------------------------------------------- +// +CCoeControl* CGSLangContainer::ComponentControl( TInt /*aIndex*/ ) const + { + return iListBox; + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::UpdateListBoxL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::UpdateListBoxL( TInt aFeatureId ) + { + const TInt uiLang = iModel->LanguageL( CGSLangModel::EGSUiLanguage ); + switch ( aFeatureId ) + { + case EGSLangIdDTL: + { + MakeDTLItemL(); + if ( uiLang != 0 ) + { + iUpdateITL = ETrue; + } + } + break; + case EGSLangIdITL: + if ( !FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeITLItemL(); + } + break; + case EGSLangAHNumberMode: + if( iElaf ) + { + MakeAHNumberModeItemL(); + } + break; + case EGSLangHindiNumberMode: + if ( uiLang == ELangHindi || User::Language() == ELangHindi || + uiLang == ELangMarathi || User::Language() == ELangMarathi ) + { + MakeHindiNumberModeItemL(); + } + break; + case EGSLangIdT9L: + if ( !FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeT9LItemL(); +#ifdef RD_INTELLIGENT_TEXT_INPUT + MakePredictiveOptionsItemL(); +#else + MakePredictiveModeItemL(); +#endif + } + break; + case EGSLangIdEPT: + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeEngPredTxtItemL(); + } + break; + case EGSLangIdResetAtokDict: + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeResetATOKDictionaryItemL(); + } + break; + case EGSLangIdJPT: + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeJnpPredTxtItemL(); + } + break; + case EGSLangIdKT: + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { + MakeKeypressTimeoutItemL(); + } + break; + case EGSLangIdJQC: + case EGSLangIdJQP: + case EGSLangIdJQWSP: + if ( FeatureManager::FeatureSupported( KFeatureIdJapanese ) && + FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) ) + { + MakeJapQwertyItemL( aFeatureId ); + } + break; + case EGSLangIdDIM: + if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) ) + { + MakeDIMItemL(); + } + break; + case EGSLangIdCangJie: + //Check for support is not done here assuming it is checked + //before calling this method with this ID. + if ( iModel->DefaultInputMethodL() == ECangJie ) + { + MakeCangJieItemL(); + } + break; + case EGSLangIdPredictiveMode: + if ( !FeatureManager::FeatureSupported( KFeatureIdJapanese ) ) + { +#ifndef RD_INTELLIGENT_TEXT_INPUT + MakePredictiveModeItemL(); +#else + MakePredictiveOptionsItemL(); +#endif + } + default: + break; + } + + // Currently selected feature id + const TInt currentlySelectedFeature = iListboxItemArray->CurrentFeature(); + + //Make a list item visible based on feature ID + MakeListItemVisibleL( aFeatureId, currentlySelectedFeature ); + + // Update the listbox + iListBox->HandleItemAdditionL(); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeDTLItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeDTLItemL() + { + // Get the item from the listbox model and then dynamically set + // its caption + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + const TInt uiLanguage = iModel->LanguageL( CGSLangModel::EGSUiLanguage ); + TInt count = iDtLanguagesCodes->Count(); + + for ( TInt index=0; indexCount() > 0 ) + { + ptrBuffer = ( *iDtLanguageItems )[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdDTL, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdDTL, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeITLItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeITLItemL() + { + // Dynamic text not wanted in case we have dual language suppport +#ifndef FF_DUAL_LANGUAGE_SUPPORT + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + // Get Input Language code + const TInt inputLanguage = iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + const TInt uiLanguage = iModel->LanguageL( CGSLangModel::EGSUiLanguage ); + TInt count = iWtLanguagesCodes->Count(); + for ( TInt index=0; indexSetLanguageL( CGSLangModel::EGSInputLanguage, + ( *iWtLanguagesCodes )[index] ); + ptrBuffer = ( *iWtLanguageItems )[index]; + break; + } + } + } + iUpdateITL = EFalse; + if ( !ptrBuffer.Length() && iWtLanguageItems->Count() > 0 ) + { + ptrBuffer = ( *iWtLanguageItems )[0]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdITL, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); +#endif + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdITL, + CGSListBoxItemTextArray::EVisible ); + + //Set visibility to the input method item, according to input language + MakeListItemVisibleL( EGSLangIdDIM, EGSLangIdITL ); + MakeListItemVisibleL( EGSLangIdCangJie, EGSLangIdDIM ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeT9LItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeT9LItemL() + { + const TInt mode = iModel->PredictiveOnOff( CGSLangModel::EGSLangOther ); + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + //When input language is Chinese, it is check if English is + //supporting predictive + TInt langCode = iModel->LanguageL( CGSLangModel::EGSInputLanguage); + TBool checkEngine = EFalse; + if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) ) + { + langCode = ELangEnglish; + checkEngine = ETrue; + } + + if ( !iModel->CheckDictionaryFromPtiL( + langCode ,checkEngine ) ) + { + ptrBuffer = iOnOffNotAvailable->Des(); + } + else + { +#ifdef RD_INTELLIGENT_TEXT_INPUT + if(!iModel->DeviceHasMultipleKeyboardsL()) +#endif + { + ptrBuffer = ( *iOnOffItems )[1-mode]; + } + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdT9L, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdT9L, + CGSListBoxItemTextArray::EVisible ); + if( !mode ) + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveMode, + CGSListBoxItemTextArray::EInvisible ); + } + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::SetT9ItemVisibilityL +// +// Sets predictive text item's visibility +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::SetT9ItemVisibilityL( TBool aVisibility ) + { + if( aVisibility ) + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdT9L, + CGSListBoxItemTextArray::EVisible ); + } + else + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdT9L, + CGSListBoxItemTextArray::EInvisible ); + } + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeEngPredTxtItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeEngPredTxtItemL() + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + const TInt mode = iModel->PredictiveOnOff( CGSLangModel::EGSLangOther ); + if ( iModel->CheckDictionaryFromPtiL( + iModel->LanguageL( CGSLangModel::EGSInputLanguage ) ) ) + { + ptrBuffer = ( *iOnOffItems )[1-mode]; + } + else + { + ptrBuffer = iOnOffNotAvailable->Des(); + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdEPT, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdEPT, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeResetATOKDictionaryItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeResetATOKDictionaryItemL() + { + iListboxItemArray->SetItemVisibilityL( + EGSLangIdResetAtokDict, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeJnpPredTxtItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeJnpPredTxtItemL() + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + const TInt mode = iModel->PredictiveOnOff( CGSLangModel::EGSLangJapanese ); + if ( iModel->CheckDictionaryFromPtiL( + iModel->LanguageL( CGSLangModel::EGSInputLanguage ) ) ) + { + ptrBuffer = ( *iJapPredTxtOnOffItems )[1-mode]; + } + else + { + ptrBuffer = iOnOffNotAvailable->Des(); + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdJPT, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdJPT, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeAHNumberModeItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeAHNumberModeItemL() + { + const TInt defaultNumberModeIndex = + iModel->DefaultNumberMode( EGSNbrModeTypeArabic ); + + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + ptrBuffer = ( *iAHNumberModeItems )[defaultNumberModeIndex]; + + // Set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangAHNumberMode, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangAHNumberMode, + CGSListBoxItemTextArray::EVisible ); + } + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeHindiNumberModeItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeHindiNumberModeItemL() + { + const TInt defaultNumberModeIndex = + iModel->DefaultNumberMode( EGSNbrModeTypeIndic ); + + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + ptrBuffer = ( *iHindiNumberModeItems )[defaultNumberModeIndex]; + + // Set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangHindiNumberMode, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangHindiNumberMode, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeDIMItemL +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeDIMItemL() + { + //fetch the current value from iModel: + // current item is the Hexadecimal value of Input method code from CenRep + TInt lang = iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + TInt resId = 0; + + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) + || (FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput) && + FeatureManager::FeatureSupported(KFeatureIdChinese))) + { + resId = R_DIM_QWERTY_SETTING_PAGE_LBX; + } + else + { + resId = R_DIM_SETTING_PAGE_LBX; + } + + TInt keyboardLayout = 0; + RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); + TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; + + TBool isCangjieSupported = EFalse; + + CGSRadioButtonSettingPageItemTextArray* items = + CGSRadioButtonSettingPageItemTextArray::NewL( resId, *iCoeEnv, NULL ); + + + CleanupStack::PushL(items); + + switch( lang ) + { + case ELangPrcChinese: + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) + || FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) + { + items->SetItemVisibilityL( EGSLangSPIdQwPinyin, + CGSListBoxItemTextArray::EVisible ); + } + else + { + items->SetItemVisibilityL( EGSLangSPIdPinyin, + CGSListBoxItemTextArray::EVisible ); + } + break; + case ELangHongKongChinese: + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) + || FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) + { + if (!(layout == EPtiKeyboard12Key || layout == EPtiKeyboardHalfQwerty)) + { + isCangjieSupported = ETrue; + } + + if ( iModel->CheckCangjieSupportL( ELangHongKongChinese ) && isCangjieSupported ) + { + items->SetItemVisibilityL( EGSLangSPIdQwCangJie, + CGSListBoxItemTextArray::EVisible ); + } + } + break; + case ELangTaiwanChinese: + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) + || FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput)) + { + items->SetItemVisibilityL( EGSLangSPIdQwZhuyin, + CGSListBoxItemTextArray::EVisible ); + } + else + { + items->SetItemVisibilityL( EGSLangSPIdZhuyin, + CGSListBoxItemTextArray::EVisible ); + } + break; + default: + break; + } + + TInt oldInputMethodCode =iModel->DefaultInputMethodL(); + TInt currentItem = 0; + + // Construct a map for PRC,HK and TW for Input Method codes + struct TMapArray { TInt iInputMethodCode; TInt index0, index1, index2; }; + //Note: The values 0, 1, 2, 3 have been used to align with the setting page indices + + TMapArray qwertyMethodMap_Cangjie[] = { + // PRC, HK, TW + { EPinyin , 0, -1, -1 }, + { EZhuyin ,-1, -1, 0 }, + { EStroke , 1, 0, 1 }, + { ECangJie ,-1, 1, -1 }, + { ELatin , 2, 2, 2 } + }; + + TMapArray qwertyMethodMap_NoCangjie[] = { + // PRC, HK, TW + { EPinyin , 0, -1, -1 }, + { EZhuyin ,-1, -1, 0 }, + { EStroke , 1, 0, 1 }, + { ECangJie ,-1, -1, -1 }, + { ELatin , 2, 1, 2 } + }; + + TMapArray itutMethodMap[] = { + // PRC, HK, TW + { EPinyin , 0, -1, -1 }, + { EZhuyin ,-1, -1, 0 }, + { EStroke , 1, 0, 1 }, + { ELatinText , 2, 1, 2 }, + { ELatinUpper , 3, 2, 3 }, + { ELatinLower , 4, 3, 4 } + }; + + TInt itemsNum = KGSMapSize; + TMapArray* methodMap = NULL; + if ( FeatureManager::FeatureSupported( KFeatureIdQwertyInput ) + || (FeatureManager::FeatureSupported(KFeatureIdVirtualKeyboardInput) && + FeatureManager::FeatureSupported(KFeatureIdChinese))) + { + if ( isCangjieSupported ) + { + methodMap = qwertyMethodMap_Cangjie; + itemsNum = sizeof( qwertyMethodMap_Cangjie ) / sizeof( TMapArray ); + } + else + { + methodMap = qwertyMethodMap_NoCangjie; + itemsNum = sizeof( qwertyMethodMap_NoCangjie ) / sizeof( TMapArray ); + } + } + else + { + methodMap = itutMethodMap; + itemsNum = sizeof( itutMethodMap ) / sizeof( TMapArray ); + } + for(TInt i = 0; i < itemsNum && i < KGSMapSize; i++) + { + if (oldInputMethodCode == methodMap[i].iInputMethodCode) + { + TInt val = 0; + if ( lang == ELangPrcChinese ) { val = methodMap[i].index0; } + if ( lang == ELangHongKongChinese ) { val = methodMap[i].index1; } + if ( lang == ELangTaiwanChinese ) { val = methodMap[i].index2; } + currentItem = val; + break; + } + } + if ( currentItem == -1 ) + { + currentItem = 0; + } + + TInt featureId = items->FeatureIdByIndex( currentItem ); + HBufC* dynamicText = NULL; + dynamicText = CGSItemTextArray::GetItemCaptionFromFeatureIdLC( + resId, + featureId, + *iCoeEnv ); + + iListboxItemArray->SetDynamicTextL( EGSLangIdDIM, *dynamicText ); + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdDIM, + CGSListBoxItemTextArray::EVisible ); + + CleanupStack::PopAndDestroy( dynamicText ); + CleanupStack::PopAndDestroy( items ); + } + + +// --------------------------------------------------------------------------- +// CGSLangContainer::MakeKeypressTimeoutItemL() +// +// Creates the Keypress Timeout item +// --------------------------------------------------------------------------- +// +void CGSLangContainer::MakeKeypressTimeoutItemL() + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + // Get current data + const TInt currentTime = iModel->KeypressTimeout(); + TInt currentIndex; + if ( currentTime == 0 ) + { + currentIndex = EGSKeypressTimeoutItemNone; + } + else if ( currentTime > KGSMultiTapTimerDefault ) + { + currentIndex = EGSKeypressTimeoutItemLong; + } + else if ( currentTime < KGSMultiTapTimerDefault ) + { + currentIndex = EGSKeypressTimeoutItemShort; + } + else + { + currentIndex = EGSKeypressTimeoutItemMedium; + } + ptrBuffer = ( *iKeypressTimeoutItems )[ currentIndex ]; + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdKT, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdKT, + CGSListBoxItemTextArray::EVisible ); + } + +// --------------------------------------------------------------------------- +// CGSLangContainer::MakeJapQwertyItemL() +// +// Creates the Japanese Qwerty setting item +// --------------------------------------------------------------------------- +// +void CGSLangContainer::MakeJapQwertyItemL( TInt aFeatureId ) + { + TGSJapQwertyFlags flag = EGSJapQwertyFlagNone; + CDesCArrayFlat* arrary = NULL; + + switch ( aFeatureId ) + { + case EGSLangIdJQC: + flag = EGSJapQwertyFlagComma; + arrary = iJapQwertyCommaItems; + break; + case EGSLangIdJQP: + flag = EGSJapQwertyFlagPeriod; + arrary = iJapQwertyPeriodItems; + break; + case EGSLangIdJQWSP: + flag = EGSJapQwertyFlagSpaceFullWidth; + arrary = iJapQwertyWidthOfSpaceItems; + break; + default: + break; + } + + if ( flag != EGSJapQwertyFlagNone ) + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + const TBool currentValue = iModel->JapanQwertyFlags( flag ); + // If current value is ETrue, display index is 0. + TInt dispIndex = ( currentValue )? 0 : 1; + // get current index string + ptrBuffer = ( *arrary )[ dispIndex ]; + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( aFeatureId, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( aFeatureId, + CGSListBoxItemTextArray::EVisible ); + } + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::CurrentFeatureId +// +// +// ----------------------------------------------------------------------------- +// +TInt CGSLangContainer::CurrentFeatureId() const + { + return iListboxItemArray->CurrentFeature( ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::GetHelpContext +// +// +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::GetHelpContext( TCoeHelpContext& aContext ) const + { + aContext.iMajor = KUidGS; + aContext.iContext = HLP_GS_LANGUAGE_PLUGIN; + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::Model +// +// +// ----------------------------------------------------------------------------- +// +CGSLangModel* CGSLangContainer::Model() + { + return iModel; + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::NumberModeItems +// +// +// ----------------------------------------------------------------------------- +// +const MDesCArray* CGSLangContainer::NumberModeItems( TInt aNbrModeType ) + { + if ( aNbrModeType == EGSNbrModeTypeArabic ) + { + return iAHNumberModeItems; + } + else + { + return iHindiNumberModeItems; + } + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeListItemVisibleL +// +// Make a list item visible, when needed +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeListItemVisibleL( TInt aFeatureId, + TInt aCurrentlySelectedFeature ) + { + switch ( aFeatureId ) + { + case EGSLangAHNumberMode: + // UI language was changed + if ( iElaf && aCurrentlySelectedFeature == EGSLangIdDTL ) + { + CGSListBoxItemTextArray::TVisibility digitTypeVisibility = + CGSListBoxItemTextArray::EInvisible; + TInt uiLang = iModel->LanguageL( CGSLangModel::EGSUiLanguage ); + if ( ( uiLang == ELangArabic && User::Language() == ELangArabic ) + || ( uiLang == ELangUrdu && User::Language() == ELangUrdu ) || + ( uiLang == ELangFarsi && User::Language() == ELangFarsi ) ) + { + digitTypeVisibility = CGSListBoxItemTextArray::EVisible; + } + + // Set the visibility + iListboxItemArray->SetItemVisibilityL( aFeatureId, + digitTypeVisibility ); + } + break; + case EGSLangHindiNumberMode: + // UI language was changed + if ( aCurrentlySelectedFeature == EGSLangIdDTL ) + { + CGSListBoxItemTextArray::TVisibility digitTypeVisibility = + CGSListBoxItemTextArray::EInvisible; + if ( ( iModel->LanguageL( CGSLangModel::EGSUiLanguage ) == + ELangHindi && User::Language() == ELangHindi ) || + ( iModel->LanguageL( CGSLangModel::EGSUiLanguage ) == + ELangMarathi && User::Language() == ELangMarathi ) ) + { + digitTypeVisibility = CGSListBoxItemTextArray::EVisible; + } + + // Set the visibility + iListboxItemArray->SetItemVisibilityL( aFeatureId, + digitTypeVisibility ); + } + break; + case EGSLangIdDIM: + // Input language was changed + if( FeatureManager::FeatureSupported( KFeatureIdChinese ) && !iElaf ) + { + if ( aCurrentlySelectedFeature == EGSLangIdITL ) + { + CGSListBoxItemTextArray::TVisibility + defInputMethodVisibility = CGSListBoxItemTextArray::EVisible; + TInt inputLanguage = + iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + if ( inputLanguage != ELangPrcChinese && + inputLanguage != ELangHongKongChinese && + inputLanguage != ELangTaiwanChinese ) + { + defInputMethodVisibility = + CGSListBoxItemTextArray::EInvisible; + } + + // Set the visibility + iListboxItemArray->SetItemVisibilityL( aFeatureId, + defInputMethodVisibility ); + } + } + break; + case EGSLangIdCangJie: + // Default Input Language/Method was changed + if ( aCurrentlySelectedFeature == EGSLangIdDIM ) + { + CGSListBoxItemTextArray::TVisibility + cangJieItemVisibility = CGSListBoxItemTextArray::EInvisible; + TInt defaultInputMethod = + iModel->DefaultInputMethodL(); + TInt inputLanguage = iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + + if ( defaultInputMethod == ECangJie && + iModel->CheckCangjieSupportL( inputLanguage ) ) + { + cangJieItemVisibility = CGSListBoxItemTextArray::EVisible; + } + + // Set the visibility + iListboxItemArray->SetItemVisibilityL( aFeatureId, + cangJieItemVisibility ); + } + break; + default: + break; + } + + } + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakeCangJieItemL +// +// Should be visible only if Input language is Chinese HK and this supports +// CangJie input mode. Checked from PtiEngine. +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakeCangJieItemL() + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + const TInt selectedItem = iModel->ChiCangJieInputL(); + const TInt inputLang = iModel->LanguageL( CGSLangModel::EGSInputLanguage ); + if ( iModel->CheckDictionaryFromPtiL( inputLang ) ) + { + ptrBuffer = ( *iChiCangJieItems )[ selectedItem ]; + } + + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdCangJie, ptrBuffer ); + CleanupStack::PopAndDestroy( dynamicText ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdCangJie, + CGSListBoxItemTextArray::EVisible ); + } + + +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakePredictiveModeItemL +// Towards Word Autocompletion Req from 4.0 +// Create Predictvie mode setting values +// 0 ---> Normal +// 1 ---> Autocompletion +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakePredictiveModeItemL() + { + if ( iModel->PredictiveOnOff( CGSLangModel::EGSLangOther ) ) + { + HBufC* dynamicText = HBufC::NewLC( KGSBufSize128 ); + TPtr ptrBuffer ( dynamicText->Des() ); + + const TInt selectedItem = iModel->PredictiveModeL(); + if ( iModel->CheckDictionaryFromPtiL( + iModel->LanguageL( CGSLangModel::EGSInputLanguage ) ) ) + { + ptrBuffer = ( *iPredictiveModeItems )[ selectedItem ]; + } + else + { + ptrBuffer = iOnOffNotAvailable->Des(); + } + + #ifndef RD_SCALABLE_UI_V2 + if( iModel->CheckAutoWordCompletionSupportL() ) + { + // Finally, set the dynamic text + iListboxItemArray->SetDynamicTextL( EGSLangIdPredictiveMode, ptrBuffer ); + + // And add to listbox + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveMode, + CGSListBoxItemTextArray::EVisible ); + } + #endif // RD_SCALABLE_UI_V2 + + CleanupStack::PopAndDestroy( dynamicText ); + + } + } +#ifdef RD_INTELLIGENT_TEXT_INPUT +// ----------------------------------------------------------------------------- +// CGSLangContainer::MakePredictiveSettingListL +// ----------------------------------------------------------------------------- +// +void CGSLangContainer::MakePredictiveOptionsItemL() + { + // Check whether the language supports prediction or not + // if not disable input options from language menu + TInt keyboardLayout = 0; + RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); + TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; + TBool isPredictionSupport = EFalse; + switch(layout) + { + case EPtiKeyboardHalfQwerty: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEngineHalfQwertyPredictive); + break; + case EPtiKeyboardQwerty4x12: + case EPtiKeyboardQwerty4x10: + case EPtiKeyboardQwerty3x11: + case EPtiKeyboardCustomQwerty: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEngineQwertyPredictive); + break; + case EPtiKeyboardNone: + case EPtiKeyboard12Key: +#ifndef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEnginePredictive); +#endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ + break; + default: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEnginePredictive); + break; + } + if (isPredictionSupport == EFalse) + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveOptions, + CGSListBoxItemTextArray::EInvisible ); + } + else + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveOptions, + CGSListBoxItemTextArray::EVisible ); + } + } + +void CGSLangContainer::HandleResourceChange( TInt aType ) + { + CGSBaseContainer::HandleResourceChange(aType); + TInt keyboardLayout = 0; + RProperty::Get(KCRUidAvkon, KAknKeyBoardLayout, keyboardLayout); + TPtiKeyboardType layout = (TPtiKeyboardType)keyboardLayout; + TBool isPredictionSupport = EFalse; + switch(layout) + { + case EPtiKeyboardHalfQwerty: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEngineHalfQwertyPredictive); + break; + case EPtiKeyboardQwerty4x12: + case EPtiKeyboardQwerty4x10: + case EPtiKeyboardQwerty3x11: + case EPtiKeyboardCustomQwerty: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEngineQwertyPredictive); + break; + case EPtiKeyboardNone: + case EPtiKeyboard12Key: + // Commenting out the below function call as ITI is not supported for Touch Input. + #ifdef __ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ + //isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEnginePredictive); + #else + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEnginePredictive); + #endif //__ITI_VIRTUAL_TOUCH_FIRST_GENERATION_SUPPORT__ + break; + default: + isPredictionSupport = iModel->CheckT9FromPtiLForPredictionL((TPtiEngineInputMode)EPtiEnginePredictive); + break; + } + if (isPredictionSupport == EFalse) + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveOptions, + CGSListBoxItemTextArray::EInvisible ); + } + else + { + iListboxItemArray->SetItemVisibilityL( EGSLangIdPredictiveOptions, + CGSListBoxItemTextArray::EVisible ); + } + iListBox->HandleItemAdditionL(); + MakeT9LItemL(); + } +#endif +// End of File