textinput/peninputvkbcn/src/peninputvkbdatamgr.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputvkbcn/src/peninputvkbdatamgr.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1496 @@
+/*
+* 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:  Implementation of the vkb data manager
+*
+*/
+
+
+// system includes
+#include <aknfeppeninputenums.h>
+#include <PtiEngine.h>
+#include <centralrepository.h>
+#include <AknFepInternalCRKeys.h>
+#include <settingsinternalcrkeys.h>
+#include <peninputvkbcn.rsg>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+// user includes
+#include "peninputvkb.hrh"
+#include "peninputvkbdatamgr.h"
+#include "peninputvkbdataprovider.h"
+#include "peninputvkbevent.h"
+#include "peninputvkblayoutcontext.h"
+#include "peninputvkblayout.h"
+#include "peninputvkbcnlafdatamgr.h"
+const TUint16 KSegment = 0x0020;
+const TInt K1PageCandCount = 36;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CAknFepVkbDataMgr
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//      
+CAknFepVkbDataMgr::CAknFepVkbDataMgr(MAknFepVkbLayoutContext* aContext)
+    :iInputLanguage(ELangPrcChinese),
+     iImLayout(EAknFepVkbImLatin),
+     iContext(aContext),
+     iWindowPosition(0),
+     iSizeChanging(EFalse),
+     iUnitShadowSizeRead(EFalse)
+    {
+    iDefaultImLayout4HK = EAknFepVkbImCnStroke;
+    iDefaultImLayout4PRC = EAknFepVkbImCnPinyin;
+    iDefaultImLayout4TW = EAknFepVkbImCnZhuyin;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ConstructL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::ConstructL(CPtiEngine* aPtiEngine) 
+    {
+    /*
+    TResourceReader reader;
+    //Read imlayout from resource
+    CCoeEnv::Static()->CreateResourceReaderLC(reader, R_AKN_FEP_VKB_LANG_STRING_LIST);
+    
+    const TInt count = reader.ReadInt16();
+    
+    for (TInt i=0; i < count; i++)
+        {
+        SLanguageItem* item = new SLanguageItem();
+        item->iLangId = reader.ReadInt16();
+        item->iDisplayText = reader.ReadTPtrC();
+        iLangStringList.Append(item);
+        }
+    CleanupStack::PopAndDestroy(); // reader
+    */
+    TInt ret = 0;
+    
+    TRAP(ret, iFepRepository = CRepository::NewL(KCRUidAknFep));
+    TRAP(ret, iGSRepository = CRepository::NewL(KCRUidPersonalizationSettings));
+    
+    if (ret == KErrNone)
+        {
+        iGSRepositoryWatcher = CAknFepRepositoryWatcher::NewL(
+            KCRUidPersonalizationSettings,
+            TCallBack(HandleGSRepositoryCallBack, this),
+            iGSRepository);
+        }
+    
+    // Read peninput language from CenRep
+    if (iGSRepository)
+        {
+        iGSRepository->Get(KSettingsPenInputLang, iInputLanguage);
+        }
+    
+    // Read default imlayout of current peninput language from CenRep
+    DefaultModeChangeNotification();
+    // Create engine
+    iPtiEngine = aPtiEngine;
+    if( !iPtiEngine )
+        {
+        iPtiEngine = CPtiEngine::NewL(ETrue);
+        iOwnPtiEngine = ETrue;
+        }
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::NewL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+CAknFepVkbDataMgr* CAknFepVkbDataMgr::NewL(MAknFepVkbLayoutContext* aContext, 
+                                           CPtiEngine* aPtiEngine)
+    {
+    CAknFepVkbDataMgr* self = NewLC(aContext, aPtiEngine);
+    CleanupStack::Pop();
+    return self;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::NewLC
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+CAknFepVkbDataMgr* CAknFepVkbDataMgr::NewLC(MAknFepVkbLayoutContext* aContext, 
+                                            CPtiEngine* aPtiEngine)
+    {
+    CAknFepVkbDataMgr* self = new(ELeave) CAknFepVkbDataMgr(aContext);
+    CleanupStack::PushL(self);
+    self->ConstructL(aPtiEngine); 
+    return self;        
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::~CAknFepVkbDataMgr
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+CAknFepVkbDataMgr::~CAknFepVkbDataMgr()
+    {
+    //iLangStringList.ResetAndDestroy();
+    //iLangStringList.Close();
+    
+    iCandidates.ResetAndDestroy();
+    iCandidates.Close();
+    
+    // Cen Rep  
+    delete iFepRepositoryWatcher;    
+    delete iGSRepositoryWatcher;
+    delete iFepRepository;    
+    delete iGSRepository;
+    delete iUserDefinedResource;
+    // Delete engine        
+    if( iOwnPtiEngine )
+        {
+        delete iPtiEngine;
+        } 
+    
+    iUnits.Close();    
+    }
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::GetCandidatesL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::GetCandidatesL(const TDesC& aInputString, 
+                                       const TBool aIsPredictive,
+                                       TBool aForNextPage)
+    {
+    if (aForNextPage)
+        {
+        if ( iCandidatesCount > KMaxPredictCandCnt )
+            {
+            return iCandidatesCount;
+            }
+            
+        if ((iPtiEngine) && (iPtiEngine->NextCandidatePage()))
+    	    {
+    	    TPtrC ptr = iPtiEngine->CandidatePage();
+
+            TInt start = 0;
+            TInt length = 0;
+
+            for (TInt i = 0; i <ptr.Length(); i++)
+                {
+                if (ptr[i] == KSegment)
+                    {
+                    TPtrC segment(ptr.Ptr() + start, length);
+                    TRAP_IGNORE(iCandidates.AppendL(segment.AllocL()));
+                    start += (length + 1);
+                    length = 0;
+                    }
+                else
+                    {
+                    length++;               
+                    }
+                }
+
+            if (length)
+                {
+                TPtrC segm(ptr.Ptr() + start, length);
+                TRAP_IGNORE(iCandidates.AppendL(segm.AllocL()));
+                }
+               
+            if ( iCandidates.Count() >= KMaxPredictCandCnt )
+                {
+                for (TInt i = KMaxPredictCandCnt; i < iCandidates.Count(); i++)
+                    {
+                    delete iCandidates[KMaxPredictCandCnt];
+                    iCandidates.Remove(KMaxPredictCandCnt);
+                    }
+                }
+        
+            iContext->SendEventToVkbControl(EVkbEventGetNextPageCandidate,(
+                                            CFepUiBaseCtrl*)&iCandidates);
+            
+            iCandidatesCount = iCandidates.Count();
+
+            return iCandidatesCount;
+    	    }
+    	
+    	return KErrNotSupported;    
+        }
+
+    if (aIsPredictive)
+        {
+        if( iPredictiveBuf.Length() + aInputString.Length() > KMaxLengthPredictiveString )
+            {
+            iPredictiveBuf.Zero();
+            }
+            
+        if ( ( aInputString.Length() == 1) 
+             && (aInputString[0] == EKeyBackspace)  )
+            {
+            if ( iPredictiveBuf.Length() >= 1 )
+                {
+                iPredictiveBuf.Delete(iPredictiveBuf.Length()-1,1);
+                }
+            }
+        else
+            {
+            iPredictiveBuf.Append(aInputString);            
+            }           
+        }
+    else
+        {
+        iPredictiveBuf.Zero();  
+        }
+    
+    const HBufC* formatString = NULL;
+    
+    if (aIsPredictive && iPredictiveBuf.Length() == 0)
+        {
+        iCandidates.ResetAndDestroy();
+        }
+    else
+        {
+        iPtiEngine->SetCandidatePageLength(K1PageCandCount);
+
+        if(aIsPredictive)
+            {
+            DoPredictive(iPredictiveBuf, iCandidates);
+            if(iCandidates.Count() == 0)
+                {
+                iPredictiveBuf.Delete(0, iPredictiveBuf.Length() - 1);
+                DoPredictive(iPredictiveBuf, iCandidates);
+                }
+            }
+        else
+            {
+            formatString = iPtiEngine->GetCandidatesByInputString(aInputString, 
+                                                              iCandidates, 
+                                                              aIsPredictive);
+            }
+        }    
+    
+    if (!formatString && !aIsPredictive)
+        {
+        return 0;
+        }
+        
+    if (!aIsPredictive)
+        {
+        iContext->SendEventToVkbControl(EVkbEventCompFieldAnalysisResponse,NULL,*formatString);
+        }      
+              
+    iContext->SendEventToVkbControl(EVkbEventCandidatesChanged,(CFepUiBaseCtrl*)&iCandidates);
+    
+    delete formatString;
+    
+    iCandidatesCount = iCandidates.Count();
+    
+    return iCandidatesCount;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::DoPredictive
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::DoPredictive(const TDesC& aTriggerStr, 
+                                     RPointerArray<HBufC>& aPredictives)
+    {
+	aPredictives.ResetAndDestroy();
+	
+	if(!iPtiEngine->SetPredictiveChineseChar(aTriggerStr))
+	    {
+	    return;
+	    }
+    TPtrC ptr = iPtiEngine->CandidatePage();
+    
+    TInt start = 0;
+    TInt length = 0;
+	
+    for (TInt i = 0; i <ptr.Length(); i++)
+        {
+        if (ptr[i] == KSegment)
+            {
+            TPtrC segment(ptr.Ptr() + start, length);
+            TRAP_IGNORE(aPredictives.AppendL(segment.AllocL()));
+            start += (length + 1);
+            length = 0;
+            }
+        else
+            {
+            length++;               
+            }
+        }
+
+    if (length)
+        {
+        TPtrC segm(ptr.Ptr() + start, length);
+        TRAP_IGNORE(aPredictives.AppendL(segm.AllocL()));
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ClearTriggerString
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::ClearTriggerString()
+    {
+    iPredictiveBuf.Zero();
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::Reset
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::Reset()
+    {
+    // iCase = 0;
+
+    // iEditorNumericKeymap = 0;
+    
+    // iPermittedRange = 0;
+
+    // iImLayout = ERangeChinese;
+
+    iCandidatesCount = 0;
+    
+    iShiftDown = EFalse;
+    
+    iCapslockDown = EFalse;
+    
+    iCandidates.ResetAndDestroy();
+    
+    }
+        
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::Candidates
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+RPointerArray<HBufC> CAknFepVkbDataMgr::Candidates()
+    {
+    return iCandidates;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::Case
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::Case()
+    {
+    return iCase;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::InputLanguage
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::InputLanguage()
+    {
+    return iInputLanguage;
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::PermittedRange
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::PermittedRange()
+    {
+    return iPermittedRange;
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CurrentRange
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::CurrentRange()
+    {
+    return iCurrentRange;
+    }     
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CurrentAccent
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::CurrentAccent()
+    {
+    return iCurrentAccent;
+    }     
+        
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::EditorNumericKeymap
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::EditorNumericKeymap()
+    {
+    return iEditorNumericKeymap;
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::IMLayout
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::IMLayout()
+    {
+    return iImLayout;
+    } 
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ShiftDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::ShiftDown()
+    {
+    return iShiftDown;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CapslockDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::CapslockDown()
+    {
+    return iCapslockDown;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::LengthWhenButtondownOnBack
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::LengthWhenButtondownOnBack()
+    {
+    return iLengthWhenButtondownOnBack;
+    }
+            
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CandidatesCount
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::CandidatesCount()
+    {
+    return iCandidatesCount;
+    } 
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::WindowPosition
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::WindowPosition()
+    {
+    return iWindowPosition;
+    } 
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetWindowPosition
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetWindowPosition(TInt aPosition)
+    {
+    iWindowPosition = aPosition;
+    
+    //Store it into CenRep
+    WriteWindowPostion(iWindowPosition);
+    } 
+            
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetCase
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetCase(TInt aCase)
+    {
+    iCase = aCase;
+    } 
+    
+void CAknFepVkbDataMgr::SetPermittedCase(TInt aPermittedCase)
+    {
+    iPermittedCase =  aPermittedCase;
+    }
+    
+TInt CAknFepVkbDataMgr::PermittedCase()
+    {
+    return iPermittedCase;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::NextCandidateExist
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::NextCandidateExist()
+    {
+	if (iPtiEngine)
+	    {
+		return iPtiEngine->MoreCandidatePages();
+	    }
+	
+	return EFalse;    
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::LanguageIsChinese
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::LanguageIsChinese(TInt aLang)
+    {
+	if ((aLang == ELangPrcChinese) || 
+	    (aLang == ELangHongKongChinese) ||
+	    (aLang == ELangTaiwanChinese))
+	    {
+		return ETrue;
+	    }
+	
+	return EFalse;    
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetEngineLanguage
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetEngineLanguage(TInt aLang)
+    {
+    if (iPtiEngine) 
+        {
+        switch (aLang)
+            {
+            case ELangHongKongChinese:
+                TRAP_IGNORE(iPtiEngine->ActivateLanguageL(aLang, EPtiEngineStrokeVkb));
+                break;
+            case ELangTaiwanChinese:
+                TRAP_IGNORE(iPtiEngine->ActivateLanguageL(aLang, EPtiEngineZhuyinVkb));
+                break;
+            case ELangPrcChinese:
+                TRAP_IGNORE(iPtiEngine->ActivateLanguageL(aLang, EPtiEnginePinyinVkb));
+                break;
+            default:
+                break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetInputLanguage
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::SetInputLanguage(TInt aInputLanguage)
+    {
+    /*
+    if( aInputLanguage != -1 && aInputLanguage != iInputLanguage )
+        {            
+        iInputLanguage = aInputLanguage;
+        
+        if( iPtiEngine )
+            {
+            switch (iInputLanguage)
+                {
+                case ELangHongKongChinese:
+                    TRAP_IGNORE(iPtiEngine->ActivateLanguageL(iInputLanguage, EPtiEngineStrokeVkb));           
+                    break;
+                case ELangTaiwanChinese:
+                    TRAP_IGNORE(iPtiEngine->ActivateLanguageL(iInputLanguage, EPtiEngineZhuyinVkb));                    
+                    break;
+                case ELangPrcChinese:
+                    TRAP_IGNORE(iPtiEngine->ActivateLanguageL(iInputLanguage, EPtiEnginePinyinVkb));                    
+                    break;   
+                default:
+                    break;                
+                }
+            }
+        }
+    */
+    if (!LanguageIsChinese(aInputLanguage) && (aInputLanguage != ELangEnglish))
+        {
+        return ELangNone;
+        }
+    
+    if (aInputLanguage == ELangEnglish)
+        {
+    	TLanguage displayLang = User::Language();
+
+    	// set real language to a Chinese
+        if (!LanguageIsChinese(iInputLanguage))
+            {
+            // original language is not Chinese
+            if (LanguageIsChinese(displayLang))
+                {
+            	iInputLanguage = displayLang;
+                }
+            else
+                {
+                iInputLanguage = ELangPrcChinese;	
+                }
+                
+            SetEngineLanguage(iInputLanguage);
+            }
+        
+        return aInputLanguage;
+        }
+    else
+        {
+        // aInputLanguage is Chinese
+        if (iInputLanguage != aInputLanguage)
+            {
+        	iInputLanguage = aInputLanguage;
+            
+            SetEngineLanguage(iInputLanguage);
+            }
+        
+        return iInputLanguage;
+        }
+    /*
+    const SLanguageItem* item = GetItemByLangId(iInputLanguage);
+    if ( item )
+        {
+        return item->iDisplayText;
+        }
+    return KNullDesC;
+    */
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetPermittedRange
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetPermittedRange(TInt aRange)
+    {
+    if ( aRange & ERangeNative )
+        {
+        aRange = aRange | ERangeAccent;
+        }
+        
+    if ( iPermittedRange != aRange )
+        {
+        iPermittedRange = aRange;
+        TPtr ptr((TUint16* ) &iPermittedRange,sizeof(TInt));
+        iContext->SendEventToVkbControl(EVkbEventSetPermittedRange,NULL,ptr);    
+        }    
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetCurrentAccent
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetCurrentAccent(TInt aAccent)
+    {
+    iCurrentAccent = aAccent;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetCandidatesCount
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetCandidatesCount(TInt aCandidatesCount)
+    {
+    iCandidatesCount = aCandidatesCount;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetCurrentRange
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetCurrentRange(TInt aRange)
+    {
+    iCurrentRange = aRange;
+    if ( aRange == ERangeNative )
+        {
+        //According to current input language, set IMLayout
+        switch (iInputLanguage)
+            {
+            case ELangHongKongChinese:
+                iImLayout = iDefaultImLayout4HK;  
+                break;
+            case ELangTaiwanChinese:
+                iImLayout = iDefaultImLayout4TW;  
+                break;
+            case ELangPrcChinese:
+                iImLayout = iDefaultImLayout4PRC;
+                break;   
+            default:
+                iImLayout = EAknFepVkbImLatin;
+                break;
+            }
+        
+        switch(iImLayout)
+            {
+            case EAknFepVkbImCnPinyin:
+                iPtiEngine->SetInputMode(EPtiEnginePinyinVkb);
+                break;
+            case EAknFepVkbImCnZhuyin:
+                iPtiEngine->SetInputMode(EPtiEngineZhuyinVkb);
+                break;
+            case EAknFepVkbImCnStroke:
+                iPtiEngine->SetInputMode(EPtiEngineStrokeVkb);
+                break;
+            case EAknFepVkbImCnCangjie:
+                {
+                // here , Get general setting:).
+                TInt subCangJieMode = ECangJieNormal;
+                iFepRepository->Get( KAknFepCangJieMode, subCangJieMode );
+                switch( subCangJieMode )
+                    {
+                    case ECangJieEasy:
+                        iPtiEngine->SetInputMode( EPtiEngineEasyCangjieVkb );
+                        break;
+                    case ECangJieAdvanced:
+                        iPtiEngine->SetInputMode( EPtiEngineAdvCangjieVkb );
+                        break;
+                    case ECangJieNormal:
+                        iPtiEngine->SetInputMode( EPtiEngineNormalCangjieVkb );
+                        break;
+                    default:
+                        iPtiEngine->SetInputMode( EPtiEngineNormalCangjieVkb );
+                        break;
+                    }
+                }
+                break;
+            default:
+                break;
+            }
+        }
+    else if( aRange == ERangeNumber )
+        {
+        if (iInputLanguage == ELangTaiwanChinese && iDefaultImLayout4TW != EAknFepVkbImCnStroke)
+        	{
+        	iImLayout = EAknFepVkbImNumberForZhuyin;
+        	}
+        else
+        	{
+        	iImLayout = EAknFepVkbImNumber;
+        	}
+        }
+    else
+        {
+        if (iInputLanguage == ELangTaiwanChinese && iDefaultImLayout4TW != EAknFepVkbImCnStroke)
+        	{
+        	iImLayout = EAknFepVkbImLatinForZhuyin;
+        	}
+        else
+        	{
+        	iImLayout = EAknFepVkbImLatin;
+        	}
+        }
+    } 
+
+void CAknFepVkbDataMgr::SetDataQueryRect(const TRect& aRect)
+    {
+    iDataQueryRect = aRect;    
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetEditorNumericKeymap
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetEditorNumericKeymap(TInt aEditorNumericKeymap)
+    {
+    iEditorNumericKeymap = aEditorNumericKeymap;
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetImLayout
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetImLayout(TInt aImLayout)
+    {
+    iImLayout = aImLayout;
+    ResetUnitSize();
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ChangeShiftDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::ChangeShiftDown()
+    {
+    iShiftDown = ! iShiftDown;
+    return CalculateCase();
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ChangeCapslockDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::ChangeCapslockDown()
+    {
+    iShiftDown = 0;
+    iCapslockDown = ! iCapslockDown;
+    return CalculateCase();
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CalculateCase
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+// 
+TInt CAknFepVkbDataMgr::CalculateCase()
+    {
+    if (iShiftDown && iCapslockDown)
+        return ECaseInverseText;
+    else if (!iShiftDown && iCapslockDown)
+        return ECaseUpper;
+    else if (iShiftDown && !iCapslockDown)
+        return ECaseText;
+    else if (!iShiftDown && !iCapslockDown)
+        return ECaseLower;
+    else 
+        return ECaseLower;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetShiftDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetShiftDown(TBool aFlag)
+    {
+    iShiftDown = aFlag;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetCapslockDown
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetCapslockDown(TBool aFlag)
+    {
+    iCapslockDown = aFlag;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetLengthWhenButtondownOnBack
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetLengthWhenButtondownOnBack(TInt aLength)
+    {
+    iLengthWhenButtondownOnBack = aLength;
+    }
+            
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetData
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetData(TAknFepDataType aDataType,TInt aData)
+    {
+    switch (aDataType)
+        {
+        case EAknFepDataTypeCase:
+            SetCase(aData);
+            break;
+        case EAknFepDataTypeInputLanguage:
+            SetInputLanguage(aData);
+            break;
+        case EAknFepDataTypePermittedRange:
+            SetPermittedRange(aData);
+            break;
+        case EAknFepDataTypeCurrentRange:
+            SetCurrentRange(aData);
+            break;
+        case EAknFepDataTypeIMLayout:
+            SetImLayout(aData);
+            break; 
+        case EAknFepDataTypeNumericKeymap:
+            SetEditorNumericKeymap((TAknEditorNumericKeymap)aData);
+            break;
+        case EAknFepDataTypeShfitDown:
+            SetShiftDown(aData);
+            break;
+        case EAknFepDataTypeCapslockDown:
+            SetCapslockDown(aData);
+            break;            
+        case EAknFepDataTypeCurrentAccent:
+            SetCurrentAccent(aData);
+            break;
+        case EAknFepDataTypeCandidateCount:
+            SetCandidatesCount(aData);
+            break;
+        case EAknFepDataTypeLengthWhenButtondownOnBack:
+            SetLengthWhenButtondownOnBack(aData);  
+            break;  
+        case EAknFepDataTypeWindowPosition:
+            SetWindowPosition(aData);    
+            break;
+        case EAknFepDataTypeUnitWidth:
+            iUnitWidth = aData;
+            break;
+        case EAknFepDataTypeUnitHeight:        
+            iUnitHeight = aData;
+            break;
+        case EAknFepDataTypeUseDefinedResource:
+            {
+            delete iUserDefinedResource;
+            TInt* len = (TInt*)(aData - 4);
+            TPtrC16 keymapRes((const TUint16*)aData, *len/2);  
+            iUserDefinedResource = keymapRes.Alloc();
+            }
+            break;
+        case EAknFepDataTypeNeedBRJustify:
+            iNeedBrJustify = aData;
+        default:
+            break;
+        }
+    } 
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::RequestData
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::RequestData(TAknFepDataType aDataType)  
+    {
+    switch (aDataType)
+        {
+        case EAknFepDataTypeCase:
+            return iCase;
+        case EAknFepDataTypeInputLanguage:
+            return iInputLanguage;
+        case EAknFepDataTypePermittedRange:
+            return iPermittedRange;
+        case EAknFepDataTypeCurrentRange:
+            return iCurrentRange;
+        case EAknFepDataTypeIMLayout:
+            return iImLayout;
+        case EAknFepDataTypeNumericKeymap:
+            return iEditorNumericKeymap;
+        case EAknFepDataTypeShfitDown:
+            return iShiftDown;
+        case EAknFepDataTypeCapslockDown:
+            return iCapslockDown;
+        case EAknFepDataTypeCurrentAccent:
+            return iCurrentAccent;
+        case EAknFepDataTypeCandidateCount:
+            return iCandidatesCount;
+        case EAknFepDataTypeLengthWhenButtondownOnBack:
+            return iLengthWhenButtondownOnBack;
+        case EAknFepDataTypeWindowPosition:
+            return iWindowPosition;        
+        case EAknFepDataTypeUnitWidth:
+            return iUnitWidth;
+        case EAknFepDataTypeUnitHeight:
+            return iUnitHeight;
+        case EAknFepDataTypeScreenSize:
+            return iScreenMode.iPixelSize.iWidth | ( iScreenMode.iPixelSize.iHeight << 16);
+        case EAknFepDataTypeDataQueryRect:
+            return (TInt)&iDataQueryRect;
+        case EAknFepDataTypeUseDefinedResource:
+            return (TInt) iUserDefinedResource;
+        case EAknFepDataTypeShadowTlSize:
+            return (TInt)(&iShadowTl);
+        case EAknFepDataTypeShadowBrSize:
+            return (TInt)(&iShadowBr);
+        case EAknFepDataTypeMainPaneRect:
+            return (TInt)(&iMainPaneRect);
+        case EAknFepDataTypeIcfColumnNums:
+            {
+            TInt columNum = 7;
+            if( iDefaultImLayout4TW != EAknFepVkbImCnStroke && 
+            	iInputLanguage == ELangTaiwanChinese /* ||
+                ( iCurrentRange == ERangeNumber && 
+                  static_cast<CAknFepVkbLayout*>(iContext)->PenInputType() == EPluginInputModeFSQ )*/ )
+            	{
+            	columNum = 8;	
+            	}
+            return columNum;
+            }
+        case EAknFepDataTypeTitleBarHeight:
+            {
+            if( EAknFepVkbImCnZhuyin == iImLayout )
+                {
+                return iUnitHeight;
+                }
+            else
+                {
+                return iUnitHeight*2;
+                }
+            }
+        case EAknFepDataTypeDefaultIMLayout:
+            return iDefaultImLayout4TW;
+        case EAknFepDataTypeNeedBRJustify:
+            return iNeedBrJustify;
+        default:
+            break; 
+        }
+    return 0;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::IsShiftPermitted
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::IsShiftPermitted()
+    {
+    if ( ( iImLayout == EAknFepVkbImLatin ) || ( iImLayout == EAknFepVkbImNumber )
+        || ( iImLayout == EAknFepVkbImLatinForZhuyin ) 
+        || ( iImLayout == EAknFepVkbImNumberForZhuyin ) )
+        {
+        return (iPermittedCase & ECaseText) ||
+               (iPermittedCase & ECaseInverseText);
+        }
+    return EFalse;
+    }
+    
+TBool CAknFepVkbDataMgr::IsCapsLockPermitted()
+    {
+    if ( ( iImLayout == EAknFepVkbImLatin ) || ( iImLayout == EAknFepVkbImNumber ) )
+        {
+        return iPermittedCase & ECaseUpper;
+        }
+    return EFalse;
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::CAknFepVkbDataMgr::GetItemByLangId
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+/*
+const CAknFepVkbDataMgr::SLanguageItem* CAknFepVkbDataMgr::GetItemByLangId(TInt aLangId)
+    {
+    for (TInt i=0;i<iLangStringList.Count();i++)
+        {
+        SLanguageItem* item = iLangStringList[i];
+        if (item->iLangId == aLangId)
+            {
+            return item;
+            }
+        }
+    
+    return GetItemByLangId(0);
+    }
+*/    
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::HandleFepRepositoryCallBack
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::HandleFepRepositoryCallBack(TAny* aPtr)
+    {
+    CAknFepVkbDataMgr *self = STATIC_CAST(CAknFepVkbDataMgr*, aPtr);
+    
+    CAknFepRepositoryWatcher* watcher = self->iFepRepositoryWatcher;
+    
+    if (watcher)
+        {
+        if ( (watcher->ChangedKey()) == self->iPositionSettingId )
+            {
+            return self->PositionChangeNotification();
+            }
+        }
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::HandleGSRepositoryCallBack
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::HandleGSRepositoryCallBack(TAny* aPtr)
+    {
+    CAknFepVkbDataMgr *self = STATIC_CAST(CAknFepVkbDataMgr*, aPtr);
+    
+    CAknFepRepositoryWatcher* watcher = self->iGSRepositoryWatcher;
+    
+    if (watcher )
+        {
+        if  ( (watcher->ChangedKey() == KSettingsDefaultVkbPrc)
+              || (watcher->ChangedKey() == KSettingsDefaultVkbTw) 
+                 || (watcher->ChangedKey() == KSettingsDefaultVkbHk) )
+            {
+            return self->DefaultModeChangeNotification();
+            }
+        else if (watcher->ChangedKey() == KSettingsPenInputLang)
+            {
+            return self->PeninputlanguageChangeNotification();
+            }
+        }
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::PositionChangeNotification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::PositionChangeNotification()
+    {
+    if (iFepRepository)
+        {
+        TInt newValue;
+
+        iFepRepository->Get(iPositionSettingId, newValue);
+        
+        // if position have been changed, then notify window to change
+        if ( iWindowPosition != newValue )
+            {
+            iWindowPosition = newValue;
+
+            iContext->SendEventToVkbControl(EVkbEventPositionChanged,NULL);
+            }
+        }
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::DefaultModeChangeNotification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::DefaultModeChangeNotification()
+    {
+    //Read default mode again the peninput language
+    iGSRepository->Get(KSettingsDefaultVkbHk, iDefaultImLayout4HK);
+    
+    switch(iDefaultImLayout4HK)
+        {
+        case EAknFepVkbImCnStroke :
+        case EAknFepVkbImCnCangjie:
+        case EAknFepVkbImLatin:
+            break;
+        default:
+            iDefaultImLayout4HK = EAknFepVkbImCnStroke;
+            break;        
+        }
+        
+    iGSRepository->Get(KSettingsDefaultVkbTw, iDefaultImLayout4TW);
+    switch(iDefaultImLayout4TW)
+        {
+        case EAknFepVkbImCnZhuyin :
+        case EAknFepVkbImCnStroke :
+        case EAknFepVkbImLatin    :
+            break;
+        default:
+            iDefaultImLayout4TW = EAknFepVkbImCnZhuyin;
+            break;        
+        }
+
+    iGSRepository->Get(KSettingsDefaultVkbPrc, iDefaultImLayout4PRC);
+    switch(iDefaultImLayout4PRC)
+        {
+        case EAknFepVkbImCnPinyin: 
+        case EAknFepVkbImCnStroke :
+        case EAknFepVkbImLatin    :
+            break;
+        default:
+            iDefaultImLayout4PRC = EAknFepVkbImCnPinyin;
+            break;        
+        }
+    
+    iNeedBrJustify = ETrue;
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::PeninputlanguageChangeNotification
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TInt CAknFepVkbDataMgr::PeninputlanguageChangeNotification()
+    {
+    //Read peninput language again 
+
+    TInt value = 0;
+    if (iGSRepository)
+        {
+        iGSRepository->Get(KSettingsPenInputLang, value);
+        }
+        
+    //Call layout to change language
+    //const TDesC& showText = SetInputLanguage(value);    
+    TInt switchDisplayLang = SetInputLanguage(value);
+        
+    TBuf<10> showText;    
+    AknPenInputUtils::GetISOLanguageCode(TLanguage(switchDisplayLang), showText);
+    
+    iContext->SendEventToVkbControl(EVkbEventLanguageChanged,NULL,showText);     
+        
+    return KErrNone;
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::WriteWindowPostion
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::WriteWindowPostion(TInt aPosition)
+    {
+    if (iFepRepository)
+        {
+        iFepRepository->Set(iPositionSettingId, aPosition);
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::WriteLastUsedRange
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::WriteLastUsedRange(TInt aLastUsedRange)
+    {
+    if (iFepRepository)
+        {
+        iFepRepository->Set(KAknFepLastUsedRange,aLastUsedRange);
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetScreenMode
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetScreenMode(const TPixelsTwipsAndRotation& aScreenMode)
+    {
+    switch (aScreenMode.iRotation)
+        {
+        case CFbsBitGc::EGraphicsOrientationNormal:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition0;
+            break;
+            }
+        case CFbsBitGc::EGraphicsOrientationRotated90:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition1;
+            break;
+            }
+        case CFbsBitGc::EGraphicsOrientationRotated180:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition2;
+            break;
+            }
+        case CFbsBitGc::EGraphicsOrientationRotated270:
+            {
+            iPositionSettingId = KAknFepHwrWindowPosition3;
+            break;
+            }
+        default:
+            //User::Panic(KCategory, KErrArgument);
+            break;
+        }
+    
+    iScreenMode = aScreenMode;
+              
+    if (iFepRepository)
+        {
+        iFepRepository->Get(iPositionSettingId, iWindowPosition);        
+        }
+    }         
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ReadUnitShadowSize
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::ReadUnitShadowSize()
+    {
+    if (SizeChanging() || (!iUnitShadowSizeRead))
+    	{
+        iUnits.Reset();
+    
+        TAknWindowLineLayout appWnd; 
+        TAknWindowLineLayout mainPane;
+        // PSZ means pinyin(cangjie, latin), stroke, zhuyin respectively
+        TAknWindowLineLayout wndLayoutP, wndLayoutS, wndLayoutZ;
+        //TAknWindowLineLayout unitGridP, unitGridS, unitGridZ;
+        TAknLayoutRect mainPaneRect;
+        TAknLayoutRect wndRectP, wndRectS, wndRectZ;
+        //TAknLayoutRect unitRectP, unitRectS, unitRectZ;
+            
+        appWnd = AknLayoutScalable_Avkon::application_window( 0 ).LayoutLine();
+    
+        if (appWnd.iW > appWnd.iH)
+            {
+    	    // landscape
+            mainPane = AknLayoutScalable_Avkon::main_pane(4).LayoutLine();
+            }
+        else
+            {
+    	    // portrait
+    	    mainPane = AknLayoutScalable_Avkon::main_pane(1).LayoutLine();
+            }
+    
+        mainPaneRect.LayoutRect(appWnd.Rect(), mainPane);
+    
+        iMainPaneRect = mainPaneRect.Rect();
+    
+        wndLayoutP = AknLayoutScalable_Avkon::popup_fep_vkb_window(2).LayoutLine();
+        wndRectP.LayoutRect(mainPaneRect.Rect(), wndLayoutP);
+        wndLayoutS = AknLayoutScalable_Avkon::popup_fep_vkb_window(1).LayoutLine();
+        wndRectS.LayoutRect(mainPaneRect.Rect(), wndLayoutS);
+        wndLayoutZ = AknLayoutScalable_Avkon::popup_fep_vkb_window(3).LayoutLine();
+        wndRectZ.LayoutRect(mainPaneRect.Rect(), wndLayoutZ);
+    
+        TAknWindowLineLayout shadowPane,shadowTl,shadowBr;
+        TAknLayoutRect shadowRect,tlRect,brRect;
+    
+        shadowPane = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane(1).LayoutLine();
+        shadowRect.LayoutRect(wndRectP.Rect(), shadowPane);
+    
+        shadowTl = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g1().LayoutLine();
+        tlRect.LayoutRect(shadowRect.Rect(), shadowTl);
+    
+        shadowBr = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g8().LayoutLine();
+        brRect.LayoutRect(shadowRect.Rect(), shadowBr);
+    
+        iShadowTl = tlRect.Rect().Size();
+        iShadowBr = brRect.Rect().Size();
+
+/*        unitGridP = AknLayoutScalable_Avkon::aid_size_cell_vkb(2).LayoutLine();
+        unitRectP.LayoutRect(wndRectP.Rect(), unitGridP);
+        unitGridS = AknLayoutScalable_Avkon::aid_size_cell_vkb(3).LayoutLine();
+        unitRectS.LayoutRect(wndRectP.Rect(), unitGridS);
+        unitGridZ = AknLayoutScalable_Avkon::aid_size_cell_vkb(4).LayoutLine();
+        unitRectZ.LayoutRect(wndRectP.Rect(), unitGridZ);
+    
+        iUnits.Append(unitRectP.Rect().Size());
+        iUnits.Append(unitRectS.Rect().Size());
+        iUnits.Append(unitRectZ.Rect().Size());
+*/
+		//TSize  unitGridP, unitGridS, unitGridZ, unitGridL, unitGridN;
+		TSize unit10x4, unit11x4;
+		if( static_cast<CAknFepVkbLayout*>(iContext)->PenInputType() == EPluginInputModeFSQ )
+			{
+			unit10x4 = CPeninputCnGenericVkbLafMgr::GetCellSize( EVkbCangjieAndPinying_FSQ );
+			unit11x4 = CPeninputCnGenericVkbLafMgr::GetCellSize( EVkbZhuyin_FSQ );
+			}
+		else if( static_cast<CAknFepVkbLayout*>(iContext)->PenInputType() == EPluginInputModeVkb )
+			{
+			unit10x4 = CPeninputCnGenericVkbLafMgr::GetCellSize( EVkbCangjieAndPinying );
+			unit11x4 = CPeninputCnGenericVkbLafMgr::GetCellSize( EVkbZhuyin );
+			}
+		
+        iUnits.Append( unit10x4 );
+        iUnits.Append( unit11x4 );
+		     		     
+        iUnitShadowSizeRead = ETrue;
+    	}
+    
+    ResetUnitSize();
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::ResetUnitSize
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::ResetUnitSize()
+    {
+    TInt index;
+    switch (iImLayout)
+        {
+        
+	    case EAknFepVkbImCnPinyin:
+	    case EAknFepVkbImCnStroke:
+	    case EAknFepVkbImCnCangjie:
+	    case EAknFepVkbImLatin:
+	    case EAknFepVkbImNumber:
+	    	{
+	    	index = 0;
+	    	}
+	    	break;
+	    	
+	    case EAknFepVkbImCnZhuyin:
+	    case EAknFepVkbImLatinForZhuyin:
+	    case EAknFepVkbImNumberForZhuyin:
+        	{
+        	if (iDefaultImLayout4TW == EAknFepVkbImCnStroke)
+        	    {
+        	    index = 0;
+        	    }
+        	else
+        	    {
+        	    index = 1;
+        	    }
+        	}
+        	break;
+       	default:
+       	    {
+            index = 0;
+       	    }
+            break;       	
+        }
+
+    if (iUnits.Count() >= (index+1))
+        {
+        TInt tempBtnWidth = iUnits[index].iWidth;
+        TInt tempBtnHeight = iUnits[index].iHeight;
+      
+        iUnitWidth = tempBtnWidth;
+        iUnitHeight = tempBtnHeight;            
+        }
+    else
+        {
+        iUnitWidth = 0;
+        iUnitHeight = 0;
+        }    
+    }
+    
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SetSizeChanging
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+void CAknFepVkbDataMgr::SetSizeChanging(TBool aFlag)
+	{
+	iSizeChanging = aFlag;
+	}
+
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::SizeChanging
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::SizeChanging()
+	{
+	return iSizeChanging;
+	}
+	
+// ---------------------------------------------------------------------------
+// CAknFepVkbDataMgr::UnitShadowSizeSet
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//           
+TBool CAknFepVkbDataMgr::UnitShadowSizeSet()
+	{
+	return iUnitShadowSizeRead;
+	}
+
+// End Of File