textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp
branchRCL_3
changeset 3 f5a1e66df979
child 5 a47de9135b21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputfingerhwrar/src/peninputfingerhwrarlafmanager.cpp	Fri Feb 19 23:09:27 2010 +0200
@@ -0,0 +1,980 @@
+/*
+* Copyright (c) 2005-2008 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 LAF manager.
+*
+*/
+
+
+// INCLUDES
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknUtils.h>
+
+#include "peninputfingerhwrarlafmanager.h"
+#include "peninputfingerhwrarcontrolid.h"
+
+#define LAF_MODIFY 1
+#define HackerVersion 
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFingerHwrArLafManager* CPeninputFingerHwrArLafManager::NewL()
+    {
+    CPeninputFingerHwrArLafManager* self = CPeninputFingerHwrArLafManager::NewLC();
+    CleanupStack::Pop(); // self;
+    return self;   
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian Constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFingerHwrArLafManager* CPeninputFingerHwrArLafManager::NewLC()
+    {
+    CPeninputFingerHwrArLafManager* self = new( ELeave ) CPeninputFingerHwrArLafManager();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// c++ destructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFingerHwrArLafManager::~CPeninputFingerHwrArLafManager()
+    {
+    //nothing
+    iSCTrectArray.Reset();
+    iSCTrectArray.Close();
+    }
+
+
+// ---------------------------------------------------------------------------
+// read laf data.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLafManager::ReadLafInfo()
+    {
+    // Screen
+    TRect rect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EScreen, rect);
+    iScreenSize = rect.Size();
+
+    iIsLandscape = iScreenSize.iWidth < iScreenSize.iHeight ? EFalse : ETrue;
+    
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, rect);
+
+    // finger Layout
+    TAknWindowLineLayout fshwrlayout;
+    TAknLayoutRect fshwrRect;
+        
+    fshwrlayout = AknLayoutScalable_Avkon::main_fep_fshwr2_pane(0).LayoutLine();
+    fshwrRect.LayoutRect(rect, fshwrlayout);
+
+    iLayoutRect = fshwrRect.Rect();
+    iLayoutOffset = iLayoutRect.iTl;
+    
+    // ICF & Keypad
+    TAknWindowLineLayout icflayoutcn,icflayoutbgcn;
+    TAknTextLineLayout icflefttext;    
+    TAknTextLineLayout icflefttext1, icflefttext2, icflefttext3; 
+    TAknLayoutRect icfrectlatin, icfrectcn;
+
+    if (iIsLandscape)
+        {
+        icflayoutcn = AknLayoutScalable_Avkon::fshwr2_icf_pane(1).LayoutLine();
+        }
+    else
+        {
+        icflayoutcn = AknLayoutScalable_Avkon::fshwr2_icf_pane(0).LayoutLine();
+        }
+    
+    icfrectcn.LayoutRect(fshwrRect.Rect(), icflayoutcn);
+	
+    TAknLayoutScalableParameterLimits entryPaneVariety = 
+                AknLayoutScalable_Avkon::fshwr2_icf_pane_t1_ParamLimits(0);
+    TInt maxRow = entryPaneVariety.LastRow();
+    
+    icflefttext = AknLayoutScalable_Avkon::fshwr2_icf_pane_t1(0, 0, 0).LayoutLine();
+    
+    icflefttext1 = AknLayoutScalable_Avkon::fshwr2_icf_pane_t1(0, 0, 1).LayoutLine();
+    icflefttext2 = AknLayoutScalable_Avkon::fshwr2_icf_pane_t1(0, 0, 2).LayoutLine();
+    icflefttext3 = AknLayoutScalable_Avkon::fshwr2_icf_pane_t1(0, 0, maxRow).LayoutLine();
+    iIcfTextLeftMarginCn = icflefttext.il;
+    iIcfTextRightMarginCn = iIcfTextLeftMarginCn;
+    
+    TAknLayoutText ctxt, ctxt1, ctxt2, ctxt3;
+    ctxt.LayoutText( icfrectcn.Rect(), icflefttext );
+    ctxt1.LayoutText( icfrectcn.Rect(), icflefttext1 );
+    ctxt2.LayoutText( icfrectcn.Rect(), icflefttext2 );
+    ctxt3.LayoutText( icfrectcn.Rect(), icflefttext3 );
+	
+    iIcfTextTopMarginCn = ctxt.TextRect().iTl.iY - icfrectcn.Rect().iTl.iY;
+    iIcfTextLineSpaceMarginCn = ctxt1.TextRect().iTl.iY - ctxt.TextRect().iBr.iY;
+    iIcfTextBottomMarginCn = icfrectcn.Rect().iBr.iY - ctxt3.TextRect().iBr.iY 
+                                                     - iIcfTextLineSpaceMarginCn;
+    iIcfTextHeightCn = ctxt.TextRect().Height();    
+ 	
+    iIcfFont = const_cast<CFont*>(AknLayoutUtils::FontFromId(icflefttext.iFont, NULL));
+
+    iRectIcf = icfrectcn.Rect();
+    
+	// candidate list
+    TAknWindowLineLayout candrowpane, candrowpane2, candlistpane, cellpane, candbgpane;
+    TAknLayoutRect candpaneRect, candrowpaneRect, candrowpaneRect2, cellpaneRect1, cellpaneRect2;
+    TAknLayoutRect cellpaneRect3, cellpaneRect;
+	
+    if (iIsLandscape)
+        {
+		candlistpane = AknLayoutScalable_Avkon::fshwr2_func_candi_pane(1).
+										LayoutLine();        
+        }
+    else
+        {
+       	candlistpane = AknLayoutScalable_Avkon::fshwr2_func_candi_pane(0).
+										LayoutLine();
+        }
+    candpaneRect.LayoutRect( fshwrRect.Rect(), candlistpane );
+    rect = candpaneRect.Rect();
+    candrowpane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 1).
+										LayoutLine();
+    candrowpaneRect.LayoutRect( rect, candrowpane );
+    
+    candrowpane2 = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 2).
+										LayoutLine();
+    candrowpaneRect2.LayoutRect( rect, candrowpane2 );
+     
+	
+    cellpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3 , 0 , 0 ).
+										LayoutLine();
+    cellpaneRect.LayoutRect( candrowpaneRect.Rect(), cellpane );
+    
+    candbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+    cellpaneRect1.LayoutRect( cellpaneRect.Rect(), candbgpane );   
+    
+    cellpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3 , 1 , 0 ).
+										LayoutLine();
+    cellpaneRect.LayoutRect( candrowpaneRect.Rect(), cellpane );
+    
+    candbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+    cellpaneRect2.LayoutRect( cellpaneRect.Rect(), candbgpane );   
+    
+    
+    
+    cellpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 3 , 0 , 1 ).
+										LayoutLine();
+    cellpaneRect.LayoutRect( candrowpaneRect2.Rect(), cellpane );
+    
+    candbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(3).LayoutLine();
+    cellpaneRect3.LayoutRect( cellpaneRect.Rect(), candbgpane );   
+    
+									
+    iCandsHorizontalMargin = cellpaneRect2.Rect().iTl.iX - cellpaneRect1.Rect().iBr.iX;
+    iCandsVerticalMargin = cellpaneRect3.Rect().iTl.iY - cellpaneRect1.Rect().iBr.iY;
+	
+    iCandsUnitWidth = cellpaneRect1.Rect().Width();
+    iCandsUnitHeight = cellpaneRect1.Rect().Height() ;
+    
+    iCandsNaviHeight = cellpaneRect1.Rect().Height();
+    iCandidateLTPos = candrowpaneRect.Rect().iTl;
+    iPredictiveLTPos = candrowpaneRect2.Rect().iTl;
+    
+    TAknTextLineLayout candstxtlayout = 
+                     AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane_t1(3).LayoutLine();
+    TAknLayoutText candstxt;
+    candstxt.LayoutText( cellpaneRect1.Rect(), candstxtlayout );
+    iCandsFont = const_cast<CFont*>( AknLayoutUtils::FontFromId( candstxtlayout.iFont, NULL ) );
+    iCandsTextMargin = candstxt.TextRect().iTl.iX - cellpaneRect1.Rect().iTl.iX;
+    
+    
+    TAknWindowLineLayout btnrowpane, btnpane, btnbgpane;
+    TAknLayoutRect btnrowRect, btnRect, btnbgRect;
+    
+    // Get the first row rect *************************************************
+    btnrowpane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 0).
+                                            LayoutLine();
+    btnrowRect.LayoutRect(candpaneRect.Rect(), btnrowpane);
+    // Close Button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 2 , 0 , 0 ).
+										LayoutLine();    
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(2).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
+    iRectBtnClose = btnbgRect.Rect();
+    
+    // Range Button with mark
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 2 , 1 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(2).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
+    iRectBtnRangeChn = btnbgRect.Rect();
+    iRectBtnRangeEng = iRectBtnRangeChn;
+    iRectBtnRangeNum = iRectBtnRangeEng;
+    
+    // SCT button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 2 , 2 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(2).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
+    iRectBtnRangeSmb = btnbgRect.Rect();
+    
+    // Backspace button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 2 , 3 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(2).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);
+    iRectBtnBackspace = btnbgRect.Rect();    
+    
+    // Get the second row rect **************************************************
+    btnrowpane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 1).
+                                            LayoutLine();
+    btnrowRect.LayoutRect(candpaneRect.Rect(), btnrowpane);
+    
+    // Option button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 0 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);
+    iRectBtnOption = btnbgRect.Rect();     
+    
+    // Switch mode button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 1 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
+    iRectBtnImeSwitch = btnbgRect.Rect();
+    
+    // Arrow up button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 2 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);  
+    iRectBtnArrowUp = btnbgRect.Rect();
+    iRectBtnSctPage = iRectBtnArrowUp;  
+
+
+    // Get the third row rect **************************************************
+    btnrowpane = AknLayoutScalable_Avkon::fshwr2_func_candi_row_pane(0, 0, 2).
+                                            LayoutLine();
+    btnrowRect.LayoutRect(candpaneRect.Rect(), btnrowpane);
+
+    // Arrow left button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 0 , 0 ).
+										LayoutLine();									
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+    btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane); 
+    iRectBtnArrowLeft = btnbgRect.Rect();    
+    
+    // Arrow right button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 1 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);									    
+    iRectBtnArrowRight = btnbgRect.Rect();
+    
+    // Arrow down button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 1 , 2 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(1).
+										LayoutLine();
+	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);									    
+    iRectBtnArrowDown = btnbgRect.Rect();
+    
+    // Space button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 0 , 0 , 0 ).
+										LayoutLine();
+    btnRect.LayoutRect(btnrowRect.Rect(), btnpane);
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(0).
+										LayoutLine();
+	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);									    
+    
+    iRectFixSctpad = btnrowRect.Rect();
+    iSizeFixSctpadCell = btnRect.Rect().Size();
+    iRectSpase = btnbgRect.Rect();
+    iRectSpase.Move(-iRectFixSctpad.iTl );
+
+    // Enter button
+    btnpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_pane( 0 , 1 , 0 ).
+										LayoutLine();
+	btnRect.LayoutRect(btnrowRect.Rect(), btnpane);																		
+    btnbgpane = AknLayoutScalable_Avkon::fshwr2_func_candi_cell_bg_pane(0).
+										LayoutLine();									
+	btnbgRect.LayoutRect(btnRect.Rect(), btnbgpane);
+										    
+    iRectEnter = btnbgRect.Rect();
+    iRectEnter.Move(-iRectFixSctpad.iTl);
+
+    
+    // Writing box
+    TAknWindowLineLayout writingboxpane;
+    TAknLayoutRect boxRect;
+    writingboxpane = AknLayoutScalable_Avkon::fshwr2_hwr_syb_pane(0).LayoutLine();
+    boxRect.LayoutRect(fshwrRect.Rect(), writingboxpane);
+    iRectWritingBox = boxRect.Rect();
+    iRectNumpad = iRectWritingBox;
+    iRectSctpad = iRectWritingBox;
+    
+    // virtual key size
+    TAknWindowLineLayout keypane, keybgpane;
+    TAknLayoutRect keyRect, keybgRect;
+  
+    TAknLayoutScalableParameterLimits sctPaneVariety =
+        AknLayoutScalable_Avkon::cell_fshwr2_syb_pane_ParamLimits(0);
+    
+    iSctpadRowCount = sctPaneVariety.LastRow() + 1;
+    iSctpadColCount = sctPaneVariety.LastColumn() + 1;    
+  
+    iSizeBtnPadding = TSize(6, 6);
+  
+    iSCTrectArray.Reset();
+    for(TInt i = 0; i < iSctpadRowCount; i++)
+        {
+        for ( TInt j = 0; j < iSctpadColCount; j++ )
+            {
+            keypane = AknLayoutScalable_Avkon::cell_fshwr2_syb_pane(0, j, i).LayoutLine();
+            keyRect.LayoutRect(boxRect.Rect(), keypane);
+            keybgpane = AknLayoutScalable_Avkon::cell_fshwr2_syb_bg_pane(0).LayoutLine();
+            keybgRect.LayoutRect(keyRect.Rect(), keybgpane);
+            iSCTrectArray.Append( keybgRect.Rect());
+            }
+        }
+    iSizeNumpadCell = keybgRect.Rect().Size();
+    iSizeSctpadCell = iSizeNumpadCell;
+    
+    // preview popup window 
+  	TAknWindowLineLayout previewWnd, previewWndInner;
+  	TAknLayoutRect previewWndRect, previewWndInnerRect;
+  	TAknLayoutText previewWndText;
+  	previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(0).LayoutLine();
+  	previewWndRect.LayoutRect( TRect(0,0,50,50), previewWnd );
+  	previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
+  	previewWndInnerRect.LayoutRect( previewWndRect.Rect(), previewWndInner );
+  	iPreviewWndRect = previewWndRect.Rect();
+  	iPreviewWndInnerRect = previewWndInnerRect.Rect();
+  	iPreviewWndText = 
+        AknLayoutScalable_Avkon::popup_fep_char_preview_window_t1(0).LayoutLine();
+    previewWndText.LayoutText(previewWndRect.Rect(), iPreviewWndText);
+    iBubbleFont = previewWndText.Font();
+    //==========================================================================
+    // going to be removed if the LAF data is ready
+    //
+    #ifdef HackerVersion
+	
+	// hardcode those and remove them after the laf data is ready
+	// do we really need to read ui data from laf system?
+	// icf margins
+	iIcfTextLeftMarginCn = 14;
+	iIcfTextRightMarginCn = 14;
+    iIcfTextTopMarginCn = 14;
+    iIcfTextBottomMarginCn = 20;
+    iIcfTextLineSpaceMarginCn = 5;	
+	
+	// candiate margin
+	iCandsHorizontalMargin = 1;
+    iCandsVerticalMargin = 1;
+	
+    if(iIsLandscape)
+    	{
+    	TInt buttonHight = (iLayoutRect.Height()-20)/6;//-6; // 1mm ~= 6 pixls
+        TInt buttonWidth = (iLayoutRect.Width()-20)/8;//-8;
+    	
+    	iRectBtnClose = TRect(iLayoutRect.iTl+TPoint(10,10),TPoint(buttonWidth+10,buttonHight+10));
+    	
+    	iRectBtnOption = iRectBtnClose;
+    	iRectBtnOption.Move(TPoint(buttonWidth,0));
+    	
+    	iRectBtnRangeSmb = iRectBtnOption;
+    	iRectBtnRangeSmb.Move(TPoint(buttonWidth,0));
+    	
+    	iRectBtnBackspace = iRectBtnRangeSmb;
+    	iRectBtnBackspace.Move(TPoint(buttonWidth,0));
+    	
+    	// button on second row
+        iRectBtnArrowUp = iRectBtnClose;
+        iRectBtnArrowUp.Move(TPoint(0,buttonHight));
+        
+        iRectBtnArrowDown = iRectBtnArrowUp;
+        iRectBtnArrowDown.Move(TPoint(buttonWidth,0));
+        
+        iRectBtnArrowLeft = iRectBtnArrowDown;
+        iRectBtnArrowLeft.Move(TPoint(buttonWidth,0));
+        
+        iRectBtnArrowRight = iRectBtnArrowLeft;
+        iRectBtnArrowRight.Move(TPoint(buttonWidth,0));
+        
+        // fix symbol table
+        TPoint fixSctTl = iRectBtnClose.iTl+TPoint(0,buttonHight);
+        iRectFixSctpad = TRect(fixSctTl,fixSctTl+TPoint(4*buttonWidth,buttonHight));
+	    
+	    iRectSpase = iRectBtnClose;
+	    iRectSpase.Move(TPoint(0,buttonHight));
+	    
+	    iRectEnter = iRectSpase;
+	    iRectEnter.Move(TPoint(buttonWidth,0));
+	            
+	    iRectSpase.Move(-iRectFixSctpad.iTl );
+	    iRectEnter.Move(-iRectFixSctpad.iTl );
+	    
+	    iSizeFixSctpadCell = iRectSpase.Size();
+	    
+        // candate position
+        iCandidateLTPos = iRectBtnClose.iTl + TPoint(0,buttonHight);
+    	iCandsUnitWidth = buttonWidth-iCandsVerticalMargin;
+        iCandsUnitHeight = buttonHight;
+		
+    	// icf editor rect
+    	iRectIcf = TRect(TPoint(4*buttonWidth+10,10),TPoint(iLayoutRect.iBr.iX-10,2*buttonHight+10));
+    	
+    	// iwriting box
+    	iRectWritingBox	= TRect(TPoint(10,2*buttonHight+10),iLayoutRect.iBr-TPoint(10,10));
+    	
+    	// construct symbol table
+    	iRectOfSymbolTable = iRectWritingBox;
+    	iRectOfSymbolTable.Move(TPoint(buttonWidth,-buttonHight));
+    	iRectOfSymbolTable.SetHeight(5*buttonHight);
+    	iRectOfSymbolTable.SetWidth(6*buttonWidth);
+    	
+    	iRectSctpad = iRectOfSymbolTable;
+    	iRectSctpad.Move(TPoint(0,buttonHight));
+    	iRectSctpad.SetHeight(4*buttonHight);
+    	iRectSctpad.SetWidth(6*buttonWidth);
+		
+		// the button size for symbol table control 
+		iSymButtonSize = TSize(2*buttonWidth,buttonHight);
+		iSctpadRowCount = 4;
+		iSctpadColCount = 6;
+		
+    	iSCTrectArray.Reset();
+    	for(TInt i = 0; i <  iSctpadRowCount; i++)
+    	    {	
+    	    for(TInt j = 0; j < iSctpadColCount; j++)
+    	        {
+    	        TPoint rectTl = iRectSctpad.iTl+TPoint(j*buttonWidth,i*buttonHight);
+    	        TPoint rectBr = rectTl+ TPoint(buttonWidth,buttonHight);
+    	        iSCTrectArray.Append(TRect(rectTl,rectBr));
+    	        }
+    	    }
+        }
+    else
+    	{
+        // icf rect
+        iRectIcf = TRect(iLayoutRect.iTl+TPoint(10,10),TPoint(iLayoutRect.iBr.iX-10,22.5*9));
+        TPoint backSpaceTl = iRectIcf.iTl+TPoint(0,iRectIcf.Height());
+        
+		TInt buttonHight = (iLayoutRect.Height()-iRectIcf.Height()-20)/6;//(15*9)/2; // 1mm ~= 9pixls
+        TInt buttonWidth = (iLayoutRect.Width()-20)/4;
+		
+        // the button on second row
+        iRectBtnBackspace = TRect(backSpaceTl,backSpaceTl+TPoint(buttonWidth,buttonHight));
+        iRectBtnOption = iRectBtnBackspace;
+        iRectBtnOption.Move(TPoint(buttonWidth,0));
+        iRectBtnRangeSmb = iRectBtnOption;
+        iRectBtnRangeSmb.Move(TPoint(buttonWidth,0));
+        iRectBtnClose = iRectBtnRangeSmb;
+        iRectBtnClose.Move(TPoint(buttonWidth,0));
+        
+        // arrow button: on third row
+        iRectBtnArrowUp = iRectBtnBackspace;
+        iRectBtnArrowUp.Move(TPoint(0,buttonHight));
+        
+        iRectBtnArrowDown = iRectBtnArrowUp;
+        iRectBtnArrowDown.Move(TPoint(buttonWidth,0));
+        
+        iRectBtnArrowLeft = iRectBtnArrowDown;
+        iRectBtnArrowLeft.Move(TPoint(buttonWidth,0));
+        
+        iRectBtnArrowRight = iRectBtnArrowLeft;
+        iRectBtnArrowRight.Move(TPoint(buttonWidth,0));
+       
+        // candate position
+        iCandidateLTPos = iRectBtnBackspace.iTl + TPoint(0,buttonHight);
+        iCandsUnitWidth = buttonWidth-iCandsVerticalMargin;
+        iCandsUnitHeight = buttonHight;
+		
+        // HWR Box Rect
+        iRectWritingBox = TRect(TPoint(iRectBtnArrowUp.iTl.iX,iRectBtnArrowUp.iBr.iY),iLayoutRect.iBr-TPoint(10,10));
+		
+		// construct symbol table
+    	iRectOfSymbolTable = iRectWritingBox;
+    	iRectOfSymbolTable.Move(TPoint(0,-buttonHight));
+    	iRectOfSymbolTable.SetHeight(5*buttonHight);
+    	iRectOfSymbolTable.SetWidth(4*buttonWidth);
+    	
+    	iRectSctpad = iRectOfSymbolTable;
+    	iRectSctpad.Move(TPoint(0,buttonHight));
+    	iRectSctpad.SetHeight(4*buttonHight);
+    	iRectSctpad.SetWidth(4*buttonWidth);
+		
+		// the button size for symbol table control 
+		iSymButtonSize = TSize((4*buttonWidth)/3,buttonHight);
+		
+		iSctpadRowCount = 4;
+		iSctpadColCount = 4;
+		iSCTrectArray.Reset();
+    	for(TInt i = 0; i <  iSctpadRowCount; i++)
+    	    {	
+    	    for(TInt j = 0; j < iSctpadColCount; j++)
+    	        {
+    	        TPoint rectTl = iRectSctpad.iTl+TPoint(j*buttonWidth,i*buttonHight);
+    	        TPoint rectBr = rectTl+ TPoint(buttonWidth,buttonHight);
+    	        iSCTrectArray.Append(TRect(rectTl,rectBr));
+    	        }
+    	    }
+        }
+    #endif        
+    //
+    //==========================================================================
+    
+    }
+        
+
+// ---------------------------------------------------------------------------
+// get screen orientation.
+// ---------------------------------------------------------------------------
+//
+TBool CPeninputFingerHwrArLafManager::IsLandscape()
+    {
+    return iIsLandscape;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// get rect of layout.
+// ---------------------------------------------------------------------------
+//    
+TRect CPeninputFingerHwrArLafManager::LayoutRect()
+    {        
+    return iLayoutRect;
+    }
+
+
+// ---------------------------------------------------------------------------
+// get rect of specified control.
+// ---------------------------------------------------------------------------
+//  
+TRect CPeninputFingerHwrArLafManager::CtrlRect( TInt aCtrlId )
+    {
+    switch ( aCtrlId )
+        {
+        case EHwrCtrlIdInputContextField:
+            {
+            return iRectIcf;
+            }
+        case EHwrCtrlIdWritingBox:
+            {
+            return iRectWritingBox;
+            }
+		case EHwrCtrlIdSymbolTableVkbGroup:	
+		    {
+			return iRectOfSymbolTable;
+			}         
+        case EHwrCtrlIdClose:
+            {
+            return iRectBtnClose;
+            }          
+        case EHwrCtrlIdSymbolButton:
+            {
+            return iRectBtnRangeSmb;
+            }
+        case EHwrCtrlIdBackspace:
+            {
+            return iRectBtnBackspace;
+            }
+        case EHwrCtrlIdArrowUp:
+            {
+            return iRectBtnArrowUp;
+            }
+        case EHwrCtrlIdArrowDown:
+            {
+            return iRectBtnArrowDown;
+            }  
+        case EHwrCtrlIdArrowLeft:
+            {
+            return iRectBtnArrowLeft;
+            }
+        case EHwrCtrlIdArrowRight:
+            {
+            return iRectBtnArrowRight;
+            }
+        case EHwrCtrlIdLanguageOption:
+            {
+            return iRectBtnOption;
+            }
+        case EHwrCtrlIdVkbSwitcher:
+            {
+            return iRectBtnImeSwitch;
+            }
+        case EHwrCtrlId3Page1Btn:
+        case EHwrCtrlId3Page2Btn:
+        case EHwrCtrlId3Page3Btn:
+		case EHwrCtrlId2Page1Btn:
+        case EHwrCtrlId2Page2Btn:
+            {
+            return iRectBtnSctPage;
+            }    
+        }
+    return TRect();
+    }
+
+// ---------------------------------------------------------------------------
+// get rect of ICF control.
+// ---------------------------------------------------------------------------
+// 
+TRect CPeninputFingerHwrArLafManager::IcfRect()
+    {    
+    return iRectIcf;    
+    }
+
+// ---------------------------------------------------------------------------
+// get left margin of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfLeftMargin()
+    {
+    return iIcfTextLeftMarginCn;
+    }
+    
+// ---------------------------------------------------------------------------
+// get right margin of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfRightMargin()
+    { 
+    return iIcfTextRightMarginCn;
+    }    
+
+// ---------------------------------------------------------------------------
+// get top margin of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfTopMargin()
+    {
+    return iIcfTextTopMarginCn;
+    }
+    
+// ---------------------------------------------------------------------------
+// get bottom margin of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfBottomMargin()
+    {      
+    return iIcfTextBottomMarginCn;
+    }
+    
+// ---------------------------------------------------------------------------
+// get line spacing of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfLineSpaceMargin()
+    {  
+    return iIcfTextLineSpaceMarginCn;
+    }    
+    
+// ---------------------------------------------------------------------------
+// get font of icf.
+// ---------------------------------------------------------------------------
+// 
+CFont* CPeninputFingerHwrArLafManager::IcfFont()
+    {
+//    //workaround
+//    TAknTextLineLayout textPaneTextLayout;
+//    TAknLayoutText txt;
+//    textPaneTextLayout = 
+//        AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine();
+//    const CFont* icffont = AknLayoutUtils::FontFromId( textPaneTextLayout.iFont, NULL );
+//    
+//    return const_cast<CFont*>(icffont);
+    return iIcfFont;
+    }
+   
+// ---------------------------------------------------------------------------
+// get text height of icf.
+// ---------------------------------------------------------------------------
+// 
+TInt CPeninputFingerHwrArLafManager::IcfTextHeight()
+    { 
+    return iIcfTextHeightCn;
+    }
+       
+
+// ---------------------------------------------------------------------------
+// get inner padding of buttons.
+// ---------------------------------------------------------------------------
+//
+TSize CPeninputFingerHwrArLafManager::ButtonInnerPadding()
+    {
+    return iSizeBtnPadding;
+    }
+
+
+// ---------------------------------------------------------------------------
+// get cell size of virtual numpad.
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputFingerHwrArLafManager::VirtualNumpadCellSize()
+    {
+    return iSizeNumpadCell;
+    }
+    
+
+// ---------------------------------------------------------------------------
+// get text layout of virtual numpad.
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::NumpadKeyTxtLayout()
+    {
+    TAknTextLineLayout layout = AknLayoutScalable_Avkon::
+        cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+    return layout;    
+    }
+
+// ---------------------------------------------------------------------------
+// get row count of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::VirtualSctpadRowCount()
+    {
+    return iSctpadRowCount;
+    }
+
+// ---------------------------------------------------------------------------
+// get column count of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::VirtualSctpadColCount()
+    {
+    return iSctpadColCount;
+    }
+
+// ---------------------------------------------------------------------------
+// get cell size of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputFingerHwrArLafManager::VirtualSctpadCellSize()
+    {
+    return iSizeSctpadCell;
+    }
+
+// ---------------------------------------------------------------------------
+// get cell size of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputFingerHwrArLafManager::FixVirtualSctpadCellSize()
+    {
+    return iSizeFixSctpadCell;
+    }
+    
+    
+// ---------------------------------------------------------------------------
+// get preview bubble rect.
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputFingerHwrArLafManager::PreviewBubbleRect()
+    {
+    return iPreviewWndRect;
+    }
+
+// ---------------------------------------------------------------------------
+// get preview bubble inner rect
+// ---------------------------------------------------------------------------
+//
+TRect CPeninputFingerHwrArLafManager::PreviewBubbleInnerRect()
+    {
+    return iPreviewWndInnerRect;
+    }
+ 
+// ---------------------------------------------------------------------------
+// get preview bubble font
+// ---------------------------------------------------------------------------
+//
+const CFont* CPeninputFingerHwrArLafManager::PreviewBubbleFont()
+    {
+    return iBubbleFont;
+    }
+
+// ---------------------------------------------------------------------------
+// get preview bubble text layout
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::PreviewBubbleTextLayout()
+    {
+    return iPreviewWndText;
+    }
+
+// ---------------------------------------------------------------------------
+// get cell rect of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLafManager::GetVirtualKeyRects( RArray<TRect>& aArrayRects )
+    {   
+    aArrayRects.Reset();
+    
+    for(TInt i = 0; i < iSCTrectArray.Count(); i++)
+        {
+        TRect absoluteRect = iSCTrectArray[i];
+        absoluteRect.Move(-iRectSctpad.iTl.iX, -iRectSctpad.iTl.iY);
+        aArrayRects.Append(absoluteRect);
+        } 
+    }
+
+// ---------------------------------------------------------------------------
+// get space and enter key rect.
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLafManager::GetFixVirtualKeyRects( RArray<TRect>& aArrayRects )
+    {   
+    aArrayRects.Reset();
+    aArrayRects.Append( iRectSpase );
+    aArrayRects.Append( iRectEnter );
+    }
+
+// ---------------------------------------------------------------------------
+// get text layout of virtual sctpad.
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::SctpadKeyTxtLayout()
+    {
+    TAknTextLineLayout layout = AknLayoutScalable_Avkon::
+        cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+    return layout;
+    }
+
+// ---------------------------------------------------------------------------
+// get text layout of space and enter.
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::FixSctpadKeyTxtLayout()
+    {
+    TAknTextLineLayout layout = AknLayoutScalable_Avkon::
+        cell_fshwr2_syb_bg_pane_t1(0).LayoutLine();
+    return layout;
+    }
+
+// ---------------------------------------------------------------------------
+// get width unit of candidate list.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::CandidateUnitWidth()
+    {
+    return iCandsUnitWidth;
+    }
+
+// ---------------------------------------------------------------------------
+// get height unit of candidate list.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::CandidateUnitHeight()
+    {
+    return iCandsUnitHeight;
+    }
+
+// ---------------------------------------------------------------------------
+// get horizontal margin of candidate list.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::CandidateHorizontalMargin()
+    {
+    return iCandsHorizontalMargin;
+    }    
+
+// ---------------------------------------------------------------------------
+// get vertical margin of candidate list.
+// ---------------------------------------------------------------------------
+//
+TInt CPeninputFingerHwrArLafManager::CandidateVerticalMargin()
+    {
+    return iCandsVerticalMargin;
+    }    
+   
+// ---------------------------------------------------------------------------
+// get top-left position of candidate list.
+// ---------------------------------------------------------------------------
+//
+TPoint CPeninputFingerHwrArLafManager::CandidateLTPos()
+    {
+    return iCandidateLTPos;
+    }
+
+// ---------------------------------------------------------------------------
+// get top-left position of predictive list.
+// ---------------------------------------------------------------------------
+//
+TPoint CPeninputFingerHwrArLafManager::PredictiveLTPos()
+    {
+    return iPredictiveLTPos;
+    }
+   
+// ---------------------------------------------------------------------------
+// get font of candidate list.
+// ---------------------------------------------------------------------------
+//
+const CFont* CPeninputFingerHwrArLafManager::CandidateFont()
+    {   
+    return iCandsFont;
+    }
+
+
+// ---------------------------------------------------------------------------
+// get text layout of sct paging button.
+// ---------------------------------------------------------------------------
+//
+TAknTextLineLayout CPeninputFingerHwrArLafManager::SctPageBtnTxtLayout()
+    {
+    TAknTextLineLayout layout =  AknLayoutScalable_Apps::
+        field_vitu2_entry_pane_t1(0, 0, 0).LayoutLine();
+    return layout;
+    }
+
+// ---------------------------------------------------------------------------
+// c++ constructor
+// ---------------------------------------------------------------------------
+//
+CPeninputFingerHwrArLafManager::CPeninputFingerHwrArLafManager()
+    {
+    
+    }
+    
+// ---------------------------------------------------------------------------
+// Symbian second-phase constructor
+// ---------------------------------------------------------------------------
+//
+void CPeninputFingerHwrArLafManager::ConstructL()
+    {
+    }
+
+TSize CPeninputFingerHwrArLafManager::SymbolGroupButtonSize()
+   {
+   return iSymButtonSize;
+   }
+// End Of File