textinput/peninputhwrboxcn/ctrlsrc/peninputhwrbxwnd.cpp
changeset 0 eb1f2e154e89
child 9 e6a39382bb9c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrboxcn/ctrlsrc/peninputhwrbxwnd.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1128 @@
+/*
+* 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:  CAknFepHwrBxWnd
+*
+*/
+
+
+#include <peninputinputcontextfield.h>
+#include <peninputhwrbxcn.rsg>
+#include <peninputdropdownlist.h>
+#include <peninputdragbutton.h>
+#include <peninputrepeatbutton.h>
+#include <AknLayoutDef.h>
+#include <AknUtils.h>
+#include <AknsUtils.h>
+#include <AknIconUtils.h>
+#include <coemain.h>
+#include <peninputlayoutchoicelist.h>
+#include <AknFepGlobalEnums.h>
+#include <peninputlayoutinputmodechoice.h>
+#include <peninputrepeatbutton.h>
+
+#include "peninputhwrdebug.h"
+#include "peninputhwrbxwnd.h"
+#include "peninputhwrbxlayout.h"
+#include "peninputhwrevent.h"
+#include "peninputhwrctrlid.h"
+#include "peninputhwrbxctrlbar.h"
+#include "peninputhwrboxgroup.h"
+#include "peninputhwrbxdatastore.h"
+#include "aknlayoutscalable_avkon.cdl.h"
+
+const TInt KBoxCount = 2;
+const TInt KInvalidImg = -1 ;
+const TInt KNotSupportSkin = -1;
+const TUint32 KDefaultTextColor = 0x000000;
+const TInt32 KInvalidResId = -1;
+
+const TInt KWrittingFactor = 255;  // 0% transparency
+const TInt KNormalFactor = 229; // 10% transparency
+
+const TInt KDefaultStrokeEndMarkX = -65536;
+const TInt KDefaultStrokeEndMarkY = -65536;
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CAknFepHwrBxWnd* CAknFepHwrBxWnd::NewL(CFepUiLayout* aFepUiLayout, 
+                                       TInt aControlId,
+                                       TBool aLandscapeStyle)
+    {
+    PRINTF((_L("CAknFepHwrBxWnd::NewL(), aCtrlId = %d\n"), aControlId));
+    CAknFepHwrBxWnd* self = NewLC(aFepUiLayout, aControlId, aLandscapeStyle);
+    CleanupStack::Pop(self);
+    
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CAknFepHwrBxWnd* CAknFepHwrBxWnd::NewLC(CFepUiLayout* aFepUiLayout, 
+                                        TInt aControlId,
+                                        TBool aLandscapeStyle)
+    {
+    PRINTF((_L("CAknFepHwrBxWnd::NewLC(), aCtrlId = %d\n"), aControlId));
+    CAknFepHwrBxWnd* self = new (ELeave) CAknFepHwrBxWnd(aFepUiLayout, aControlId);
+    CleanupStack::PushL(self);
+    self->ConstructL(aLandscapeStyle);
+    
+    return self;
+    }
+
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+CAknFepHwrBxWnd::CAknFepHwrBxWnd( CFepUiLayout* aFepUiLayout, TInt aControlId)
+    :CAknFepCtrlBaseWindow(aFepUiLayout,aControlId), 
+     iFirstTimeConstruct(ETrue),
+     iUnitShadowSizeSet(EFalse),
+     iControlPosSet(EFalse)
+    {
+    CAknFepHwrBxLayout* layout = static_cast<CAknFepHwrBxLayout*>(aFepUiLayout);
+    iDataStore = layout->DataStore();
+    }
+    
+// ---------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::ConstructL(TBool aLandscapeStyle)
+    {
+    PRINTF((_L("CAknFepHwrBxWnd::ConstructL()\n")));
+    BaseConstructL();
+
+    AddContextFieldL();
+
+    AddBackspaceBtnL();
+    
+    AddOptionButtonL();
+    
+    AddControlBarL();
+    
+    AddBoxGroupL();
+
+    AddDropdownListL(aLandscapeStyle);
+
+    //add layout as window's observer
+    AddEventObserver(UiLayout());
+    MoveButton()->AddEventObserver(UiLayout());
+    
+    //add window as the subscriber
+    iDataStore->AddSubscriber(this);
+    
+    PRINTF((_L("CAknFepHwrBxWnd::ConstructL()......done!\n")));
+    }
+    
+// ---------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------
+//
+CAknFepHwrBxWnd::~CAknFepHwrBxWnd()
+    {
+    PRINTF((_L("CAknFepHwrBxWnd::~CAknFepHwrBxWnd()\n")));
+    }
+
+// ---------------------------------------------------------
+// ConstructFromResourceL
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::ConstructFromResourceL(TResourceReader& aReader)
+    {
+    TInt supportskin = aReader.ReadInt16();
+
+    if (iFirstTimeConstruct && (supportskin != KNotSupportSkin))
+        {
+    	UiLayout()->AddControlL(this);
+        }
+
+    // read shadow and icf resources
+    TPtrC bmpFileName = aReader.ReadTPtrC();
+    
+    TInt32 imgMajorSkinId = aReader.ReadInt32();
+
+    TAknsItemID id;
+    TInt skinitemid;
+    
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+
+    for (TInt i = 0; i < KShadowBmpBr + 1; i++)
+    	{
+        const TInt16 bmpId = aReader.ReadInt16();
+        const TInt16 bmpMskId = aReader.ReadInt16();
+        skinitemid = aReader.ReadInt16();
+        
+        id.Set(TInt(imgMajorSkinId), skinitemid);
+    	
+        if (bmpId != KInvalidImg)
+        	{
+            CFbsBitmap* shadowImg = NULL;
+            CFbsBitmap* shadowMaskImg = NULL;
+
+            if (bmpMskId != KInvalidImg)
+                {
+                AknsUtils::CreateIconL(skininstance, 
+                                       id,
+                                       shadowImg,
+                                       shadowMaskImg,
+                                       bmpFileName,
+                                       bmpId,
+                                       bmpMskId);
+                }
+            else
+                {
+                AknsUtils::CreateIconL(skininstance,
+                                       id,
+                                       shadowImg,
+                                       bmpFileName,
+                                       bmpId);
+                }
+            
+            SetShadowBmp(shadowImg, shadowMaskImg, TShadowBitmapIndex(i));
+        	}
+    	}
+
+    const TInt16 icfbgId = aReader.ReadInt16();
+    const TInt16 icfbgmaskId = aReader.ReadInt16();
+    skinitemid = aReader.ReadInt16();
+
+    id.Set(TInt(imgMajorSkinId), skinitemid);
+    
+    if (icfbgId != KInvalidImg)
+    	{
+        CFbsBitmap* icfImg = NULL;
+
+        if (icfbgmaskId != KInvalidImg)
+            {
+            CFbsBitmap* icfmaskImg = NULL;
+            
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   icfImg,
+                                   icfmaskImg,
+                                   bmpFileName,
+                                   icfbgId,
+                                   icfbgmaskId);
+            
+            AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved);
+            iContextField->SetBackgroundMaskBitmapL(icfmaskImg);
+            }
+        else
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   icfImg,
+                                   bmpFileName,
+                                   icfbgId);
+            }
+    	
+    	AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved);
+    	iContextField->SetBackgroundBitmapL(icfImg);
+    	}
+  
+    // read text color
+    TRgb textcolor;
+    TInt32 colorMajorSkinId = aReader.ReadInt32();
+    skinitemid = aReader.ReadInt16();
+    
+    id.Set(TInt(colorMajorSkinId), skinitemid);
+
+    const TInt16 textcoloridx = aReader.ReadInt16();
+    
+    TInt error = AknsUtils::GetCachedColor(skininstance, 
+                                           textcolor,
+                                           id,
+                                           textcoloridx);
+
+    if (error == KErrNone)
+        {
+        iContextField->SetTextColor(textcolor);
+        }
+    else
+        {
+        iContextField->SetTextColor(TRgb(KDefaultTextColor));
+        }    
+
+    if (iFirstTimeConstruct)
+        {
+        const TInt32 moveResId = aReader.ReadInt32();
+        const TInt32 closeResId = aReader.ReadInt32();
+        const TInt32 backResId = aReader.ReadInt32();
+        const TInt32 optionResId = aReader.ReadInt32();
+        const TInt32 ctrlbarResId = aReader.ReadInt32();
+        const TInt32 boxgrpResId = aReader.ReadInt32();
+        const TInt32 bgImageResId = aReader.ReadInt32();
+        
+        MoveButton()->SetResourceId(moveResId);
+        MoveButton()->ConstructFromResourceL();
+
+        CloseButton()->SetResourceId(closeResId);
+        CloseButton()->ConstructFromResourceL();
+        
+        iBackspace->SetResourceId(backResId);
+        iBackspace->ConstructFromResourceL();
+        
+        iOptionButton->SetResourceId(optionResId);
+        iOptionButton->ConstructFromResourceL();
+    
+        CCoeEnv* coeEnv = CCoeEnv::Static();
+        TResourceReader ctrlbarreader;
+
+        coeEnv->CreateResourceReaderLC(ctrlbarreader, ctrlbarResId);
+        iControlBar->ConstructFromResourceL(ctrlbarreader);
+        CleanupStack::PopAndDestroy();  // ctrlbarreader
+        
+        iBoxGroup->SetResourceId(boxgrpResId);
+        iBoxGroup->ConstructFromResourceL();
+        
+        ReadBackgroundInfoL( bgImageResId );
+        }
+    else
+    	{
+    	CControlGroup::ConstructFromResourceL();
+    	}    
+
+    iFirstTimeConstruct = EFalse;
+    
+    TInt newValue = iDataStore->GetPenTrailColor();
+    iDataStore->SetBoxPenColor(TRgb(newValue));    
+    }
+    
+// ---------------------------------------------------------
+// ConstructFromResourceL
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::ConstructFromResourceL()
+	{
+    if (iResourceId == KInvalidResId)
+    	{
+        User::Leave(KErrArgument);
+    	}
+
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC(reader, iResourceId);
+
+    TInt supportskin = reader.ReadInt16();
+    
+    if (iFirstTimeConstruct && (supportskin != KNotSupportSkin))
+        {
+    	UiLayout()->AddControlL(this);
+        }
+    
+    // read shadow and icf resources
+    TPtrC bmpFileName = reader.ReadTPtrC();
+    TInt32 imgMajorSkinId = reader.ReadInt32();
+
+    TAknsItemID id;
+    TInt skinitemid;
+    
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+
+    for (TInt i = 0; i < KShadowBmpBr + 1; i++)
+    	{
+        const TInt16 bmpId = reader.ReadInt16();
+        const TInt16 bmpMskId = reader.ReadInt16();
+        skinitemid = reader.ReadInt16();
+        
+        id.Set(TInt(imgMajorSkinId), skinitemid);
+    	
+        if (bmpId != KInvalidImg)
+        	{
+            CFbsBitmap* shadowImg = NULL;
+            CFbsBitmap* shadowMaskImg = NULL;
+
+            if (bmpMskId != KInvalidImg)
+                {
+                AknsUtils::CreateIconL(skininstance, 
+                                       id,
+                                       shadowImg,
+                                       shadowMaskImg,
+                                       bmpFileName,
+                                       bmpId,
+                                       bmpMskId);
+                }
+            else
+                {
+                AknsUtils::CreateIconL(skininstance,
+                                       id,
+                                       shadowImg,
+                                       bmpFileName,
+                                       bmpId);
+                }
+            
+            SetShadowBmp(shadowImg, shadowMaskImg, TShadowBitmapIndex(i));
+        	}
+    	}
+
+    const TInt16 icfbgId = reader.ReadInt16();
+    const TInt16 icfbgmaskId = reader.ReadInt16();
+    skinitemid = reader.ReadInt16();
+
+    id.Set(TInt(imgMajorSkinId), skinitemid);
+    
+    if (icfbgId != KInvalidImg)
+    	{
+        CFbsBitmap* icfImg = NULL;
+
+        if (icfbgmaskId != KInvalidImg)
+            {
+            CFbsBitmap* icfmaskImg = NULL;
+            
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   icfImg,
+                                   icfmaskImg,
+                                   bmpFileName,
+                                   icfbgId,
+                                   icfbgmaskId);
+            
+            AknIconUtils::SetSize(icfmaskImg, TSize(1,1), EAspectRatioNotPreserved);
+            iContextField->SetBackgroundMaskBitmapL(icfmaskImg);
+            }
+        else
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   icfImg,
+                                   bmpFileName,
+                                   icfbgId);
+            }
+    	
+    	AknIconUtils::SetSize(icfImg, TSize(1,1), EAspectRatioNotPreserved);
+    	iContextField->SetBackgroundBitmapL(icfImg);
+    	}
+  
+    // read text color
+    TRgb textcolor;
+    TInt32 colorMajorSkinId = reader.ReadInt32();
+    skinitemid = reader.ReadInt16();
+    
+    id.Set(TInt(colorMajorSkinId), skinitemid);
+
+    const TInt16 textcoloridx = reader.ReadInt16();
+    
+    TInt error = AknsUtils::GetCachedColor(skininstance, 
+                                           textcolor,
+                                           id,
+                                           textcoloridx);
+
+    if (error == KErrNone)
+        {
+        iContextField->SetTextColor(textcolor);
+        }
+    else
+        {
+        iContextField->SetTextColor(TRgb(KDefaultTextColor));
+        }    
+
+    if (iFirstTimeConstruct)
+        {
+        const TInt32 moveResId = reader.ReadInt32();
+        const TInt32 closeResId = reader.ReadInt32();
+        const TInt32 backResId = reader.ReadInt32();
+        const TInt32 optionResId = reader.ReadInt32();
+        const TInt32 ctrlbarResId = reader.ReadInt32();
+        const TInt32 boxgrpResId = reader.ReadInt32();
+        const TInt32 bgImageResId = reader.ReadInt32();
+        
+        MoveButton()->SetResourceId(moveResId);
+        MoveButton()->ConstructFromResourceL(); 
+        
+        CloseButton()->SetResourceId(closeResId);
+        CloseButton()->ConstructFromResourceL();
+        
+        iBackspace->SetResourceId(backResId);
+        iBackspace->ConstructFromResourceL();
+        
+        iOptionButton->SetResourceId(optionResId);
+        iOptionButton->ConstructFromResourceL();
+
+        CCoeEnv* coeEnv = CCoeEnv::Static();
+        TResourceReader ctrlbarreader;
+
+        coeEnv->CreateResourceReaderLC(ctrlbarreader, ctrlbarResId);
+        iControlBar->ConstructFromResourceL(ctrlbarreader);
+        CleanupStack::PopAndDestroy();  // ctrlbarreader
+
+        iBoxGroup->SetResourceId(boxgrpResId);
+        iBoxGroup->ConstructFromResourceL();
+        
+        ReadBackgroundInfoL( bgImageResId );
+        }
+    else
+        {
+        CControlGroup::ConstructFromResourceL();
+        }    
+
+    CleanupStack::PopAndDestroy(); // reader
+
+    iFirstTimeConstruct = EFalse;
+    TInt newValue = iDataStore->GetPenTrailColor();
+    iDataStore->SetBoxPenColor(TRgb(newValue));  
+	}
+
+// ---------------------------------------------------------
+// CAknFepHwrBxWnd::ReadUnitSize
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::ReadLafInfo(TBool aLandscapeStyle)
+	{
+	if (iDataStore->SizeChanging() || (!iUnitShadowSizeSet))
+		{
+        // if size is changing, or unit size, shadow size have not been set yet
+        TAknWindowLineLayout appWnd;
+        TAknWindowLineLayout mainPane;
+        TAknWindowLineLayout wndLayout;
+        TAknWindowLineLayout unitLayout;
+        TAknWindowLineLayout shadowPane;
+        TAknWindowLineLayout shadowTl;
+        TAknWindowLineLayout shadowBr;
+        TAknLayoutRect mainPaneRect;
+        TAknLayoutRect wndRect;
+        TAknLayoutRect unitRect;
+        TAknLayoutRect shadowRect;
+        TAknLayoutRect shadowTlRect;
+        TAknLayoutRect shadowBrRect;
+
+        // Get hwr window layout
+        appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
+        
+        if (aLandscapeStyle)
+        	{
+    	    // landscape
+    	    mainPane = AknLayoutScalable_Avkon::main_pane(4).LayoutLine();
+            wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(2).LayoutLine();
+        	}
+        else
+        	{
+            // portrait	
+            mainPane = AknLayoutScalable_Avkon::main_pane(1).LayoutLine();
+            wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(0).LayoutLine();
+        	}	
+
+        mainPaneRect.LayoutRect(appWnd.Rect(), mainPane);
+        wndRect.LayoutRect(mainPaneRect.Rect(), wndLayout);
+    
+        unitLayout = AknLayoutScalable_Avkon::fep_hwr_aid_pane(2).LayoutLine();
+        unitRect.LayoutRect(wndRect.Rect(), unitLayout);
+    
+        TRect hwrWndRect = TRect(0, 
+                                 0,
+                                 wndRect.Rect().Width(),
+                                 wndRect.Rect().Height());
+                             
+        iUnitWidth = unitRect.Rect().Width();
+        iUnitHeight = unitRect.Rect().Height();
+        
+      //  iUnitWidth = 34;
+      //  iUnitHeight = 34;        
+
+        shadowPane = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane(1).LayoutLine();
+        shadowRect.LayoutRect(hwrWndRect, shadowPane);
+    
+        shadowTl = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g1().LayoutLine();
+        shadowTlRect.LayoutRect(shadowRect.Rect(), shadowTl);
+    
+        shadowBr = AknLayoutScalable_Avkon::bg_popup_fep_shadow_pane_g8().LayoutLine();
+        shadowBrRect.LayoutRect(shadowRect.Rect(), shadowBr);
+    
+        iShadowTl = shadowTlRect.Rect().Size();
+        iShadowBr = shadowBrRect.Rect().Size();
+        
+        iUnitShadowSizeSet = ETrue;
+		}
+ 	}
+ 	
+// ---------------------------------------------------------
+// Get top left corner shadow size
+// ---------------------------------------------------------
+//
+TSize CAknFepHwrBxWnd::ShadowTlSize()
+	{
+	return iShadowTl;
+	}
+
+// ---------------------------------------------------------
+// Get bottom right corner shadow size
+// ---------------------------------------------------------
+//
+TSize CAknFepHwrBxWnd::ShadowBrSize()
+	{
+	return iShadowBr;
+	}
+	
+// ---------------------------------------------------------
+// Set setting button enable
+// ---------------------------------------------------------
+//     
+void CAknFepHwrBxWnd::SetEnableSettingBtn(TBool aEnable)
+    {
+    if ( aEnable )    
+        {
+        iOptionButton->SetDimmed(EFalse);
+        }
+    else
+        {
+        iOptionButton->SetDimmed(ETrue);
+        iOptionButton->SetActive(EFalse);
+        } 
+    }
+    
+// ---------------------------------------------------------
+// Resize
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::SizeChanged(TBool aLandscapeStyle)
+    {
+    ReadLafInfo(aLandscapeStyle);
+ 
+    if (iDataStore->SizeChanging() || (!iControlPosSet))
+    	{
+    	// if size changing, or sub controls 
+    	// size and position have not been set
+        
+        TPoint startPos = TPoint(iShadowTl.iWidth, iShadowTl.iHeight);
+        TRect hwrWnd = TRect(startPos,
+                             TPoint(startPos.iX + 10*iUnitWidth,
+                                    startPos.iY + 7*iUnitHeight));
+        SetRect(hwrWnd);
+
+        // title bar
+        startPos = hwrWnd.iTl;
+        TRect titleBar = TRect(startPos,
+                               TPoint(startPos.iX + iUnitWidth*10,
+                                      startPos.iY + iUnitHeight));
+        TitleBar()->SetRect(titleBar);
+
+        // close button
+        startPos = titleBar.iTl;
+        TRect closeRect = TRect(startPos,
+                                TPoint(startPos.iX + iUnitWidth,
+                                       startPos.iY + iUnitHeight));
+        TRect closeInnerRect;
+        AknPenImageUtils::CalculateGraphicRect(closeRect,closeInnerRect);
+        CloseButton()->SizeChanged(closeRect, closeInnerRect, ETrue);
+    
+        // header pane
+        startPos = TPoint(closeRect.iBr.iX, closeRect.iTl.iY);
+        TRect headerPane = TRect(startPos,
+                                 TPoint(startPos.iX + iUnitWidth*8,
+                                        startPos.iY + iUnitHeight));
+        HeaderPane()->SetRect(headerPane);
+
+        // icf
+        startPos = headerPane.iTl;
+        TRect icfRect = TRect(startPos,
+                              TPoint(startPos.iX + iUnitWidth*7,
+                                     startPos.iY + iUnitHeight));
+
+        TAknTextLineLayout textPaneTextLayout;
+        textPaneTextLayout = AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine();
+        iContextField->SetFont(AknLayoutUtils::FontFromId(textPaneTextLayout.iFont, NULL));
+        iContextField->SetRect(icfRect);
+
+        // Backspace button
+        startPos = TPoint(icfRect.iBr.iX, icfRect.iTl.iY);
+        TRect backspaceRect = TRect(startPos,
+                                 TPoint(startPos.iX + iUnitWidth,
+                                        startPos.iY + iUnitHeight));
+        TRect backspaceInnerRect;
+        AknPenImageUtils::CalculateGraphicRect(backspaceRect, backspaceInnerRect);
+        iBackspace->SizeChanged(backspaceRect, backspaceInnerRect, ETrue);
+        
+        // move button
+        startPos = TPoint(headerPane.iBr.iX, headerPane.iTl.iY);
+        TRect moveRect = TRect(startPos, 
+                               TPoint(startPos.iX + iUnitWidth,
+                                      startPos.iY + iUnitHeight)); 
+        TRect moveInnerRect;
+        AknPenImageUtils::CalculateGraphicRect(moveRect, moveInnerRect);
+        MoveButton()->SizeChanged(moveRect, moveInnerRect,ETrue);
+    
+        // client pane
+        startPos = TPoint(titleBar.iTl.iX, titleBar.iBr.iY);
+        TRect clientPane = TRect(startPos,
+                                 TPoint(startPos.iX + iUnitWidth*10,
+                                        startPos.iY + iUnitHeight*6));
+        ClientPane()->SetRect(clientPane);
+    
+        // option button
+        startPos = clientPane.iTl;
+        TRect optionInnerRect;
+        TRect optionRect = TRect(startPos,
+                                 TPoint(startPos.iX + iUnitWidth,
+                                        startPos.iY + iUnitHeight));
+        AknPenImageUtils::CalculateGraphicRect(optionRect, optionInnerRect); 
+        iOptionButton->SizeChanged(optionRect, optionInnerRect, ETrue);
+        
+        // drop down list
+        startPos = TPoint(optionRect.iBr.iX, optionRect.iTl.iY);
+        TAknTextLineLayout candTextLayout;
+        candTextLayout = AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine();
+        iDropdownList->SetFont(AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL));
+    
+        iDropdownList->SizeChanged(iUnitWidth,
+                                   iUnitHeight,
+                                   iUnitWidth,
+                                   startPos,
+                                   8,
+                                   4);
+
+        // box group
+        startPos = TPoint(clientPane.iTl.iX, clientPane.iTl.iY + iUnitHeight);
+        TRect boxGrp = TRect(startPos,
+                             TPoint(startPos.iX + iUnitWidth*9,
+                                    startPos.iY + iUnitHeight*5));
+        iBoxGroup->SizeChanged(boxGrp);
+    
+        // control bar
+        startPos = TPoint( boxGrp.iBr.iX, boxGrp.iTl.iY );
+        TRect ctrlBar = TRect(startPos,
+                              TPoint(startPos.iX + iUnitWidth,
+                                     startPos.iY + iUnitHeight*5));
+        TRect topgridRect = TRect(startPos,
+                                  TPoint(startPos.iX + iUnitWidth,
+                                         startPos.iY + iUnitHeight));
+        TRAP_IGNORE(iControlBar->SizeChangedL(ctrlBar, topgridRect));
+    
+        // shadow
+        SetShadowRect(TRect(0,
+                            0,
+                            hwrWnd.iBr.iX + iShadowBr.iWidth,
+                            hwrWnd.iBr.iY + iShadowBr.iHeight));
+    	}
+    
+    iControlPosSet = ETrue;	
+    }
+
+// ---------------------------------------------------------
+// Just broadcast the close event
+// ---------------------------------------------------------
+//
+TBool CAknFepHwrBxWnd::DoClose()
+    {
+    PRINTF((_L("CAknFepHwrBxWnd::DoClose()\n")));
+    
+    ReportEvent(EHwrEventWindowClose);
+
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// Handle the property change
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::SetPropertyL(
+                              const MAknFepHwrPropertySubscriber::TAknFepHwrProperty aPropertyName,
+                              const TDesC& aPropertyValue)
+    {
+    switch (aPropertyName)
+        {
+        case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyCandidates:
+            {
+            const TInt candiCount = iDataStore->CandidateCount();
+            RArray<TInt> secondaryList;
+            
+            for (TInt i = 0; i < candiCount; i++)
+                {
+                if (i > candiCount - iDataStore->PermittedRangesCount()) 
+                    {
+                    //cell index start from 1
+                    secondaryList.Append(i);
+                    }
+                } 
+            iDropdownList->SetSecondaryList(secondaryList);  
+
+            secondaryList.Close();
+            
+            RPointerArray<HBufC>* candidates = (RPointerArray<HBufC>*)aPropertyValue.Ptr();
+            iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListNoExpandable);
+            break;
+            }
+        case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyPredictives:
+            {
+            RPointerArray<HBufC>* candidates = (RPointerArray<HBufC>*)aPropertyValue.Ptr();
+            iDropdownList->SetCandidatesL(*candidates, CFepCtrlDropdownList::EListExpandable);
+            break;
+            }
+       	case MAknFepHwrPropertySubscriber::EAknFepHwrPropertyAddPredictives:
+       	    {
+            RPointerArray<HBufC>* candidates = (RPointerArray<HBufC>*)aPropertyValue.Ptr();
+            iDropdownList->AddCandidatesL(*candidates, CFepCtrlDropdownList::EListExpandable);
+       	    }
+       	    break;
+        case MAknFepHwrPropertySubscriber::EAknFepHwrPropertySizeChanged:
+            {
+            static_cast<CAknFepHwrBxLayout*>(UiLayout())->SetLayoutPositionL();
+            break;
+            }
+        default:
+            break;
+        }
+    }
+    
+// ---------------------------------------------------------
+// Stroke end mark
+// ---------------------------------------------------------
+//
+TPoint CAknFepHwrBxWnd::StrokeEndMark()
+    {
+    return TPoint(KDefaultStrokeEndMarkX, KDefaultStrokeEndMarkY);
+    }
+
+// ---------------------------------------------------------
+// Send input context field text
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::SetEditorTextL(const TFepInputContextFieldData& aData)
+    {
+    if(iContextField)
+        {
+        iContextField->SetTextL(aData);
+        }
+    }
+
+// ---------------------------------------------------------
+// Highlight a dropdownlist cell
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::HighlightCell(TInt aIndex)
+    {
+    iDropdownList->SetHighlightCell(aIndex);
+    }
+    
+// ---------------------------------------------------------
+// Add input context field to window
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::AddContextFieldL()
+    {
+    CControlGroup* headerPane = NULL;
+    
+    //get reference CControlGroup of headerPane
+    headerPane = HeaderPane();
+    User::LeaveIfNull(headerPane);
+
+    //input context field
+    iContextField = CFepInputContextField::NewL(TRect(), UiLayout(), EHwrCtrlIdInputContextField);
+    
+    TAknTextLineLayout textPaneTextLayout;
+
+    textPaneTextLayout = AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine();
+    
+    iContextField->SetFont(AknLayoutUtils::FontFromId(textPaneTextLayout.iFont, NULL));
+
+    //transfer to headerPane
+    headerPane->AddControlL(iContextField);
+    
+    //add layout as event observer
+    iContextField->AddEventObserver(UiLayout());
+    
+    iContextField->SetFocus();
+    }
+    
+// ---------------------------------------------------------
+// Add option button to window
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::AddOptionButtonL()
+    {
+    //option button
+    iOptionButton = CAknFepCtrlCommonButton::NewL(UiLayout(), 
+    						EHwrCtrlIdTouchInputOption,
+    						KAknsIIDQsnFrFunctionButtonNormal,
+						    KAknsIIDQsnFrFunctionButtonPressed,
+						    KAknsIIDQsnFrFunctionButtonInactive);
+ 
+    iInputModeSwitch = CPeninputLayoutInputmodelChoice::NewL(
+                                     UiLayout(),
+                                     EHwrCtrlIdHwrModeSwitch,
+                                     EPluginInputModeHwr );
+    iInputModeSwitch->SetListSkinID( KAknsIIDQsnFrList, KAknsIIDQsnFrPopupSub );
+    AddControlL( iInputModeSwitch );
+    iInputModeSwitch->AddEventObserver( UiLayout() );   
+    
+    ClientPane()->AddControlL(iOptionButton);
+    
+    //add layout as event observer
+    iOptionButton->AddEventObserver(UiLayout());
+    }
+
+// ---------------------------------------------------------
+// Pup up pen input mode switcher
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::PopUpPenInputModeSwitcher()
+    {
+    CFepUiBaseCtrl* vkbControl = iControlBar->ControlById(EHwrCtrlIdVkb);
+   	TRAP_IGNORE( iInputModeSwitch->PopUpSwitchListL( vkbControl->Rect() ) );
+    }
+    
+// ---------------------------------------------------------
+// Add controlbar to window
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::AddControlBarL()
+    {
+    CControlGroup* clientPane = NULL;
+
+    clientPane = ClientPane();
+    User::LeaveIfNull(clientPane);
+
+    //control bar
+    iControlBar = CAknFepHwrBxCtrlBar::NewL(UiLayout(), EHwrCtrlIdControlBar);
+    
+    //transfer to clientPane
+    clientPane->AddControlL(iControlBar);
+
+    //add control bar as property subscriber
+    iDataStore->AddSubscriber(iControlBar);
+    
+    //no need to add layout as control bar's observer because its sub control 
+    //will send event directly to layout
+    }
+
+// ---------------------------------------------------------
+// Add box group to window
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::AddBoxGroupL()
+    {
+    CControlGroup* clientPane = NULL;
+
+    clientPane = ClientPane();
+    User::LeaveIfNull(clientPane);
+
+    iBoxGroup = CAknFepHwrBoxGroup::NewL(UiLayout(), EHwrCtrlIdHwrBoxGroup, KBoxCount);
+    iBoxGroup->SetTransparency(KWrittingFactor, KNormalFactor);
+        
+    //transfer to clientPane
+    clientPane->AddControlL(iBoxGroup);
+
+    //add layout as event observer
+    iBoxGroup->AddEventObserver(UiLayout());
+
+    //add BoxGroup as property subscriber
+    iDataStore->AddSubscriber(iBoxGroup);
+    iDataStore->SetStrokeEndMarkControl(iBoxGroup);
+    }
+    
+// ---------------------------------------------------------
+// Add dropdown list to window
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::AddDropdownListL(TBool aLandscapeStyle)
+    {
+    TResourceReader reader;
+    CCoeEnv::Static()->CreateResourceReaderLC(reader,R_AKN_FEP_DROP_DOWN_LIST);
+    
+    iSecondRangeColor = TRgb(0xFF0000);
+
+    ReadLafInfo(aLandscapeStyle);
+    TAknTextLineLayout candTextLayout = 
+                      AknLayoutScalable_Avkon::cell_hwr_candidate_pane_t1().LayoutLine();
+
+    TInt textMargin = (iUnitHeight - 
+                      AknLayoutUtils::FontFromId(candTextLayout.iFont, NULL)->HeightInPixels())/2;
+
+    TDropdownListDrawInfo candiDrawInfo(KAknsIIDQsnFrFunctionButtonInactive, 
+    									KAknsIIDQsnFrFunctionButtonNormal,
+    								    KAknsIIDQsnFrFunctionButtonPressed,
+    						            KAknsIIDQsnFrItutButtonCandiSideL,
+    						            KAknsIIDQsnFrItutButtonCandiMiddle,
+    						            KAknsIIDQsnFrItutButtonCandiSideR,
+    						            KAknsIIDQsnFrItutButtonCandiPressedSideL,
+                                        KAknsIIDQsnFrItutButtonCandiPressedMiddle,
+                                        KAknsIIDQsnFrItutButtonCandiPressedSideR,
+    						            TRgb(194, 221, 242),
+    						            ETrue);
+
+    iDropdownList = CFepCtrlDropdownList::NewL(TPoint(Rect().iTl.iX, Rect().iTl.iY + iUnitHeight),
+                                               UiLayout(),
+                                               255,
+                                               reader,                                            
+                                               iUnitWidth,
+                                               iUnitHeight,
+                                               iUnitWidth,
+                                               9,
+                                               4,
+                                               AknLayoutUtils::FontFromId(candTextLayout.iFont, 
+                                                                          NULL),
+                                               NULL,
+                                               CGraphicsContext::ECenter,
+                                               textMargin,
+                                               KRgbBlack,       // border color 
+                                               TRgb(0xeeeeee),  // content bg color
+                                               KRgbWhite,       // navi bg color
+                                               AKN_LAF_COLOR_STATIC(candTextLayout.iC),
+                                               KRgbRed);
+
+    ClientPane()->AddControlL(iDropdownList);
+    iDropdownList->SetResourceId(R_AKN_FEP_DROP_DOWN_LIST);
+    iDropdownList->SetEventIdForCandidateSelected(EHwrEventCandidateSelected);
+    iDropdownList->SetEventIdForNextPageCandidate(EHwrEventGetNextCandidatePage);
+    iDropdownList->SetEventIdForPreviousPageCandidate(EHwrEventGetPreviousCandidatePage);
+    iDropdownList->SetEventIdForCandidateExisted(EHwrEventCandidateExisted);
+    iDropdownList->AddEventObserver(UiLayout());
+    iDropdownList->SetDropdownListImgID(candiDrawInfo);
+    CleanupStack::PopAndDestroy(); // reader
+    }    
+
+// ---------------------------------------------------------
+// Cancel writing
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::CancelWriting()
+    {
+    if (iBoxGroup)
+        {
+        iBoxGroup->CancelWriting();
+        }
+    }
+
+// ---------------------------------------------------------
+// Cancel repeat
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::CancelRepeat()
+    {
+    CAknFepCtrlRepeatButton* btn = static_cast<CAknFepCtrlRepeatButton*> 
+                                   (Control(EHwrCtrlIdBackspace));
+    if (btn)
+        {
+        btn->CancelRepeat();
+        }
+    }
+    
+
+// ---------------------------------------------------------
+// Draw window and shadow
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::Draw()
+	{
+	CAknFepCtrlBaseWindow::Draw();
+	
+	// draw shadow
+	DrawShadow();
+
+	UpdateArea(Rect(), EFalse);
+	}
+
+// ---------------------------------------------------------
+// Draw window and shadow
+// ---------------------------------------------------------
+//
+void CAknFepHwrBxWnd::DimInputContextField(TBool aFlag)
+	{
+	if (iContextField)
+	    {
+	    iContextField->SetDimmed(aFlag);
+	    }
+	}
+	
+// ---------------------------------------------------------
+// Get drop down list
+// ---------------------------------------------------------
+//
+CFepCtrlDropdownList* CAknFepHwrBxWnd::DropdownList()
+    {
+	return iDropdownList;
+    }
+
+void CAknFepHwrBxWnd::AddBackspaceBtnL()
+    {
+    CControlGroup* headerPane = NULL;
+    
+    //get reference CControlGroup of headerPane
+    headerPane = HeaderPane();
+    User::LeaveIfNull(headerPane);
+    
+    iBackspace = CAknFepCtrlRepeatButton::NewL( UiLayout(), EHwrCtrlIdBackspace,
+                            EHwrEventKeyBack, EKeyBackspace,												
+                            KAknsIIDQsnFrFunctionButtonNormal,
+                            KAknsIIDQsnFrFunctionButtonPressed,
+                            KAknsIIDQsnFrFunctionButtonInactive);
+    headerPane->AddControlL(iBackspace);
+    iBackspace->AddEventObserver( UiLayout() );
+    }
+
+// ---------------------------------------------------------------------------
+// CAknFepHwrBxWnd::ReadBackgroundInfoL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+// 
+void CAknFepHwrBxWnd::ReadBackgroundInfoL( TInt aResId )
+    {
+    if( aResId == 0 )
+    	return;
+    
+    TResourceReader resReader;
+    CCoeEnv::Static()->CreateResourceReaderLC( resReader, aResId );
+     
+    TPtrC bmpFileName = resReader.ReadTPtrC();
+    TInt32 imgMajorSkinId = resReader.ReadInt32();
+
+    TAknsItemID id;
+    TInt skinitemid;
+    
+    MAknsSkinInstance* skininstance = AknsUtils::SkinInstance();
+    const TInt16 bmpId = resReader.ReadInt16();
+    const TInt16 bmpMskId = resReader.ReadInt16();
+    skinitemid = resReader.ReadInt16();   
+    id.Set(TInt(imgMajorSkinId), skinitemid);
+	
+    if (bmpId != KInvalidImg)
+    	{
+    	CFbsBitmap* backgroundImg = NULL;
+    	CFbsBitmap* backgroundMaskImg = NULL;
+        if (bmpMskId != KInvalidImg)
+            {
+            AknsUtils::CreateIconL(skininstance, 
+                                   id,
+                                   backgroundImg,
+                                   backgroundMaskImg,
+                                   bmpFileName,
+                                   bmpId,
+                                   bmpMskId);
+            }
+        else
+            {
+            AknsUtils::CreateIconL(skininstance,
+                                   id,
+                                   backgroundImg,
+                                   bmpFileName,
+                                   bmpId);
+            }
+       
+        SetBackgroundBmp( backgroundImg );
+        SetBackgroundMaskBmp( backgroundMaskImg );           
+    	}
+    CleanupStack::PopAndDestroy( 1 );
+    }
+
+void CAknFepHwrBxWnd::SetTextAlignmentL( TInt aAlignment )	
+	{
+	if ( iContextField )
+		{
+		iContextField->SetTextAlignmentL( aAlignment );
+		}
+	}
+	
+//  End Of File
+