textinput/peninputsplititut/src/peninputsplititutwindow.cpp
changeset 0 eb1f2e154e89
child 5 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputsplititut/src/peninputsplititutwindow.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1278 @@
+/*
+* 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 <peninputsplititutnew.rsg>
+#include <peninputsplititutconfig_chinese.rsg>
+#include <skinlayout.cdl.h>
+#include <AknsDrawUtils.h>
+#include <AknsUtils.h>
+#include <AknUtils.h> 
+#include <peninputrawkeybutton.h>
+#include <peninputrepeatbutton.h>
+#include <peninputcommonbutton.h>
+#include <AknFepGlobalEnums.h>
+#include <aknfeppeninputenums.h>
+#include <peninputdropdownlist.h>
+#include <s32mem.h>
+#include <peninputlabel.h>
+//#include <peninputlayoutbubblectrl.h>
+
+#include "peninputsplititutwindow.h"
+#include "peninputsplititutdatamgr.h"
+#include "peninputsplititutuimgrbase.h"
+#include "peninputsplititutuistatebase.h"
+#include "peninputsplititutchnuimgr.h"
+#include "peninputsplititutwesternuimgr.h"
+#include "peninputsplititutconverter.h"
+#include "peninputcommonbgctrl.h"
+
+_LIT(KBmpFileName, "z:\\resource\\apps\\peninputsplititut.mbm");
+
+const TInt KImageMajorSkinId = EAknsMajorGeneric;
+const TUint KDefaultSpellTextColor = 0;
+
+const TInt KSpaceUnicode = 32;
+const TInt KButtonOneUnicode = 49;
+const TInt KInvalidBmp = -1;
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::NewL
+// ---------------------------------------------------------------------------
+//
+CSplitItutWindow* CSplitItutWindow::NewL(CSplitItutWindowManager* aWindowMgr,
+                                             CSplitItutUiLayout* aLayoutOwner,
+                                             CSplitItutDataMgr* aDataMgr)
+    {
+    CSplitItutWindow* window = new (ELeave) CSplitItutWindow(aWindowMgr,aLayoutOwner,aDataMgr);
+
+    CleanupStack::PushL(window);
+    window->ConstructL();
+    CleanupStack::Pop(window);
+
+    return window;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CSplitItutWindow
+// ---------------------------------------------------------------------------
+//
+CSplitItutWindow::CSplitItutWindow(CSplitItutWindowManager* aWindowMgr, 
+                                       CSplitItutUiLayout* aLayoutOwner,
+                                       CSplitItutDataMgr* aDataMgr)
+    : iDataMgr(aDataMgr),
+      iLayoutOwner(aLayoutOwner),
+      iWindowMgr(aWindowMgr)
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::~CSplitItutWindow
+// ---------------------------------------------------------------------------
+//
+CSplitItutWindow::~CSplitItutWindow()
+    {
+    delete iBmpRotator;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetPropertyL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetPropertyL(MItutPropertySubscriber::TItutProperty aPropertyName, 
+                                        const TDesC& aPropertyValue)
+    {
+    switch (aPropertyName)
+        {
+        case MItutPropertySubscriber::EItutPropertyKeypadResourceId:
+        case MItutPropertySubscriber::EItutPropertyCandidateListResourceId:
+            {
+            TInt resId = TItutDataConverter::AnyToInt(const_cast<TUint16*>(aPropertyValue.Ptr()));
+            
+            if (resId == KInvalidResId)
+                {
+                return;
+                }
+
+            if (aPropertyName == MItutPropertySubscriber::EItutPropertyKeypadResourceId)
+                {
+                ConstructItutKeypadFromResourceL(resId);
+                }
+            else if (iCandsList)
+                {
+                iCandsList->ResetAndClear(CFepCtrlDropdownList::EListExpandable);
+                iCandsList->SetResourceId(resId);
+                iCandsList->ConstructFromResourceL();                  
+                }
+            }
+            break;
+        case MItutPropertySubscriber::EItutPropertyLandscape:
+            {
+            TBool landscape = *((TInt*)(aPropertyValue.Ptr()));
+
+            if (iDataMgr->IsChinese())
+                {
+                if (landscape)
+                    {
+                    // expand upward
+                    iSpellCandsList->SetCandExpandType(CFepCtrlDropdownList::ECandExpandUpward);
+                    iCandsList->SetCandExpandType(CFepCtrlDropdownList::ECandExpandUpward);
+                    }
+                else
+                    {
+                    // portrait, expand downward
+                    iSpellCandsList->SetCandExpandType();
+                    iCandsList->SetCandExpandType();
+                    }
+                }
+            }
+            break;
+        default:
+            break;    
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateItutKeypadL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateItutKeypadL()
+    {
+    TRect keypadRect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(EKeypadRect));
+
+    TFontSpec spec;
+
+    iStandardItutKp = CVirtualKeyboard::NewL(keypadRect,
+                                             iLayoutOwner,
+                                             ECtrlIdStdItut,
+                                             spec);
+    AddControlL(iStandardItutKp);
+
+    iStandardItutKp->SetResourceId(KInvalidResId);
+	
+	// read keypad image info
+	ConstructKeyImageFromResourceL( R_ITUT_KEYPAD_BITMAP );
+	
+    iStandardItutKp->SetKeyTextColorGroup( EAknsCIQsnTextColorsCG68 );
+    iStandardItutKp->SetDrawOpaqueBackground(EFalse);
+    
+    // read key shift icon res
+    CPenInputColorIcon* shiftIcon = CPenInputColorIcon::NewL( R_ITUT_KEYPAD_SHIFT_ICON );
+    shiftIcon->ResizeL( iDataMgr->iShiftIconRect.Size() );
+    iStandardItutKp->SetShiftIcon( shiftIcon );
+    
+    //set key to be 9 piece graphics
+    iStandardItutKp->SetKeySkinId( EKeyBmpNormal, KAknsIIDQsnFrKeypadButtonFrNormal );
+    iStandardItutKp->SetKeySkinId( EKeyBmpHighlight, KAknsIIDQsnFrKeypadButtonFrPressed );
+    iStandardItutKp->SetKeySkinId( EKeyBmpDim, KAknsIIDQsnFrKeypadButtonFrInactive );
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateLayoutIconL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateLayoutIconL(TInt aMajorSkinId,
+                                             TInt aMinorSkinId,
+                                             const TDesC& aBmpFileName,
+                                             TInt aBmpId,
+                                             TInt aMaskBmpId,
+                                             CFbsBitmap*& aBmp,
+                                             CFbsBitmap*& aMaskBmp,
+                                             TSize aSize)
+    {
+    TAknsItemID id;
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    id.Set(TInt(aMajorSkinId), aMinorSkinId);
+
+    if (aBmpId != KInvalidBmp)
+        {
+        if (aMaskBmpId != KInvalidBmp)
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   aBmp,
+                                   aMaskBmp,
+                                   aBmpFileName,
+                                   aBmpId,
+                                   aMaskBmpId);
+            AknIconUtils::SetSize(aMaskBmp, aSize, EAspectRatioNotPreserved);
+            }
+        else
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   aBmp,
+                                   aBmpFileName,
+                                   aBmpId);
+            }
+
+        AknIconUtils::SetSize(aBmp, aSize, EAspectRatioNotPreserved);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ConstructItutKeypadFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ConstructItutKeypadFromResourceL(TInt aResId)
+    {
+    iStandardItutKp->SetResourceId(aResId);
+
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadLeftTextLine)),
+        EPosLeft);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine1)),
+        EPosRight1);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine2)),
+        EPosRight2);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine3)),
+        EPosRight3);
+
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC(reader, aResId);
+
+    // construct keys
+    TInt countkeys = reader.ReadInt16();
+
+    RPointerArray<CVirtualKey>& keys = 
+        const_cast<RPointerArray<CVirtualKey>&>(iStandardItutKp->KeyArray());
+
+    if (keys.Count() == 0)
+        {
+        for (TInt i = 0; i < countkeys; i++)
+            {
+            RArray<TRect>& cellrects = 
+                       TItutDataConverter::AnyToRectArray(iDataMgr->RequestData(EKeypadCellRects));
+
+            CVirtualKey* vk = CreateKeyL(reader,
+                                         cellrects[i]);
+            CleanupStack::PushL(vk);
+            iStandardItutKp->AddRawKeyL(vk);
+            CleanupStack::Pop(vk);
+            }
+        }
+    else
+        {
+        countkeys = keys.Count();
+        for (TInt i = 0; i < countkeys; i++)
+            {
+            ChangeVirtualKeyInfoL(reader, keys[i]);
+            }
+        }
+
+    CleanupStack::PopAndDestroy(1); // reader
+	
+	iStandardItutKp->Draw();
+    iStandardItutKp->UpdateArea( iStandardItutKp->Rect() );
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ChangeVirtualKeyInfoL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ChangeVirtualKeyInfoL( TResourceReader& aReader, 
+                                              CVirtualKey* aKey)
+    {
+
+    TBuf<5> mapData;
+    //Init Data
+    for (TInt i = 0; i < 5; i++)
+        {
+        mapData.Append(0);
+        }
+    
+    RPointerArray<HBufC> unicodesArr;
+    for (TInt i = 0; i <= EPosLast; i++)
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        if (i == 0 && unicode != NULL)
+            {
+            mapData = unicode->Des();
+            }
+        unicodesArr.AppendL(unicode);
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+    if (keyscancode != aKey->ScanCode())
+        {
+        return;
+        }
+    
+    TInt curMode = TItutDataConverter::AnyToInt(
+            iLayoutOwner->DataMgr()->RequestData(EInputMode));
+    TBool isChinese = iLayoutOwner->DataMgr()->IsChinese();
+    TBool isThai = iLayoutOwner->DataMgr()->IsThai();
+    
+    TInt latinOnly = TItutDataConverter::AnyToInt(
+            iLayoutOwner->DataMgr()->RequestData(ELatinOnly));     
+            
+    //No symbol in Number range. Symbols under chinese are read from res 
+    if ( curMode != ENumber && curMode != ENativeNumber 
+         && iSymbolData.iSymbol1 != 0 && keyscancode == KButtonOneUnicode 
+         && ( !isChinese || latinOnly )
+         && ( !isThai ) )
+        {
+        //So we should delete it
+        for (TInt i = 0; i <= EPosLast; i++)
+            {
+            delete unicodesArr[i];
+            }
+        SetUnicodesForHardKey1(aKey, mapData);
+        }
+    else
+        {
+        aKey->SetUnicodesL(unicodesArr);
+        }
+
+    unicodesArr.Close();
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateKeyL
+// ---------------------------------------------------------------------------
+//
+CVirtualKey* CSplitItutWindow::CreateKeyL(TResourceReader& aReader,
+                                              TRect aKeyRect)
+    {
+    RPointerArray<HBufC> unicodesArr;
+    for (TInt i = 0; i <= EPosLast; i++)
+        {
+        HBufC* unicode = aReader.ReadHBufCL();
+        unicodesArr.AppendL(unicode);
+        }
+
+    TInt keyscancode = aReader.ReadInt16();
+
+    CVirtualKey* vk = CVirtualKey::NewL(unicodesArr,
+                                        keyscancode, 
+                                        aKeyRect);
+    unicodesArr.Close();
+    CleanupStack::PushL(vk);
+    
+    TRect innerrect = aKeyRect;
+    innerrect.Shrink(TSize(7, 7));
+    vk->SetInnerRect(innerrect);
+
+    CleanupStack::Pop(vk);
+
+    return vk;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateBackGroundControlL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateBackGroundControlL()
+	{
+    iBackgroundCtrl = CAknFepCtrlCommonBgCtrl::NewL(
+                                          iLayoutOwner,
+                                          ECtrlIdBackground,
+                                          KAknsIIDQsnFrPopup,
+                                          KAknsIIDQsnFrPopupCenter);
+
+
+	iBackgroundCtrl->SetRect(TItutDataConverter::AnyToRect(
+					iLayoutOwner->DataMgr()->RequestData(EBackgroundRect)));
+					    							
+	AddControlL(iBackgroundCtrl);
+	}
+
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateRawKeyButtonL
+// ---------------------------------------------------------------------------
+//
+CAknFepCtrlCommonButton* CSplitItutWindow::CreateRawKeyButtonL(const TInt aControlId,
+                                                        const TInt aCommand)
+    {
+    CAknFepCtrlCommonButton* temp = NULL;
+    
+    if (aCommand == KUnavailableID)
+        {
+        temp =  CAknFepCtrlRawKeyButton::NewL(iLayoutOwner,
+                                             aControlId,
+                                             KAknsIIDQsnFrFunctionButtonNormal,
+											 KAknsIIDQsnFrFunctionButtonPressed,
+											 KAknsIIDQsnFrFunctionButtonInactive,  
+                                             EEventRawKeyDownEvent,
+                                             EEventRawKeyUpEvent); 
+        }
+    else
+        {
+        temp =  CAknFepCtrlRawKeyButton::NewL(iLayoutOwner,
+                                             aControlId,
+                                             KAknsIIDQsnFrFunctionButtonNormal,
+											 KAknsIIDQsnFrFunctionButtonPressed,
+											 KAknsIIDQsnFrFunctionButtonInactive,  
+                                             EEventRawKeyDownEvent,
+                                             EEventRawKeyUpEvent,
+                                             aCommand); 
+        }
+                                         
+    return temp;       
+    }
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateCommonButtonL
+// ---------------------------------------------------------------------------
+//
+CAknFepCtrlCommonButton* CSplitItutWindow::CreateCommonButtonL(const TInt aControlId)
+    {
+    return CAknFepCtrlCommonButton::NewL(iLayoutOwner, 
+    									 aControlId,
+    									 KAknsIIDQsnFrFunctionButtonNormal,
+										 KAknsIIDQsnFrFunctionButtonPressed,
+										 KAknsIIDQsnFrFunctionButtonInactive );
+     
+    }    
+  
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateRepeatButtonL
+// ---------------------------------------------------------------------------
+//
+CAknFepCtrlCommonButton* CSplitItutWindow::CreateRepeatButtonL(const TInt /*aControlId*/,
+                                                               const TInt /*aCommand*/)
+    {
+    return NULL;
+     
+    }     
+
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateButtonL
+// ---------------------------------------------------------------------------
+//
+CFepUiBaseCtrl* CSplitItutWindow::CreateButtonL(TButtonType aType,
+                                                  const TInt aControlId,
+                                                  const TInt aRectId,
+                                                  const TInt aInnerRectId,
+                                                  const TInt aResourceId,
+                                                  const TInt aCommand)
+    {
+    CAknFepCtrlCommonButton* temp = NULL;
+    
+    switch(aType)
+        {
+        case ERawKeyButton:
+            {
+            temp = CreateRawKeyButtonL(aControlId, aCommand);    
+            }
+        break;
+        case ECommonButton:
+            {
+            temp = CreateCommonButtonL(aControlId);    
+            }
+        break;
+        default:
+            {
+            User::Leave(KErrArgument);    
+            }                
+        }
+
+    TRect btnrect;
+    TRect btnInnerRect;
+    
+    if (aRectId != KUnavailableID &&
+        aInnerRectId != KUnavailableID)
+        {
+        btnrect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(aRectId));
+        btnInnerRect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(aInnerRectId));
+           
+        temp->SetRect(btnrect);
+        temp->SetForgroundBmpRect(btnInnerRect);
+        }
+        
+    if (aResourceId != KUnavailableID)
+        {
+        temp->SetResourceId(aResourceId);
+        temp->ConstructFromResourceL();            
+        }
+      
+    if (aRectId != KUnavailableID &&
+        aInnerRectId != KUnavailableID)
+        {
+        temp->SizeChanged(temp->Rect(), btnInnerRect, ETrue);
+        }        
+
+    AddControlL(temp);
+    
+    return temp;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateAllButtonL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateAllButtonL()
+    {
+    //create backgrand 
+    CreateBackGroundControlL();
+    
+    //create backspace
+    CreateButtonL(ERawKeyButton, ECtrlIdBackspace, EBackspaceRect, 
+                  EBackspaceInnerRect,R_FINGER_RAWKEY_BACKSPACE);
+
+    // create navi 
+    CreateButtonL(ERawKeyButton, ECtrlIdArrowLeft, EArrowLeftRect, 
+                  ELeftInnerRect,R_FINGER_RAWKEY_LEFTARROW);    
+    
+    CreateButtonL(ERawKeyButton, ECtrlIdArrowRight, EArrowRightRect, 
+                  ERightInnerRect,R_FINGER_RAWKEY_RIGHTARROW); 
+
+    /*
+    CreateButtonL(ERepeatButtonEx, ECtrlIdArrowUp, EArrowUpRect, 
+                  EUpInnerRect,R_PENINPUT_FINGER_CURSOR_UP); 
+
+    CreateButtonL(ERepeatButtonEx, ECtrlIdArrowDown, EArrowDownRect, 
+                  EDownInnerRect,R_PENINPUT_FINGER_CURSOR_DOWN);
+    */
+    //create option 
+    CreateButtonL(ECommonButton, ECtrlIdOptions, EOptionsRect, 
+                  EOptionInnerRect, R_PENINPUT_FINGER_OPTIONS);    
+    
+    //Crease close
+    CreateButtonL(ECommonButton, ECtrlIdClose, ECloseRect, 
+                  ECloseInnerRect, R_PENINPUT_FINGER_CLOSE);                   
+
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateDropdownListL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateDropdownListL()
+    {
+	TRect outrect,innerrect;
+	outrect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(EPreviewBubbleRect));  
+	innerrect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(EPreviewBubbleInnerRect));
+    TAknTextLineLayout bubbleTextLayout = 
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EPreviewBubbleTextlayout));
+    CFont* bubbleFont = TItutDataConverter::AnyToFont(iDataMgr->RequestData(EPreviewBubbleFont));
+    
+    TDropdownListDrawInfo candiDrawInfo(KAknsIIDQsnFrFunctionButtonInactive, 
+    									KAknsIIDQsnFrFunctionButtonNormal,
+    								    KAknsIIDQsnFrFunctionButtonPressed,
+    						            KAknsIIDQsnFrItutButtonCandiSideL,
+    						            KAknsIIDQsnFrItutButtonCandiMiddle,
+    						            KAknsIIDQsnFrItutButtonCandiSideR,
+    						            KAknsIIDQsnFrItutButtonCandiPressedSideL,
+    						            KAknsIIDQsnFrItutButtonCandiPressedMiddle,
+    						            KAknsIIDQsnFrItutButtonCandiPressedSideR,
+    						            TRgb(194, 221, 242),
+    						            ETrue);
+    						            
+    TDropdownListDrawInfo compositionDrawInfo(KAknsIIDQsnFrFunctionButtonInactive, 
+    									KAknsIIDQsnFrFunctionButtonNormal,
+    								    KAknsIIDQsnFrFunctionButtonPressed,
+    						            KAknsIIDQsnFrItutButtonComposeSideL,
+    						            KAknsIIDQsnFrItutButtonComposeMiddle,
+    						            KAknsIIDQsnFrItutButtonComposeSideR,
+    						            KAknsIIDQsnFrItutButtonComposePressedSideL,
+    						            KAknsIIDQsnFrItutButtonComposePressedSideR,
+    						            KAknsIIDQsnFrItutButtonComposePressedMiddle,
+    						            TRgb(194, 221, 242),
+    						            ETrue);    						            
+    TInt unitWidth =  TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistUnitWidth));
+    TInt unitHeight = TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistUnitHeight));
+    TInt horizontalMargin =  
+        TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistHorizontalMargin));
+    TInt verticalMargin =  
+        TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistVerticalMargin));
+
+    CFont* listfont = TItutDataConverter::AnyToFont(iDataMgr->RequestData(EDropdownListFont));
+    TInt textmargin = TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownListTextMargin));
+    TRgb textcolor = TItutDataConverter::AnyToRgb(iDataMgr->RequestData(EDropdownListTextColor));
+
+    TPoint spellListLTPos = 
+        TItutDataConverter::AnyToPoint(iDataMgr->RequestData(EDropdownListSpellLTPos));
+    // create spelling drop list
+    iSpellCandsList = CFepCtrlDropdownList::NewL(iLayoutOwner,
+                                                 ECtrlIdSpellCandsList,
+                                                 R_AKN_FEP_PINYIN_SPELLING_DROP_DOWN_LIST,
+                                                 spellListLTPos,
+                                                 TSize(unitWidth, unitHeight),
+                                                 5,
+                                                 3);
+
+
+    iSpellCandsList->SetCellMargin(horizontalMargin, verticalMargin);
+    iSpellCandsList->SetFont(listfont);
+    AddControlL(iSpellCandsList);
+    iSpellCandsList->SetEventIdForCandidateSelected(EItutCmdCandidateSelected);
+    iSpellCandsList->SetCandTruncateType(CFepCtrlDropdownList::ECandTruncateFromBeginning);
+    iSpellCandsList->SetFuzzyBoundry(10);
+    iSpellCandsList->Hide(ETrue);
+	iSpellCandsList->SetDropdownListImgID(compositionDrawInfo);
+
+    TPoint candListLTPos = 
+        TItutDataConverter::AnyToPoint(iDataMgr->RequestData(EDropdownListCandsLTPos));
+    // create candidate drop list
+    iCandsList = CFepCtrlDropdownList::NewL(iLayoutOwner,
+                                            ECtrlIdStdCandsList,
+                                            R_AKN_FEP_NORMAL_CAND_DROP_DOWN_LIST,
+                                            candListLTPos,
+                                            TSize(unitWidth, unitHeight),
+                                            5,
+                                            3);
+
+
+    iCandsList->SetCellMargin(horizontalMargin, verticalMargin);
+    iCandsList->SetFont(listfont);
+    AddControlL(iCandsList);
+    iCandsList->SetEventIdForCandidateSelected(EItutCmdCandidateSelected);
+    iCandsList->SetEventIdForNextPageCandidate(EItutCmdGetNextCandidatePage);
+    iCandsList->SetEventIdForCandidateExisted(EItutCmdCandidateExisted);
+    iCandsList->SetCandTruncateType(CFepCtrlDropdownList::ECandTruncateAsEllipsis);        
+    iCandsList->SetFuzzyBoundry(10);
+    iCandsList->Hide(ETrue);
+	iCandsList->SetDropdownListImgID(candiDrawInfo);
+
+    TPoint puncListLTPos = 
+        TItutDataConverter::AnyToPoint(iDataMgr->RequestData(EDropdownListPuncLTPos));
+    // create punctuation drop list
+    iPuncCandsList = CFepCtrlDropdownList::NewL(iLayoutOwner,
+                                                ECtrlIdPuncCandsList,
+                                                R_AKN_FEP_PUNC_DROP_DOWN_LIST,
+                                                puncListLTPos,
+                                                TSize(unitWidth, unitHeight),
+                                                5,
+                                                1);
+    iPuncCandsList->SetCellMargin(horizontalMargin, verticalMargin);
+    iPuncCandsList->SetFont(listfont);
+    AddControlL(iPuncCandsList);
+    iPuncCandsList->SetEventIdForCandidateSelected(EItutCmdCandidateSelected);
+	iPuncCandsList->SetDropdownListImgID(candiDrawInfo);
+    iPuncCandsList->Hide(ETrue);
+    }
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ConstructL()
+    {
+    iBmpRotator = CPeninputSyncBitmapRotator::NewL();
+    CreateAllButtonL();
+    CreateItutKeypadL();
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::AddControlL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::AddControlL(CFepUiBaseCtrl* aControl)
+    {
+    iLayoutOwner->AddControlL(aControl);   
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CreateChineseSpecificCtrlsIfNeededL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CreateChineseSpecificCtrlsIfNeededL()
+    {
+    if (iChnCtrlInited)
+        {
+        return;
+        }
+
+    CreateDropdownListL();
+    // create spell control for stroke/zhuyin
+    TRect rect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(ESpellRect));
+    iSpell = CFepInputContextField::NewL(rect, iLayoutOwner, ECtrlIdSpellICF);
+
+    iSpell->SetResourceId(R_FINGER_SPELL);
+    ConstructSpellCtrlFromResourceL();
+
+    iSpell->SetFont(TItutDataConverter::AnyToFont(iDataMgr->RequestData(ESpellFont)));
+    AddControlL(iSpell); 
+
+    iSpell->Hide(ETrue);
+    
+  
+    iChnCtrlInited = ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ConstructSpellCtrlFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ConstructSpellCtrlFromResourceL()
+    {
+    if (!iSpell || !iSpell->ResourceId())
+        {
+        return;
+        }
+
+    TResourceReader spellreader;
+    CCoeEnv::Static()->CreateResourceReaderLC(spellreader, iSpell->ResourceId());
+
+    TInt bgimgResId = spellreader.ReadInt32();
+    TResourceReader bgreader;
+    CCoeEnv::Static()->CreateResourceReaderLC(bgreader, bgimgResId);
+
+    TInt bmpid = bgreader.ReadInt16();
+    TInt maskbmpid = bgreader.ReadInt16();
+    TInt bmpskinid = bgreader.ReadInt16();
+
+    CFbsBitmap* bmp = NULL;
+    CFbsBitmap* maskbmp = NULL;
+    
+    CreateLayoutIconL(KImageMajorSkinId,
+                      bmpskinid,
+                      KBmpFileName,
+                      bmpid,
+                      maskbmpid,
+                      bmp,
+                      maskbmp,
+                      iSpell->Rect().Size());
+
+    if (bmp)
+        {
+        iSpell->SetBackgroundBitmapL(bmp);
+        }
+        
+    delete maskbmp;
+
+    CleanupStack::PopAndDestroy( 1 ); // bgreader
+
+    TInt colorMajorSkinId = spellreader.ReadInt32();
+    TInt skinitemid= spellreader.ReadInt16();
+    TInt coloridx = spellreader.ReadInt16();
+
+    TAknsItemID colorid;
+    colorid.Set(TInt(colorMajorSkinId), skinitemid);
+
+    TRgb spelltextcolor;
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    TInt error = AknsUtils::GetCachedColor(skininstance, 
+                                           spelltextcolor, 
+                                           colorid, 
+                                           coloridx);
+
+    if (error != KErrNone)
+        {
+        spelltextcolor = TRgb(KDefaultSpellTextColor);
+        }
+
+    iSpell->SetTextColor(spelltextcolor);
+
+    CleanupStack::PopAndDestroy( 1 ); // spellreader
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::PenInputType
+// ---------------------------------------------------------------------------
+//
+TInt CSplitItutWindow::PenInputType()
+    {
+    return EPluginInputModeItut;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetCtrlRect
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetCtrlRect(CFepUiBaseCtrl* aCtrl, TInt aRectIdx)
+    {
+    aCtrl->SetRect(TItutDataConverter::AnyToRect(iDataMgr->RequestData(aRectIdx)));
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SizeChanged
+// ---------------------------------------------------------------------------
+//
+TInt CSplitItutWindow::SizeChanged()
+    {
+    // resize all controls
+    SetCtrlRect(iStandardItutKp, EKeypadRect);
+
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadLeftTextLine)),
+        EPosLeft);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine1)),
+        EPosRight1);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine2)),
+        EPosRight2);
+    iStandardItutKp->SetTextLineLayout(
+        TItutDataConverter::AnyToTextLine(iDataMgr->RequestData(EKeypadRightTextLine3)),
+        EPosRight3);
+    
+    RPointerArray<CVirtualKey>& keys = 
+        const_cast<RPointerArray<CVirtualKey>&>(iStandardItutKp->KeyArray());
+    RArray<TRect>& cellRects = 
+        TItutDataConverter::AnyToRectArray(iDataMgr->RequestData(EKeypadCellRects));
+
+    for (TInt i = 0 ; i < keys.Count(); i++)
+        {
+        keys[i]->SetRect(cellRects[i]);
+        TRect innerrect = cellRects[i];
+        innerrect.Shrink(TSize(4, 4));
+        keys[i]->SetInnerRect(innerrect);
+        }
+	// set key background image size
+	TSize curSize = cellRects[0].Size();
+	if( iStandardItutKp->NonIrregularKeyBitmap(EKeyBmpNormal) )
+		{
+		TSize size = iStandardItutKp->NonIrregularKeyBitmap(EKeyBmpNormal)->SizeInPixels();
+		if( curSize != size )	
+			{
+	        for ( TInt i = 0; i <= EKeyBmpLastType; i++ )
+	            {
+	            if( iStandardItutKp->NonIrregularKeyBitmap((TVirtualKeyBmpType)i) )
+	            	{
+	                AknIconUtils::SetSize( 
+                                   iStandardItutKp->NonIrregularKeyBitmap((TVirtualKeyBmpType)i), 
+                                   curSize, EAspectRatioNotPreserved );                    		
+	            	}
+	            }	
+			}
+		}
+
+    // should set textline when it is defined in laf
+	iBackgroundCtrl->SizeChanged( 
+                         TItutDataConverter::AnyToRect(iDataMgr->RequestData( EBackgroundRect ) ) );								
+	
+    TRAP_IGNORE(ApplyVariantLafDataL(ETrue); 
+                /*iLayoutOwner->HandleCommand(EItutExtCmdSizeChanged, NULL)*/);
+    
+    
+    if (iChnCtrlInited)
+        {
+        SetCtrlRect(iSpell, ESpellRect);
+        iSpell->SetFont(TItutDataConverter::AnyToFont(iDataMgr->RequestData(ESpellFont)));
+
+        ResizeCandidateList(iSpellCandsList, EDropdownListSpellLTPos, ETrue);
+        ResizeCandidateList(iCandsList, EDropdownListCandsLTPos, ETrue);
+        ResizeCandidateList(iPuncCandsList, EDropdownListPuncLTPos, EFalse);
+        }
+
+    return KErrNone;    
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ControlSizeChanged
+// ---------------------------------------------------------------------------
+//
+TBool CSplitItutWindow::ControlSizeChanged(const TInt aControlId, 
+                                            const TInt aRect, 
+                                            const TInt aInnerRect, 
+                                            TBool aIsReloadImages)
+    {
+    CAknFepCtrlCommonButton* temp = CommonButtonControl(aControlId);
+    if( !temp )
+    	return EFalse;
+    
+
+    TRect rect;
+    TRect innerRect;
+    
+    rect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(aRect));
+	innerRect = TItutDataConverter::AnyToRect(iDataMgr->RequestData(aInnerRect));
+    
+    TBool bSizedChanged = (rect.Size() != temp->Rect().Size()) && 
+    	    (innerRect.Size() != temp->ForgroundBmpRect().Size());
+    temp->SizeChanged(rect, innerRect, aIsReloadImages);   
+      
+    return bSizedChanged;
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ApplyVariantLafDataL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ApplyVariantLafDataL(TBool /*aResolutionChange*/)
+    {
+    if( iDataMgr->IsChinese() )
+        {
+ //       ControlSizeChanged(ECtrlIdArrowUp, EArrowUpRect, EUpInnerRect, ETrue);
+ //       ControlSizeChanged(ECtrlIdArrowDown, EArrowDownRect, EDownInnerRect, ETrue);
+        }
+    
+    TBool bSizeChanged = EFalse;       
+    ControlSizeChanged(ECtrlIdArrowLeft, EArrowLeftRect, ELeftInnerRect, ETrue);
+    ControlSizeChanged(ECtrlIdArrowRight, EArrowRightRect, ERightInnerRect, ETrue);
+    bSizeChanged = ControlSizeChanged(ECtrlIdBackspace, EBackspaceRect, EBackspaceInnerRect, ETrue);
+    ControlSizeChanged(ECtrlIdOptions, EOptionsRect, EOptionInnerRect, ETrue);
+    ControlSizeChanged(ECtrlIdClose, ECloseRect, ECloseInnerRect, ETrue);
+   						  	
+    // resize all controls
+    SetCtrlRect(iStandardItutKp, EKeypadRect); 
+    
+    // Handle control res when language direction changing here.
+    if( iDataMgr->IsLangDirectionSwitch() || 
+    	( bSizeChanged && iDataMgr->IsRtoLLanguage() ) )
+    	{
+    	HandleButtonResOnLangDirChange( ECtrlIdBackspace );
+    	iDataMgr->SetLangDirectionSwitch( EFalse );	
+    	}   
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ResizeCandidateList
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ResizeCandidateList(CFepCtrlDropdownList* aList, 
+                                             TInt aLTPosIdx, TBool aExpandable)
+    {
+    if (!aList)
+        {
+        return;   
+        }
+    
+    TInt unitWidth = TItutDataConverter::AnyToInt(
+                        iDataMgr->RequestData(EDropdownlistUnitWidth));
+    TInt unitHeight = TItutDataConverter::AnyToInt(
+                        iDataMgr->RequestData(EDropdownlistUnitHeight));
+    TInt horizontalMargin = 
+        TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistHorizontalMargin));
+    TInt verticalMargin = 
+        TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownlistVerticalMargin));
+    TInt naviWidth = TItutDataConverter::AnyToInt(
+                        iDataMgr->RequestData(EDropdownlistUnitWidth));
+    CFont* listfont = TItutDataConverter::AnyToFont(
+                        iDataMgr->RequestData(EDropdownListFont));
+    TPoint listLTPos = TItutDataConverter::AnyToPoint(iDataMgr->RequestData(aLTPosIdx));
+    
+    aList->SizeChanged(unitWidth, 
+                       unitHeight,
+                       naviWidth,
+                       listLTPos);
+
+    aList->SetCellMargin(horizontalMargin, verticalMargin);
+    
+    if (aExpandable)
+        {
+        TInt naviSpinBtnHeight = 
+            TItutDataConverter::AnyToInt(iDataMgr->RequestData(EDropdownListSpinBtnHeight));
+        
+        aList->SetSpinBtnHeight(naviSpinBtnHeight);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::OnSkinChange
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::OnSkinChange()
+    {
+    // when skin change all control with skin image should be reload.
+    TRAP_IGNORE(ConstructKeyImageFromResourceL( R_ITUT_KEYPAD_BITMAP ));    
+    
+    // reconstruct shift icon when skin changed
+    TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ReConstructL());
+    TRAP_IGNORE(iStandardItutKp->ShiftIcon()->ResizeL(iDataMgr->iShiftIconRect.Size()));
+    
+    //Skin change will case the reconstuction of the button graphic.
+    //When language is RToL, it should be mirrored again.
+    if( iDataMgr->IsRtoLLanguage() )
+    	{
+    	HandleButtonResOnLangDirChange( ECtrlIdBackspace );	
+    	}
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CalculateFrameRects
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::CalculateFrameRects(const TRect aRect,
+											 TRect& aOuterRect, 
+											 TRect& aInnerRect )
+    {
+    TRect windowRect = aRect;
+    
+    TAknLayoutRect topLeft;
+    topLeft.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_2());
+
+    TAknLayoutRect bottomRight;
+    bottomRight.LayoutRect(windowRect, SkinLayout::Submenu_skin_placing_Line_5());
+
+    aOuterRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr);
+    aInnerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl);
+    }
+    
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::CommonButtonControl
+// ---------------------------------------------------------------------------
+//
+CAknFepCtrlCommonButton* CSplitItutWindow::CommonButtonControl(const TInt aControlId)
+    {
+    CFepUiBaseCtrl* ctrl = NULL;
+    ctrl = Control(aControlId);
+    
+    if (!ctrl)
+        {
+        return NULL;   
+        }
+        
+    if (!ctrl->IsKindOfControl(ECtrlButton))
+    
+        {
+        return NULL;   
+        }
+        
+    return static_cast<CAknFepCtrlCommonButton*>(ctrl);
+    }
+
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::Control
+// ---------------------------------------------------------------------------
+//
+CFepUiBaseCtrl* CSplitItutWindow::Control(const TInt aCtrlId)
+    {
+    CFepUiBaseCtrl* ctrl = NULL;
+    RPointerArray<CFepUiBaseCtrl> todo;
+    TInt current = 0;
+    TBool found = EFalse;
+    
+    todo.Append(iLayoutOwner->RootControl());
+    CControlGroup* temp;
+    
+    while (current < todo.Count() && !found)
+        {
+        ctrl = todo[current];
+        
+        if(ctrl->ControlId() == aCtrlId) //Find control
+            {
+            found = ETrue;     
+            }
+        else
+            {
+            if(ctrl->IsKindOfControl(ECtrlControlGroup))
+                {
+                temp = static_cast<CControlGroup*>(ctrl);
+                for (int i = 0; i < temp->NumOfControls(); i++)
+                    {
+                    todo.Append(temp->At(i));
+                    }
+                }
+                
+            current++;
+            }
+        }
+        
+    todo.Close();
+    
+    return found ? ctrl : NULL;
+    }      
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::IsChineseMode
+// ---------------------------------------------------------------------------
+//
+TBool CSplitItutWindow::IsChineseMode()
+    {
+    TInt immode = iDataMgr->InputMode();
+    TBool chineseMode = EFalse;
+    
+    if (immode == EPinyin || immode == EStroke || immode == EZhuyin)
+        {
+        chineseMode = ETrue;
+        }
+    
+    return chineseMode;    
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::ConstructKeyImageFromResourceL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::ConstructKeyImageFromResourceL( TInt aKeyImageResID )
+	{
+    TResourceReader reader;    
+    CCoeEnv::Static()->CreateResourceReaderLC( reader, aKeyImageResID );      
+    
+    TPtrC bmpFileName = reader.ReadTPtrC();
+    TInt32 imgMajorSkinId = reader.ReadInt32();
+    TAknsItemID id;
+    
+    RArray<TRect>& cellRects = 
+                     TItutDataConverter::AnyToRectArray(iDataMgr->RequestData(EKeypadCellRects));
+    TSize keySize = cellRects[0].Size();
+    for (TInt index = 0; index <= EKeyBmpLastType ; index += 2)
+        { 
+        // Get the image ids and mask ids from resource
+        TInt bmpId = reader.ReadInt16(); 
+        TInt bmpMskId = reader.ReadInt16();
+        
+        // read skin item id
+        const TInt skinitemid = reader.ReadInt16();
+        id.Set(TInt(imgMajorSkinId), skinitemid);
+        
+        if (bmpId != KInvalidBmp)
+            {
+        	CFbsBitmap* bmp = NULL;
+        	CFbsBitmap* maskbmp = NULL;
+
+        	if (bmpMskId != KInvalidBmp)
+        		{
+        		AknsUtils::CreateIconL(AknsUtils::SkinInstance(),
+        		                       id,
+        		                       bmp,
+        		                       maskbmp,
+        		                       bmpFileName,
+        		                       bmpId,
+        		                       bmpMskId);
+        		
+       		    // set maskbmp and size
+       		    AknIconUtils::SetSize( maskbmp, keySize, EAspectRatioNotPreserved );
+                iStandardItutKp->SetNonIrregularKeyBitmapL(
+                TVirtualKeyBmpType(EKeyBmpNormal + index + 1), maskbmp );
+                }
+            else
+                {
+        	    AknsUtils::CreateIconL(AknsUtils::SkinInstance(),
+        	                           id,
+        	                           bmp,
+        	                           bmpFileName,
+        	                           bmpId);
+                }
+            // set bmp and size
+            AknIconUtils::SetSize( bmp, keySize, EAspectRatioNotPreserved );
+           	iStandardItutKp->SetNonIrregularKeyBitmapL( 
+                                                 TVirtualKeyBmpType(EKeyBmpNormal + index), bmp );
+            }       
+        }
+    // Pop and destroy reader
+    CleanupStack::PopAndDestroy( 1 );		
+	}
+	
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::HandleButtonResOnLangDirChange
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::HandleButtonResOnLangDirChange( TInt aControlId )
+	{
+    TRAP_IGNORE(HandleButtonResOnLangDirChangeL(aControlId));
+    }
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::HandleButtonResOnLangDirChangeL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::HandleButtonResOnLangDirChangeL( TInt aControlId )
+	{
+	CAknFepCtrlCommonButton* ctrl = CommonButtonControl(aControlId);
+	if( ctrl && iBmpRotator)
+		{
+		TSyncRotationAngle rotChoice = CBitmapRotator::EMirrorVerticalAxis; 
+		User::LeaveIfError( iBmpRotator->Rotate( *ctrl->ForgroundBmp() ,
+								  				 rotChoice ) );
+		User::LeaveIfError( iBmpRotator->Rotate( *ctrl->ForgroundBmpMask() ,
+								  				 rotChoice ) );   								  
+		}		
+	}
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetHardKeyOneSymbol
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetHardKeyOneSymbol(TUint8* aData)
+    {
+    TRAP_IGNORE(SetHardKeyOneSymbolL(aData));
+    }
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetHardKeyOneSymbolL
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetHardKeyOneSymbolL(TUint8* aData)
+    {
+    //Read stream
+    RDesReadStream readStream;
+
+    TPtr8 countPtr( aData, 3*sizeof(TInt), 3*sizeof(TInt) );            
+    readStream.Open(countPtr);
+    CleanupClosePushL(readStream);
+
+    iSymbolData.iSymbol1 = readStream.ReadInt32L();
+    iSymbolData.iSymbol2 = readStream.ReadInt32L();
+    iSymbolData.iSymbol3 = readStream.ReadInt32L();
+    
+    CleanupStack::PopAndDestroy(&readStream);  
+    }
+
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetUnicodesForHardKey1
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetUnicodesForHardKey1(CVirtualKey* aKey, const TDesC& aMapData)
+    {
+    TRAP_IGNORE(SetUnicodesForHardKey1L(aKey, aMapData));
+    }
+    
+// ---------------------------------------------------------------------------
+// CSplitItutWindow::SetUnicodesForHardKey1L
+// ---------------------------------------------------------------------------
+//
+void CSplitItutWindow::SetUnicodesForHardKey1L(CVirtualKey* aKey, const TDesC& aMapData)
+    {
+    RPointerArray<HBufC> unicodesArr1;
+    RArray<TInt> unicodesInt;
+    
+    unicodesInt.Append(iSymbolData.iSymbol1);
+    unicodesInt.Append(iSymbolData.iSymbol2);
+    unicodesInt.Append(iSymbolData.iSymbol3);
+    
+    TInt curMode = TItutDataConverter::AnyToInt(
+            iLayoutOwner->DataMgr()->RequestData(EInputMode));
+    
+    TInt curLang = TItutDataConverter::AnyToInt(
+            iLayoutOwner->DataMgr()->RequestData(ELanguage));    
+    
+    TInt latinOnly = TItutDataConverter::AnyToInt(
+            iLayoutOwner->DataMgr()->RequestData(ELatinOnly));        
+    
+    HBufC* symbols = HBufC::NewL( 20 );
+    for (TInt i = 0; i <= 2; i++)
+        {
+        symbols->Des().Append( unicodesInt[i] );
+        if (EHindi == curMode ||
+                (ELatin == curMode && curLang == ELangThai && !latinOnly))
+            {
+            continue;
+            }
+        else
+            {
+            symbols->Des().Append( KSpaceUnicode );
+            }
+        }
+    
+    HBufC* number = HBufC::NewL( 1 );
+    number->Des().Append( aMapData );
+    unicodesArr1.AppendL(number);
+    unicodesArr1.AppendL(symbols);
+    
+    aKey->SetUnicodesL(unicodesArr1);
+
+    unicodesArr1.Close();
+    unicodesInt.Close();
+
+    }
+// End Of File