textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp
branchRCL_3
changeset 21 ecbabf52600f
child 22 bd83ceabce89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenericitut/src/peninputgenericitutdatamgr.cpp	Wed Sep 01 12:23:33 2010 +0100
@@ -0,0 +1,2342 @@
+/*
+* Copyright (c) 2002-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:  drop-down list control
+*
+*/
+
+
+#include <PtiEngine.h>
+#include <coemain.h>
+#include <AknUtils.h>
+#include <peninputgeneralitutnew.rsg>
+#include <peninputitutconfig_chinese.rsg>
+#include <peninputitutconfig_latin.rsg>
+#include <peninputitutconfig_korean.rsg>
+#include <peninputitutconfig_hebrew.rsg>
+#include <peninputitutconfig_farsi.rsg>
+#include <AknFepGlobalEnums.h>
+#include <eikon.hrh>
+#include <bautils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <peninputlayoutmultilineicf.h>
+#include <AknSettingCache.h>
+#include <AknFepInternalCRKeys.h>
+#include <centralrepository.h>
+#include <featmgr.h> 
+
+#include "peninputgenericitutdatamgr.h"
+#include "peninputgenericitutlayoutcontext.h"
+#include "peninputgenericitutconverter.h"
+#include "peninputgenericitutcustomization.h"
+#include "peninputgenericitutwindowmanager.h"
+
+#define LAF_MODIFY 1
+_LIT(KItutCommonResFile, "z:\\resource\\plugins\\peninputgeneralitutnew.rsc");
+_LIT(KConfigResourceFile, 
+     "z:\\resource\\plugins\\peninputitutconfig_");
+_LIT(KResourceFileExtName, ".rsc");
+
+_LIT(KAvkonResourceFile, "z:\\resource\\avkon.rsc");
+     
+const TInt KOnePageCandidateCount = 40;
+const TInt KMaxPredictCandCnt = 250;
+const TInt KInvalidResId = -1;
+const TInt KInvalidImMode = -1;
+const TInt KInvalidIndex = -1;
+const TUint16 KPlusChar = '+';
+
+// For virtual ITUT candidate list in landscape mode. No reason
+const TInt KCandsAdjustment = 7;
+
+
+CGenericItutDataMgr* CGenericItutDataMgr::NewL(MItutLayoutContext* aLayoutContext, 
+                                               CPtiEngine* aPtiEngine)
+    {
+    CGenericItutDataMgr* self = new (ELeave) CGenericItutDataMgr(aLayoutContext, aPtiEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);//self
+    return self;
+    }
+
+void CGenericItutDataMgr::ClearChnCandidates(TInt aCmd)
+    {
+    switch (aCmd)
+        {
+        case EItutCandidates:
+            {
+            iCandidates.ResetAndDestroy();
+            iCandidates.Close();
+            }
+            break;
+        case EItutPuncCandidates:
+            {
+            iPuncCandidates.ResetAndDestroy();
+            iPuncCandidates.Close();
+            }
+            break;
+        default:
+            break;
+        }
+    }
+
+CGenericItutDataMgr::~CGenericItutDataMgr()
+    {
+    iSubscriberList.Close();  
+
+    iMenuItemList.ResetAndDestroy();
+    
+    CCoeEnv::Static()->DeleteResourceFile(iAvkonResId);
+        
+    CCoeEnv::Static()->DeleteResourceFile(iCommonResId);
+    
+    // Remove the resource file of current input language
+    if ( iConfigResId )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iConfigResId );
+        }
+    
+    // Remove the resource file of some special controls
+    if ( iSpecialResId )
+        {
+        CCoeEnv::Static()->DeleteResourceFile( iSpecialResId );
+        }
+
+    ClearChnCandidates(EItutCandidates);
+    ClearChnCandidates(EItutPuncCandidates);
+
+    iKeypadCellRects.Close();
+    iKeypadCellRectsCn.Close();
+    iKeypadCellRectsQuery.Close(); 
+    iKeypadCellRectsForPrtWest.Close();
+    delete iNumericKeymapData;
+    }
+
+void CGenericItutDataMgr::ConstructL()
+    {
+    // initialize layout info of controls and layout
+    ReadLafInfo();
+
+    TFileName resourceCommonName(KItutCommonResFile);
+    CCoeEnv* coeEnv = CCoeEnv::Static();
+    BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceCommonName);
+    iCommonResId = coeEnv->AddResourceFileL(resourceCommonName);
+    
+    TFileName resourceAvkonName(KAvkonResourceFile);
+    BaflUtils::NearestLanguageFile(coeEnv->FsSession(), resourceAvkonName);
+    iAvkonResId = coeEnv->AddResourceFileL(resourceAvkonName);
+    
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AVKON_TOUCH_INDICATOR_EDIT_MODE_MENU);
+        
+    const TInt count=reader.ReadInt16();
+    for ( TInt ii=0; ii<count; ++ii )
+        {
+        TMenuItem* item = new (ELeave) TMenuItem();
+        CleanupStack::PushL( item );
+        item->iCommand = reader.ReadInt32();
+        reader.ReadInt32();
+        reader.ReadInt32();
+        item->iText =  reader.ReadTPtrC();
+        reader.ReadTPtrC();
+        reader.ReadTPtrC();
+        reader.ReadInt16();
+        reader.ReadInt16();
+        CleanupStack::Pop(); // pop first, since additem pushes again
+        iMenuItemList.Append( item );
+        reader.ReadInt32(); // extension link
+        }        
+    CleanupStack::PopAndDestroy(); //reader
+
+    // There are some special controls in Chinese and Korean VITUT,
+    // and these controls are hidden when changing to other input language, 
+    // so related resource file should be in control environment at all times.
+    // Otherwise crash happens when reading resource for them sometime. 
+    // For example: If writing language is Chinese, enters spell mode,
+    // then switches theme, crash happens. 
+    if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) ||
+            FeatureManager::FeatureSupported( KFeatureIdKorean ) )
+        {
+        TFileName  resourceFilename( KConfigResourceFile ) ;
+        if ( FeatureManager::FeatureSupported( KFeatureIdChinese ) )
+            {
+            // Chinese variant
+            resourceFilename.Append( ResFileExtByScriptIdx( EChnExt ) );
+            }
+        else
+            {
+            // Korean variant
+            resourceFilename.Append( ResFileExtByScriptIdx( EHangulExt ) );
+            }
+        resourceFilename.Append(KResourceFileExtName);
+        
+        BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceFilename );
+        iSpecialResId = coeEnv->AddResourceFileL( resourceFilename );        
+        }
+    }
+
+CGenericItutDataMgr::TMenuItem* CGenericItutDataMgr::GetMenuItem(TInt aCommand)
+    {
+    for (TInt i=0;i<iMenuItemList.Count();i++)
+        {
+        if ( iMenuItemList[i]->iCommand == aCommand )
+            return iMenuItemList[i];
+        }
+    return NULL;
+    }
+    
+void CGenericItutDataMgr::AddSubscriber(MItutPropertySubscriber* aSubscriber)
+    {
+    if (aSubscriber)
+        {
+        const TInt index = iSubscriberList.Find(aSubscriber);
+
+        if (index == KErrNotFound)
+            {
+            iSubscriberList.Append(aSubscriber);
+            }
+        }
+    }
+
+void CGenericItutDataMgr::ReadLafInfoForPrtWest()
+	{
+	// Screen
+	TRect rect;
+
+	rect = AknLayoutScalable_Avkon::application_window(0).LayoutLine().Rect();
+
+	TAknWindowLineLayout mainWnd, bottomWnd, bottomPane;
+	TAknLayoutRect mainWndRect, bottomwndtrect, bottompanerect;
+
+	mainWnd = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
+	mainWndRect.LayoutRect(rect, mainWnd);
+	
+	bottomWnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(0).LayoutLine();    
+	bottomwndtrect.LayoutRect(mainWndRect.Rect(), bottomWnd);
+
+	bottomPane = AknLayoutScalable_Avkon::ituss_keypad_pane(0).LayoutLine();
+	bottompanerect.LayoutRect(bottomwndtrect.Rect(), bottomPane);   
+	
+	iLayoutRectForPrtWest = mainWndRect.Rect();
+	iLayoutOffsetForPrtWest = mainWndRect.Rect().iTl;
+
+	// ICF
+	TAknWindowLineLayout icflayout, icflayoutbg, icflayoutpane;
+	TAknLayoutRect icfRect, icfRectBg, icfRectPane;
+	
+	icflayoutpane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(0).LayoutLine();
+	icfRectPane.LayoutRect( mainWndRect.Rect(), icflayoutpane );
+	
+	icflayoutbg = AknLayoutScalable_Avkon::bg_icf_pane_cp01(0).LayoutLine();
+	icfRectBg.LayoutRect( icfRectPane.Rect(), icflayoutbg );
+	
+	icflayout = AknLayoutScalable_Avkon::vtchi_icf_list_pane(0).LayoutLine();
+	icfRect.LayoutRect( icfRectBg.Rect(), icflayout );
+	
+	iIcfRectForPrtWest = icfRect.Rect();
+	
+	// icf indicator
+	TAknWindowLineLayout icfIndiPaneWithText, icfIndiPaneWithoutText, 
+		indiIconWithText, indiIconWithoutText;
+	TAknLayoutRect icfIndiPaneRectWithText, icfIndiPaneRectWithoutText, 
+		indiIconRectWithText, indiIconRectWithoutText;
+	TAknTextLineLayout indiTextLayout;
+	
+	icfIndiPaneWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane(1).LayoutLine();
+	icfIndiPaneRectWithText.LayoutRect(icfRect.Rect(), icfIndiPaneWithText);
+	iIndiPaneRectWithTextForPrtWest = icfIndiPaneRectWithText.Rect();
+	
+	icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+	icfIndiPaneRectWithoutText.LayoutRect(icfRect.Rect(), icfIndiPaneWithoutText);
+	iIndiPaneRectWithoutTextForPrtWest = icfIndiPaneRectWithoutText.Rect();
+	
+	indiIconWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane_g2(1).LayoutLine();
+	indiIconRectWithText.LayoutRect( icfIndiPaneRectWithText.Rect(), indiIconWithText );
+	iIndiIconRectWithTextForPrtWest = indiIconRectWithText.Rect();
+	
+	indiIconWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane_g2(0).LayoutLine();
+	indiIconRectWithoutText.LayoutRect( 
+			icfIndiPaneRectWithoutText.Rect(), indiIconWithoutText );
+	iIndiIconRectWithoutTextForPrtWest = indiIconRectWithoutText.Rect();
+	
+	indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
+	iIndiTextForPrtWest = indiTextLayout;
+	
+	// icf text
+	TAknTextLineLayout icflefttext, icflefttext1; 
+	icflefttext = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 0).LayoutLine();
+	icflefttext1 = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 1).LayoutLine();
+
+	iIcfTextAlignmentForPrtWest = icflefttext.iJ;
+	iIcfTextLeftMarginForPrtWest = icflefttext.il;
+	//iIcfTextRightMarginForPrtWest = icflefttext.ir;
+	iIcfTextRightMarginForPrtWest = iIcfTextLeftMarginForPrtWest;
+	    
+	TAknLayoutText ctxt, ctxt1;
+	ctxt.LayoutText( icfRect.Rect(), icflefttext );
+	ctxt1.LayoutText( icfRect.Rect(), icflefttext1 );
+	    
+	iIcfTextTopMarginForPrtWest = ctxt.TextRect().iTl.iY - icfRect.Rect().iTl.iY;
+	iIcfTextLineSpaceMarginForPrtWest = ctxt1.TextRect().iTl.iY - ctxt.TextRect().iBr.iY;
+	iIcfTextHeightForPrtWest = ctxt.TextRect().Height();
+	
+	TInt maxRow = ( iIcfRectForPrtWest.Height() - iIcfTextTopMarginForPrtWest ) 
+        / ( iIcfTextHeightForPrtWest + iIcfTextLineSpaceMarginForPrtWest );
+	
+	iIcfTextBottomMarginForPrtWest = 
+        iIcfRectForPrtWest.Height() - ( iIcfTextHeightForPrtWest + iIcfTextLineSpaceMarginForPrtWest ) 
+        * maxRow - iIcfTextTopMarginForPrtWest;
+	    
+	iIcfFontForPrtWest = const_cast<CFont*>(AknLayoutUtils::FontFromId(icflefttext.iFont, NULL));	
+	
+	// Keypad
+	TAknWindowLineLayout itucell, ituinnercell;
+	TAknLayoutRect itucellrect, ituinnercellrect;
+   
+	iKeypadCellRectsForPrtWest.Reset();
+
+	itucell = AknLayoutScalable_Avkon::cell_ituss_key_pane(0).LayoutLine();           
+	itucellrect.LayoutRect(bottompanerect.Rect(), itucell);
+	ituinnercell = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(1).LayoutLine();
+	
+	iKeypadRectForPrtWest = bottompanerect.Rect();
+	iKeypadRectForPrtWest.SetHeight(itucellrect.Rect().Height() * 4);
+	iKeypadRectForPrtWest.Move(-iLayoutOffsetForPrtWest); 
+	
+	TRect cellrect = itucellrect.Rect();
+	cellrect.Move(-iLayoutOffsetForPrtWest);
+	cellrect.Move(-iKeypadRectForPrtWest.iTl);
+	   
+	// keypad is 4 rows, 3 cols
+	for (TInt i = 0; i < 4; i++)
+		{
+		for (TInt j = 0; j < 3; j++)
+			{
+			TRect keyrect = cellrect;
+			keyrect.Move(itucellrect.Rect().Width() * j, itucellrect.Rect().Height() * i);
+
+			ituinnercellrect.LayoutRect(keyrect, ituinnercell);
+			iKeypadCellRectsForPrtWest.Append(ituinnercellrect.Rect());
+			
+			// read shift icon rect
+			if( i == 3 &&  j == 2 )
+				{
+				TAknWindowLineLayout shiftIcon =  AknLayoutScalable_Avkon::
+								cell_ituss_key_pane_g2( 0 ).LayoutLine();
+				TAknLayoutRect shiftIconRect;
+				shiftIconRect.LayoutRect( keyrect, shiftIcon );                
+				iShiftIconRectForPrtWest = shiftIconRect.Rect();          
+				}    
+
+			// read star icon rect
+			if( i == 3 &&  j == 0 )
+				{
+				TAknWindowLineLayout starIcon =  AknLayoutScalable_Avkon::
+								cell_ituss_key_pane_g2( 0 ).LayoutLine();
+				TAknLayoutRect starIconRect;
+				starIconRect.LayoutRect( keyrect, starIcon );                
+				iStarIconRectForPrtWest = starIconRect.Rect();          
+				}			
+			
+			}
+		} 
+	 
+
+	// Num text row
+	iVkBigNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(4).LayoutLine(); 
+	iVkNumTextForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t1(1).LayoutLine();
+	
+	// Key text row 1                               
+	iVkAlphaText1ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t2(1).LayoutLine();
+	// Key text row 3
+	iVkAlphaText3ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t4(1).LayoutLine();
+	// Key text row 2                               
+	iVkAlphaText2ForPrtWest = AknLayoutScalable_Avkon::cell_ituss_key_t3(1).LayoutLine();
+	
+	// Plus for Numberic Only keypad
+	iVkTextPlusForNumbericOnlyForPrtWest = 
+			AknLayoutScalable_Avkon::cell_ituss_key_t5(0).LayoutLine();
+	
+	// close button
+	TAknWindowLineLayout funcbtn, funcbtnbg, funcbtninner;
+	TAknLayoutRect funcrect, funcbgrect, funcinnerrect, arrowleftinnerrect, arrowrightinnerrect;
+	TAknLayoutRect optioninnerrect, backspaceinnerrect;
+	
+	funcbtn = AknLayoutScalable_Avkon::cell_ituss_key_pane(1).LayoutLine();
+	funcrect.LayoutRect(bottompanerect.Rect(), funcbtn);
+	
+	funcbtnbg = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(1).LayoutLine();
+	funcbgrect.LayoutRect(funcrect.Rect(), funcbtnbg);
+	
+	funcbtninner = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(0).LayoutLine();
+	funcinnerrect.LayoutRect(funcrect.Rect(), funcbtninner);
+	
+	TInt btnWidth = funcrect.Rect().Width();
+	// close button
+	iCloseRectForPrtWest = funcbgrect.Rect();
+	iCloseRectForPrtWest.Move(0, funcrect.Rect().Height() * 4);
+	iCloseRectForPrtWest.Move(-iLayoutOffsetForPrtWest);
+
+	iCloseInnerRectForPrtWest = funcinnerrect.Rect();
+	iCloseInnerRectForPrtWest.Move(0, funcrect.Rect().Height() * 4);
+	iCloseInnerRectForPrtWest.Move(-iLayoutOffsetForPrtWest);
+	
+	// arrow left button
+	iArrowLeftRectForPrtWest = iCloseRectForPrtWest;     
+	iArrowLeftRectForPrtWest.Move(btnWidth, 0);
+	arrowleftinnerrect.LayoutRect(iArrowLeftRectForPrtWest, funcbtninner);
+	iArrowLeftInnerRectForPrtWest = arrowleftinnerrect.Rect();
+	
+	// option button
+	iOptionsRectForPrtWest = iArrowLeftRectForPrtWest;
+	iOptionsRectForPrtWest.Move(btnWidth, 0);    
+	optioninnerrect.LayoutRect(iOptionsRectForPrtWest, funcbtninner);
+	iOptionInnerRectForPrtWest = optioninnerrect.Rect();
+	
+	// arrow right button
+	iArrowRightRectForPrtWest = iOptionsRectForPrtWest;
+	iArrowRightRectForPrtWest.Move(btnWidth, 0);    
+	arrowrightinnerrect.LayoutRect(iArrowRightRectForPrtWest, funcbtninner);
+	iArrowRightInnerRectForPrtWest = arrowrightinnerrect.Rect();
+	
+	// backspace button
+	iBackspaceRectForPrtWest = iArrowRightRectForPrtWest;
+	iBackspaceRectForPrtWest.Move(btnWidth, 0);  
+	backspaceinnerrect.LayoutRect(iBackspaceRectForPrtWest, funcbtninner);
+	iBackspaceInnerRectForPrtWest = backspaceinnerrect.Rect();
+
+	// preview popup window 
+	TAknWindowLineLayout previewWnd, previewBackground, previewWndInner;
+	TAknLayoutRect previewWndRect, previewBackgroundRect, previewWndInnerRect;
+	TAknLayoutText previewWndText;
+	previewWnd = AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window(0).LayoutLine(); 
+				
+	previewWndRect.LayoutRect( iLayoutRectForPrtWest, previewWnd );
+	previewBackground = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_cp01().LayoutLine();
+	previewBackgroundRect.LayoutRect( previewWndRect.Rect(), previewBackground );
+	iPreviewWndRectForPrtWest = previewBackgroundRect.Rect();
+	
+	previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
+	previewWndInnerRect.LayoutRect( previewBackgroundRect.Rect(), previewWndInner );
+	
+	iPreviewWndInnerRectForPrtWest = previewWndInnerRect.Rect();
+	iPreviewWndTextForPrtWest = 
+		AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window_t1(0).LayoutLine();
+	previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndTextForPrtWest);
+	iBubbleFontForPrtWest = const_cast<CFont*>(previewWndText.Font());	
+	
+	// LAF for spell mode
+	TAknWindowLineLayout spellwnd;
+	TAknLayoutRect okBtnRect, cancelBtnRect, spellwndtrect;
+	
+	iSpellQueryPaneRectForPrtWest = mainWndRect.Rect();
+	
+    spellwnd = AknLayoutScalable_Avkon::popup_fep_ituss_window(1).LayoutLine();
+    spellwndtrect.LayoutRect( mainWndRect.Rect(), spellwnd ); 
+	
+	TAknWindowLineLayout queryTopPane, queryICFPane, icfSpellIndiPane, 
+		middleInnerBtn, middleBtn, bottomInnerBtn;
+	TAknLayoutRect queryTopPaneRect, queryICFPaneRect, icfSpellIndiPaneRect, 
+		bottomButton, bottomInnerRect, middleBtnRect;
+	
+	queryTopPane = AknLayoutScalable_Avkon::popup_fep_vtchi_icf_pane(1).LayoutLine();
+	queryTopPaneRect.LayoutRect( mainWndRect.Rect(), queryTopPane );
+	
+	queryICFPane = AknLayoutScalable_Avkon::vtchi_query_pane(0).LayoutLine();
+	queryICFPaneRect.LayoutRect( queryTopPaneRect.Rect(), queryICFPane );
+	iSpellICFRectForPrtWest = queryICFPaneRect.Rect();
+	
+	// Middle pane
+	TRect middleButtonPaneRect = spellwndtrect.Rect();
+	TInt leftMargin = itucellrect.Rect().iTl.iX;
+	middleButtonPaneRect.Move( leftMargin, 0 );
+	
+	middleBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane(3).LayoutLine();
+	middleBtnRect.LayoutRect( bottompanerect.Rect(), middleBtn );
+	middleInnerBtn = AknLayoutScalable_Avkon::bg_cell_ituss_key_g1(5).LayoutLine();
+	
+	TRect cellMiddleRect;
+	cellMiddleRect.iTl = middleButtonPaneRect.iTl;
+	cellMiddleRect.SetHeight( middleBtnRect.Rect().Height());
+	cellMiddleRect.SetWidth( middleBtnRect.Rect().Width());
+	
+	// OK button
+	okBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
+	iOKRectForPrtWest = okBtnRect.Rect();
+	
+	// Cancel button
+	cellMiddleRect.Move( middleBtnRect.Rect().Width(), 0 );
+	
+	cancelBtnRect.LayoutRect( cellMiddleRect, middleInnerBtn );
+	iCancelRectForPrtWest = cancelBtnRect.Rect();
+	
+	iBtnOKTextForPrtWest = AknLayoutScalable_Avkon::ituss_sks_pane_t1(0).LayoutLine();
+	iBtnCancelTextForPrtWest = AknLayoutScalable_Avkon::ituss_sks_pane_t2(0).LayoutLine();
+	
+	iBtnOKTextForPrtWest.ir = 7;
+	iBtnCancelTextForPrtWest.ir = 7;
+	
+	iBtnCancelTextForPrtWest = iBtnOKTextForPrtWest;
+	
+	// Bottom pane
+	TRect cellSpellRect;
+	cellSpellRect.iTl.iX = middleButtonPaneRect.iTl.iX;
+	cellSpellRect.iTl.iY = middleButtonPaneRect.iTl.iY + 
+			itucellrect.Rect().Height() * 5 + 7;
+	cellSpellRect.SetHeight( itucellrect.Rect().Height());
+	cellSpellRect.SetWidth( itucellrect.Rect().Width());
+		
+	// Left
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowLeftRectForPrtWest = bottomButton.Rect();
+	
+	bottomInnerBtn = AknLayoutScalable_Avkon::cell_ituss_key_pane_g1(2).LayoutLine();
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowLeftInnerRectForPrtWest = bottomInnerRect.Rect();
+	
+	// Right
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellArrowRightRectForPrtWest = bottomButton.Rect();
+	
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellArrowRightInnerRectForPrtWest = bottomInnerRect.Rect();
+	
+	// BackSpace
+	cellSpellRect.Move( itucellrect.Rect().Width(), 0 );
+	bottomButton.LayoutRect( cellSpellRect, ituinnercell );
+	iSpellICFBtnRectForPrtWest = bottomButton.Rect();
+	
+	bottomInnerRect.LayoutRect( bottomButton.Rect(), bottomInnerBtn );
+	iSpellICFBtnInnerRectForPrtWest = bottomInnerRect.Rect();
+	
+	//iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t1(0).LayoutLine();
+	iSpellText1ForPrtWest = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 0).LayoutLine();
+	//iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t2(0).LayoutLine();
+	iSpellText2ForPrtWest = AknLayoutScalable_Avkon::vtchi_icf_list_pane_t1(0, 0, 1).LayoutLine();
+	iSpellText3ForPrtWest = AknLayoutScalable_Avkon::vtchi_query_pane_t3(0).LayoutLine();
+	
+	iSpellIcfTextLeftMarginForPrtWest = iSpellText1ForPrtWest.il;
+	iSpellIcfTextRightMarginForPrtWest = iSpellIcfTextLeftMarginForPrtWest;
+	
+	iSpellIcfFontForPrtWest = const_cast<CFont*>(
+	        AknLayoutUtils::FontFromId(iSpellText1ForPrtWest.iFont, NULL));
+	
+	TAknLayoutText cSpelltxt1, cSpelltxt2;
+	cSpelltxt1.LayoutText( queryICFPaneRect.Rect(), iSpellText1ForPrtWest );
+	cSpelltxt2.LayoutText( queryICFPaneRect.Rect(), iSpellText2ForPrtWest );
+	
+	iSpellIcfTextTopMarginForPrtWest = 
+			cSpelltxt1.TextRect().iTl.iY - queryICFPaneRect.Rect().iTl.iY;
+	
+	iSpellIcfTextLineSpaceMarginForPrtWest = 
+			cSpelltxt2.TextRect().iTl.iY - cSpelltxt1.TextRect().iBr.iY;
+	
+	iSpellIcfTextHeightForPrtWest = cSpelltxt1.TextRect().Height();
+	
+	TInt maxSpellRow = ( iSpellICFRectForPrtWest.Height() - iSpellIcfTextTopMarginForPrtWest ) 
+	        / ( iSpellIcfTextHeightForPrtWest + iSpellIcfTextLineSpaceMarginForPrtWest );
+	
+	iSpellIcfTextBottomMarginForPrtWest = 
+			iSpellICFRectForPrtWest.Height() - 
+			( iSpellIcfTextHeightForPrtWest + iSpellIcfTextLineSpaceMarginForPrtWest ) 
+	        * maxSpellRow - iSpellIcfTextTopMarginForPrtWest;
+	
+	icfSpellIndiPane = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
+	icfSpellIndiPaneRect.LayoutRect(queryICFPaneRect.Rect(), icfSpellIndiPane);
+	iSpellIndiPaneWithoutTextForPrtWest = icfSpellIndiPaneRect.Rect();
+	
+	TAknWindowLineLayout spellIndiIcon;
+	TAknLayoutRect spellIndiIconRect;
+	spellIndiIcon = AknLayoutScalable_Avkon::icf_edit_indi_pane_g2(0).LayoutLine();
+	spellIndiIconRect.LayoutRect( icfSpellIndiPaneRect.Rect(), spellIndiIcon );
+	iSpellIndiIconWithoutTextForPrtWest = spellIndiIconRect.Rect();
+	}
+
+void CGenericItutDataMgr::ReadLafInfo()
+    {
+    // Screen
+    TRect rect, rectcn;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect);
+    iScreenSize = rect.Size();
+
+    iLandScape = iScreenSize.iWidth < iScreenSize.iHeight ? EFalse : ETrue;
+
+    ReadLafInfoForPrtWest();
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
+
+    // finger Layout
+    TAknWindowLineLayout vitulayout;
+    TAknLayoutRect viturect;
+
+    if (iLandScape)
+        {
+        vitulayout = AknLayoutScalable_Apps::popup_vitu2_window(1).LayoutLine();
+        }
+    else
+        {
+        vitulayout = AknLayoutScalable_Apps::popup_vitu2_window(0).LayoutLine();
+        }
+    
+    viturect.LayoutRect(rect, vitulayout);
+
+    iLayoutRect = viturect.Rect();
+    iLayoutOffset = iLayoutRect.iTl;
+
+    // ICF & Keypad
+    TAknWindowLineLayout icflayoutlatin, icflayoutcn,itukeypad, itucell,icflayoutbgcn;
+    TAknTextLineLayout icflefttext;    
+    TAknTextLineLayout icflefttext1, icflefttext2, icflefttext3; 
+    TAknLayoutRect icfrectlatin, icfrectcn, itukeypadrect, itucellrect,icfrectcnbg;
+
+    if (iLandScape)
+        {
+        icflayoutlatin = AknLayoutScalable_Apps::field_vitu2_entry_pane(1).LayoutLine();
+        icflayoutcn = AknLayoutScalable_Apps::field_vitu2_entry_pane(3).LayoutLine();
+        }
+    else
+        {
+        icflayoutlatin = AknLayoutScalable_Apps::field_vitu2_entry_pane(0).LayoutLine();
+        icflayoutcn = AknLayoutScalable_Apps::field_vitu2_entry_pane(2).LayoutLine();
+        }
+
+    icfrectlatin.LayoutRect(viturect.Rect(), icflayoutlatin);
+    icflayoutbgcn = AknLayoutScalable_Apps::bg_popup_call_pane_cp08(0).LayoutLine();
+    icfrectcn.LayoutRect(viturect.Rect(), icflayoutcn);
+    icfrectcnbg.LayoutRect(icfrectcn.Rect(),icflayoutbgcn);
+	
+    TAknLayoutScalableParameterLimits entryPaneVariety = 
+                AknLayoutScalable_Apps::field_vitu2_entry_pane_t1_ParamLimits(2);
+    // Calc the max row number
+    TInt maxRow = entryPaneVariety.LastRow();
+    
+    // latin ICF layout
+    icflefttext = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(2, 0, 0).LayoutLine();
+    icflefttext1 = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(2, 0, 1).LayoutLine();
+    icflefttext2 = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(2, 0, 2).LayoutLine();
+    icflefttext3 = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(2, 0, maxRow).LayoutLine();
+
+    iIcfTextAlignment = icflefttext.iJ;
+    iIcfTextLeftMargin = icflefttext.il;
+    iIcfTextRightMargin = icflefttext.ir;
+    
+    TAknLayoutText ctxt, ctxt1, ctxt2, ctxt3;
+    ctxt.LayoutText( icfrectlatin.Rect(), icflefttext );
+    ctxt1.LayoutText( icfrectlatin.Rect(), icflefttext1 );
+    ctxt2.LayoutText( icfrectlatin.Rect(), icflefttext2 );
+    ctxt3.LayoutText( icfrectlatin.Rect(), icflefttext3 );
+
+    
+    iIcfTextTopMargin = ctxt.TextRect().iTl.iY - icfrectlatin.Rect().iTl.iY;
+    iIcfTextLineSpaceMargin = ctxt1.TextRect().iTl.iY - ctxt.TextRect().iBr.iY;
+    iIcfTextBottomMargin = icfrectlatin.Rect().iBr.iY - ctxt3.TextRect().iBr.iY 
+                                                      - iIcfTextLineSpaceMargin;  
+    iIcfTextHeight = ctxt.TextRect().Height();
+    
+    iIcfFont = const_cast<CFont*>(AknLayoutUtils::FontFromId(icflefttext.iFont, NULL));
+    
+    // chinese ICF layout
+   	entryPaneVariety = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1_ParamLimits(0);
+    // Calc the max row number
+   	maxRow = entryPaneVariety.LastRow();
+    icflefttext = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(0, 0, 0).LayoutLine();
+    icflefttext1 = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(0, 0, 1).LayoutLine();
+    icflefttext3 = AknLayoutScalable_Apps::field_vitu2_entry_pane_t1(0, 0, maxRow).LayoutLine();
+    iIcfTextLeftMarginCn = icflefttext.il;
+    iIcfTextRightMarginCn = icflefttext.ir;
+    
+    ctxt.LayoutText( icfrectcn.Rect(), icflefttext );
+    ctxt1.LayoutText( icfrectcn.Rect(), icflefttext1 );
+    ctxt3.LayoutText( icfrectcn.Rect(), icflefttext3 );
+	
+    TInt topOffset = icfrectcnbg.Rect().iTl.iY - icfrectcn.Rect().iTl.iY;
+    iIcfTextTopMarginCn = ctxt.TextRect().iTl.iY - icfrectcn.Rect().iTl.iY - topOffset;
+    iIcfTextLineSpaceMarginCn = ctxt1.TextRect().iTl.iY - ctxt.TextRect().iBr.iY;
+    iIcfTextBottomMarginCn = icfrectcn.Rect().iBr.iY - ctxt3.TextRect().iBr.iY 
+                                                     - iIcfTextLineSpaceMarginCn;
+    iIcfTextHeightCn = ctxt.TextRect().Height();    
+ 	
+    iIcfFontCn = const_cast<CFont*>(AknLayoutUtils::FontFromId(icflefttext.iFont, NULL));
+
+    rect = icfrectlatin.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    iIcfWesRect = rect;
+	
+    rect = icfrectcnbg.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    iIcfChnRect = rect;
+    //iIcfChnRect.iTl.iY += 10;
+//#ifdef LAF_MODIFY
+    //if(IsChinese())
+//        {
+//        iIcfChnRect.Move(0,-iIcfChnRect.iTl.iY + 14);
+//        }
+//#endif
+
+    // Keypad
+    TInt keypadvariety = iLandScape ? 1 : 0;
+    itukeypad = AknLayoutScalable_Apps::grid_vitu2_itu_pane(keypadvariety).LayoutLine();
+    itukeypadrect.LayoutRect(viturect.Rect(), itukeypad);
+    iKeypadRect = itukeypadrect.Rect();
+    iKeypadRect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    
+    TInt cnParam  = iLandScape ? 3 : 2;    
+    itukeypad = AknLayoutScalable_Apps::grid_vitu2_itu_pane(cnParam).LayoutLine();
+    itukeypadrect.LayoutRect(viturect.Rect(), itukeypad);
+    iKeypadRectCn = itukeypadrect.Rect();
+    iKeypadRectCn.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+
+    TInt queryParam  = iLandScape ? 5 : 4;    
+    itukeypad = AknLayoutScalable_Apps::grid_vitu2_itu_pane(queryParam).LayoutLine();
+    itukeypadrect.LayoutRect(viturect.Rect(), itukeypad);
+    iKeypadRectQuery = itukeypadrect.Rect();
+    iKeypadRectQuery.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+
+    iKeypadCellRects.Reset();
+    iKeypadCellRectsCn.Reset();
+    iKeypadCellRectsQuery.Reset();
+
+    // keypad is 4 rows, 3 cols
+    for (TInt i = 0; i < 4; i++)
+        {
+        for (TInt j = 0; j < 3; j++)
+            {
+            itucell = AknLayoutScalable_Apps::cell_vitu2_itu_pane(keypadvariety, 
+                                                                  j, 
+                                                                  i).LayoutLine();
+            itucellrect.LayoutRect(iKeypadRect, itucell);
+            TRect cellrect = itucellrect.Rect();
+            cellrect.Move(-iKeypadRect.iTl.iX, -iKeypadRect.iTl.iY);
+            iKeypadCellRects.Append(cellrect);
+            
+            // read shift icon rect
+            if( i == 3 &&  j == 2 )
+            	{
+            	TAknWindowLineLayout shiftIcon =  AknLayoutScalable_Apps::
+            					cell_vitu2_itu_pane_g1( keypadvariety ).LayoutLine();
+            	TAknLayoutRect shiftIconRect;
+            	shiftIconRect.LayoutRect( cellrect, shiftIcon );				
+            	iShiftIconRect = shiftIconRect.Rect();			
+            	}
+            itucellrect.LayoutRect(iKeypadRectCn, itucell);
+            cellrect = itucellrect.Rect();
+            cellrect.Move(-iKeypadRectCn.iTl.iX, -iKeypadRectCn.iTl.iY);
+            iKeypadCellRectsCn.Append(cellrect);
+           
+            itucellrect.LayoutRect(iKeypadRectQuery, itucell);
+            cellrect = itucellrect.Rect();
+            cellrect.Move(-iKeypadRectQuery.iTl.iX, -iKeypadRectQuery.iTl.iY);
+            iKeypadCellRectsQuery.Append(cellrect);
+            }
+        }
+
+    iVkNumText = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t1(4).LayoutLine() :
+    						  AknLayoutScalable_Apps::cell_vitu2_itu_pane_t1(0).LayoutLine(); 
+	// Key text row 1   						  	
+    iVkAlphaText1 = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(2).LayoutLine() :
+    					AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(0).LayoutLine();
+    iVkAlphaText3 = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(3).LayoutLine() :
+    					AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(1).LayoutLine();
+	iVkAlphaText3.iJ = 3;   
+
+    iVkAlphaText1ForThai = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t3(6).LayoutLine() :
+                            AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(7).LayoutLine();
+    iVkAlphaText3ForThai = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(10).LayoutLine() :
+                        AknLayoutScalable_Apps::cell_vitu2_itu_pane_t2(8).LayoutLine();
+    iVkAlphaText3ForThai.iJ = 3;
+					   					    					
+    // Key text row 2    						  	
+    iVkAlphaText2 = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t3(1).LayoutLine() :
+    					AknLayoutScalable_Apps::cell_vitu2_itu_pane_t3(0).LayoutLine();
+    iVkAlphaText2.iJ = 3;
+    
+    iVkAlphaText2ForThai = iLandScape ? AknLayoutScalable_Apps::cell_vitu2_itu_pane_t3(6).LayoutLine() :
+                        AknLayoutScalable_Apps::cell_vitu2_itu_pane_t3(5).LayoutLine();
+    iVkAlphaText2ForThai.iJ = 3;
+    
+    // backspace and switch button
+    TAknWindowLineLayout funcbtn, funcclr, funcswitch, funcinner, funcinnercn, funcleft, funcright;
+    TAknWindowLineLayout funcswitchcn, funcleftcn, funcrightcn, funcclrcn;
+    TAknWindowLineLayout funcind, funcindcn, funcindinner, funcbtncn, funccell;
+    TAknLayoutRect funcbtnrect, funcclrrect, funcswitchrect, funcbtncnrect;
+    TAknLayoutRect funcindrect, funcindrectinner, funcindcnrect, funccellrect;
+    TAknLayoutRect funcinnerrect, funcinnerrectcn, funcleftrect, funcrightrect;
+    TAknLayoutRect funcclrcnrect, funcleftcnrect, funcrightcnrect, funcswitchcnrect;
+  
+    
+    if (iLandScape)
+        {
+        funcbtn = AknLayoutScalable_Apps::grid_vitu2_function_pane(1).LayoutLine();
+        funcbtncn = AknLayoutScalable_Apps::grid_vitu2_function_pane(3).LayoutLine();
+        }
+    else
+        {
+        funcbtn = AknLayoutScalable_Apps::grid_vitu2_function_pane(0).LayoutLine();
+        funcbtncn = AknLayoutScalable_Apps::grid_vitu2_function_pane(2).LayoutLine();
+        }
+
+    funcclr = AknLayoutScalable_Apps::cell_vitu2_function_pane(0, 3, 0).LayoutLine();
+    funcswitch = AknLayoutScalable_Apps::cell_vitu2_function_pane(0, 0, 0).LayoutLine();
+
+    funcinner = AknLayoutScalable_Apps::cell_vitu2_function_pane_g1(0).LayoutLine();
+
+    funcbtnrect.LayoutRect(viturect.Rect(), funcbtn);
+    funcbtncnrect.LayoutRect(viturect.Rect(), funcbtncn);
+    rect = funcbtnrect.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    funcclrrect.LayoutRect(rect, funcclr);
+    funcswitchrect.LayoutRect(rect, funcswitch);
+
+    // left and right button
+    funcleft = AknLayoutScalable_Apps::cell_vitu2_function_pane(0, 1, 0).LayoutLine();
+    funcright = AknLayoutScalable_Apps::cell_vitu2_function_pane(0, 2, 0).LayoutLine();
+    funcleftrect.LayoutRect(rect, funcleft);
+    funcrightrect.LayoutRect(rect, funcright);
+    iArrowLeftRect 	= funcleftrect.Rect();
+    iArrowRightRect	= funcrightrect.Rect();
+    funcinnerrect.LayoutRect(iArrowLeftRect, funcinner);
+    iArrowLeftInnerRect = funcinnerrect.Rect();
+    funcinnerrect.LayoutRect(iArrowRightRect, funcinner);
+    iArrowRightInnerRect = funcinnerrect.Rect();
+
+    // funcinnerrect
+    iBackspaceRect = funcclrrect.Rect();
+    funcinnerrect.LayoutRect(iBackspaceRect, funcinner);
+    iBackspaceInnerRect = funcinnerrect.Rect();
+    iSwitchRect = funcswitchrect.Rect();
+    funcinnerrect.LayoutRect( iSwitchRect, funcinner );
+    iSwitchInnerRect = funcinnerrect.Rect();
+
+    // Cursor button in Chinese input mode
+    rect = funcbtncnrect.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    funcinnercn = AknLayoutScalable_Apps::cell_vitu2_function_pane_g1(1).LayoutLine();
+    // 1. left arrow
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 1, 0 ).LayoutLine();
+    funccellrect.LayoutRect( rect, funccell );
+    iArrowLeftCnRect = funccellrect.Rect();
+    funcinnerrectcn.LayoutRect( funccellrect.Rect(), funcinnercn );
+    iArrowLeftInnerCnRect = funcinnerrectcn.Rect();
+    
+    // 2, up arrow
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 0, 0 ).LayoutLine();
+    funccellrect.LayoutRect( rect, funccell );
+    iArrowUpRect = funccellrect.Rect();
+    funcinnerrectcn.LayoutRect( funccellrect.Rect(), funcinnercn );
+    iArrowUpInnerRect = funcinnerrectcn.Rect();
+    
+    // 3. right arrow
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 2, 0 ).LayoutLine();
+    funccellrect.LayoutRect( rect, funccell );
+    iArrowRightCnRect = funccellrect.Rect();
+    funcinnerrectcn.LayoutRect( funccellrect.Rect(), funcinnercn );
+    iArrowRightInnerCnRect = funcinnerrectcn.Rect();
+    
+    // 4. down arrow
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 0, 1 ).LayoutLine();
+    funccellrect.LayoutRect( rect, funccell );
+    iArrowDownRect = funccellrect.Rect();
+    funcinnerrectcn.LayoutRect( funccellrect.Rect(), funcinnercn );
+    iArrowDownInnerRect = funcinnerrectcn.Rect();
+#ifdef LAF_MODIFY    
+    //indicator bar rect
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 1, 1 ).LayoutLine();
+    funccellrect.LayoutRect( rect, funccell );
+    iImIndiOuterRectCn = funccellrect.Rect();
+    funccell = AknLayoutScalable_Apps::cell_vitu2_function_pane( 1, 2, 1 ).LayoutLine();
+    funccellrect.LayoutRect(rect,funccell);
+    iImIndiOuterRectCn.iBr = funccellrect.Rect().iBr;    
+
+    iImIndicatorChnRect	= iImIndiOuterRectCn;
+    iImIndicatorChnRect.Shrink( 24, 12 );
+
+#endif
+    
+	// candidate list
+    TAknWindowLineLayout candlist, candlistpane, charpane, listctrl;
+    TAknLayoutRect candlistrect, candlistpanerect, charpanerect1, charpanerect2;
+    TAknLayoutRect charpanerect3, listctrlrect;
+	
+    if (iLandScape)
+        {
+		candlist = AknLayoutScalable_Apps::popup_vitu2_dropdown_list_window(1).
+										LayoutLine();        
+        }
+    else
+        {
+       	candlist = AknLayoutScalable_Apps::popup_vitu2_dropdown_list_window(0).
+										LayoutLine();
+        }
+    candlistrect.LayoutRect( viturect.Rect(), candlist );
+    rect = candlistrect.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    candlistpane = AknLayoutScalable_Apps::grid_vitu2_dropdown_list_pane().
+										LayoutLine();
+    candlistpanerect.LayoutRect( rect, candlistpane );
+	
+    charpane = AknLayoutScalable_Apps::cell_vitu2_dropdown_list_char_pane( 0 , 0 , 0 ).
+										LayoutLine();
+    charpanerect1.LayoutRect( candlistpanerect.Rect(), charpane );
+    charpane = AknLayoutScalable_Apps::cell_vitu2_dropdown_list_char_pane( 0 , 1 , 0 ).
+										LayoutLine();
+    charpanerect2.LayoutRect( candlistpanerect.Rect(), charpane );
+    charpane = AknLayoutScalable_Apps::cell_vitu2_dropdown_list_char_pane( 0 , 0 , 1 ).
+										LayoutLine();
+    charpanerect3.LayoutRect( candlistpanerect.Rect(), charpane );
+    listctrl = AknLayoutScalable_Apps::cell_vitu2_dropdown_list_ctrl_pane( 0, 0, 0 ).
+										LayoutLine();
+    listctrlrect.LayoutRect( candlistpanerect.Rect(), listctrl );
+									
+    iCandsHorizontalMargin = charpanerect2.Rect().iTl.iX - charpanerect1.Rect().iBr.iX;
+    iCandsVerticalMargin = charpanerect3.Rect().iTl.iY - charpanerect1.Rect().iBr.iY;
+    iCandsNaviWidth = listctrlrect.Rect().Width();
+	
+    iCandsUnitWidth = charpanerect1.Rect().Width();
+    iCandsUnitHeight = charpanerect1.Rect().Height() ;
+    
+    iCandsSpinBtnHeight = listctrlrect.Rect().Height();
+    iCandsSpellLTPos = charpanerect1.Rect().iTl;
+    iCandsLTPos = charpanerect3.Rect().iTl;
+    iCandsPuncLTPos = iCandsSpellLTPos;
+    
+    TAknTextLineLayout candstxtlayout = 
+                     AknLayoutScalable_Apps::cell_vitu2_dropdown_list_char_pane_t1().LayoutLine();
+    TAknLayoutText candstxt;
+    candstxt.LayoutText( charpanerect1.Rect(), candstxtlayout );
+    iCandsFont = const_cast<CFont*>( AknLayoutUtils::FontFromId( candstxtlayout.iFont, NULL ) );
+    iCandsTextMargin = candstxt.TextRect().iTl.iX - charpanerect1.Rect().iTl.iX;
+    iCandsTextColor = candstxt.Color();
+    
+    //extra adjustment
+    // No reason to add the iCandsTextMargin and KCandsAdjustment
+    iCandsUnitWidth += KCandsAdjustment;
+    iCandsNaviWidth += iCandsTextMargin;
+    
+    TPtrC ptr(reinterpret_cast<TText*>(&iLandScape), sizeof(iLandScape)/sizeof(TText));
+    NotifySubscriber(MItutPropertySubscriber::EItutPropertyLandscape, ptr);
+
+    TSize spellSize( iCandsUnitWidth * 6 + iCandsHorizontalMargin * 7, iCandsUnitHeight );
+    iSpellRect = TRect( iCandsSpellLTPos, spellSize );
+    iSpellFont = const_cast<CFont*>( AknLayoutUtils::FontFromId( candstxtlayout.iFont, NULL ) );
+    iSpellTextColor = candstxt.Color();
+    
+
+    
+    // Navi buttons
+    TAknWindowLineLayout toppane, toppanecn, btnup, btndown, btnopt, btncls, btnback;
+    TAknLayoutRect toppanerect, toppanerectcn, btnuprect, btndownrect, 
+                   btnoptrect, btnoptrectcn, btnclsrect, btnclsrectcn, btnbackrectcn;
+    TAknWindowLineLayout upinner, downinner, optinner, clsinner;
+    TAknLayoutRect upinrect, downinrect, optinrect, optinrectcn, clsinrect, clsinrectcn;	
+    if (iLandScape)
+        {
+        toppane = AknLayoutScalable_Apps::grid_vitu2_function_top_pane(1).LayoutLine();
+        toppanecn = AknLayoutScalable_Apps::grid_vitu2_function_top_pane(3).LayoutLine();
+        }
+    else
+        {
+        toppane = AknLayoutScalable_Apps::grid_vitu2_function_top_pane(0).LayoutLine();
+        toppanecn = AknLayoutScalable_Apps::grid_vitu2_function_top_pane(2).LayoutLine();
+        }	
+    toppanerect.LayoutRect( viturect.Rect(), toppane );
+    toppanerectcn.LayoutRect(viturect.Rect(), toppanecn);
+    rect = toppanerect.Rect();
+    rectcn = toppanerectcn.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    rectcn.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);
+    
+    // Chinese input mode
+    funcswitchcn = AknLayoutScalable_Apps::cell_vitu2_function_top_pane( 0, 2, 0 ).LayoutLine();
+    funcswitchcnrect.LayoutRect( rectcn, funcswitchcn );
+    iSwitchCnRect = funcswitchcnrect.Rect();
+    funcinnercn = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(0).LayoutLine();
+    funcinnerrectcn.LayoutRect( funcswitchcnrect.Rect(), funcinnercn );
+    iSwitchInnerCnRect = funcinnerrectcn.Rect();
+    
+    btnopt= AknLayoutScalable_Apps::cell_vitu2_function_top_pane( 0, 1, 0 ).LayoutLine();
+    btnoptrect.LayoutRect( rect, btnopt );
+    btnoptrectcn.LayoutRect(rectcn, btnopt);
+    optinner = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(1).LayoutLine();
+    optinrect.LayoutRect( btnoptrect.Rect(), optinner );
+    optinner = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(0).LayoutLine();
+    optinrectcn.LayoutRect(btnoptrectcn.Rect(), optinner);
+    iOptionInnerRect = optinrect.Rect();
+#ifdef LAF_MODIFY	
+    iOptionInnerRectCn = optinrectcn.Rect();
+#endif	
+    btncls= AknLayoutScalable_Apps::cell_vitu2_function_top_pane( 0, 0, 0 ).LayoutLine();
+    btnclsrect.LayoutRect( rect, btncls );
+    btnclsrectcn.LayoutRect(rectcn, btncls);
+    clsinner = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(1).LayoutLine();
+    clsinrect.LayoutRect( btnclsrect.Rect(), clsinner );
+    clsinner = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(0).LayoutLine();
+    clsinrectcn.LayoutRect(btnclsrectcn.Rect(), clsinner);
+    iCloseInnerRect = clsinrect.Rect();
+#ifdef LAF_MODIFY	
+    iCloseInnerRectCn = clsinrectcn.Rect();
+#endif	
+    btnback= AknLayoutScalable_Apps::cell_vitu2_function_top_pane( 0, 3, 0 ).LayoutLine();
+    btnbackrectcn.LayoutRect(rectcn, btnback);
+    iBackspaceCnRect = btnbackrectcn.Rect();
+    funcinner = AknLayoutScalable_Apps::cell_vitu2_function_top_pane_g1(0).LayoutLine();
+    funcinnerrect.LayoutRect( btnbackrectcn.Rect(), funcinner );
+    iBackspaceInnerCnRect = funcinnerrect.Rect();
+	
+	
+    iOptionsRect = btnoptrect.Rect();
+    iOptionsRectCn = btnoptrectcn.Rect();
+    iCloseRect = btnclsrect.Rect();
+    iCloseRectCn = btnclsrectcn.Rect();
+
+    // input mode indicator, should use laf data in the future
+#ifndef LAF_MODIFY    
+    funcindcn = AknLayoutScalable_Apps::field_vitu2_entry_pane_g1().LayoutLine();
+    funcindcnrect.LayoutRect( icfrectcn.Rect(), funcindcn );
+#endif    
+    funcind = AknLayoutScalable_Apps::cell_vitu2_function_top_wide_pane(1).LayoutLine();
+    funcindrect.LayoutRect(rect, funcind);
+    
+    funcindinner = AknLayoutScalable_Apps::cell_vitu2_function_top_wide_pane_g1(2).LayoutLine();
+    funcindrectinner.LayoutRect(funcindrect.Rect(), funcindinner);
+    //iBackspaceCnRect = funcindcnrect.Rect();
+
+    iImIndicatorWesRect = funcindrectinner.Rect();	
+    iImIndiOuterRect = funcindrect.Rect();
+#ifndef LAF_MODIFY
+    funcindinner = AknLayoutScalable_Apps::cell_vitu2_function_top_wide_pane_g1(1).LayoutLine();
+    funcindrectinner.LayoutRect(funcindrect.Rect(), funcindinner);    
+    iImIndicatorChnRect = funcindrectinner.Rect();
+#endif
+	// match selection list
+	TAknWindowLineLayout matchlist, listpane, itempane1, itempane2, scrollpane;
+	TAknLayoutRect matchlistrect, listpanerect, itempanerect1, itempanerect2, scrollpanerect;
+	TAknWindowLineLayout arrowup, arrowdown, arrowupinner, arrowdowninner;
+	TAknLayoutRect arrowuprect, arrowdownrect, arrowupinnerRect, arrowdowninnerRect;
+	
+	if( iLandScape )
+		{
+		matchlist = AknLayoutScalable_Apps::popup_vitu2_match_list_window(3).LayoutLine();
+		listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane(1).LayoutLine();
+		scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane(1).LayoutLine();
+		}
+	else
+		{
+		matchlist = AknLayoutScalable_Apps::popup_vitu2_match_list_window(2).LayoutLine();
+		listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane(0).LayoutLine();
+		scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane(0).LayoutLine();
+		}
+	
+	matchlistrect.LayoutRect( viturect.Rect(), matchlist );
+	rect = matchlistrect.Rect();
+    rect.Move(-iLayoutOffset.iX, -iLayoutOffset.iY);	
+    
+	listpanerect.LayoutRect( rect, listpane );
+	scrollpanerect.LayoutRect( rect, scrollpane );
+	itempane1 = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 0 ).LayoutLine();
+	itempanerect1.LayoutRect( listpanerect.Rect(), itempane1 );
+	itempane2 = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 1 ).LayoutLine();
+	itempanerect2.LayoutRect( listpanerect.Rect(), itempane2 );
+	
+	arrowupinner= AknLayoutScalable_Apps::vitu2_page_scroll_pane_g1().LayoutLine();
+	arrowdowninner = AknLayoutScalable_Apps::vitu2_page_scroll_pane_g2().LayoutLine();
+	arrowup = AknLayoutScalable_Apps::bg_button_pane_cp023().LayoutLine();
+	arrowdown= AknLayoutScalable_Apps::bg_button_pane_cp024().LayoutLine();
+	arrowuprect.LayoutRect( scrollpanerect.Rect(), arrowup );
+	arrowdownrect.LayoutRect( scrollpanerect.Rect(), arrowdown );
+	arrowupinnerRect.LayoutRect( scrollpanerect.Rect(), arrowupinner );
+	arrowdowninnerRect.LayoutRect( scrollpanerect.Rect(), arrowdowninner );
+	
+	//iSelectionTl = rect.iTl;
+	iSelectionHorMargin = listpanerect.Rect().iTl.iX;
+	iSelectionVerMargin = listpanerect.Rect().iTl.iY;
+	iSelectionTl = TPoint(iIcfWesRect.iTl.iX + 10, iIcfWesRect.iTl.iY + 10);
+	iSelectionItemSize = itempanerect1.Rect().Size();
+	iSelectionItemMargin = itempanerect1.Rect().iBr.iY - itempanerect2.Rect().iTl.iY;
+	iSelectionNaviSize = arrowuprect.Rect().Size();
+	iSelectionNaviInnerSize = arrowupinnerRect.Rect().Size();
+	iSelectionTextLine = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane_t1().LayoutLine();
+    iSelectionPageTextLine = AknLayoutScalable_Apps::vitu2_page_scroll_pane_t1().LayoutLine();
+	
+	// read spell popup window laf
+	TAknWindowLineLayout queryPane, btnOK, btnCancle, ICFArea, btnClr, btnClrInner;
+	TAknWindowLineLayout editIndicator;
+	TAknLayoutRect queryPaneRect, btnOKRect, btnCancleRect, ICFAreaRect, btnClrRect;
+	TAknLayoutRect btnClrInnerRect, editIndicatorRect; 
+	TAknTextLineLayout btnOKText, btnCancleText;
+	if( iLandScape )
+		{
+		queryPane = AknLayoutScalable_Apps::popup_vitu2_query_window(1).LayoutLine();
+		}
+	else
+		{
+		queryPane = AknLayoutScalable_Apps::popup_vitu2_query_window(0).LayoutLine();	
+		}
+	queryPaneRect.LayoutRect( viturect.Rect(), queryPane );
+	btnOK = AknLayoutScalable_Apps::bg_button_pane_cp016().LayoutLine();
+	btnOKRect.LayoutRect( queryPaneRect.Rect(), btnOK );
+	btnCancle = AknLayoutScalable_Apps::bg_button_pane_cp017().LayoutLine();
+	btnCancleRect.LayoutRect( queryPaneRect.Rect(), btnCancle );
+	btnOKText = AknLayoutScalable_Apps::popup_vitu2_query_window_t4(0).LayoutLine();
+	btnCancleText = AknLayoutScalable_Apps::popup_vitu2_query_window_t5(0).LayoutLine();
+	
+	editIndicator = AknLayoutScalable_Apps::popup_vitu2_query_window_g1().LayoutLine();
+	editIndicatorRect.LayoutRect( queryPaneRect.Rect(), editIndicator  );
+	
+	ICFArea = AknLayoutScalable_Apps::input_focus_pane_cp08().LayoutLine();
+	ICFAreaRect.LayoutRect( queryPaneRect.Rect(), ICFArea  );
+	
+	btnClr = AknLayoutScalable_Apps::bg_button_pane_cp015().LayoutLine();
+	btnClrRect.LayoutRect( queryPaneRect.Rect(), btnClr );
+	btnClrInner = AknLayoutScalable_Apps::popup_vitu2_query_window_g2().LayoutLine();
+	btnClrInnerRect.LayoutRect( queryPaneRect.Rect(), btnClrInner );
+	
+	iSpellQueryPaneRect = queryPaneRect.Rect();
+	iSpellEditIndicator = editIndicatorRect.Rect();
+    iOkRect = btnOKRect.Rect();
+    iCancelRect = btnCancleRect.Rect();
+    iSpellICFRect = ICFAreaRect.Rect();
+    iSpellClrRect = btnClrRect.Rect();
+    iSpellClrInnerRect = btnClrInnerRect.Rect();  
+    
+    //iBtnTextFormat  = iVkAlphaText1;//btnOKText;
+	//iBtnTextFormat1 = iVkAlphaText1;//btnCancleText;
+    iBtnTextFormat = AknLayoutScalable_Apps::popup_vitu2_query_button_pane_t1(0).LayoutLine();
+    iBtnTextFormat1 = AknLayoutScalable_Apps::popup_vitu2_query_button_pane_t1(0).LayoutLine();
+	
+	
+    // just test if there is size change of added ctrls
+    iSendRect = iArrowLeftRect;
+    iDisconnRect = iArrowRightRect;
+    // end test    
+    
+    // preview popup window 
+  	TAknWindowLineLayout previewWnd, previewBackground, previewWndInner;
+  	TAknLayoutRect previewWndRect, previewBackgroundRect, previewWndInnerRect;
+  	TAknLayoutText previewWndText;
+  	previewWnd = AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window(0).LayoutLine();	
+  	            
+  	previewWndRect.LayoutRect( iLayoutRect, previewWnd );
+  	previewBackground = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_cp01().LayoutLine();
+  	previewBackgroundRect.LayoutRect( previewWndRect.Rect(), previewBackground );
+  	iPreviewWndRect = previewBackgroundRect.Rect();
+  	
+  	previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
+  	previewWndInnerRect.LayoutRect( previewBackgroundRect.Rect(), previewWndInner );
+  	
+  	iPreviewWndInnerRect = previewWndInnerRect.Rect();
+  	iPreviewWndText = 
+        AknLayoutScalable_Avkon::popup_fshwr2_char_preview_window_t1(0).LayoutLine();
+    previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndText);
+    iBubbleFont = const_cast<CFont*>(previewWndText.Font());
+    }
+    
+void CGenericItutDataMgr::SetTextAlignment()
+    {
+    CFepLayoutMultiLineIcf* icffield = static_cast<CFepLayoutMultiLineIcf*>(iLayoutContext->Control(ECtrlIdICF));
+    
+    if (icffield && InputLanguage() != ELangNone)
+        {
+        if ( IsPortraitWest())
+            {
+            TRAP_IGNORE(icffield->SetTextAlignmentL(
+                    iIcfTextAlignmentForPrtWest, InputLanguage()));
+            }
+        else
+            {
+            TRAP_IGNORE(icffield->SetTextAlignmentL(
+                    iIcfTextAlignment, InputLanguage()));
+            }
+        }
+    }
+    
+void CGenericItutDataMgr::SetIcfTextAlignment(TInt aAlignment)
+    {
+    if ( IsPortraitWest())
+        {
+        iIcfTextAlignmentForPrtWest = aAlignment;
+        }
+    else
+        {
+        iIcfTextAlignment = aAlignment;
+        }
+    }
+
+void CGenericItutDataMgr::SetLanguageL(TInt aLanguage)
+    {    
+    ASSERT( IsValidLanguage( aLanguage ) );
+        
+    if (iLanguage != aLanguage)
+        {            
+        if( IsValidLanguage( iLanguage ) )
+            iIsLangDirectionSwitch =  IsRtoLLanguage( aLanguage ) ^ IsRtoLLanguage( iLanguage );
+        else        
+            //Check mirroring is needed when first setting language
+            iIsLangDirectionSwitch = IsRtoLLanguage( aLanguage );            
+        
+        iLanguage = aLanguage;
+        iInputMode = KInvalidImMode;
+        
+        //SetTextAlignment();
+
+        TInt scriptIdx = GetConfigResFileName(aLanguage);
+
+        if (scriptIdx != iCurrentScriptIdx)
+            {
+            iCurrentScriptIdx = scriptIdx;
+
+            CCoeEnv* coeEnv = CCoeEnv::Static();
+            
+            // Remove the resource file of previous input language.
+            // The previous resource file should be removed first,
+            // Because there are some same keypad ids in the resource file
+            // of latin, Cyrillic, and etc.
+            if ( iConfigResId )
+                {
+                coeEnv->DeleteResourceFile( iConfigResId );
+                }
+
+            // Add the resource file of current input language
+            TFileName resourceConfigName( iResourceFilename );
+            BaflUtils::NearestLanguageFile( coeEnv->FsSession(), resourceConfigName );
+            iConfigResId = coeEnv->AddResourceFileL( resourceConfigName );
+            
+            if (IsChinese())
+                {
+                iLayoutContext->UiManager()->CreateChineseSpecificCtrlsIfNeededL();
+                }
+            
+            if( IsKorean())
+                {
+                iLayoutContext->UiManager()->CreateKoreanSpecificCtrlsIfNeededL();
+                }
+
+            NotifyChangeControlLayout(MItutPropertySubscriber::EItutPropertyKeypadResourceId, 
+                                      KeypadResourceId());  
+            }
+        }
+    }
+
+void CGenericItutDataMgr::SetCase(TInt aCase)
+    {
+    if (iCase != aCase || iInputMode == ELatin)
+        {
+        iCase = aCase;
+        NotifyChangeControlLayout(MItutPropertySubscriber::EItutPropertyKeypadResourceId, 
+                                  KeypadResourceId());  
+        }
+    }
+
+void CGenericItutDataMgr::SetInputModeL(TInt aMode)
+    {
+    TInt engineMode = KInvalidImMode;
+
+    switch (aMode)
+        {
+        case EPinyin:
+            {
+            engineMode = EPtiEnginePinyinByPhrase;
+            }
+            break;
+        case EStroke:
+            {
+            engineMode = EPtiEngineStrokeByPhrase;
+            }
+            break;
+        case EZhuyin:
+            {
+            engineMode = EPtiEngineZhuyinByPhrase;
+            }
+            break;
+        case ELatin:
+        case EHindi:
+        case ENumber:
+        case EHangul:
+        case ENativeNumber:
+            {
+            iInputMode = aMode;
+            NotifyChangeControlLayout(MItutPropertySubscriber::EItutPropertyKeypadResourceId, 
+                                      KeypadResourceId());  
+            }
+            break;
+        case EZhuyinFind:
+            {
+            iInputMode = EZhuyin; 
+            
+            return; 
+            }
+        case EStrokeFind:
+            {
+            iInputMode = EStroke;  
+            
+            return;
+            }
+        default:
+            return;    
+        }
+
+    if (IsChinese())
+        {
+        TInt err = iPtiEngine->ActivateLanguageL(iLanguage, TPtiEngineInputMode(engineMode));
+        if (err == KErrNone)
+            {
+            iPtiEngine->SetCandidatePageLength(KOnePageCandidateCount);
+            iInputMode = aMode;
+            }
+        }
+    }
+
+
+
+
+void CGenericItutDataMgr::SetChineseSpellFlag( TBool aFlag )
+	{
+	iIsChineseSpell = aFlag;
+	}
+
+TBool CGenericItutDataMgr::IsChineseSpellMode()
+	{
+	return iIsChineseSpell;
+	}
+
+TAny* CGenericItutDataMgr::RequestDataForPortraitWestUIAndChineseSpellUI(TInt aDataType)
+    {
+    switch ( aDataType )
+        {
+        case EScreenSize:
+            {
+            return &iScreenSize;
+            }
+        case ELayoutOffset:
+            {
+            return &iLayoutOffsetForPrtWest;
+            }
+        case ELayoutRect:
+            {
+            return &iLayoutRectForPrtWest;
+            }
+        case EIcfRect:
+            {
+            return &iIcfRectForPrtWest;
+            }
+        case EIcfFont:
+            {
+            if ( IsChineseSpellMode())
+            	{
+				return reinterpret_cast<TAny*>(iIcfFont);
+            	}
+            else
+                {
+                return reinterpret_cast<TAny*>(iIcfFontForPrtWest);
+                }
+            }
+        case EBackspaceRect:
+        case EItutPosClear:
+            {
+            return &iBackspaceRectForPrtWest;
+            }
+        case EKeypadRect:
+            {
+			if ( IsChineseSpellMode())
+            	{
+				return &iKeypadRect;
+            	}
+            else
+                {
+                return &iKeypadRectForPrtWest;
+                }
+            }               
+        case EKeypadCellRects:
+            {
+            if ( IsChineseSpellMode())
+            	{
+				return &iKeypadCellRects;
+            	}
+            else
+                {
+                return &iKeypadCellRectsForPrtWest;
+                }
+            }
+        case EKeypadLeftTextLine:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iVkNumText;
+                }
+            else
+                {
+                // Modify new begin
+                if ( iInputMode == ENumber || iInputMode == ENativeNumber )
+                	{
+					return &iVkBigNumTextForPrtWest;
+                	}
+                else
+                	{
+					return &iVkNumTextForPrtWest;
+                	}
+                // Modify new end
+                }
+            }
+        case EKeypadRightTextLine1:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return IsThai() ? &iVkAlphaText1ForThai : &iVkAlphaText1;
+                }
+            else
+                {
+				if ( iInputMode == ENumber || iInputMode == ENativeNumber )
+					{
+					return &iVkTextPlusForNumbericOnlyForPrtWest;
+					}
+				else
+					{
+					return &iVkAlphaText1ForPrtWest;
+					}
+                }
+            }
+        case EKeypadRightTextLine2:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return IsThai() ? &iVkAlphaText2ForThai : &iVkAlphaText2;
+                }
+            else
+                {
+                return &iVkAlphaText2ForPrtWest;
+                }
+            }
+        case EKeypadRightTextLine3:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return IsThai() ? &iVkAlphaText3ForThai : &iVkAlphaText3;
+                }
+            else
+                {
+                return &iVkAlphaText3ForPrtWest;
+                }
+            }
+        case EDropdownlistUnitWidth:
+            {
+            return &iCandsUnitWidth;
+            }
+        case EDropdownlistUnitHeight:
+            {
+            return &iCandsUnitHeight;
+            }
+        case EDropdownlistHorizontalMargin:
+            {
+            return &iCandsHorizontalMargin;
+            }
+        case EDropdownlistVerticalMargin:
+            {
+            return &iCandsVerticalMargin;
+            }
+        case EDropdownListNaviWidth:
+            {
+            return &iCandsNaviWidth;
+            }
+        case EDropdownListSpinBtnHeight:
+            {
+            return &iCandsSpinBtnHeight;
+            }
+        case EDropdownListSpellLTPos:
+            {
+            return &iCandsSpellLTPos;
+            }
+        case EDropdownListCandsLTPos:
+            {
+            return &iCandsLTPos;
+            }
+        case EDropdownListPuncLTPos:
+            {
+            return &iCandsPuncLTPos;
+            }
+        case EDropdownListFont:
+            {
+            return reinterpret_cast<TAny*>(iCandsFont);
+            }
+        case EDropdownListTextMargin:
+            {
+            return &iCandsTextMargin;
+            }
+        case EDropdownListTextColor:
+            {
+            return &iCandsTextColor;
+            }
+        case ESpellRect:
+            {
+            return &iSpellRect;
+            }
+        case ESpellFont:
+            {
+            return reinterpret_cast<TAny*>(iSpellIcfFontForPrtWest);
+            }
+        case ESpellTextColor:
+            {
+            return &iSpellTextColor;
+            }
+        case ELanguage:
+            {
+            return &iLanguage;
+            }
+        case EInputMode:
+            {
+            return &iInputMode;
+            }
+        case ECase:
+            {
+            return &iCase;
+            }
+        case EChnCandidates:
+            {
+            return &iCandidates;
+            }
+        case EChnPuncCandidates:
+            {
+            return &iPuncCandidates;
+            }
+        case EArrowLeftRect:
+        case EItutPosArrowLeft:
+            {
+            return &iArrowLeftRectForPrtWest;
+            }
+        case EArrowRightRect:
+        case EItutPosArrowRight:
+            {
+            return &iArrowRightRectForPrtWest;
+            }
+        case EArrowUpRect:
+        case EItutPosArrowUp:
+            {
+            return &iArrowUpRect;
+            }
+        case EArrowDownRect:
+        case EItutPosArrowDown:
+            {
+            return &iArrowDownRect;
+            }
+        case EItutPosSend:
+            {
+            return &iSendRect;
+            }
+        case EItutPosDisconn:
+            {
+            return &iDisconnRect;
+            }
+        case EMatchSelectionTlPos:
+            {
+            return &iSelectionTl;
+            }
+        case EMatchSelectionItemSize:
+            {
+            return &iSelectionItemSize;
+            }
+        case EMatchSelectionItemMargin:
+            {
+            return &iSelectionItemMargin;
+            }
+        case EMatchSelectionTextLine:
+            {
+            return &iSelectionTextLine;
+            }
+        case EOptionsRect:   
+            {
+            return &iOptionsRectForPrtWest;
+            }           
+        case ECloseRect:
+            {
+            return &iCloseRectForPrtWest;
+            }          
+        case ELeftInnerRect:
+            {
+            return &iArrowLeftInnerRectForPrtWest;
+            }
+        case ERightInnerRect:
+            {
+            return &iArrowRightInnerRectForPrtWest;
+            }
+        case EUpInnerRect:
+            {
+            return &iArrowUpInnerRect;
+            }
+        case EDownInnerRect:
+            {
+            return &iArrowDownInnerRect;
+            }
+        case EBackspaceInnerRect:
+            {
+            return &iBackspaceInnerRectForPrtWest;
+            }
+        case ECloseInnerRect:
+            {
+            return &iCloseInnerRectForPrtWest;
+            }       
+        case EOptionInnerRect:
+            {
+            return &iOptionInnerRectForPrtWest;
+            }         
+        case EItutPosOk:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iOkRect;
+                }
+            else
+                {
+                return &iOKRectForPrtWest;
+                }
+            }
+        case EItutPosCancel:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iCancelRect;
+                }
+            else
+                {
+                return &iCancelRectForPrtWest;
+                }
+            }
+        case EBtnTextLine:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iBtnTextFormat;
+                }
+            else
+                {
+                return &iBtnOKTextForPrtWest;
+                }
+            }
+        case ESpellTextCancle:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iBtnTextFormat1;
+                }
+            else
+                {
+                return &iBtnCancelTextForPrtWest;
+                }
+            }
+        case ESpellICFRect:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iSpellICFRect;
+                }
+            else
+                {
+                return &iSpellICFRectForPrtWest;
+                }
+            }
+        case ESpellClrRect:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iSpellClrRect;
+                }
+            else
+                {
+                return &iSpellICFBtnRectForPrtWest;
+                }
+            }
+        case ESpellClrInnerRect:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iSpellClrInnerRect;
+                }
+            else
+                {
+                return &iSpellICFBtnInnerRectForPrtWest;
+                }
+            }
+        case ESpellEditIndicatorRect:
+            {
+            return &iSpellEditIndicator;
+            }
+        case ESpellQueryPaneRect:
+            {
+            if ( IsChineseSpellMode())
+                {
+                return &iSpellQueryPaneRect;
+                }
+            else
+                {
+                return &iSpellQueryPaneRectForPrtWest;
+                }
+            }
+        case ELatinOnly:
+            {
+            return &iLatinOnly;
+            }
+        case EPreviewBubbleRect:
+            {
+            return &iPreviewWndRectForPrtWest;
+            }
+        case EPreviewBubbleInnerRect:
+            {
+            return &iPreviewWndInnerRectForPrtWest;
+            }   
+        case EPreviewBubbleTextlayout:
+            {
+            return &iPreviewWndTextForPrtWest;
+            }
+        case EPreviewBubbleFont:
+            {
+            return reinterpret_cast<TAny*>(iBubbleFontForPrtWest);
+            }
+        case EImIndicatorRect:
+            {
+            if (iSpellMode)
+                {
+                return &iSpellEditIndicator;
+                }
+                 
+            CalWesternIndicator();
+            return &iCalindwesternRect;
+            }
+        case EImIndicatorOuterRect:
+            {
+            return &iImIndiOuterRect;
+            }
+        case EIndiPaneWithTextRect:
+            {
+            return &iIndiPaneRectWithTextForPrtWest;
+            }
+        case EIndiPaneWithoutTextRect:
+            {
+            return &iIndiPaneRectWithoutTextForPrtWest;
+            }
+        case EIndiIconWithTextRect:
+            {
+            return &iIndiIconRectWithTextForPrtWest;
+            }
+        case EIndiIconWithoutTextRect:
+            {
+            return &iIndiIconRectWithoutTextForPrtWest;
+            }
+        case EIndiTextLine:
+            {
+            return &iIndiTextForPrtWest;
+            }
+        case ESpellIndiPaneWithoutTextRect:
+            {
+            return &iSpellIndiPaneWithoutTextForPrtWest;
+            }
+        case ESpellIndiIconWithoutTextRect:
+            {
+            return &iSpellIndiIconWithoutTextForPrtWest;
+            }
+        case ESpellArrowLeft:
+        	{
+        	return &iSpellArrowLeftRectForPrtWest;
+        	}
+        case ESpellArrowLeftInner:
+        	{
+        	return &iSpellArrowLeftInnerRectForPrtWest;
+        	}
+        case ESpellArrowRight:
+        	{
+        	return &iSpellArrowRightRectForPrtWest;
+        	}
+        case ESpellArrowRightInner:
+        	{
+        	return &iSpellArrowRightInnerRectForPrtWest;
+        	}
+        default:
+            break;
+        }
+
+    return NULL;
+    }
+TAny* CGenericItutDataMgr::RequestData(TInt aDataType)
+    {
+    if ( IsPortraitWest())
+        {
+        return RequestDataForPortraitWestUIAndChineseSpellUI( aDataType );
+        }
+    switch ( aDataType )
+        {
+        case EScreenSize:
+            return &iScreenSize;
+        case ELayoutOffset:
+            return &iLayoutOffset;
+        case ELayoutRect:
+            return &iLayoutRect;
+        case EIcfRect:
+            return IsChinese() ? &iIcfChnRect : & iIcfWesRect;
+        case EIcfFont:
+            return IsChinese() ? reinterpret_cast<TAny*>(iIcfFontCn) : 
+                                 reinterpret_cast<TAny*>(iIcfFont);
+        case EBackspaceRect:
+        case EItutPosClear:
+            return IsChinese() ? &iBackspaceCnRect : &iBackspaceRect;
+        case ESwitchRect:
+        case EItutPosSwitchLayout:
+            return IsChinese() ? &iSwitchCnRect : &iSwitchRect;
+        case EImIndicatorRect:
+            if (iSpellMode)
+            	{
+            	return &iSpellEditIndicator;
+            	}
+            	
+            if (IsChinese())
+            	{
+            	return &iImIndicatorChnRect;
+            	} 
+            CalWesternIndicator();
+            return &iCalindwesternRect;
+       	case EImIndicatorOuterRect:
+       	    if(IsChinese())
+       	        {
+       	        return &iImIndiOuterRectCn;
+       	        }
+       	    else
+       	        {
+       	        return &iImIndiOuterRect;
+       	        }
+        case EKeypadRect:
+        	return IsChinese() ? &iKeypadRectCn : &iKeypadRect;	        	
+        case EKeypadCellRects:
+        	return IsChinese() ? &iKeypadCellRectsCn : &iKeypadCellRects;	
+        case EKeypadLeftTextLine:
+            return &iVkNumText;
+        case EKeypadRightTextLine1:
+            return IsThai() ? &iVkAlphaText1ForThai : &iVkAlphaText1;
+        case EKeypadRightTextLine2:
+            return IsThai() ? &iVkAlphaText2ForThai : &iVkAlphaText2;
+        case EKeypadRightTextLine3:
+            return IsThai() ? &iVkAlphaText3ForThai : &iVkAlphaText3;
+        case EDropdownlistUnitWidth:
+            return &iCandsUnitWidth;
+        case EDropdownlistUnitHeight:
+            return &iCandsUnitHeight;
+        case EDropdownlistHorizontalMargin:
+            return &iCandsHorizontalMargin;
+        case EDropdownlistVerticalMargin:
+            return &iCandsVerticalMargin;
+        case EDropdownListNaviWidth:
+            return &iCandsNaviWidth;
+        case EDropdownListSpinBtnHeight:
+            return &iCandsSpinBtnHeight;
+        case EDropdownListSpellLTPos:
+            return &iCandsSpellLTPos;
+        case EDropdownListCandsLTPos:
+            return &iCandsLTPos;
+        case EDropdownListPuncLTPos:
+            return &iCandsPuncLTPos;
+        case EDropdownListFont:
+            return reinterpret_cast<TAny*>(iCandsFont);
+        case EDropdownListTextMargin:
+            return &iCandsTextMargin;
+        case EDropdownListTextColor:
+            return &iCandsTextColor;
+        case ESpellRect:
+            return &iSpellRect;
+        case ESpellFont:
+            return reinterpret_cast<TAny*>(iSpellFont);
+        case ESpellTextColor:
+            return &iSpellTextColor;
+        case ELanguage:
+            return &iLanguage;
+        case EInputMode:
+            return &iInputMode;
+        case ECase:
+            return &iCase;
+        case EChnCandidates:
+            return &iCandidates;
+        case EChnPuncCandidates:
+            return &iPuncCandidates;
+        case EArrowLeftRect:
+        case EItutPosArrowLeft:
+            return IsChinese() ? &iArrowLeftCnRect : &iArrowLeftRect;
+        case EArrowRightRect:
+        case EItutPosArrowRight:
+            return IsChinese() ? &iArrowRightCnRect : &iArrowRightRect;
+        case EArrowUpRect:
+        case EItutPosArrowUp:
+            return &iArrowUpRect;
+        case EArrowDownRect:
+        case EItutPosArrowDown:
+            return &iArrowDownRect;
+        case EItutPosSend:
+            return &iSendRect;
+        case EItutPosDisconn:
+            return &iDisconnRect;
+        case EMatchSelectionTlPos:
+            return &iSelectionTl;
+        case EMatchSelectionItemSize:
+            return &iSelectionItemSize;
+        case EMatchSelectionItemMargin:
+            return &iSelectionItemMargin;
+        case EMatchSelectionTextLine:
+            return &iSelectionTextLine;
+        case EOptionsRect:
+#ifdef LAF_MODIFY	
+        	return IsChinese() ? &iOptionsRectCn : &iOptionsRect;
+#else        	
+            return &iOptionsRect;
+#endif            
+        case ECloseRect:
+#ifdef LAF_MODIFY	
+        	return IsChinese() ? &iCloseRectCn : &iCloseRect;
+#else        	
+            return &iCloseRect;
+#endif            
+       	case ESwitchInnerRect:
+        	return IsChinese() ? &iSwitchInnerCnRect : &iSwitchInnerRect;
+        case ELeftInnerRect:
+        	return IsChinese() ? &iArrowLeftInnerCnRect : &iArrowLeftInnerRect;
+        case ERightInnerRect:
+        	return IsChinese() ? &iArrowRightInnerCnRect : &iArrowRightInnerRect;
+        case EBackspaceInnerRect:
+        	return IsChinese() ? &iBackspaceInnerCnRect : &iBackspaceInnerRect;
+       	case EUpInnerRect:
+        	return &iArrowUpInnerRect;
+        case EDownInnerRect:
+        	return &iArrowDownInnerRect;
+       	case ECloseInnerRect:
+#ifdef LAF_MODIFY	       	
+        	return IsChinese() ? &iCloseInnerRectCn : &iCloseInnerRect;
+#else        	
+        	return &iCloseInnerRect;
+#endif        	
+        case EOptionInnerRect:
+#ifdef LAF_MODIFY	
+        	return IsChinese() ? &iOptionInnerRectCn : &iOptionInnerRect;
+#else        	
+        	return &iOptionInnerRect;
+#endif        	
+        case EItutPosOk:
+            return &iOkRect;
+        case EItutPosCancel:
+            return &iCancelRect;
+        case EBtnTextLine:
+            return &iBtnTextFormat;
+        case ESpellTextCancle:
+            return &iBtnTextFormat1;            
+        case ESpellICFRect:
+            return &iSpellICFRect;
+        case ESpellClrRect:
+            return &iSpellClrRect;
+        case ESpellClrInnerRect:
+            return &iSpellClrInnerRect;
+        case ESpellEditIndicatorRect:
+            return &iSpellEditIndicator;
+        case ESpellQueryPaneRect:
+            return &iSpellQueryPaneRect;       
+        case ELatinOnly:
+            return &iLatinOnly;
+        case EPreviewBubbleRect:
+            return &iPreviewWndRect;
+        case EPreviewBubbleInnerRect:
+            return &iPreviewWndInnerRect;
+        case EPreviewBubbleTextlayout:
+            return &iPreviewWndText;
+        case EPreviewBubbleFont:
+            return reinterpret_cast<TAny*>(iBubbleFont);    
+        default:
+            break;
+        }
+
+    return NULL;
+    }
+
+CGenericItutDataMgr::CGenericItutDataMgr(MItutLayoutContext* aLayoutContext, 
+                                         CPtiEngine* aPtiEngine)
+                                        :
+                                         iPtiEngine( aPtiEngine ),
+                                         iLanguage(ELangNone),
+                                         iInputMode(KInvalidImMode),
+                                         iCase(EAknEditorUpperCase),
+                                         iIsChineseSpell( EFalse ),
+                                         iLayoutContext(aLayoutContext),
+                                         iCurrentScriptIdx(KInvalidIndex),
+                                         iLandScape(EFalse),
+                                         iSpellMode(EFalse)
+    {
+    }
+
+void CGenericItutDataMgr::NotifySubscriber(MItutPropertySubscriber::TItutProperty aPropertyName, 
+                                           const TDesC& aValue)
+    {
+    for (TInt i = 0; i < iSubscriberList.Count(); i++)
+        {
+        TRAP_IGNORE(iSubscriberList[i]->SetPropertyL(aPropertyName, aValue));
+        }
+    }
+
+void CGenericItutDataMgr::NotifyChangeControlLayout(
+    MItutPropertySubscriber::TItutProperty aPropertyName, TInt aCtrlResId)
+    {
+    TInt ctrlResId = KInvalidResId;
+
+    switch (aPropertyName)
+        {
+        case MItutPropertySubscriber::EItutPropertyKeypadResourceId:
+            {
+            ctrlResId = iLayoutContext->Control(ECtrlIdStdItut)->ResourceId();
+            }
+            break;
+        case MItutPropertySubscriber::EItutPropertyCandidateListResourceId:
+            {
+            ctrlResId = iLayoutContext->Control(ECtrlIdStdCandsList)->ResourceId();
+            }
+            break;
+        default:
+            break;
+        }
+
+    // since keypad resource divided by script, so maybe ctrlResId unchanged,
+    // but it is actually changed in different script
+    if ((ctrlResId != aCtrlResId) ||
+        (aPropertyName == MItutPropertySubscriber::EItutPropertyKeypadResourceId))
+        {
+        TPtrC ptr(reinterpret_cast<TText*>(&aCtrlResId), sizeof(aCtrlResId)/sizeof(TText));
+
+        NotifySubscriber(aPropertyName, ptr);
+        }
+    }
+
+TInt CGenericItutDataMgr::GetNextPageCandidateL(RPointerArray<HBufC>& aList)
+    {
+    if (iPtiEngine && (iPtiEngine->NextCandidatePage()))
+        {
+        TItutDataConverter::ConvertChnPhraseCandidateL(iPtiEngine->CandidatePage(), aList);
+
+        return KErrNone;
+        }
+
+    return KErrNotSupported;
+    }
+
+TBool CGenericItutDataMgr::NextPageCandidateExist()
+    {
+    if (iPtiEngine)
+        {
+        return iPtiEngine->MoreCandidatePages();
+        }
+
+    return EFalse;    
+    }
+
+TInt CGenericItutDataMgr::KeypadResourceId()
+    {
+    if (iInputMode == ENumber )
+        {
+        if( IsExistPlusChar()  )
+            return R_FINGER_INPUT_KEYPAD_NUMBER_WITH_PLUS;
+        else
+        	return R_FINGER_INPUT_KEYPAD_NUMBER;
+        }
+    if( iInputMode == ENativeNumber )
+        {
+        if( IsExistPlusChar() )
+        	return R_FINGER_INPUT_KEYPAD_NATIVE_NUMBER_WITH_PLUS;
+        else
+        	return R_FINGER_INPUT_KEYPAD_NATIVE_NUMBER;
+        }
+
+    if ( iLatinOnly )
+    	{
+    	if ( iCase == EAknEditorTextCase || iCase == EAknEditorUpperCase )
+    		{
+    		return R_FINGER_INPUT_KEYPAD_LATINONLY_UPPERCASE;
+    		}
+        return R_FINGER_INPUT_KEYPAD_LATINONLY_LOWERCASE;
+    	}
+
+    if (!iLangCaseSensitive )
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC;
+        }
+    if ( IsChinese() )
+        {
+        return ChineseKeypadResourceId();
+        }
+    if ( IsHindi() )
+        {
+        return HindiKeypadResourceId();
+        }
+        
+    if ( IsKorean() )
+        {
+        return KoreanKeypadResourceId();
+        }
+    if (iCase == EAknEditorTextCase || iCase == EAknEditorUpperCase)
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC_UPPERCASE;
+        }
+    else
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC_LOWERCASE;
+        }
+    }
+    
+TInt CGenericItutDataMgr::ChineseKeypadResourceId()
+    {
+    
+    if (iInputMode == EZhuyin)
+        {
+        return R_FINGER_INPUT_KEYPAD_ZHUYIN_STANDBY_PREDICT;
+        }
+    if (iInputMode == EPinyin)
+        {
+        return R_FINGER_INPUT_KEYPAD_PINYIN_STANDBY_PREDICT;
+        }
+    if (iInputMode == EStroke)
+        {
+        TInt resID;
+        if (InputLanguage() == ELangPrcChinese)
+            {
+            resID = R_FINGER_INPUT_KEYPAD_STROKE_STANDBY_PREDICT_PRC;
+            }
+        else
+            {
+            resID = R_FINGER_INPUT_KEYPAD_STROKE_STANDBY_PREDICT_TRA;
+            }
+        return resID;
+        }
+        
+    if (iCase == EAknEditorTextCase || iCase == EAknEditorUpperCase)
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC_UPPERCASE_CHN;
+        }
+    else
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC_LOWERCASE_CHN;
+        }
+    }
+
+TInt CGenericItutDataMgr::HindiKeypadResourceId()
+    {
+    if ( iInputMode == EHindi )
+        {
+        return R_FINGER_INPUT_KEYPAD_ABC;
+        }
+        
+    if (iCase == EAknEditorTextCase || iCase == EAknEditorUpperCase)
+        {
+        return R_FINGER_INPUT_KEYPAD_LATINONLY_UPPERCASE;
+        }
+    else
+        {
+        return R_FINGER_INPUT_KEYPAD_LATINONLY_LOWERCASE;
+        }
+    }
+    
+TInt CGenericItutDataMgr::KoreanKeypadResourceId()
+    {
+    if ( iInputMode == EHangul )
+        {
+        return R_FINGER_INPUT_KEYPAD_KOREAN;
+        }
+        
+    if (iCase == EAknEditorTextCase || iCase == EAknEditorUpperCase)
+        {
+        return R_FINGER_INPUT_KEYPAD_LATINONLY_UPPERCASE;
+        }
+    else
+        {
+        return R_FINGER_INPUT_KEYPAD_LATINONLY_LOWERCASE;
+        }
+    }
+    
+    
+TInt CGenericItutDataMgr::GetConfigResFileName(TInt aLang)
+    {
+    iResourceFilename.Zero();
+    iResourceFilename = KConfigResourceFile();
+
+    for (TInt i = 0; i < sizeof(TScriptMapping) / sizeof(TScriptMapping[0]); i++)
+        {
+        TScriptInfo script = TScriptMapping[i];
+
+        if (FindLang(&(LangsArr[script.iStartIdx]), script.iEndIdx - script.iStartIdx, aLang) != 
+            KErrNotFound)
+            {
+            iResourceFilename.Append(ResFileExtByScriptIdx(script.iScriptExt));
+            iResourceFilename.Append(KResourceFileExtName);
+            iLangCaseSensitive = script.iCaseSensitive;
+            return i;
+            }
+        }
+
+    // default resource file is latin
+    iResourceFilename.Append(ResFileExtByScriptIdx(TScriptMapping[0].iScriptExt));
+    iResourceFilename.Append(KResourceFileExtName);    
+    iLangCaseSensitive = TScriptMapping[0].iCaseSensitive;
+    return 0;
+    }
+
+TInt CGenericItutDataMgr::FindLang(const TInt* aArray, 
+                                   TInt aEndIdx,
+                                   TInt aLang) 
+    {
+    for (TInt i = 0; i <= aEndIdx; i++)
+        {
+        if (aLang == *aArray)
+            {
+            return i;
+            }
+
+        aArray++;    
+        }
+
+    return KErrNotFound;
+    }
+
+TBool CGenericItutDataMgr::IsChinese()
+    {
+    return (iLanguage == ELangPrcChinese || iLanguage == ELangHongKongChinese 
+         || iLanguage == ELangTaiwanChinese);
+    }
+
+// tp teleca addon
+TBool CGenericItutDataMgr::IsKorean()
+    {
+    return ( iLanguage == ELangKorean );
+    }
+
+TBool CGenericItutDataMgr::IsHindi()
+    {
+    return ( iLanguage == ELangHindi );
+    }
+
+TBool CGenericItutDataMgr::IsThai()
+    {
+    return ( iLanguage == ELangThai );
+    }
+
+TBool CGenericItutDataMgr::IsRtoLLanguage()
+	{
+	return ( iLanguage == ELangArabic ||
+			 iLanguage == ELangHebrew ||
+			 iLanguage == ELangFarsi  ||
+			 iLanguage == ELangUrdu );	
+	}
+	
+TBool CGenericItutDataMgr::IsRtoLLanguage( TInt aLanguage )
+	{
+	return ( aLanguage == ELangArabic ||
+			 aLanguage == ELangHebrew ||
+			 aLanguage == ELangFarsi  ||
+			 aLanguage == ELangUrdu );	
+	}
+
+TBool CGenericItutDataMgr::IsLangDirectionSwitch() const
+	{
+	return iIsLangDirectionSwitch;	
+	}
+	
+const TDesC& CGenericItutDataMgr::ResFileExtByScriptIdx(const TScriptExtIndex aIndex)
+    {
+    switch (aIndex)
+        {
+        case ELatinExt:
+            return KLatinExt;
+        case ECyrillicExt:
+            return KCyrillicExt;
+        case EGreekExt:
+            return KGreekExt;
+        case EHebrewExt:
+            return KHebrewExt;
+        case EArabicExt:
+            return KArabicExt;
+        case EFarsiExt:
+            return KFarsiExt;
+        case EUrduExt:
+            return KUrduExt;
+        case EThaiExt:
+            return KThaiExt;
+        case EChnExt:
+            return KChnExt;
+        case EDevanagiriExt:
+        	return KDevanagiriExt;
+        case EHangulExt:
+        	return KHangulExt;
+        default:
+            break;    
+        }
+
+    return KNullDesC;
+    }
+    
+void CGenericItutDataMgr::SetUpdate(TBool aNeedUpdate)
+	{
+	iNeedUpdate = 	aNeedUpdate;
+	}
+	
+TBool CGenericItutDataMgr::IsUpdate() const
+	{
+	return 	iNeedUpdate;
+	}
+	
+void CGenericItutDataMgr::CalWesternIndicator()
+	{
+    TSize indSize(iImIndicatorWesRect.Width() * 5 / 6, iImIndicatorWesRect.Height() * 5 / 6);
+    
+    TInt offsetX = ( iImIndicatorWesRect.Width() - indSize.iWidth ) / 2;
+    TInt offsetY = ( iImIndicatorWesRect.Height() - indSize.iHeight ) / 2;
+    
+    TInt x = iImIndicatorWesRect.iTl.iX + offsetX;
+    TInt y = iImIndicatorWesRect.iTl.iY + offsetY;
+    
+    iCalindwesternRect.SetRect(TPoint(x,y) , indSize);	
+	}
+
+void CGenericItutDataMgr::SetNumericKeymap( const TInt aKeymap )
+	{
+	iNumericKeymap = aKeymap;
+	}
+
+void CGenericItutDataMgr::SetNumericKeymapData( TInt* aKeymapData )
+	{
+	delete iNumericKeymapData;
+    TInt* len = (TInt*)((TUint8*)aKeymapData - 4);
+    TPtrC16 keymapRes((const TUint16*)aKeymapData, *len/2);  
+    iNumericKeymapData = keymapRes.Alloc();
+	}
+
+TBool CGenericItutDataMgr::IsExistPlusChar()
+    {
+    if( !IsNumericOnly() )
+    	{
+    	return EFalse;
+    	}
+    if ( iNumericKeymap == EKeymapFromResource )
+    	{
+    	HBufC* keyRes = iNumericKeymapData;
+    	if( keyRes != NULL && keyRes->Locate( TChar( KPlusChar ) ) != KErrNotFound )
+    		{
+    		return ETrue;
+    		}
+    	}
+    else if ( iNumericKeymap == EAknEditorStandardNumberModeKeymap 
+    		|| iNumericKeymap == EAknEditorConverterNumberModeKeymap
+    		|| iNumericKeymap == EAknEditorCalculatorNumberModeKeymap 
+    		|| iNumericKeymap == EAknEditorToFieldNumberModeKeymap 
+    		|| iNumericKeymap == EAknEditorFixedDiallingNumberModeKeymap 
+    		|| iNumericKeymap == EAknEditorSATNumberModeKeymap )
+    	{
+    	return ETrue;
+    	}
+    return EFalse;
+    }
+
+// End Of File