textinput/GSLangPlugin/src/GSLangContainer.cpp
changeset 0 eb1f2e154e89
child 3 f5a1e66df979
--- /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    <gslistbox.h> // CGSListBoxItemTextArray
+#include    <gscommon.hrh>
+#include    <GSLangPluginRsc.rsg>
+
+#include    <bldvariant.hrh>
+
+#include    <aknappui.h>
+#include    <AknFepGlobalEnums.h>
+#include    <AknFepInternalCRKeys.h>
+#include    <aknlists.h>
+#include    <akntitle.h> 
+//#include    <ApProtHandler.h> // CApProtHandler
+//#include    <aputils.h> // CApUtils
+#include    <commdb.h> // CCommsDatabase
+//#include    <csxhelp/cp.hlp.hrh>
+#include    <gsfwviewuids.h>
+#include    <eikspane.h>
+#include    <featmgr.h>
+#include    <syslangutil.h>
+#include    <AknFepInternalCRKeys.h>
+#include    <AvkonInternalCRKeys.h>
+
+// 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<TInt>* 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<TInt>(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<TInt>(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; index<count; ++index )
+        {
+        if ( ( *iDtLanguagesCodes )[ index ] == uiLanguage )
+            {
+            ptrBuffer = ( *iDtLanguageItems )[ index ];
+            break;
+            }
+        }
+
+    if ( !ptrBuffer.Length() && iDtLanguageItems->Count() > 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; index<count; ++index )
+        {
+        if ( !iUpdateITL )
+            {
+            if ( ( *iWtLanguagesCodes )[index] == inputLanguage )
+                {
+                ptrBuffer = ( *iWtLanguageItems )[index];
+                break;
+                }
+            }
+        else
+            {
+            if ( ( *iWtLanguagesCodes )[index] == uiLanguage &&
+                 uiLanguage != 0 ) // 'Automatic' = 0
+                {
+                iModel->SetLanguageL( 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