--- /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