fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp
changeset 36 a7632c26d895
parent 35 0f326f2e628e
child 42 b3eaa440ab06
--- a/fep/aknfep/UiPlugins/AknFepUiInterface/AvkonImpl/src/AknFepUiAvkonCtrlPinyinPopup.cpp	Fri Jul 23 16:49:01 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1271 +0,0 @@
-/*
-* Copyright (c) 2004 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:           
-*       Provides the CAknFepUICtrlPinyinPopup methods.
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include <gdi.h>
-#include <eiklabel.h>
-#include <AknsDrawUtils.h>
-#include <AknsUtils.h>
-#include <AknIconUtils.h>
-
-#include <AknsFrameBackgroundControlContext.h>
-#include <aknfepuictrls.mbg>
-
-#include "AknFepUiInterfacePanic.h"
-#include "AknFepUIAvkonCtrlPinyinPopup.h"
-#include "AknFepUIAvkonCtrlInputPane.h"
-#include "aknfepchineseuidataconv.h"
-#include "aknfepuilayoutdatamgr.h"
-#include <skinlayout.cdl.h>
-
-#include "data_caging_path_literals.hrh"
-
-_LIT(KFepUiControlsBitmapFile, "aknfepuictrls.mbm");
-
-CAknFepUICtrlPinyinPopup* CAknFepUICtrlPinyinPopup::NewL(RWindow& aParent, CAknFepUiLayoutDataMgr* aLafDataMgr )
-    {
-    CAknFepUICtrlPinyinPopup* self = new(ELeave) CAknFepUICtrlPinyinPopup( aLafDataMgr );
-    CleanupStack::PushL(self);
-    self->ConstructL(aParent);
-    CleanupStack::Pop();
-    return self;
-    }
-
-CAknFepUICtrlPinyinPopup::~CAknFepUICtrlPinyinPopup()
-    {
-    iInputPaneArray.ResetAndDestroy();
-    iPages.Reset();
-    delete iSpellingArray;
-    delete iSpellingIndexArray;
-    delete iNaviArrowBitmapLeft;
-    delete iNaviArrowBitmapLeftMask;
-    delete iNaviArrowBitmapRight;
-    delete iNaviArrowBitmapRightMask;
-    delete iBgContext;
-    delete iKeystrokeArray;
-    delete iInEffectKeystrokeArray;
-    delete iShowKeystrokeArray;
-    delete iOptimizeSpelling;
-    delete iTempSpelling;
-    delete iChooseChineseCharacterArray;
-    delete iChooseChineseCharacterArrayKeystroke;
-    
-    delete iKeystrokeArrayForStroke;
-    delete iInEffectKeystrokeArrayForStroke;
-    delete iShowKeystrokeArrayForStroke;
-    delete iChooseChineseCharacterArrayForStroke;
-    delete iChooseChineseCharacterArrayKeystrokeForStroke;
-    
-    delete iZhuyinSymbols;
-    delete iZhuyinShowSymbols;
-    delete iFirstValidZhuyinGrp;
-    delete iChineseCharsDisped;
-    delete iZhuyinSymbolsForChineseCharsDisped;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetSizeChangedObserver(
-    MAknFepUICtrlPinyinPopupSizeChangedObserver* aObserver)
-    {
-    iSizeChangedObserver = aObserver;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::IsEnabled() const
-    {
-    return iEnabled;
-    }
-
-void CAknFepUICtrlPinyinPopup::Enable(TBool aEnable)
-    {
-    // fix the refresh bug.
-    TBool redraw = ( aEnable || iEnabled != aEnable );
-    
-    iEnabled = aEnable;
-    if(aEnable)
-        {
-        Window().SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front
-        }
-    
-    iSizeChangedObserver->SelectionPopupEnabled(aEnable);
-    if (!aEnable)
-    	{
-        for(TInt i = 0; i < iVisibleCount; i++)
-            {
-            CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-            inputPane->SetText(KNullDesC);
-            }   
-        iVisibleCount = 0;
-    	}
-    MakeVisible(aEnable);
-    
-    // fix the refresh bug.
-    if( redraw ) 
-        { 
-        DrawDeferred(); 
-        } 
-    }
-
-void CAknFepUICtrlPinyinPopup::SetVisibleSelectionCount(TInt aCount)
-    {
-    __ASSERT_DEBUG(aCount <= EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
-    __ASSERT_DEBUG(aCount >= 1, AknFepUiInterfacePanic(EAknFepUiInterfacePanicNewVisibleCountExceedsRange));
-
-    if(iVisibleCount != aCount)
-        {
-        iVisibleCount = aCount;
-        TInt oldSelected = iSelected;
-
-        if (iVisibleCount > 1) //the layout does not support a visible count of 1
-            {
-            if(aCount - 1 < oldSelected)
-                {
-                // automatically move the selection to be at the end of the new
-                // candidate buffer, by forcing the one that will become the new 
-                // highlighted one to be layout out highlighted before we are resized 
-                // (note that briefly, there will be two items highlighted, but at least
-                // there will be no flicker)
-                iSelected = aCount - 1;
-                LayoutInputPane(aCount - 1);        
-                }
-
-            // note that the old highlighted one isn't shown any more, so we don't need to lay it out again to hide its highlight
-            SetInputPaneVisibility();
-            iSizeChangedObserver->SelectionPopupSizeChanged(iVisibleCount); 
-            DrawDeferred();
-            }
-        }
-    }
-
-void CAknFepUICtrlPinyinPopup::SetVisibleCount(TInt aCount)
-    {
-    if(iVisibleCount != aCount)
-        {
-        iVisibleCount = aCount;
-        }
-    }
-
-TInt CAknFepUICtrlPinyinPopup::VisibleSelectionCount() const
-    {
-    return iVisibleCount;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingArray(void)
-    {
-    return iSpellingArray;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::PhoneticSpellingIndexArray(void)
-    {
-    return iSpellingIndexArray;
-    }
-
-void CAknFepUICtrlPinyinPopup::SplitPhraseSpellingIntoPages(void)
-    {
-    iPages.Reset(); 
-    TPage curPage;
-    TInt spellingNum = iSpellingArray->Count();
-    if(spellingNum == 0)
-        {
-        iVisibleCount = 0;
-        return;
-        }
-
-    TInt index = 0;
-    TBool beAppend = EFalse;
-    
-    while(index < spellingNum)
-        {
-        beAppend = EFalse;
-        curPage.iStartIndex = index;
-        curPage.iEndIndex = index;
-    
-        TInt spellingLeftNum = spellingNum - index > EMaxPhraseCandidate? EMaxPhraseCandidate:spellingNum - index;
-        for(TInt j = 0; j < spellingLeftNum; j ++)  
-            {
-            iInputPaneArray[j]->SetText((*iSpellingArray)[index + j]);
-            } 
-        
-        TAknWindowLineLayout layoutEntryItem = 
-                CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
-        TAknTextLineLayout entryTextLine = 
-            CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
-        TInt layoutLinePrevLeft = 0;
-        TInt layoutLinePrevWidth = 0;
-
-        TAknLayoutRect layoutRectEntryItem;
-        layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem);
-        TRect rectEntryItem = layoutRectEntryItem.Rect();
-    
-        TAknLayoutText layoutText;
-        layoutText.LayoutText(rectEntryItem,entryTextLine);
-        TRect rectText = layoutText.TextRect();
-        
-        TInt rightLimit = iIndiFepArrowRight.Rect().iTl.iX;
-        // value is 3 for 176*208 resolution
-        TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
-        
-        for(TInt i = 0;i < spellingLeftNum;i ++)
-            {
-            if(i > 0)
-                {
-                rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth);
-                }
-            rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance);
-
-            // if label's layout out of screen, forms another display page
-            // > change >= change for phrase creation.
-            if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit))
-                {
-                curPage.iEndIndex = index - 1;
-                iPages.Append(curPage);
-                beAppend = ETrue;
-                break;
-                }
-            
-            layoutLinePrevLeft = rectText.iTl.iX;
-            layoutLinePrevWidth = rectText.Width();
-
-            index ++;
-            
-            if( i == EMaxPhraseCandidate -1 )
-            	{
-                curPage.iEndIndex = index - 1;
-                iPages.Append(curPage);
-                beAppend = ETrue;
-                break;
-            	}
-            
-            }    
-        }
-    
-    if( beAppend == EFalse)
-    	{
-    	curPage.iEndIndex = index - 1;
-    	iPages.Append(curPage);
-    	}
-    iCurDisplayPage = 0;
-    SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1);
-    }
-
-void CAknFepUICtrlPinyinPopup::SplitSpellingIntoPages(TInt aCount)
-    {
-    iPages.Reset(); 
-    TPage curPage;
-    if(aCount == 0)
-        {
-        return;
-        }
-    TInt index = 0;
-    TBool beAppend = EFalse;
-    
-    while(index < aCount)
-        {
-        beAppend = EFalse;
-        curPage.iStartIndex = index;
-        curPage.iEndIndex = index;
-        TInt spellingLeftNum = aCount - index > EMaxCandidates? EMaxCandidates:aCount - index;
- 
-        TAknWindowLineLayout layoutEntryItem = 
-                CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
-        TAknTextLineLayout entryTextLine = 
-            CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
-        TInt layoutLinePrevLeft = 0;
-        TInt layoutLinePrevWidth = 0;
-
-        TAknLayoutRect layoutRectEntryItem;
-        layoutRectEntryItem.LayoutRect(Rect(),layoutEntryItem);
-        TRect rectEntryItem = layoutRectEntryItem.Rect();
-    
-        TAknLayoutText layoutText;
-        layoutText.LayoutText(rectEntryItem,entryTextLine);
-        TRect rectText = layoutText.TextRect();
-        
-        TInt rightLimit = rectEntryItem.iTl.iX + rectEntryItem.Width();
-        // value is 3 for 176*208 resolution
-        TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
-        for(TInt i = 0;i < spellingLeftNum;i ++)
-            {
-            if(i > 0)
-                {
-                rectText.iTl.iX = TInt16(layoutLinePrevLeft + layoutLinePrevWidth);
-                }
-            rectText.SetWidth(iInputPaneArray[i]->LabelTextWidthInPixels() + distance);
-
-            // if label's layout out of screen, forms another display page
-            if((rectText.iTl.iX >= rightLimit) || ((rectText.iTl.iX + rectText.Width()) >= rightLimit))
-                {
-                curPage.iEndIndex = index - 1;
-                iPages.Append(curPage);
-                beAppend = ETrue;
-                break;
-                }
-            layoutLinePrevLeft = rectText.iTl.iX;
-            layoutLinePrevWidth = rectText.Width();
-            index ++;
-            
-            if( i == EMaxPhraseCandidate -1 )
-            	{
-            	curPage.iEndIndex = index - 1;
-                iPages.Append(curPage);
-                beAppend = ETrue;
-                break;
-            	}
-            
-            }
-        }
-    
-    if(beAppend == EFalse)
-    	{
-        curPage.iEndIndex = index - 1;
-        iPages.Append(curPage);
-    	}
-    
-    iCurDisplayPage = 0;
-    SetVisibleSelectionCount(iPages[0].iEndIndex - iPages[0].iStartIndex + 1);
-    SelectIndex(0);
-    }
-
-void CAknFepUICtrlPinyinPopup::SetDisplayPage(TInt aSelection)
-    {
-    if(aSelection >= iVisibleCount)
-        {
-        for(TInt i = 0 ; i < iPages.Count(); i ++)
-            {
-            if((aSelection >= iPages[i].iStartIndex) && (aSelection <= iPages[i].iEndIndex))
-                {
-                iCurDisplayPage = i;
-                SetVisibleSelectionCount(iPages[i].iEndIndex - iPages[i].iStartIndex + 1);
-                SelectIndex(aSelection - iPages[i].iStartIndex);
-                break;
-                }
-            }
-        }
-    else
-        {
-        SelectIndex(aSelection);
-        }
-    UpdateInputPaneVisibility();
-    }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentPageStartIndex(void)
-    {
-    return iPages[iCurDisplayPage].iStartIndex;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArray()
-	{
-	return iKeystrokeArray;
-	}
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArray()
-	{
-	return iInEffectKeystrokeArray;
-	}
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArray()
-	{
-	return iShowKeystrokeArray;
-	}
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::OptimizeSpelling()
-	{
-	return iOptimizeSpelling;
-	}
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::TempSpelling()
-    {
-    return iTempSpelling;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArray()
-	{
-	return iChooseChineseCharacterArray;
-	}
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystroke()
-	{
-	return iChooseChineseCharacterArrayKeystroke;
-	}
-
-TBool CAknFepUICtrlPinyinPopup::GetTonemarkState()
-	{
-	return iTonemarkState;
-	}
-
-void CAknFepUICtrlPinyinPopup::SetTonemarkState( TBool aState )
-	{
-	iTonemarkState = aState;
-	}
-
-void CAknFepUICtrlPinyinPopup::UpdateInputPaneVisibility()
-    {
-    TInt number = 0;
-    if(iPages.Count() != 0)
-        {
-        number = iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1;
-        }
-    if(number > iVisibleCount)
-        {
-        number =  iVisibleCount;
-        }
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-    
-        if(i < number)
-            {
-            inputPane->MakeVisible(ETrue);
-            }
-        else
-            {
-            inputPane->MakeVisible(EFalse);
-            }
-        }
-    }
-
-TBool CAknFepUICtrlPinyinPopup::SetItemText(TInt aIndex, const TDesC& aText)
-    {
-    __ASSERT_DEBUG(aIndex < EMaxPhraseCandidate, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-    __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-
-    if(aIndex > iVisibleCount)
-        {
-        return EFalse;
-        }
-
-    CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    inputPane->SetText(aText);
-    return ETrue;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::SetPhraseItemTexts()
-    {
-    for(TInt i = 0; i < iVisibleCount; i ++)
-        {
-        TPtrC spelling = (*iSpellingArray)[i + iPages[iCurDisplayPage].iStartIndex];  // our index is zero based, engine index is one based
-        SetItemText(i, spelling);
-        }
-    return ETrue;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::GetItemText(TInt aIndex, TDes& aText) const
-    {
-    __ASSERT_DEBUG(aIndex < EMaxCandidates, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-    __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSetItemTextOutsideMaxCandidates));
-
-    const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    inputPane->GetText(aText);
-
-    return ETrue;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetToneMark(const TDesC& aToneMark)
-    {
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
-        inputPane->SetToneMark(aToneMark);
-        }
-    }
-
-void CAknFepUICtrlPinyinPopup::SetToneMark(TInt aIndex, const TDesC& aToneMark)
-    {
-    CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    inputPane->SetToneMark(aToneMark);
-
-    LayoutInputPane(aIndex);
-    }
-
-void CAknFepUICtrlPinyinPopup::GetToneMark(TInt aIndex, TDes& aToneMark) const
-    {
-    const CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    inputPane->GetToneMark(aToneMark);
-    }
-
-void CAknFepUICtrlPinyinPopup::SetItemToneMarkValidity(TInt aIndex, TBool aValid)
-    {
-    CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    inputPane->SetToneMarkValidity(aValid);
-    }
-
-
-
-TBool CAknFepUICtrlPinyinPopup::SelectNextPhrase()
-    {
-    TInt maxIndex = iVisibleCount  - 1;
-    TInt newIndex = iSelected;
-    
-    if((iSelected == maxIndex) )
-        {
-        // is last page 
-        if(iCurDisplayPage == (iPages.Count() - 1))
-            {
-            iCurDisplayPage = 0;
-            }
-        else
-            {
-            iCurDisplayPage ++;
-            }
-        SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1);
-        SetFlag(EDispPageChanged);
-        newIndex = 0;
-        }
-    else if(iSelected < maxIndex)
-        {
-        newIndex ++;
-        }
-    else if(iSelected > maxIndex)
-        {
-        return EFalse;
-        }
-    return SelectIndex(newIndex);
-    }
-
-
-TBool CAknFepUICtrlPinyinPopup::SelectPrevPhrase()
-    {
-    TInt maxIndex = iVisibleCount - 1;
-    TInt newIndex = iSelected;
-    if(iSelected == 0)
-        {
-        // first page
-        if(iCurDisplayPage == 0)
-            {
-            iCurDisplayPage = iPages.Count() - 1;
-            }
-        else
-            {
-            iCurDisplayPage --;
-            }
-        // loop to the end
-        SetVisibleSelectionCount(iPages[iCurDisplayPage].iEndIndex - iPages[iCurDisplayPage].iStartIndex + 1);
-        SetFlag(EDispPageChanged);
-        newIndex = iVisibleCount - 1 ;
-        }
-    else if(iSelected >  0)
-        {
-        newIndex--;
-        }
-    else if(iSelected > maxIndex)
-        {
-        return EFalse;
-        }
-    return SelectIndex(newIndex);
-    }
-
-TBool CAknFepUICtrlPinyinPopup::SelectIndex(TInt aIndex)
-    {
-    __ASSERT_DEBUG(aIndex < iVisibleCount, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates));
-    __ASSERT_DEBUG(aIndex >= 0, AknFepUiInterfacePanic(EAknFepUiInterfacePanicAttemptedSelectionOutsideVisibleCandidates));
-    // If the value of the index changes, the control is redrawn to show the new position.
-    if(iSelected != aIndex)
-        {
-        // only want to layout the two controls between which the selection is moving
-        TInt oldSelected = iSelected;
-        iSelected = aIndex;
-
-        LayoutInputPane(oldSelected);
-        LayoutInputPane(iSelected);
-        }
-    return ETrue;
-    }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentSelection() const
-    {
-    if(iPages.Count() != 0)
-        {
-        return iPages[iCurDisplayPage].iStartIndex + iSelected;
-        }
-    else
-        {
-        return 0;
-        }
-    }
-
-TInt CAknFepUICtrlPinyinPopup::CurrentVisibleSelection() const
-    {
-    return iSelected;
-    }
-
-void CAknFepUICtrlPinyinPopup::PopupSizeChanged()
-	{
-	SizeChanged();
-	}
-	
-void CAknFepUICtrlPinyinPopup::SizeChanged()
-    {
-    LayoutRects();
-    LayoutContainedControls();
-    LayoutFrames();
-    }
-
-TInt CAknFepUICtrlPinyinPopup::CountComponentControls() const
-    {
-    TInt count = 0;
-    count += iInputPaneArray.Count();
-    
-    CCoeControl* controls[] = 
-        {
-        0
-        } ;
-
-    for (TUint ii = 0 ; ii < (sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
-        {
-        if(controls[ii])
-            {
-            count++ ;
-            }
-        }
-    return count ;
-    }
-
-CCoeControl* CAknFepUICtrlPinyinPopup::ComponentControl(TInt aIndex) const 
-    {
-    TInt candidateCount = iInputPaneArray.Count();
-
-    if(aIndex < candidateCount)
-        {
-        // because this method is const, the const [] operator is selected
-        // which means that the pointer is const, so have to cast away constness 
-        // - a possible alternative is to make the array mutable
-        return CONST_CAST(CAknFepUICtrlInputPane*, iInputPaneArray[aIndex]);
-        }
-    aIndex -= candidateCount;
-
-    CCoeControl* controls[] = 
-        {
-        0
-        } ;
-
-    for (TUint ii = 0; (ii < sizeof(controls) / sizeof(CCoeControl*)) ; ii++)
-        {
-        if (controls[ii] && aIndex-- == 0)
-            {
-            return controls[ii] ;
-            }
-        }
-    // shouldn't be called while no components.
-    return NULL ;
-    }
-
-void CAknFepUICtrlPinyinPopup::Draw(const TRect& /*aRect*/) const
-    {
-    CWindowGc& gc = SystemGc();
-    TBool skinnedDraw = EFalse;
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-
-    TRect outerRect;
-    TRect innerRect;
-    CalculateFrameRects(outerRect, innerRect);
-    
-    gc.Clear(outerRect);
-    TRect tmpRect;
-    tmpRect.iTl.iX = innerRect.iTl.iX;
-    tmpRect.iTl.iY = outerRect.iTl.iY;
-    tmpRect.SetWidth(innerRect.Width());
-    tmpRect.SetHeight(outerRect.Height());
-    skinnedDraw = AknsDrawUtils::DrawFrame(skin, gc, outerRect, tmpRect,
-        KAknsIIDQsnFrPopupSub, KAknsIIDQsnFrPopupCenterSubmenu);
-	    
-    // draw the rectangles
-    if(!skinnedDraw)
-        {
-        iRectCoverMainPaneInput.DrawRect(gc);
-        iRectFirstShadowInput.DrawRect(gc);
-        iRectOutlineFrameInput.DrawRect(gc);
-        iRectInsideAreaInput.DrawRect(gc);
-        }
-
-    if((iVisibleCount >= 1) && (iPages.Count() > 1))
-        {
-        if(iCurDisplayPage != 0)
-            {
-            iIndiFepArrowLeft.DrawImage(gc, iNaviArrowBitmapLeft, iNaviArrowBitmapLeftMask);
-            }
-
-        if (iPages.Count() > iCurDisplayPage + 1)
-            {
-            iIndiFepArrowRight.DrawImage(gc, iNaviArrowBitmapRight, iNaviArrowBitmapRightMask);
-            }
-	    }
-    }
-
-TTypeUid::Ptr CAknFepUICtrlPinyinPopup::MopSupplyObject(TTypeUid aId)
-    {
-    if (aId.iUid == MAknsControlContext::ETypeId)
-        return ( MAknsControlContext::SupplyMopObject(aId, iBgContext));
-    return CCoeControl::MopSupplyObject(aId);
-    }
-
-void CAknFepUICtrlPinyinPopup::ConstructL(RWindow& /*aParent*/)
-    {
-    CreateWindowL();
-    ConstructBitmapsL();
-    RWindow& window = Window();
-
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        CAknFepUICtrlInputPane* inputPane = 
-            CAknFepUICtrlInputPane::NewL(window, CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane, iLafDataMgr);
-        inputPane->SetMopParent(this);
-        CleanupStack::PushL(inputPane);
-        // ownership is passed, unless allocation is unsuccessful, in which case we still have it on the stack
-        User::LeaveIfError(iInputPaneArray.Append(inputPane));
-        CleanupStack::Pop(); // inputPane
-        }
-
-    iSpellingArray = new(ELeave)CDesCArrayFlat(1);
-    iSpellingIndexArray = new(ELeave)CDesCArrayFlat(1);
-    iKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
-    iShowKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
-    iOptimizeSpelling = new(ELeave)CDesCArrayFlat(1);
-    iTempSpelling = new(ELeave)CDesCArrayFlat(1);
-    iInEffectKeystrokeArray = new(ELeave)CDesCArrayFlat(1);
-    iChooseChineseCharacterArray = new(ELeave)CDesCArrayFlat(1);
-    iChooseChineseCharacterArrayKeystroke = new(ELeave)CDesCArrayFlat(1);
-    //For stroke
-    iKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
-    iInEffectKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
-    iShowKeystrokeArrayForStroke = new(ELeave)CDesCArrayFlat(1);
-    iChooseChineseCharacterArrayForStroke = new(ELeave)CDesCArrayFlat(1);
-    iChooseChineseCharacterArrayKeystrokeForStroke = new(ELeave)CDesCArrayFlat(1);
-    
-    iZhuyinSymbols = new(ELeave)CDesCArrayFlat(1);
-    iZhuyinShowSymbols = new(ELeave)CDesCArrayFlat(1);
-    iFirstValidZhuyinGrp = new(ELeave)CDesCArrayFlat(1);
-    iChineseCharsDisped = new(ELeave)CDesCArrayFlat(1);
-    iZhuyinSymbolsForChineseCharsDisped = new(ELeave)CDesCArrayFlat(1);
-    
-    SetNonFocusing();
-    window.SetOrdinalPosition(0, ECoeWinPriorityFep); // right at the front
-    window.SetNonFading(ETrue);
-
-    TRect outerRect = TRect();
-    TRect innerRect = TRect();
-    CalculateFrameRects(outerRect, innerRect);
-
-    iBgContext = CAknsFrameBackgroundControlContext::NewL(KAknsIIDQsnFrPopupSub, outerRect, innerRect, ETrue);
-    iLastResouce = 0;
-    MakeVisible(EFalse);
-    }
-
-void CAknFepUICtrlPinyinPopup::ConstructBitmapsL()
-    {
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();    
-    
-    TFileName bmpFile;
-    bmpFile.Copy(_L("z:"));
-    bmpFile.Append(KDC_BITMAP_DIR);
-    bmpFile.Append(KFepUiControlsBitmapFile);      
-    
-    AknsUtils::CreateColorIconL( skin,
-                                     KAknsIIDQgnIndiFepArrowLeft,
-                                     KAknsIIDQsnIconColors,
-                                     EAknsCIQsnIconColorsCG20,
-                                     iNaviArrowBitmapLeft,
-                                     iNaviArrowBitmapLeftMask,
-                                     bmpFile,
-                                     EMbmAknfepuictrlsQgn_indi_fep_arrow_left,
-                                     EMbmAknfepuictrlsQgn_indi_fep_arrow_left_mask,
-                                     AKN_LAF_COLOR( 0 )
-                                 );  
-
-    AknsUtils::CreateColorIconL( skin,
-                                     KAknsIIDQgnIndiFepArrowRight,
-                                     KAknsIIDQsnIconColors,
-                                     EAknsCIQsnIconColorsCG20,
-                                     iNaviArrowBitmapRight,
-                                     iNaviArrowBitmapRightMask,
-                                     bmpFile,
-                                     EMbmAknfepuictrlsQgn_indi_fep_arrow_right,
-                                     EMbmAknfepuictrlsQgn_indi_fep_arrow_right_mask,
-                                     AKN_LAF_COLOR( 0 )
-                                 );    
-    }
-
-CAknFepUICtrlPinyinPopup::CAknFepUICtrlPinyinPopup( CAknFepUiLayoutDataMgr* aLafDataMgr )
-    : 
-    iSelected(0),
-    iEnabled(EFalse),
-    iVisibleCount(CAknFepUICtrlPinyinPopup::EMaxPhraseCandidate),
-    iCurDisplayPage(0),
-    iTonemarkState(1),
-    iStrokeState(0),
-    iHighLightFlag( 0 ),
-    iFlags(0),    
-    iValidKeystrokeCount( 0 ),
-    iPhraseCreation(0),
-    iPhraseCreationEditingState( 0 ),
-    iState(1),    
-    iChangeStateFromEditToSpelling( 0 ),
-    iValidKeystrokeChanged( 0 )
-    {
-    iLafDataMgr = aLafDataMgr;
-    iEEPContent.Zero();
-    }
-
-void CAknFepUICtrlPinyinPopup::LayoutRects()
-    {
-    // left arrow
-    iIndiFepArrowLeft = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowLeft ));
-    AknIconUtils::SetSize( iNaviArrowBitmapLeft, iIndiFepArrowLeft.Rect().Size());
-
-    // right arrow
-    iIndiFepArrowRight = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( EIndiFepArrowRight ));
-    AknIconUtils::SetSize( iNaviArrowBitmapRight, iIndiFepArrowRight.Rect().Size());
-
-    // cover main pane
-    iRectCoverMainPaneInput = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectCoverMainPaneInput ));
-    // first shadow
-    iRectFirstShadowInput = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectFirstShadowInput ));
-    // outline frame
-    iRectOutlineFrameInput = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectOutlineFrameInput ));
-    // inside area
-    iRectInsideAreaInput = 
-        CAknFepChineseUIDataConv::AnyToLayoutRect( iLafDataMgr->RequestData( ERectInsideAreaInput ));
-    }
-
-void CAknFepUICtrlPinyinPopup::LayoutContainedControls()
-    {
-    LayoutInputPanes();
-    }
-
-void CAknFepUICtrlPinyinPopup::LayoutInputPanes()
-    {
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        LayoutInputPane(i);
-        }
-    }
-
-void CAknFepUICtrlPinyinPopup::LayoutInputPane(TInt aIndex)
-    {
-    TRect rect = Rect();
-
-    CAknFepUICtrlInputPane* inputPane = iInputPaneArray[aIndex];
-    TAknWindowLineLayout layoutEntryItem = 
-            CAknFepChineseUIDataConv::AnyToWindowLine( iLafDataMgr->RequestData(ELayoutEntryItem));
-    TAknTextLineLayout layoutLineText = 
-        CAknFepChineseUIDataConv::AnyToTextLine( iLafDataMgr->RequestData(EEntryTextLayout));
-    TAknLayoutRect layoutRectEntryItem;
-    layoutRectEntryItem.LayoutRect(rect,layoutEntryItem);
-    TRect rectEntryItem = layoutRectEntryItem.Rect();
-    
-    TAknLayoutText layoutText;
-    layoutText.LayoutText(rectEntryItem,layoutLineText);
-    TRect rectText = layoutText.TextRect();
-    
-    // value is 3 for 176*208 resolution
-    TInt distance = rectText.iTl.iX - rectEntryItem.iTl.iX + rectEntryItem.iBr.iX - rectText.iBr.iX;
-    
-    if( aIndex > 0)
-        {
-        CAknFepUICtrlInputPane* inputPanePrev = iInputPaneArray[aIndex - 1];
-        rectText.iTl.iX = inputPanePrev->Rect().iBr.iX;
-        }
-    rectText.SetWidth(inputPane->LabelTextWidthInPixels() + distance);
-    rectText.SetHeight(rect.Height());
-
-    inputPane->SetRect(rectText);
-    inputPane->SetHighlighted(aIndex == iSelected);
-    }
-
-void CAknFepUICtrlPinyinPopup::SetInputPaneVisibility()
-    {
-    TInt number = iVisibleCount;
-    CWindowGc& gc = SystemGc();
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
-    TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly);
- 
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
- 
-        //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc);
-        if(skinnedDraw)
-            {
-            // show input panes, when skinned, as they must draw background context
-            // to avoid (the one that is almost off-screen) flickering behind
-            // however, need to hide the text so that is doesn't show
-            inputPane->MakeTextVisible(i < number);
-            }
-        else
-            {
-            // if not skinned, must hide the offscreen input panes otherwise they 
-            // will draw over the border rectangle
-            inputPane->MakeVisible(i < number);
-            }
-        }
-    }
-
-void CAknFepUICtrlPinyinPopup::LayoutFrames()
-    {
-    TRect outerRect;
-    TRect innerRect;
-    CalculateFrameRects(outerRect, innerRect);
-    iBgContext->SetFrameRects(outerRect, innerRect);
-    iBgContext->SetParentPos(PositionRelativeToScreen());
-    }
-
-void CAknFepUICtrlPinyinPopup::CalculateFrameRects(TRect& aOuterRect, TRect& aInnerRect) const
-    {
-    TRect windowRect = 
-        CAknFepChineseUIDataConv::AnyToRect( iLafDataMgr->RequestData( EPopupRectEntry ));
-    TInt rectHeight = windowRect.iBr.iY - windowRect.iTl.iY;
-    TInt rectWidth = windowRect.Width();
-    windowRect.iTl.iX = 0;
-    windowRect.iTl.iY = 0;
-    windowRect.SetHeight(rectHeight);
-    windowRect.SetWidth(rectWidth);
-
-    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);
-    }
-
-void CAknFepUICtrlPinyinPopup::SetNoneHighlighted()
-    {
-    TInt number = iVisibleCount;
-    CWindowGc& gc = SystemGc();
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    MAknsControlContext* cc = AknsDrawUtils::ControlContext(this);
-    TBool skinnedDraw = AknsDrawUtils::Background(skin, cc, this, gc, Rect(),KAknsDrawParamPrepareOnly);
- 
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        CAknFepUICtrlInputPane* inputPane = iInputPaneArray[i];
- 
-        //TBool skinnedDraw = AknsDrawUtils::HasBitmapBackground(skin, cc);
-        if(skinnedDraw)
-            {
-            // show input panes, when skinned, as they must draw background context
-            // to avoid (the one that is almost off-screen) flickering behind
-            // however, need to hide the text so that is doesn't show
-            inputPane->SetHighlighted( !(i < number) );
-            }
-        }
-    }
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::KeystrokeArrayForStroke()
-    {
-    return iKeystrokeArrayForStroke;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::InEffectKeystrokeArrayForStroke()
-    {
-    return iInEffectKeystrokeArrayForStroke;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ShowKeystrokeArrayForStroke()
-    {
-    return iShowKeystrokeArrayForStroke;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayForStroke()
-    {
-    return iChooseChineseCharacterArrayForStroke;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChooseChineseCharacterArrayKeystrokeForStroke()
-    {
-    return iChooseChineseCharacterArrayKeystrokeForStroke;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbols()
-    {
-    return this->iZhuyinSymbols;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinShowSymbols()
-    {
-    return this->iZhuyinShowSymbols;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::FirstValidZhuyinGrp()
-    {
-    return this->iFirstValidZhuyinGrp;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetEEPContent ( const TDes& aDes )
-    {
-    iEEPContent = aDes;
-    }
-
-TDes& CAknFepUICtrlPinyinPopup::GetEEPContent ( )
-    {
-    return iEEPContent;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetEEPContentValid ( TBool aValid )
-    {
-    iEEPContentValid = aValid;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::GetEEPContentValid ( )
-    {
-    return iEEPContentValid;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ChineseCharsDisped()
-    {
-    return this->iChineseCharsDisped;
-    }
-
-CDesCArrayFlat* CAknFepUICtrlPinyinPopup::ZhuyinSymbolsForChineseCharsDisped()
-    {
-    return this->iZhuyinSymbolsForChineseCharsDisped;
-    }
-
-void CAknFepUICtrlPinyinPopup::ResetStrokeArray()
-    {
-    //reset pinyin array
-    iSpellingArray->Reset();
-    iSpellingArray->Compress();
-    iSpellingIndexArray->Reset();
-    iSpellingIndexArray->Compress();
-    iKeystrokeArray->Reset();
-    iKeystrokeArray->Compress();
-    iInEffectKeystrokeArray->Reset();
-    iInEffectKeystrokeArray->Compress();
-    iShowKeystrokeArray->Reset();
-    iShowKeystrokeArray->Compress();
-    iChooseChineseCharacterArray->Reset();
-    iChooseChineseCharacterArray->Compress();
-    iChooseChineseCharacterArrayKeystroke->Reset();
-    iChooseChineseCharacterArrayKeystroke->Compress();
-    iOptimizeSpelling->Reset();
-    iOptimizeSpelling->Compress();
-    iTempSpelling->Reset();
-    iTempSpelling->Compress();
-
-    //reset stroke array
-    iKeystrokeArrayForStroke->Reset();
-    iKeystrokeArrayForStroke->Compress();
-    iInEffectKeystrokeArrayForStroke->Reset();
-    iInEffectKeystrokeArrayForStroke->Compress();
-    iShowKeystrokeArrayForStroke->Reset();
-    iShowKeystrokeArrayForStroke->Compress();
-    iChooseChineseCharacterArrayForStroke->Reset();
-    iChooseChineseCharacterArrayForStroke->Compress();
-    iChooseChineseCharacterArrayKeystrokeForStroke->Reset();
-    iChooseChineseCharacterArrayKeystrokeForStroke->Compress();
-    
-    //reset zhuyin array
-    iZhuyinSymbols->Reset();
-    iFirstValidZhuyinGrp->Reset();
-    iChineseCharsDisped->Reset();
-    iZhuyinSymbolsForChineseCharsDisped->Reset();
-    
-    iZhuyinSymbols->Compress();
-    iFirstValidZhuyinGrp->Compress();
-    iChineseCharsDisped->Compress();
-    iZhuyinSymbolsForChineseCharsDisped->Compress();
-    
-    iLastResouce = 0;
-    iValidKeystrokeCount = 0;
-    iPhraseCreation = 0;
-    iPhraseCreationEditingState = 0;
-    iHighLightFlag = 0;
-    iChangeStateFromEditToSpelling = 0;
-    iValidKeystrokeChanged = 0;
-    
-    }
-
-void CAknFepUICtrlPinyinPopup::SetChangeState( TBool aChangeState )
-    {
-    iChangeState =  aChangeState ;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::IsChangeStatet() const
-    {
-    return iChangeState;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetState( TInt aState )
-    {
-    iState = aState;
-    }
-
-TInt CAknFepUICtrlPinyinPopup::GetState()
-    {
-    return iState;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetPhraseCreationState( TBool aState )
-    {
-    iPhraseCreation = aState;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationState()
-    {
-    return iPhraseCreation;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetPhraseCreationEditingState( TBool aState )
-    {
-    iPhraseCreationEditingState = aState;
-    }
-
-TBool CAknFepUICtrlPinyinPopup::GetPhraseCreationEditingState()
-    {
-    return iPhraseCreationEditingState;
-    }
-
-// ---------------------------------------------------------
-// Set flag whether from candidate state change state.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetFromCandidateChangeStateFlag( TBool aFlag )
-    {
-    iHighLightFlag = aFlag;
-    }
-
-// ---------------------------------------------------------
-// Get flag whether from candidate state change state.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetFromCandidateChangeStateFlag()
-    {
-    return iHighLightFlag;
-    }
-
-// ---------------------------------------------------------
-// Set count of valid keystroke.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetValidKeystrokeCount( TInt aCount )
-	{
-	iValidKeystrokeCount = aCount;
-	}
-
-// ---------------------------------------------------------
-// Set count of valid keystroke.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetValidKeystrokeCount()
-	{
-	return iValidKeystrokeCount;
-	}
-
-// ---------------------------------------------------------
-// Set last cba resouce id.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetLastResouce( TInt aResouceId )
-    {
-    iLastResouce = aResouceId;
-    }
-
-// ---------------------------------------------------------
-// Get last cba resouce id.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetLastResouce()
-    {
-    return iLastResouce;
-    }
-
-// ---------------------------------------------------------
-// Set change state from Edit to Spelling flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetFromEditToSpellingFlag( TBool aFlag )
-    {
-    iChangeStateFromEditToSpelling = aFlag;
-    }
-
-// ---------------------------------------------------------
-// Get change state from Edit to Spelling flag.
-// ---------------------------------------------------------
-//
-TInt CAknFepUICtrlPinyinPopup::GetFromEditToSpellingFlag()
-    {
-    return iChangeStateFromEditToSpelling;
-    }
-
-// ---------------------------------------------------------
-// Set valid keystroke change flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetValidKeystrokeChange( TBool aFlag )
-    {
-    iValidKeystrokeChanged = aFlag;
-    }
-
-// ---------------------------------------------------------
-// Get valid keystroke change flag.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetValidKeystrokeChange()
-    {
-    return iValidKeystrokeChanged;
-    }
-
-// ---------------------------------------------------------
-// Set PreStateIsPredict flag.
-// ---------------------------------------------------------
-//
-void CAknFepUICtrlPinyinPopup::SetPreStateIsPredictive( TBool aFlag )
-    {
-    iPreStateIsPredictive = aFlag;
-    }
-
-// ---------------------------------------------------------
-// Set PreStateIsPredict flag.
-// ---------------------------------------------------------
-//
-TBool CAknFepUICtrlPinyinPopup::GetPreStateIsPredictive()
-    {
-    return iPreStateIsPredictive;
-    }
-
-void CAknFepUICtrlPinyinPopup::SetInputLayoutMiniQwertyZhuyin()
-    {
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhraseMiniQwertyZhuyin );
-        }
-    }
-
-void CAknFepUICtrlPinyinPopup::ResetInputLayoutMiniQwertyZhuyin()
-    {
-    for(TInt i = 0; i < EMaxPhraseCandidate; i++)
-        {
-        iInputPaneArray[i]->SetLayout( CAknFepUICtrlInputPane::ELayoutPhrasePinyinPopupPane );
-        }
-    }
-// End of file