textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp
branchRCL_3
changeset 21 ecbabf52600f
child 22 bd83ceabce89
equal deleted inserted replaced
20:ebd48d2de13c 21:ecbabf52600f
       
     1 /*
       
     2 * Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  peninput VKB data manager
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // System includes
       
    20 #include <peninputdataconverter.h>
       
    21 #include <peninputcommonlayoutglobalenum.h>
       
    22 #include <AknUtils.h> 
       
    23 #include <aknlayoutscalable_avkon.cdl.h>
       
    24 #include <peninputpluginutils.h>
       
    25 #include <aknlayoutscalable_apps.cdl.h>
       
    26 #include <layoutmetadata.cdl.h>
       
    27 #include <featdiscovery.h>   // for CFeatureDiscovery
       
    28 
       
    29 // User includes
       
    30 #include "peninputgenericvkblafdatamgr.h"
       
    31 
       
    32 #define LAF_MODIFY 1
       
    33 
       
    34 const TInt KKeypadLayout[][2] = 
       
    35 	{
       
    36 		{ 10, 3 },		// 10x3
       
    37 		{ 11, 3 },		// 11x3
       
    38 		{ 11, 4 },		// 11x4
       
    39 	};
       
    40 	
       
    41 const TInt KVkbTopAndBottomParam[] = { 5, 3, 4 };	
       
    42 typedef TAknWindowComponentLayout (*Pfun)(TInt aVariety, TInt aCol = 0, TInt aRow = 0);
       
    43 
       
    44 const Pfun cell_pane_func[]=
       
    45 	{
       
    46 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane,
       
    47 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp01,
       
    48 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp02,
       
    49 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp03,
       
    50 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp04,
       
    51 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp05,
       
    52 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp06,
       
    53 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp07,
       
    54 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp08,
       
    55 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp09,
       
    56 	AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_cp10        	        	        	
       
    57 	};
       
    58 //	{ 0, 34, 68, 102, 136, 170, 204, 238, 272, 305 };
       
    59 const TInt KKeypadRectXPoint10x[] = 
       
    60  	{ 0, 34, 68, 102, 136, 170, 204, 238, 272, 305 };
       
    61 const TInt KKeypadCellWidth10x[] = 
       
    62 	{ 41, 41, 41, 41, 41, 41, 41, 41, 41, 44 };	
       
    63 //	{ 0, 32, 63, 94, 125, 155, 186, 217, 248, 279, 311 };		
       
    64 const TInt KKeypadRectXPoint11x[] = 
       
    65 	{ 0, 31, 62, 93, 124, 155, 186, 217, 248, 278, 311 };
       
    66 const TInt KKeypadCellWidth11x[] = 
       
    67 	{ 36, 36, 36, 36, 36, 36, 36, 36, 36, 39, 39 };
       
    68 	
       
    69 // ======== MEMBER FUNCTIONS ========
       
    70 
       
    71 // ---------------------------------------------------------------------------
       
    72 // CPeninputGenericVkbLafMgr::NewL
       
    73 // (other items were commented in a header)
       
    74 // ---------------------------------------------------------------------------
       
    75 //
       
    76 CPeninputGenericVkbLafMgr* CPeninputGenericVkbLafMgr::NewL()
       
    77     {
       
    78     CPeninputGenericVkbLafMgr* self = NewLC();
       
    79     CleanupStack::Pop(self);
       
    80     
       
    81     return self;
       
    82     }
       
    83     
       
    84 // ---------------------------------------------------------------------------
       
    85 // CPeninputGenericVkbLafMgr::NewLC
       
    86 // (other items were commented in a header)
       
    87 // ---------------------------------------------------------------------------
       
    88 //
       
    89 CPeninputGenericVkbLafMgr* CPeninputGenericVkbLafMgr::NewLC()
       
    90     {
       
    91     CPeninputGenericVkbLafMgr* self = 
       
    92         new ( ELeave ) CPeninputGenericVkbLafMgr();
       
    93     CleanupStack::PushL( self );
       
    94     self->ConstructL(); 
       
    95 
       
    96     return self;
       
    97     }
       
    98 
       
    99 // ---------------------------------------------------------------------------
       
   100 // CPeninputGenericVkbLafMgr::CPeninputGenericVkbLafMgr
       
   101 // (other items were commented in a header)
       
   102 // ---------------------------------------------------------------------------
       
   103 //
       
   104 CPeninputGenericVkbLafMgr::CPeninputGenericVkbLafMgr():
       
   105     iInputMode(EPluginInputModeNone)
       
   106     {
       
   107     }
       
   108     
       
   109 // ---------------------------------------------------------------------------
       
   110 // CPeninputGenericVkbLafMgr::~CPeninputGenericVkbLafMgr
       
   111 // (other items were commented in a header)
       
   112 // ---------------------------------------------------------------------------
       
   113 //
       
   114 CPeninputGenericVkbLafMgr::~CPeninputGenericVkbLafMgr()
       
   115     {
       
   116 	delete iLafData;
       
   117 	iLafData = NULL;    
       
   118     }
       
   119 
       
   120 TBool CPeninputGenericVkbLafMgr::IsValid()
       
   121     {
       
   122     if (!iLafData) 
       
   123     return EFalse;
       
   124     
       
   125     return iLafData->IsValid();
       
   126     }
       
   127 
       
   128 // ---------------------------------------------------------------------------
       
   129 // CPeninputGenericVkbLafMgr::ConstructL
       
   130 // (other items were commented in a header)
       
   131 // ---------------------------------------------------------------------------
       
   132 //
       
   133 void CPeninputGenericVkbLafMgr::ConstructL()
       
   134 	{
       
   135 		
       
   136 	}
       
   137 	
       
   138 // ---------------------------------------------------------------------------
       
   139 // CPeninputGenericVkbLafMgr::SetInputMode
       
   140 // (other items were commented in a header)
       
   141 // ---------------------------------------------------------------------------
       
   142 //
       
   143 void CPeninputGenericVkbLafMgr::SetInputModeL( TPluginInputMode aInputMode)
       
   144 	{
       
   145 	if (iInputMode == aInputMode)
       
   146 	    {
       
   147 	    return;
       
   148 	    }
       
   149 	
       
   150 	
       
   151 	if (iLafData)
       
   152 	    {
       
   153 	    delete iLafData;
       
   154 	    iLafData = NULL;
       
   155 	    }
       
   156 	    
       
   157      if (aInputMode == EPluginInputModeVkb)
       
   158         {
       
   159         iLafData = CPeninputLafDataVKB::NewL(ELayoutNone);
       
   160         }
       
   161      else if (aInputMode == EPluginInputModeFSQ)
       
   162         {
       
   163         iLafData = CPeninputLafDataFSQ::NewL(ELayoutNone);
       
   164         }
       
   165      else 
       
   166         {
       
   167         User::Leave(KErrNotSupported);
       
   168         }
       
   169 	}	
       
   170 
       
   171 TPluginInputMode CPeninputGenericVkbLafMgr::InputMode() const
       
   172     {
       
   173     return iInputMode;
       
   174     }
       
   175 	
       
   176 // ---------------------------------------------------------------------------
       
   177 // CPeninputGenericVkbLafMgr::SetLayoutType
       
   178 // (other items were commented in a header)
       
   179 // ---------------------------------------------------------------------------
       
   180 //
       
   181 void CPeninputGenericVkbLafMgr::SetLayoutType( TPeninputQwtLayoutType aLayoutType )
       
   182 	{
       
   183 	ASSERT(iLafData);
       
   184 	iLafData->SetLayoutType( aLayoutType );	
       
   185 	}
       
   186 	
       
   187 // ---------------------------------------------------------------------------
       
   188 // CPeninputGenericVkbLafMgr::SetLafOption
       
   189 // (other items were commented in a header)
       
   190 // ---------------------------------------------------------------------------
       
   191 //
       
   192 void CPeninputGenericVkbLafMgr::SetLafOption( TPeninputVkbLafOption aOption )
       
   193 	{
       
   194 	if( iLafData->LafOption() == aOption )
       
   195 		return;
       
   196 	
       
   197 	iLafData->SetLafOption( aOption );	
       
   198 	TRAP_IGNORE(iLafData->ConstructL());
       
   199 	}
       
   200 
       
   201 // ---------------------------------------------------------------------------
       
   202 // CPeninputGenericVkbLafMgr::SetLafOption
       
   203 // (other items were commented in a header)
       
   204 // ---------------------------------------------------------------------------
       
   205 //
       
   206 TPeninputVkbLafOption CPeninputGenericVkbLafMgr::OptionType() const
       
   207 	{
       
   208 	return iLafData->LafOption();
       
   209 	}
       
   210 
       
   211 // ---------------------------------------------------------------------------
       
   212 // CPeninputGenericVkbLafMgr::GetButtonRect
       
   213 // (other items were commented in a header)
       
   214 // ---------------------------------------------------------------------------
       
   215 //
       
   216 void CPeninputGenericVkbLafMgr::GetButtonRect( TPeninputCommonCtrlID aButtonID, 
       
   217 								TRect& aOutterRect,
       
   218 								TRect& aInnerRect )
       
   219 	{
       
   220 	ASSERT(iLafData);		
       
   221 	const TPeninputButtonLayoutData& data = iLafData->ButtonLayoutData( aButtonID );
       
   222 	aOutterRect = data.iRect;
       
   223 	aInnerRect  = data.iInnerRect;
       
   224 	}
       
   225 	
       
   226 // ---------------------------------------------------------------------------
       
   227 // CPeninputGenericVkbLafMgr::KeyRect
       
   228 // (other items were commented in a header)
       
   229 // ---------------------------------------------------------------------------
       
   230 //
       
   231 const TRect& CPeninputGenericVkbLafMgr::KeypadRect() const
       
   232 	{
       
   233 	ASSERT(iLafData);
       
   234 	const TPeninputKeyLayoutData& data = iLafData->KeypadLayoutData();
       
   235 	return data.iKaypadRect;
       
   236 	}
       
   237 	
       
   238 // ---------------------------------------------------------------------------
       
   239 // CPeninputGenericVkbLafMgr::ICFRect
       
   240 // (other items were commented in a header)
       
   241 // ---------------------------------------------------------------------------
       
   242 //	
       
   243 const TRect& CPeninputGenericVkbLafMgr::ICFRect() const
       
   244 	{
       
   245 	ASSERT(iLafData);
       
   246 	return iLafData->ICFLayoutData().iRect;
       
   247 	}
       
   248 	
       
   249 // ---------------------------------------------------------------------------
       
   250 // CPeninputGenericVkbLafMgr::ICFPromptTextFont
       
   251 // (other items were commented in a header)
       
   252 // ---------------------------------------------------------------------------
       
   253 //	
       
   254 const CFont* CPeninputGenericVkbLafMgr::ICFPromptTextFont() const
       
   255 	{
       
   256 	ASSERT(iLafData);
       
   257 	return iLafData->ICFLayoutData().iPromptTextFont;
       
   258 	}
       
   259 	
       
   260 // ---------------------------------------------------------------------------
       
   261 // CPeninputGenericVkbLafMgr::ICFTextFont
       
   262 // (other items were commented in a header)
       
   263 // ---------------------------------------------------------------------------
       
   264 //	
       
   265 const CFont* CPeninputGenericVkbLafMgr::ICFTextFont() const
       
   266 	{
       
   267 	ASSERT(iLafData);
       
   268 	return iLafData->ICFLayoutData().iTextFont;
       
   269 	}
       
   270 
       
   271 
       
   272 // ---------------------------------------------------------------------------
       
   273 // CPeninputGenericVkbLafMgr::KeyTextLayout
       
   274 // (other items were commented in a header)
       
   275 // ---------------------------------------------------------------------------
       
   276 //	
       
   277 TAknTextLineLayout CPeninputGenericVkbLafMgr::KeyTextLayout() const
       
   278 	{
       
   279 	ASSERT(iLafData);
       
   280 	return iLafData->KeypadLayoutData().iTextLayout;
       
   281 	}
       
   282 
       
   283 // ---------------------------------------------------------------------------
       
   284 // CPeninputGenericVkbLafMgr::ICFPromptTextFont
       
   285 // (other items were commented in a header)
       
   286 // ---------------------------------------------------------------------------
       
   287 //	
       
   288 void CPeninputGenericVkbLafMgr::GetICFConfig( TPeninputICFConfig& aICFConfig )
       
   289 	{
       
   290 	ASSERT(iLafData);	
       
   291 	const TPeninputEntryLayoutData& icfLayout = iLafData->ICFLayoutData();
       
   292 	aICFConfig.iLeftMargin = icfLayout.iPromptTextRect.iTl.iX - icfLayout.iRect.iTl.iX;
       
   293 	aICFConfig.iRightMargin = icfLayout.iRect.iBr.iX - icfLayout.iPromptTextRect.iBr.iX;
       
   294 	aICFConfig.iTopMargin = icfLayout.iPromptTextRect.iTl.iY - icfLayout.iRect.iTl.iY;
       
   295 	aICFConfig.iTextLineHeight = icfLayout.iPromptTextRect.Height();
       
   296 	aICFConfig.iLineSpaceMargin = icfLayout.iTextRect.iTl.iY - icfLayout.iPromptTextRect.iBr.iY;
       
   297 	}
       
   298 	
       
   299 //		
       
   300 const TRect& CPeninputGenericVkbLafMgr::EntirePaneRect() const
       
   301 	{
       
   302 	ASSERT(iLafData);
       
   303 	return iLafData->QwtLayoutData().iQwtRect;
       
   304 	}
       
   305 
       
   306 // ---------------------------------------------------------------------------
       
   307 // CPeninputGenericVkbLafMgr::KeyRect
       
   308 // (other items were commented in a header)
       
   309 // ---------------------------------------------------------------------------
       
   310 //
       
   311 void CPeninputGenericVkbLafMgr::GetKeyRect( TInt aColume, 
       
   312 													TInt aRow, 
       
   313 													TRect& aKeyRect,
       
   314 													TRect& aCharRect ) const
       
   315 	{
       
   316 	ASSERT(iLafData);
       
   317 	TInt colNum = 0;
       
   318 	TInt index = 0;
       
   319 	switch( iLafData->LayoutType() )
       
   320 		{
       
   321 		case ELayout10x3:
       
   322 			{
       
   323 			colNum = 10;
       
   324 			}
       
   325 			break;
       
   326 		case ELayout11x3:
       
   327 			{
       
   328 			colNum = 11;
       
   329 			}
       
   330 			break;	
       
   331 		case ELayout11x4:
       
   332 			{
       
   333 			colNum = 11;
       
   334 			}
       
   335 			break;		
       
   336 		}
       
   337 	index = aRow * colNum + aColume;
       
   338 	aKeyRect = iLafData->KeypadLayoutData().iRects[index];
       
   339 	aCharRect = iLafData->KeypadLayoutData().iCharRects[index];
       
   340 	}
       
   341 
       
   342 TPeninputQwtLayoutType CPeninputGenericVkbLafMgr::LayoutTypeFromRowsColumns(const TInt aRows, 
       
   343                                                                             const TInt aColumns)
       
   344     {
       
   345     TPeninputQwtLayoutType ret;
       
   346     
       
   347     if (aRows == 3 && aColumns == 10)
       
   348         {
       
   349         ret = ELayout10x3;
       
   350         }
       
   351     else if (aRows == 3 && aColumns == 11)
       
   352         {
       
   353         ret = ELayout11x3;
       
   354         }
       
   355     else if (aRows == 4 && aColumns == 11)    
       
   356         {
       
   357         ret = ELayout11x4;
       
   358         }
       
   359     else
       
   360         {
       
   361         ret = ELayoutNone;
       
   362         }
       
   363 
       
   364      return ret;
       
   365     }
       
   366 // ---------------------------------------------------------------------------
       
   367 // CPeninputGenericVkbLafMgr::KeyTextFont
       
   368 // (other items were commented in a header)
       
   369 // ---------------------------------------------------------------------------
       
   370 //
       
   371 const CFont* CPeninputGenericVkbLafMgr::KeyTextFont() const
       
   372 	{
       
   373 	ASSERT(iLafData);
       
   374 	return iLafData->KeypadLayoutData().iFont;	
       
   375 	}
       
   376 
       
   377 // ---------------------------------------------------------------------------
       
   378 // CPeninputGenericVkbLafMgr::KeyTextFont
       
   379 // (other items were commented in a header)
       
   380 // ---------------------------------------------------------------------------
       
   381 //
       
   382 const TRect& CPeninputGenericVkbLafMgr::RangbarRect() const
       
   383 	{
       
   384 	ASSERT(iLafData);
       
   385 	return iLafData->RangbarLayoutData().iRect;
       
   386 	}
       
   387 	
       
   388 // ---------------------------------------------------------------------------
       
   389 // CPeninputGenericVkbLafMgr::KeyTextFont
       
   390 // (other items were commented in a header)
       
   391 // ---------------------------------------------------------------------------
       
   392 //
       
   393 const TRect& CPeninputGenericVkbLafMgr::TitlebarRect() const
       
   394 	{
       
   395 	ASSERT(iLafData);
       
   396 	return iLafData->QwtLayoutData().iTitlebarRect;
       
   397 	}
       
   398 
       
   399 // ---------------------------------------------------------------------------
       
   400 // CPeninputGenericVkbLafMgr::ClientRect
       
   401 // (other items were commented in a header)
       
   402 // ---------------------------------------------------------------------------
       
   403 //
       
   404 const TRect& CPeninputGenericVkbLafMgr::ClientRect() const
       
   405 	{
       
   406 	ASSERT(iLafData);
       
   407 	return iLafData->QwtLayoutData().iClientRect;
       
   408 	}
       
   409 	
       
   410 // ---------------------------------------------------------------------------
       
   411 // CPeninputGenericVkbLafMgr::RangbarCellCount
       
   412 // (other items were commented in a header)
       
   413 // ---------------------------------------------------------------------------
       
   414 //
       
   415 TInt CPeninputGenericVkbLafMgr::RangbarCellCount() const
       
   416 	{
       
   417 	ASSERT(iLafData);	
       
   418 	return 	iLafData->RangbarLayoutData().iCellDataArray.Count();
       
   419 	}
       
   420 
       
   421 // ---------------------------------------------------------------------------
       
   422 // CPeninputGenericVkbLafMgr::RangbarCellCount
       
   423 // (other items were commented in a header)
       
   424 // ---------------------------------------------------------------------------
       
   425 //
       
   426 void CPeninputGenericVkbLafMgr::RangbarCellAt( TInt aIndex, 
       
   427 												 TRect& aOutterRect, 
       
   428 												 TRect& aInnerRect )
       
   429 	{
       
   430 	ASSERT(iLafData);	
       
   431 	aOutterRect = iLafData->RangbarLayoutData().iCellDataArray[aIndex].iRect;
       
   432 	aInnerRect  = iLafData->RangbarLayoutData().iCellDataArray[aIndex].iInnerRect;  
       
   433 	}
       
   434 	
       
   435 // ---------------------------------------------------------------------------
       
   436 // CPeninputGenericVkbLafMgr::GetSpaceButtonExLayoutInfo
       
   437 // (other items were commented in a header)
       
   438 // ---------------------------------------------------------------------------
       
   439 //
       
   440 void CPeninputGenericVkbLafMgr::GetSpaceButtonExLayoutInfo( TRect& aIconsFrameRect, 
       
   441 															TRect& aMiddleIconRect ) const
       
   442 	{
       
   443 	ASSERT(iLafData);
       
   444 	aIconsFrameRect = iLafData->QwtLayoutData().iSpaceButtonEx.iIconsFrameRect;
       
   445 	aMiddleIconRect = iLafData->QwtLayoutData().iSpaceButtonEx.iMiddleIconRect;		
       
   446 	}
       
   447 
       
   448 TRect& CPeninputGenericVkbLafMgr::IndiPaneRectWithText()
       
   449     {
       
   450     ASSERT(iLafData);
       
   451     return iLafData->IndiPaneRectWithText();
       
   452     }
       
   453 
       
   454 TRect& CPeninputGenericVkbLafMgr::IndiPaneRectWithoutText()
       
   455     {
       
   456     ASSERT(iLafData);
       
   457     return iLafData->IndiPaneRectWithoutText();
       
   458     }
       
   459 
       
   460 TRect& CPeninputGenericVkbLafMgr::IndiIconRectWithText()
       
   461     {
       
   462     ASSERT(iLafData);
       
   463     return iLafData->IndiIconRectWithText();
       
   464     }
       
   465 
       
   466 TRect& CPeninputGenericVkbLafMgr::IndiIconRectWithoutText()
       
   467     {
       
   468     ASSERT(iLafData);
       
   469     return iLafData->IndiIconRectWithoutText();
       
   470     }
       
   471 
       
   472 TAknTextLineLayout& CPeninputGenericVkbLafMgr::IndiText()
       
   473     {
       
   474     ASSERT(iLafData);
       
   475     return iLafData->IndiText();
       
   476     }
       
   477 // ---------------------------------------------------------------------------
       
   478 // Return layout data for candidate list
       
   479 // ---------------------------------------------------------------------------
       
   480 //
       
   481 const TPeninputCandidateListLayoutData& 
       
   482                    CPeninputGenericVkbLafMgr::CandidateListLayoutData() const
       
   483     {
       
   484     ASSERT(iLafData);
       
   485     return iLafData->QwtLayoutData().iCandidateList;
       
   486     }
       
   487 	
       
   488 // ---------------------------------------------------------------------------
       
   489 // Return layout data for candidate list
       
   490 // ---------------------------------------------------------------------------
       
   491 //
       
   492 const TPeninputTooltipBoxLayoutData& 
       
   493                       CPeninputGenericVkbLafMgr::TooltipBoxLayoutData() const
       
   494     {
       
   495     ASSERT(iLafData);
       
   496     return iLafData->QwtLayoutData().iTooltipBox;
       
   497     }
       
   498 
       
   499 // ---------------------------------------------------------------------------
       
   500 // CPeninputQwtLayoutDataInfo::~CPeninputQwtLayoutDataInfo
       
   501 // (other items were commented in a header)
       
   502 // ---------------------------------------------------------------------------
       
   503 //
       
   504 CPeninputQwtLayoutDataInfo::~CPeninputQwtLayoutDataInfo()
       
   505 	{
       
   506 	iKeypad.iRects.Close();
       
   507 	iKeypad.iCharRects.Close();
       
   508 	iRangbar.iCellDataArray.Close();
       
   509 	}
       
   510 
       
   511 // ---------------------------------------------------------------------------
       
   512 // CPeninputLafDataCommon::DestoryDataCommon
       
   513 // (other items were commented in a header)
       
   514 // ---------------------------------------------------------------------------
       
   515 //
       
   516 void MPeninputLafDataCommon::DestoryDataCommon()
       
   517 	{
       
   518 	iLayoutDataInfo.ResetAndDestroy();
       
   519 	iLayoutDataInfo.Close();
       
   520 	}
       
   521 	
       
   522 MPeninputLafDataCommon::~MPeninputLafDataCommon()	
       
   523 	{
       
   524 		
       
   525 	}
       
   526 // CPeninputLafDataCommon::ButtonLayoutData(TInt aButtonID)
       
   527 // (other items were commented in a header)
       
   528 // ---------------------------------------------------------------------------
       
   529 //
       
   530 const TPeninputButtonLayoutData& MPeninputLafDataCommon::ButtonLayoutData( TInt aButtonID ) const
       
   531 	{
       
   532 	ASSERT( IsValid() );
       
   533 	const TPeninputButtonLayoutData* pData = NULL;
       
   534 
       
   535 	switch( aButtonID )
       
   536 		{
       
   537 		case EPeninutWindowCtrlIdMoveBtn:
       
   538 			{
       
   539 			pData = &(iLayoutDataInfo[iLayoutType]->iMoveButton);
       
   540 			}
       
   541 			break;
       
   542 		case EPeninutWindowCtrlIdCloseBtn:
       
   543 			{
       
   544 			pData = &(iLayoutDataInfo[iLayoutType]->iCloseButton);
       
   545 			}
       
   546 			break;
       
   547 		case EPeninutWindowCtrlIdOptionBtn:
       
   548 			{
       
   549 			pData = &(iLayoutDataInfo[iLayoutType]->iOptionButton);								
       
   550 			}
       
   551 			break;
       
   552 		case EPeninutWindowCtrlIdBackspaceBtn:
       
   553 			{
       
   554 			pData = &(iLayoutDataInfo[iLayoutType]->iClearButton);								
       
   555 			}
       
   556 			break;
       
   557 		case EPeninutWindowCtrlIdEnterBtn:
       
   558 			{
       
   559 			pData = &(iLayoutDataInfo[iLayoutType]->iEnterButton);								
       
   560 			}
       
   561 			break;
       
   562 		case EPeninutWindowCtrlIdSwitchToHwrBtn:
       
   563 			{
       
   564 			pData = &(iLayoutDataInfo[iLayoutType]->iSwitchButton);								
       
   565 			}
       
   566 			break;
       
   567 		case EPeninutWindowCtrlIdSpaceBtn:
       
   568 			{
       
   569 			pData = &(iLayoutDataInfo[iLayoutType]->iSpaceButton);								
       
   570 			}
       
   571 			break;	
       
   572 		case EPeninutWindowCtrlIdShiftBtn:
       
   573 			{
       
   574 			pData = &(iLayoutDataInfo[iLayoutType]->iShiftButton);								
       
   575 			}
       
   576 			break;	
       
   577 		case EPeninupWindowCtrlIdArrowLeftBtn:
       
   578 			{
       
   579 			pData = &(iLayoutDataInfo[iLayoutType]->iLeftButton);	
       
   580 			}
       
   581 			break;
       
   582 		case EPeninupWindowCtrlIdArrowRightBtn:
       
   583 			{
       
   584 			pData = &(iLayoutDataInfo[iLayoutType]->iRightButton);	
       
   585 			}
       
   586 			break;
       
   587 		case EPeninutWindowCtrlIdMultiRangeBtn:
       
   588 		    {
       
   589 		    pData = &(iLayoutDataInfo[iLayoutType]->iMultiRangeButton);    
       
   590 		    }
       
   591 		    break;
       
   592 		default:
       
   593 			ASSERT(EFalse);
       
   594 			break;
       
   595 		}
       
   596 	ASSERT(pData);
       
   597 	return *pData;
       
   598 	}
       
   599 // ---------------------------------------------------------------------------
       
   600 // CPeninputLafDataCommon::ICFLayoutData()
       
   601 // (other items were commented in a header)
       
   602 // ---------------------------------------------------------------------------
       
   603 //	
       
   604 const TPeninputEntryLayoutData& MPeninputLafDataCommon::ICFLayoutData() const
       
   605 	{
       
   606 	ASSERT( IsValid() );
       
   607 	return iLayoutDataInfo[iLayoutType]->iICF;
       
   608 	}
       
   609 	
       
   610 // ---------------------------------------------------------------------------
       
   611 // CPeninputLafDataCommon::KeypadLayoutData()
       
   612 // (other items were commented in a header)
       
   613 // ---------------------------------------------------------------------------
       
   614 //		
       
   615 const TPeninputKeyLayoutData& MPeninputLafDataCommon::KeypadLayoutData() const
       
   616 	{
       
   617 	ASSERT( IsValid() );
       
   618 	return iLayoutDataInfo[iLayoutType]->iKeypad;
       
   619 	}
       
   620 	
       
   621 // ---------------------------------------------------------------------------
       
   622 // CPeninputLafDataCommon::RangbarLayoutData(TInt aRangbarID)
       
   623 // (other items were commented in a header)
       
   624 // ---------------------------------------------------------------------------
       
   625 //		
       
   626 const TPeninputRangeBarLayoutData& MPeninputLafDataCommon::RangbarLayoutData() const
       
   627 	{
       
   628 	ASSERT( IsValid() );
       
   629 	return iLayoutDataInfo[iLayoutType]->iRangbar;
       
   630 	}
       
   631 
       
   632 // ---------------------------------------------------------------------------
       
   633 // CPeninputLafDataCommon::RangbarLayoutData(TInt aRangbarID)
       
   634 // (other items were commented in a header)
       
   635 // ---------------------------------------------------------------------------
       
   636 //		
       
   637 const CPeninputQwtLayoutDataInfo& MPeninputLafDataCommon::QwtLayoutData() const
       
   638 	{
       
   639 	ASSERT( IsValid() );
       
   640 	return 	*iLayoutDataInfo[iLayoutType];
       
   641 	}
       
   642 
       
   643 TRect& MPeninputLafDataCommon::IndiPaneRectWithText()
       
   644     {
       
   645     ASSERT( IsValid());
       
   646     return iLayoutDataInfo[iLayoutType]->iIndiPaneRectWithTextForFSQ;
       
   647     }
       
   648 
       
   649 TRect& MPeninputLafDataCommon::IndiPaneRectWithoutText()
       
   650     {
       
   651     ASSERT( IsValid());
       
   652     return iLayoutDataInfo[iLayoutType]->iIndiPaneRectWithoutTextForFSQ;
       
   653     }
       
   654 
       
   655 TRect& MPeninputLafDataCommon::IndiIconRectWithText()
       
   656     {
       
   657     ASSERT( IsValid());
       
   658     return iLayoutDataInfo[iLayoutType]->iIndiIconRectWithTextForFSQ;
       
   659     }
       
   660 
       
   661 TRect& MPeninputLafDataCommon::IndiIconRectWithoutText()
       
   662     {
       
   663     ASSERT( IsValid());
       
   664     return iLayoutDataInfo[iLayoutType]->iIndiIconRectWithoutTextForFSQ;
       
   665     }
       
   666 
       
   667 TAknTextLineLayout& MPeninputLafDataCommon::IndiText()
       
   668     {
       
   669     ASSERT( IsValid());
       
   670     return iLayoutDataInfo[iLayoutType]->iIndiTextForFSQ;
       
   671     }
       
   672 // ---------------------------------------------------------------------------
       
   673 // CPeninputLafDataCommon::ConstructL()
       
   674 // (other items were commented in a header)
       
   675 // ---------------------------------------------------------------------------
       
   676 //		
       
   677 void MPeninputLafDataCommon::ConstructL()
       
   678 	{
       
   679 	ReadLafInfoL();
       
   680 	}
       
   681 
       
   682 // ---------------------------------------------------------------------------
       
   683 // CPeninputLafDataCommon::ConstructL()
       
   684 // (other items were commented in a header)
       
   685 // ---------------------------------------------------------------------------
       
   686 //		
       
   687 TBool MPeninputLafDataCommon::IsValid() const
       
   688 	{
       
   689 	return ( iLayoutDataInfo.Count() && iLayoutType != ELayoutNone ) ? ETrue : EFalse;
       
   690 	}
       
   691 
       
   692 
       
   693 // ---------------------------------------------------------------------------
       
   694 // CPeninputLafDataVKB::GetTopAndBottomPaneInfo
       
   695 // (other items were commented in a header)
       
   696 // ---------------------------------------------------------------------------
       
   697 //	
       
   698 void CPeninputLafDataVKB::GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
       
   699 													  TInt aLayoutType,
       
   700 													  TInt aLayoutParam,
       
   701 													  CPeninputQwtLayoutDataInfo& aDataInfo )
       
   702 	{
       
   703 	const TInt endFSQType  = 2;
       
   704 
       
   705 
       
   706 
       
   707 	// judge which case 	
       
   708 	TBool isVKB = aLayoutParam > endFSQType ? ETrue : EFalse;
       
   709 	
       
   710 	TAknWindowLineLayout toppane, bottompane, bottomgrid;
       
   711 	TAknWindowLineLayout topleftpane, topentrypane, toprightpane; 
       
   712 	TAknWindowLineLayout cellBtn, cellBtnInner;	
       
   713     
       
   714 	TAknLayoutRect toppaneRect, bottompaneRect, bottomgridRect;
       
   715 	TAknLayoutRect topleftpaneRect, topentrypaneRect, toprightpaneRect;
       
   716 	TAknLayoutRect cellBtnRect, cellBtnInnerRect;
       
   717 	TAknTextLineLayout cellText;
       
   718 	TAknLayoutText txt;
       
   719 	TRect keypadRect;
       
   720 	TRect innerRect;
       
   721 	// top pane
       
   722 	if( isVKB )
       
   723 		{
       
   724 		toppane = AknLayoutScalable_Avkon::
       
   725 				  vkb2_area_top_pane(KVkbTopAndBottomParam[aLayoutType]).LayoutLine();		
       
   726 		}
       
   727 	else
       
   728 		{
       
   729 		toppane = AknLayoutScalable_Avkon::vkb2_area_top_pane(aLayoutParam).LayoutLine();		
       
   730 		}
       
   731 	toppaneRect.LayoutRect(aParentWndRect, toppane);
       
   732 	aDataInfo.iTitlebarRect = toppaneRect.Rect();
       
   733 
       
   734 
       
   735 	topleftpane = AknLayoutScalable_Avkon::vkb2_top_grid_left_pane(aLayoutParam).LayoutLine();
       
   736 	topleftpaneRect.LayoutRect(toppaneRect.Rect(), topleftpane);
       
   737 
       
   738 	// close button
       
   739 	cellBtn = AknLayoutScalable_Avkon::vkb2_top_cell_left_pane(aLayoutParam, 0 ,0).LayoutLine();
       
   740 	cellBtnRect.LayoutRect(topleftpaneRect.Rect(), cellBtn);
       
   741 	AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   742 	aDataInfo.iCloseButton.iRect = cellBtnRect.Rect();
       
   743 	aDataInfo.iCloseButton.iInnerRect = innerRect;
       
   744 	// option button
       
   745 	cellBtn = AknLayoutScalable_Avkon::vkb2_top_cell_left_pane(aLayoutParam, 0 ,1).LayoutLine();
       
   746 	cellBtnRect.LayoutRect(topleftpaneRect.Rect(), cellBtn);
       
   747 	AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   748 	aDataInfo.iOptionButton.iRect = cellBtnRect.Rect();
       
   749 	aDataInfo.iOptionButton.iInnerRect = innerRect;
       
   750 	// entry pane
       
   751 	topentrypane = AknLayoutScalable_Avkon::vkb2_top_entry_pane(aLayoutParam).LayoutLine();
       
   752 	topentrypaneRect.LayoutRect(toppaneRect.Rect(), topentrypane);	
       
   753 	aDataInfo.iICF.iRect = topentrypaneRect.Rect();
       
   754 	cellText = AknLayoutScalable_Avkon::vkb2_top_entry_pane_t1(aLayoutParam).LayoutLine();
       
   755 	aDataInfo.iICF.iPromptTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
       
   756 	txt.LayoutText( topentrypaneRect.Rect(), cellText );
       
   757 	aDataInfo.iICF.iPromptTextRect = txt.TextRect();
       
   758 	cellText = AknLayoutScalable_Avkon::vkb2_top_entry_pane_t2(aLayoutParam).LayoutLine();
       
   759 	aDataInfo.iICF.iTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
       
   760 	txt.LayoutText( topentrypaneRect.Rect(), cellText );
       
   761 	aDataInfo.iICF.iTextRect = txt.TextRect();
       
   762 	
       
   763 	// ?? need modified later. inner rect is same as outter rect.
       
   764 	toprightpane = AknLayoutScalable_Avkon::vkb2_top_grid_right_pane(aLayoutParam).LayoutLine();
       
   765 	toprightpaneRect.LayoutRect(toppaneRect.Rect(), toprightpane);
       
   766 	if( isVKB )
       
   767 		{
       
   768 		// clear button	
       
   769 		cellBtn = AknLayoutScalable_Avkon::
       
   770 				  vkb2_top_grid_right_pane_g1(aLayoutParam).LayoutLine();
       
   771 		cellBtnRect.LayoutRect(toprightpaneRect.Rect(), cellBtn);
       
   772 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );	
       
   773 		aDataInfo.iClearButton.iRect = cellBtnRect.Rect();
       
   774 		aDataInfo.iClearButton.iInnerRect = innerRect;
       
   775 		// move button (VKB)			
       
   776 		cellBtn = AknLayoutScalable_Avkon::
       
   777 				  vkb2_top_grid_right_pane_g4(aLayoutParam).LayoutLine();
       
   778 		cellBtnRect.LayoutRect(toprightpaneRect.Rect(), cellBtn);
       
   779 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   780 		aDataInfo.iMoveButton.iRect = cellBtnRect.Rect();
       
   781 		aDataInfo.iMoveButton.iInnerRect = innerRect;									
       
   782 										
       
   783 		}
       
   784 	else
       
   785 		{
       
   786 		// clear button	
       
   787 		cellBtn = AknLayoutScalable_Avkon::vkb2_top_grid_right_pane_g1(aLayoutType).LayoutLine();
       
   788 		cellBtnRect.LayoutRect(toprightpaneRect.Rect(), cellBtn);
       
   789 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   790 		aDataInfo.iClearButton.iRect = cellBtnRect.Rect();
       
   791 		aDataInfo.iClearButton.iInnerRect = innerRect;			
       
   792 		// left button (FSQ)
       
   793 		cellBtn = AknLayoutScalable_Avkon::vkb2_top_grid_right_pane_g2(aLayoutType).LayoutLine();
       
   794 		cellBtnRect.LayoutRect(toprightpaneRect.Rect(), cellBtn);
       
   795 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   796 		aDataInfo.iLeftButton.iRect = cellBtnRect.Rect();
       
   797 		aDataInfo.iLeftButton.iInnerRect = innerRect;
       
   798 		// right button (FSQ)
       
   799 		cellBtn = AknLayoutScalable_Avkon::vkb2_top_grid_right_pane_g3(aLayoutType).LayoutLine();
       
   800 		cellBtnRect.LayoutRect(toprightpaneRect.Rect(), cellBtn);
       
   801 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   802 		aDataInfo.iRightButton.iRect = cellBtnRect.Rect();
       
   803 		aDataInfo.iRightButton.iInnerRect = innerRect;		
       
   804 		}
       
   805 
       
   806 	
       
   807 	// bottom pane
       
   808 	const TInt VKBParamBottom2Range[] = { 6, 8, 8 };
       
   809 	const TInt FSQParamBottom2Range[] = { 0, 2, 4 };
       
   810 	const TInt VKBParamBottom3Range[] = { 7, 9, 9 };
       
   811 	const TInt FSQParamBottom3Range[] = { 1, 3, 5 };
       
   812 
       
   813 	
       
   814 	if( isVKB )
       
   815 		{
       
   816 		bottompane = AknLayoutScalable_Avkon::
       
   817 				  vkb2_area_bottom_pane(KVkbTopAndBottomParam[aLayoutType]).LayoutLine();					
       
   818 		}
       
   819 	else
       
   820 		{
       
   821   		bottompane = AknLayoutScalable_Avkon::vkb2_area_bottom_pane(aLayoutParam).LayoutLine();			
       
   822 		}
       
   823 	bottompaneRect.LayoutRect(aParentWndRect, bottompane);
       
   824   	
       
   825 	TRect bottomRect = bottompaneRect.Rect();
       
   826 
       
   827 	// Get keypad rect
       
   828 	keypadRect.SetRect( toppaneRect.Rect().iTl.iX, 
       
   829   						toppaneRect.Rect().iBr.iY, 
       
   830   						bottomRect.iBr.iX,
       
   831 						bottomRect.iTl.iY);
       
   832 	aDataInfo.iClientRect.SetRect( toppaneRect.Rect().iTl.iX, 
       
   833   								   toppaneRect.Rect().iBr.iY,
       
   834   								   bottomRect.iBr.iX,
       
   835 								   bottomRect.iBr.iY);
       
   836 	if( isVKB )
       
   837 		{
       
   838 		aDataInfo.iQwtRect.SetRect( toppaneRect.Rect().iTl.iX, 
       
   839   								    toppaneRect.Rect().iTl.iY,
       
   840   								    bottomRect.iBr.iX,
       
   841 								    bottomRect.iBr.iY );	
       
   842 		}
       
   843 	else
       
   844 		{
       
   845 		aDataInfo.iQwtRect = aParentWndRect;	
       
   846 		}
       
   847 				
       
   848 	TInt bottomLayoutType = 0;
       
   849 	if( isVKB )
       
   850 		{
       
   851 		bottomLayoutType = iLafOption & EOption3CellRange ? 
       
   852 						   VKBParamBottom3Range[aLayoutType] : VKBParamBottom2Range[aLayoutType];
       
   853 		}
       
   854 	else
       
   855 		{
       
   856 		bottomLayoutType = iLafOption & EOption3CellRange ? 
       
   857 						   FSQParamBottom3Range[aLayoutType] : FSQParamBottom2Range[aLayoutType];			
       
   858 		}
       
   859 
       
   860   	bottomgrid = AknLayoutScalable_Avkon::vkb2_area_bottom_grid_pane(bottomLayoutType).LayoutLine();
       
   861   	bottomgridRect.LayoutRect(bottomRect, bottomgrid);
       
   862 	
       
   863 	TInt maxParam = iLafOption & EOption3CellRange ? 4 : 3;
       
   864 	// shift button  	
       
   865 	cellBtn = AknLayoutScalable_Avkon::vkb2_cell_bottom_grid_pane(aLayoutParam, 0, 0).LayoutLine();
       
   866 	cellBtnRect.LayoutRect(bottomgridRect.Rect(), cellBtn);
       
   867 	AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   868 	aDataInfo.iShiftButton.iRect = cellBtnRect.Rect();
       
   869 	aDataInfo.iShiftButton.iInnerRect = innerRect;
       
   870 	
       
   871 	TPeninputButtonLayoutData btnLayoutData;		
       
   872 	for( TInt i = 1; i < maxParam; i++ )
       
   873 		{
       
   874 #ifdef LAF_MODIFY	
       
   875 		if( i == 3 )
       
   876 			{
       
   877 			btnLayoutData.iRect	= aDataInfo.iRangbar.iCellDataArray[i-2].iRect;
       
   878 			btnLayoutData.iRect.Move( btnLayoutData.iRect.Width(), 0 );
       
   879 			AknPenImageUtils::CalculateGraphicRect( btnLayoutData.iRect, innerRect );
       
   880 			btnLayoutData.iInnerRect = innerRect;
       
   881 			aDataInfo.iRangbar.iCellDataArray.Append( btnLayoutData );
       
   882 			break;
       
   883 			}
       
   884 #endif //LAF_MODIFY		
       
   885 		// range cell
       
   886 		cellBtn = AknLayoutScalable_Avkon::vkb2_cell_bottom_grid_pane(aLayoutParam, i, 0).LayoutLine();
       
   887 		cellBtnRect.LayoutRect(bottomgridRect.Rect(), cellBtn);
       
   888 		AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   889 		btnLayoutData.iRect = cellBtnRect.Rect();
       
   890 		btnLayoutData.iInnerRect = innerRect;	
       
   891 
       
   892 		aDataInfo.iRangbar.iCellDataArray.Append( btnLayoutData );				
       
   893 		}
       
   894 		
       
   895 	TInt count = aDataInfo.iRangbar.iCellDataArray.Count();
       
   896 	aDataInfo.iRangbar.iRect = TRect( aDataInfo.iRangbar.iCellDataArray[0].iRect.iTl,
       
   897 									  aDataInfo.iRangbar.iCellDataArray[count - 1].iRect.iBr );
       
   898 	
       
   899 		// input mode button ?? need modified later. inner rect is same as outter rect
       
   900 	cellBtn = AknLayoutScalable_Avkon::vkb2_area_bottom_pane_g1(bottomLayoutType).LayoutLine();
       
   901 	cellBtnRect.LayoutRect(bottomRect, cellBtn);
       
   902 	AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   903 	aDataInfo.iSwitchButton.iRect = cellBtnRect.Rect();
       
   904 	aDataInfo.iSwitchButton.iInnerRect = innerRect;	
       
   905 		// enter button 
       
   906 	cellBtn = AknLayoutScalable_Avkon::vkb2_area_bottom_pane_g2(bottomLayoutType).LayoutLine();
       
   907 	cellBtnRect.LayoutRect(bottomRect, cellBtn);
       
   908 	AknPenImageUtils::CalculateGraphicRect( cellBtnRect.Rect(), innerRect );
       
   909 	aDataInfo.iEnterButton.iRect = cellBtnRect.Rect();
       
   910 	aDataInfo.iEnterButton.iInnerRect = innerRect;	
       
   911 		// space button 
       
   912 	cellBtn = AknLayoutScalable_Avkon::vkb2_area_bottom_pane_g3(bottomLayoutType).LayoutLine();
       
   913 	cellBtnRect.LayoutRect(bottomRect, cellBtn);
       
   914 	aDataInfo.iSpaceButton.iRect = cellBtnRect.Rect();
       
   915 	aDataInfo.iSpaceButton.iRect.iTl = TPoint( aDataInfo.iRangbar.iRect.iBr.iX,
       
   916 											   aDataInfo.iRangbar.iRect.iTl.iY );
       
   917 	aDataInfo.iSpaceButton.iInnerRect = cellBtnRect.Rect();	  			
       
   918 	// 3 pieces graphics laf info
       
   919 	TRect spaceRect, iconRect, tempRect;
       
   920 	cellBtn = 
       
   921         AknLayoutScalable_Avkon::vkb2_area_bottom_space_btn_pane(bottomLayoutType).LayoutLine();
       
   922 	cellBtnRect.LayoutRect(bottomRect, cellBtn);
       
   923 	spaceRect = cellBtnRect.Rect();
       
   924 	cellBtn = 
       
   925         AknLayoutScalable_Avkon::vkb2_area_bottom_space_btn_pane_g1(bottomLayoutType).LayoutLine();
       
   926 	cellBtnRect.LayoutRect(spaceRect, cellBtn);
       
   927 	iconRect = cellBtnRect.Rect();
       
   928 	TInt nOffsetX = iconRect.iTl.iX - spaceRect.iTl.iX;
       
   929 	tempRect = spaceRect;
       
   930 	tempRect.Shrink( nOffsetX, 0 );
       
   931 	aDataInfo.iSpaceButtonEx.iIconsFrameRect = tempRect;
       
   932 	tempRect.Shrink( iconRect.Width(), 0 );
       
   933 	aDataInfo.iSpaceButtonEx.iMiddleIconRect = tempRect;  	
       
   934   	
       
   935 	// preview popup window 
       
   936 	TAknWindowLineLayout previewWnd, previewWndInner;
       
   937 	TAknLayoutRect previewWndRect, previewWndInnerRect;
       
   938 	previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(aLayoutParam).LayoutLine();
       
   939 	previewWndRect.LayoutRect( aParentWndRect, previewWnd );
       
   940 	previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
       
   941 	previewWndInnerRect.LayoutRect( previewWndRect.Rect(), previewWndInner );
       
   942 	aDataInfo.iPreviewWndRect = previewWndRect.Rect();
       
   943 	aDataInfo.iPreviewWndInnerRect = previewWndInnerRect.Rect();
       
   944 	aDataInfo.iPreviewWndText = AknLayoutScalable_Avkon::popup_fep_char_preview_window_t1(
       
   945                               aLayoutParam).LayoutLine();
       
   946 	}
       
   947 
       
   948 // ---------------------------------------------------------------------------
       
   949 // CPeninputLafDataCommon::SetLayoutType( TInt aLayoutType )
       
   950 // (other items were commented in a header)
       
   951 // ---------------------------------------------------------------------------
       
   952 //	
       
   953 inline void MPeninputLafDataCommon::SetLayoutType( TInt aLayoutType )
       
   954 	{
       
   955     iLayoutType = aLayoutType;
       
   956 	}
       
   957 
       
   958 // ---------------------------------------------------------------------------
       
   959 // CPeninputLafDataCommon::LayoutType
       
   960 // (other items were commented in a header)
       
   961 // ---------------------------------------------------------------------------
       
   962 //
       
   963 inline TInt MPeninputLafDataCommon::LayoutType() const
       
   964 	{
       
   965 	return iLayoutType;
       
   966 	}
       
   967 
       
   968 // ---------------------------------------------------------------------------
       
   969 // CPeninputLafDataCommon::SetLafOption
       
   970 // (other items were commented in a header)
       
   971 // ---------------------------------------------------------------------------
       
   972 //
       
   973 inline void MPeninputLafDataCommon::SetLafOption( TPeninputVkbLafOption aLafOption )
       
   974 	{
       
   975 	iLafOption = aLafOption;
       
   976 	}
       
   977 
       
   978 // ---------------------------------------------------------------------------
       
   979 // CPeninputLafDataCommon::SetLafOption
       
   980 // (other items were commented in a header)
       
   981 // ---------------------------------------------------------------------------
       
   982 //
       
   983 inline TPeninputVkbLafOption MPeninputLafDataCommon::LafOption() const
       
   984 	{
       
   985 	return iLafOption;
       
   986 	}
       
   987 
       
   988 // ---------------------------------------------------------------------------
       
   989 // CPeninputLafDataFSQ::RelativeRect
       
   990 // (other items were commented in a header)
       
   991 // ---------------------------------------------------------------------------
       
   992 //
       
   993 TRect CPeninputLafDataFSQ::RelativeRect( const TRect& aRect, const TPoint& aPoint )
       
   994     {
       
   995     TRect rect = aRect;
       
   996     rect.Move( - aPoint.iX, - aPoint.iY );
       
   997     return rect;
       
   998     }
       
   999 
       
  1000 // ---------------------------------------------------------------------------
       
  1001 // CPeninputLafDataFSQ::OffsetRect
       
  1002 // (other items were commented in a header)
       
  1003 // ---------------------------------------------------------------------------
       
  1004 //
       
  1005 TRect CPeninputLafDataFSQ::OffsetRect( const TRect& aRect, TInt aDx, TInt aDy )
       
  1006     {
       
  1007     TRect rect = aRect;
       
  1008     rect.Move( aDx, aDy );
       
  1009     return rect;    
       
  1010     }
       
  1011 
       
  1012 // ---------------------------------------------------------------------------
       
  1013 // CPeninputLafDataFSQ::GetTopAndBottomPaneInfo
       
  1014 // (other items were commented in a header)
       
  1015 // ---------------------------------------------------------------------------
       
  1016 //  
       
  1017 void CPeninputLafDataFSQ::GetTopAndBottomPaneInfo( const TRect& aParentWndRect, 
       
  1018                                                       TInt aLayoutType,
       
  1019                                                       TInt aLayoutParam,
       
  1020                                                       CPeninputQwtLayoutDataInfo& aDataInfo )
       
  1021     {
       
  1022     TAknWindowLineLayout linelayout;
       
  1023     TAknLayoutRect layoutrect;
       
  1024 
       
  1025     TAknLayoutRect keypadRect, keypaneRect, keycellRect, keylabelRect;  
       
  1026     TAknLayoutRect pic3paneRect;
       
  1027     
       
  1028     TPoint base;
       
  1029     TRect rectBottomWin, rectICFBg, rectICF, rectICFpane;
       
  1030     TAknTextLineLayout cellText;
       
  1031     TAknLayoutText txt;
       
  1032     TInt pic3pLeftWidth, pic3pRightWidth;
       
  1033     
       
  1034     base = aParentWndRect.iTl;
       
  1035     TRect rect = aParentWndRect;
       
  1036     rect.Move( - base.iX, - base.iY );
       
  1037     aDataInfo.iClientRect = rect;
       
  1038     aDataInfo.iQwtRect = aParentWndRect;
       
  1039     
       
  1040     TInt v1, v2, gridLayoutVariant;
       
  1041     switch ( aLayoutType )
       
  1042         {
       
  1043         case ELayout10x3:
       
  1044             {
       
  1045             v1 = 0;
       
  1046             v2 = 0;
       
  1047             gridLayoutVariant = 1;
       
  1048             break;
       
  1049             }
       
  1050         case ELayout11x3:
       
  1051             {
       
  1052             v1 = 1;
       
  1053             v2 = 2;
       
  1054             gridLayoutVariant = 1;
       
  1055             break;
       
  1056             }
       
  1057         case ELayout11x4:
       
  1058             {
       
  1059             v1 = 1;
       
  1060             v2 = 3;
       
  1061             gridLayoutVariant = 2;
       
  1062             break;
       
  1063             }
       
  1064         default:
       
  1065             {
       
  1066             v1 = 0;
       
  1067             v2 = 0;
       
  1068             gridLayoutVariant = 1;
       
  1069             }
       
  1070         }
       
  1071     
       
  1072     // Landscape info is set if i) portrait FSQ feature is not enabled (landscape FSQ)
       
  1073     // or ii) portrait FSQ feature is enabled and the current orientation is landscape. 
       
  1074     // Note: Feature Manager is fading out and CFeatureDiscovery is recommended to use.
       
  1075     TBool isPortraitFSQEnabled = EFalse;
       
  1076     TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
       
  1077                         KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
       
  1078 
       
  1079     if ( !isPortraitFSQEnabled ||
       
  1080         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  1081         {
       
  1082         // Bottom pane rect
       
  1083         linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
       
  1084         layoutrect.LayoutRect( aParentWndRect, linelayout );
       
  1085         rectBottomWin = layoutrect.Rect();
       
  1086         
       
  1087         // ICF pane rect
       
  1088         linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
       
  1089         layoutrect.LayoutRect( aParentWndRect, linelayout );
       
  1090         rectICFpane = layoutrect.Rect();
       
  1091 
       
  1092         // ICF bg pane rect
       
  1093         linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine();
       
  1094         layoutrect.LayoutRect( rectICFpane, linelayout );
       
  1095         rectICFBg = layoutrect.Rect();
       
  1096         
       
  1097         // ICF area rect
       
  1098         linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine();
       
  1099         layoutrect.LayoutRect( rectICFBg, linelayout );
       
  1100         rectICF = layoutrect.Rect();
       
  1101         }
       
  1102     // Portrait info is set if portrait FSQ feature is enabled the current orientation 
       
  1103     // is portrait. 
       
  1104     else
       
  1105         {
       
  1106         // Bottom pane rect
       
  1107         linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(gridLayoutVariant).LayoutLine();
       
  1108         layoutrect.LayoutRect( aParentWndRect, linelayout );
       
  1109         rectBottomWin = layoutrect.Rect();
       
  1110         
       
  1111         // ICF pane rect
       
  1112         linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(1).LayoutLine();
       
  1113         layoutrect.LayoutRect( aParentWndRect, linelayout );
       
  1114         rectICFpane = layoutrect.Rect();
       
  1115 
       
  1116         // ICF bg pane rect
       
  1117         linelayout = AknLayoutScalable_Avkon::bg_icf_pane(1).LayoutLine();
       
  1118         layoutrect.LayoutRect( rectICFpane, linelayout );
       
  1119         rectICFBg = layoutrect.Rect();
       
  1120         
       
  1121         // ICF area rect
       
  1122         linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(1).LayoutLine();
       
  1123         layoutrect.LayoutRect( rectICFBg, linelayout );
       
  1124         rectICF = layoutrect.Rect();
       
  1125         }
       
  1126     
       
  1127     aDataInfo.iICF.iRect = rectICF;
       
  1128     cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine();
       
  1129     aDataInfo.iICF.iPromptTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
       
  1130     txt.LayoutText( rectICF, cellText );
       
  1131     aDataInfo.iICF.iPromptTextRect = txt.TextRect();
       
  1132     cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 1).LayoutLine();
       
  1133     aDataInfo.iICF.iTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
       
  1134     txt.LayoutText( rectICF, cellText );
       
  1135     aDataInfo.iICF.iTextRect = txt.TextRect();
       
  1136     
       
  1137     // icf indicator
       
  1138     TAknWindowLineLayout icfIndiPaneWithText, icfIndiPaneWithoutText, 
       
  1139 		indiIconWithText, indiIconWithoutText;
       
  1140     TAknLayoutRect icfIndiPaneRectWithText, icfIndiPaneRectWithoutText,
       
  1141 		indiIconRectWithText, indiIconRectWithoutText;
       
  1142     TAknTextLineLayout indiTextLayout;
       
  1143     
       
  1144     icfIndiPaneWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane(1).LayoutLine();
       
  1145     icfIndiPaneRectWithText.LayoutRect( rectICF, icfIndiPaneWithText );
       
  1146     aDataInfo.iIndiPaneRectWithTextForFSQ = icfIndiPaneRectWithText.Rect();
       
  1147     
       
  1148     icfIndiPaneWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane(0).LayoutLine();
       
  1149     icfIndiPaneRectWithoutText.LayoutRect( rectICF, icfIndiPaneWithoutText );
       
  1150     aDataInfo.iIndiPaneRectWithoutTextForFSQ = icfIndiPaneRectWithoutText.Rect();
       
  1151     
       
  1152     indiIconWithText = AknLayoutScalable_Avkon::icf_edit_indi_pane_g2(1).LayoutLine();
       
  1153     indiIconRectWithText.LayoutRect( icfIndiPaneRectWithText.Rect(), indiIconWithText );
       
  1154     aDataInfo.iIndiIconRectWithTextForFSQ = indiIconRectWithText.Rect();
       
  1155     
       
  1156     indiIconWithoutText = AknLayoutScalable_Avkon::icf_edit_indi_pane_g2(0).LayoutLine();
       
  1157     indiIconRectWithoutText.LayoutRect( icfIndiPaneRectWithoutText.Rect(), indiIconWithoutText );
       
  1158     aDataInfo.iIndiIconRectWithoutTextForFSQ = indiIconRectWithoutText.Rect();
       
  1159     
       
  1160     indiTextLayout = AknLayoutScalable_Avkon::icf_edit_indi_pane_t1(0).LayoutLine();
       
  1161     aDataInfo.iIndiTextForFSQ = indiTextLayout;
       
  1162     
       
  1163     // keypad pane rect
       
  1164     linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine();
       
  1165     keypadRect.LayoutRect( rectBottomWin, linelayout );
       
  1166     
       
  1167     if ( !isPortraitFSQEnabled ||
       
  1168         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  1169         {
       
  1170         // key pane rect
       
  1171         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
       
  1172         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1173     
       
  1174         // key cell rect
       
  1175         linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
       
  1176         keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1177         
       
  1178         // key label rect
       
  1179         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
       
  1180         keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1181         
       
  1182         // pic3pane rect
       
  1183         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
       
  1184         pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1185         
       
  1186         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
       
  1187         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
       
  1188         pic3pLeftWidth = layoutrect.Rect().Width();
       
  1189     
       
  1190         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
       
  1191         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
       
  1192         pic3pRightWidth = layoutrect.Rect().Width();
       
  1193         
       
  1194         TRect rectXPane = keypaneRect.Rect();
       
  1195         rect = keycellRect.Rect();
       
  1196         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1197         TRect rectXBorder = rect;
       
  1198         rect = keylabelRect.Rect();
       
  1199         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1200         TRect rectXInner = rect;
       
  1201         rect = pic3paneRect.Rect();
       
  1202         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1203         TRect rect3PicPane = rect;
       
  1204         rectXPane.Move( - rectXPane.iTl );
       
  1205         
       
  1206         rect = keypadRect.Rect();
       
  1207         rect.Move( - base.iX, - base.iY );
       
  1208         TRect rectOfKeypad = rect;
       
  1209         TRect rectOfButtons = rectOfKeypad;
       
  1210         rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
       
  1211         rectOfButtons.iTl.iY += rectOfKeypad.Height();
       
  1212         
       
  1213         TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
       
  1214         TInt dx = rectOfButtons.iTl.iX;
       
  1215         TInt dy = rectOfButtons.iTl.iY;
       
  1216         
       
  1217         aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1218         aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1219         dx += rectXPane.Width();
       
  1220     
       
  1221         aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1222         aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1223         dx += rectXPane.Width();
       
  1224     
       
  1225         aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1226         aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1227         dx += rectXPane.Width();
       
  1228     
       
  1229         aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1230         aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1231         dx += rectXPane.Width();
       
  1232     
       
  1233         TInt expand = spaceBtnWidth - rectXPane.Width();
       
  1234         aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1235         aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
       
  1236         aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1237         aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
       
  1238         aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
       
  1239         aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
       
  1240         aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
       
  1241             aDataInfo.iSpaceButtonEx.iIconsFrameRect;
       
  1242         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
       
  1243         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
       
  1244         dx += spaceBtnWidth;
       
  1245     
       
  1246         aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1247         aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1248         dx += rectXPane.Width();
       
  1249     
       
  1250         aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1251         aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1252         dx += rectXPane.Width();
       
  1253     
       
  1254         aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1255         aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1256         dx += rectXPane.Width();
       
  1257     
       
  1258         aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1259         aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1260         }
       
  1261     else
       
  1262         {
       
  1263         TAknLayoutRect shiftRect, spaceRect, clearRect;
       
  1264         TAknLayoutRect bottomRowRect;
       
  1265         
       
  1266         // Second row of buttons (CLOSE, MULTIRANGE, LEFT, RIGHT, OPTIONS, ENTER)
       
  1267 		// keypane v=15, keycell v=8, keylabel v=8
       
  1268 
       
  1269         // key pane rect
       
  1270         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
       
  1271         bottomRowRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1272         
       
  1273         // key cell rect
       
  1274         linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(8).LayoutLine();
       
  1275         keycellRect.LayoutRect( bottomRowRect.Rect(), linelayout );
       
  1276         
       
  1277         // key label rect
       
  1278         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(8).LayoutLine();
       
  1279         keylabelRect.LayoutRect( bottomRowRect.Rect(), linelayout );
       
  1280         
       
  1281         TRect rectXPane = bottomRowRect.Rect();
       
  1282         rect = keycellRect.Rect();
       
  1283         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1284         TRect rectXBorder = rect;
       
  1285         rect = keylabelRect.Rect();
       
  1286         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1287         TRect rectXInner = rect;
       
  1288         rectXPane.Move( - rectXPane.iTl );
       
  1289         
       
  1290         rect = keypadRect.Rect();
       
  1291         rect.Move( - base.iX, - base.iY );
       
  1292         TRect rectOfKeypad = rect;
       
  1293         TRect rectOfButtons = rectOfKeypad;
       
  1294         rectOfKeypad.iBr.iY -= ( bottomRowRect.Rect().Height() );
       
  1295         rectOfButtons.iTl.iY += rectOfKeypad.Height();
       
  1296         
       
  1297         TInt dx = rectOfButtons.iTl.iX;
       
  1298         TInt dy = rectOfButtons.iTl.iY;
       
  1299 
       
  1300         // CLOSE (15)
       
  1301         aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1302         aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy ); 
       
  1303         dx += rectXPane.Width();
       
  1304         
       
  1305         // MULTIRANGE (15)
       
  1306         aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1307         aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1308         dx += rectXPane.Width();
       
  1309         
       
  1310         // LEFT (15)
       
  1311         aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1312         aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1313         dx += rectXPane.Width();
       
  1314         
       
  1315         // RIGHT (15)
       
  1316         aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1317         aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1318         dx += rectXPane.Width();
       
  1319         
       
  1320         // OPTIONS (15)
       
  1321         aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1322         aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1323         dx += rectXPane.Width();
       
  1324         
       
  1325         // ENTER (15)
       
  1326         aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1327         aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1328 
       
  1329         // First row of buttons (SHIFT, SPACE, CLEAR)
       
  1330         
       
  1331         // SHIFT (keypane v=4, keycell v=4, keylabel v=4)
       
  1332         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
       
  1333         shiftRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1334         
       
  1335         // key cell rect
       
  1336         linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(4).LayoutLine();
       
  1337         keycellRect.LayoutRect( shiftRect.Rect(), linelayout );
       
  1338         
       
  1339         // key label rect
       
  1340         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(4).LayoutLine();
       
  1341         keylabelRect.LayoutRect( shiftRect.Rect(), linelayout );
       
  1342         
       
  1343         rectXPane = shiftRect.Rect();
       
  1344         rect = keycellRect.Rect();
       
  1345         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1346         rectXBorder = rect;
       
  1347         rect = keylabelRect.Rect();
       
  1348         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
       
  1349         rectXInner = rect;
       
  1350         rectXPane.Move( - rectXPane.iTl );
       
  1351         
       
  1352         // Update the height to account for the second row
       
  1353         rectOfButtons.iTl.iY -= shiftRect.Rect().Height();
       
  1354         
       
  1355         dx = rectOfButtons.iTl.iX;
       
  1356         dy = rectOfButtons.iTl.iY;
       
  1357 
       
  1358         aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1359         aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1360         dx += rectXPane.Width();
       
  1361         
       
  1362         // SPACE (keypane v=8, keycell v=5, keylabel v=5, pic3pane v=5)
       
  1363         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(8).LayoutLine();
       
  1364         spaceRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1365         
       
  1366         // key cell rect
       
  1367         linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(5).LayoutLine();
       
  1368         keycellRect.LayoutRect( spaceRect.Rect(), linelayout );
       
  1369         
       
  1370         // key label rect
       
  1371         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(5).LayoutLine();
       
  1372         keylabelRect.LayoutRect( spaceRect.Rect(), linelayout );
       
  1373         
       
  1374         // pic3pane rect
       
  1375         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(5).LayoutLine();
       
  1376         pic3paneRect.LayoutRect( spaceRect.Rect(), linelayout );
       
  1377         
       
  1378         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
       
  1379         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
       
  1380         pic3pLeftWidth = layoutrect.Rect().Width();
       
  1381     
       
  1382         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
       
  1383         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
       
  1384         pic3pRightWidth = layoutrect.Rect().Width();
       
  1385         
       
  1386         TRect rectSpacePane = spaceRect.Rect();
       
  1387         rect = keycellRect.Rect();
       
  1388         rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
       
  1389         TRect rectSpaceBorder = rect;
       
  1390         rect = keylabelRect.Rect();
       
  1391         rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
       
  1392         TRect rectSpaceInner = rect;
       
  1393         rect = pic3paneRect.Rect();
       
  1394         rect.Move( - rectSpacePane.iTl.iX, - rectSpacePane.iTl.iY );
       
  1395         TRect rect3PicPane = rect;
       
  1396         rectSpacePane.Move( - rectSpacePane.iTl );
       
  1397         
       
  1398         aDataInfo.iSpaceButton.iRect = OffsetRect( rectSpaceBorder, dx, dy );
       
  1399         aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectSpaceInner, dx, dy );
       
  1400         aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
       
  1401         aDataInfo.iSpaceButtonEx.iMiddleIconRect = aDataInfo.iSpaceButtonEx.iIconsFrameRect;
       
  1402         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
       
  1403         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
       
  1404         dx += rectSpacePane.Width();
       
  1405         
       
  1406         // CLEAR (keypane v=4, keycell v=4, keylabel v=4)
       
  1407         aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
       
  1408         aDataInfo.iClearButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
       
  1409         }
       
  1410     
       
  1411     // preview popup window
       
  1412     TAknWindowLineLayout previewWnd, previewWndInner;
       
  1413     TAknLayoutRect previewWndRect, previewWndInnerRect;
       
  1414     previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(aLayoutParam).LayoutLine();
       
  1415     previewWndRect.LayoutRect( aParentWndRect, previewWnd );
       
  1416     previewWndInner = AknLayoutScalable_Avkon::bg_popup_fep_char_preview_window_g9().LayoutLine();
       
  1417     previewWndInnerRect.LayoutRect( previewWndRect.Rect(), previewWndInner );
       
  1418     aDataInfo.iPreviewWndRect = previewWndRect.Rect();
       
  1419     aDataInfo.iPreviewWndInnerRect = previewWndInnerRect.Rect();
       
  1420     aDataInfo.iPreviewWndText = AknLayoutScalable_Avkon::popup_fep_char_preview_window_t1(
       
  1421                               aLayoutParam).LayoutLine();
       
  1422     }
       
  1423 // ---------------------------------------------------------------------------
       
  1424 // CPeninputLafDataVKB::NewL( TInt aLayoutType )
       
  1425 // (other items were commented in a header)
       
  1426 // ---------------------------------------------------------------------------
       
  1427 //	
       
  1428 CPeninputLafDataVKB* CPeninputLafDataVKB::NewL( TInt aLayoutType )
       
  1429 	{
       
  1430     CPeninputLafDataVKB* self = NewLC( aLayoutType );
       
  1431     CleanupStack::Pop();
       
  1432     return self;
       
  1433 	}
       
  1434 // ---------------------------------------------------------------------------
       
  1435 // CPeninputLafDataVKB::NewL( TInt aLayoutType )
       
  1436 // (other items were commented in a header)
       
  1437 // ---------------------------------------------------------------------------
       
  1438 //		
       
  1439 CPeninputLafDataVKB* CPeninputLafDataVKB::NewLC( TInt aLayoutType )
       
  1440 	{
       
  1441 	CPeninputLafDataVKB* self = new ( ELeave ) CPeninputLafDataVKB( aLayoutType );
       
  1442     CleanupStack::PushL( self );
       
  1443     self->ConstructL(); 
       
  1444 
       
  1445     return self;
       
  1446 	}
       
  1447 CPeninputLafDataVKB::~CPeninputLafDataVKB()
       
  1448 	{
       
  1449 	DestoryDataCommon();	
       
  1450 	}
       
  1451 	
       
  1452 	
       
  1453 // ---------------------------------------------------------------------------
       
  1454 // CPeninputLafDataVKB::NewL( TInt aLayoutType )
       
  1455 // (other items were commented in a header)
       
  1456 // ---------------------------------------------------------------------------
       
  1457 //		
       
  1458 CPeninputLafDataVKB::CPeninputLafDataVKB( TInt aLayoutType )
       
  1459 	{
       
  1460 	SetLayoutType( aLayoutType );	
       
  1461 	}
       
  1462 // ---------------------------------------------------------------------------
       
  1463 // CPeninputLafDataVKB::NewL( TInt aLayoutType )
       
  1464 // (other items were commented in a header)
       
  1465 // ---------------------------------------------------------------------------
       
  1466 //		
       
  1467 void CPeninputLafDataVKB::ReadLafInfoL()
       
  1468 	{
       
  1469 	// clean up all the data
       
  1470 	iLayoutDataInfo.ResetAndDestroy();
       
  1471 	
       
  1472 	CPeninputQwtLayoutDataInfo* dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1473 	
       
  1474 	TAknWindowLineLayout appWnd; 
       
  1475     TAknWindowLineLayout wndLayout;
       
  1476     TAknWindowLineLayout keypad, rowpane, cellpane;
       
  1477     
       
  1478     TAknLayoutRect keypadRect, rowpaneRect, cellpaneRect;
       
  1479     TAknLayoutRect wndRect;
       
  1480     TAknLayoutText keyTextLayout;
       
  1481 	TAknTextLineLayout keyText;
       
  1482 	TRect keyRect, keyCharRect;
       
  1483 // -----------------------Portray Mode--------------------------
       
  1484     appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
       
  1485     //iAppWndRect = appWnd.Rect();
       
  1486 	
       
  1487 	// ==================10x3====================
       
  1488 	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(3).LayoutLine();
       
  1489 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1490 	// top pane and bottom pane
       
  1491 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 3, *dataInfo );
       
  1492 	// keypad
       
  1493   	keyText = AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_t1(0).LayoutLine();
       
  1494   	dataInfo->iKeypad.iTextLayout = keyText;
       
  1495   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
       
  1496   	//dataInfo->iKeypad.iTxtRect = keyText.TextRect();
       
  1497 	
       
  1498     keypad = AknLayoutScalable_Avkon::
       
  1499     		 vkb2_area_keypad_pane(KVkbTopAndBottomParam[ELayout10x3]).LayoutLine();
       
  1500   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
       
  1501 	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
       
  1502   	//iKeypadRect10x3 = keypadRect.Rect();
       
  1503   	for( TInt i = 0; i < KKeypadLayout[0][1]; i++)
       
  1504   		{
       
  1505   		for( TInt j = 0; j < KKeypadLayout[0][0]; j++)
       
  1506   			{
       
  1507   			rowpane = AknLayoutScalable_Avkon::vkb2_row_keypad_pane(2, 0, i).LayoutLine();
       
  1508   			rowpaneRect.LayoutRect(keypadRect.Rect(), rowpane);
       
  1509   			cellpane = (*cell_pane_func[j])(0).LayoutLine();
       
  1510   			cellpaneRect.LayoutRect(rowpaneRect.Rect(), cellpane);
       
  1511   			keyRect = cellpaneRect.Rect();
       
  1512   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
       
  1513 #ifdef LAF_MODIFY
       
  1514 			keyRect.iTl.iX = KKeypadRectXPoint10x[j];
       
  1515 			keyRect.SetWidth( KKeypadCellWidth10x[j] );
       
  1516 #endif //LAF_MODIFY
       
  1517   			dataInfo->iKeypad.iRects.AppendL(keyRect);
       
  1518   			keyTextLayout.LayoutText(keyRect, keyText);
       
  1519   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
       
  1520   			}
       
  1521   		}
       
  1522    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  1523   	
       
  1524 	// ==================11x3====================
       
  1525 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1526 	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(1).LayoutLine();
       
  1527 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1528 	// top pane and bottom pane
       
  1529 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x3, 4, *dataInfo );
       
  1530 	// keypad
       
  1531   	keyText = AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_t1(0).LayoutLine();
       
  1532   	dataInfo->iKeypad.iTextLayout = keyText;
       
  1533   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
       
  1534 
       
  1535     keypad = AknLayoutScalable_Avkon::
       
  1536     		 vkb2_area_keypad_pane(KVkbTopAndBottomParam[ELayout11x3]).LayoutLine();
       
  1537   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
       
  1538 	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
       
  1539   	for( TInt i = 0; i < KKeypadLayout[1][1]; i++)
       
  1540 		{
       
  1541 		for( TInt j = 0; j < KKeypadLayout[1][0]; j++)
       
  1542 			{
       
  1543 			rowpane = AknLayoutScalable_Avkon::vkb2_row_keypad_pane(0, 0, i).LayoutLine();
       
  1544 			rowpaneRect.LayoutRect(keypadRect.Rect(), rowpane);
       
  1545 			cellpane = (*cell_pane_func[j])(1).LayoutLine();
       
  1546 			cellpaneRect.LayoutRect(rowpaneRect.Rect(), cellpane);
       
  1547   			keyRect = cellpaneRect.Rect();
       
  1548   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
       
  1549 #ifdef LAF_MODIFY  			
       
  1550 			keyRect.iTl.iX = KKeypadRectXPoint11x[j];
       
  1551 			keyRect.SetWidth( KKeypadCellWidth11x[j] );
       
  1552 #endif //LAF_MODIFY  			  				
       
  1553   			dataInfo->iKeypad.iRects.AppendL(keyRect);
       
  1554   			keyTextLayout.LayoutText(keyRect, keyText);
       
  1555   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
       
  1556 			}
       
  1557 		}
       
  1558    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  1559 		
       
  1560 	// ==================11x4====================
       
  1561 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1562 	wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(2).LayoutLine();
       
  1563 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1564 	// top pane and bottom pane
       
  1565 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x4, 4, *dataInfo );
       
  1566 	// keypad
       
  1567   	keyText = AknLayoutScalable_Avkon::vkb2_cell_t_keypad_pane_t1(0).LayoutLine();
       
  1568   	dataInfo->iKeypad.iTextLayout = keyText;
       
  1569   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
       
  1570 
       
  1571     keypad = AknLayoutScalable_Avkon::
       
  1572     		 vkb2_area_keypad_pane(KVkbTopAndBottomParam[ELayout11x4]).LayoutLine();
       
  1573   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
       
  1574 	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
       
  1575   	for( TInt i = 0; i < KKeypadLayout[2][1]; i++)
       
  1576   		{
       
  1577   		for( TInt j = 0; j < KKeypadLayout[2][0]; j++)
       
  1578   			{
       
  1579   			rowpane = AknLayoutScalable_Avkon::vkb2_row_keypad_pane(1, 0, i).LayoutLine();
       
  1580   			rowpaneRect.LayoutRect(keypadRect.Rect(), rowpane);
       
  1581   			cellpane = (*cell_pane_func[j])(1).LayoutLine();
       
  1582   			cellpaneRect.LayoutRect(rowpaneRect.Rect(), cellpane); 
       
  1583   			keyRect = cellpaneRect.Rect();
       
  1584   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
       
  1585 #ifdef LAF_MODIFY  		
       
  1586 			keyRect.iTl.iX = KKeypadRectXPoint11x[j];
       
  1587 			keyRect.SetWidth( KKeypadCellWidth11x[j] );
       
  1588 #endif //LAF_MODIFY  
       
  1589   			dataInfo->iKeypad.iRects.AppendL(keyRect);
       
  1590   			keyTextLayout.LayoutText(keyRect, keyText);
       
  1591   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
       
  1592   			}
       
  1593   		}
       
  1594    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  1595 	}
       
  1596 // ---------------------------------------------------------------------------
       
  1597 // CPeninputLafDataFSQ::NewL( TInt aLayoutType )
       
  1598 // (other items were commented in a header)
       
  1599 // ---------------------------------------------------------------------------
       
  1600 //		
       
  1601 CPeninputLafDataFSQ* CPeninputLafDataFSQ::NewL( TInt aLayoutType )
       
  1602 	{
       
  1603     CPeninputLafDataFSQ* self = NewLC( aLayoutType );
       
  1604     CleanupStack::Pop();
       
  1605     return self;		
       
  1606 	}
       
  1607 // ---------------------------------------------------------------------------
       
  1608 // CPeninputLafDataFSQ::NewLC( TInt aLayoutType )
       
  1609 // (other items were commented in a header)
       
  1610 // ---------------------------------------------------------------------------
       
  1611 //		
       
  1612 CPeninputLafDataFSQ* CPeninputLafDataFSQ::NewLC( TInt aLayoutType )
       
  1613 	{
       
  1614 	CPeninputLafDataFSQ* self = new ( ELeave ) CPeninputLafDataFSQ( aLayoutType );
       
  1615     CleanupStack::PushL( self );
       
  1616     self->ConstructL(); 
       
  1617 
       
  1618     return self;
       
  1619 		
       
  1620 	}
       
  1621 
       
  1622 CPeninputLafDataFSQ::~CPeninputLafDataFSQ()
       
  1623 	{
       
  1624 	DestoryDataCommon();	
       
  1625 	}	
       
  1626 	
       
  1627 // ---------------------------------------------------------------------------
       
  1628 // CPeninputLafDataFSQ::CPeninputLafDataFSQ( TInt aLayoutType )
       
  1629 // (other items were commented in a header)
       
  1630 // ---------------------------------------------------------------------------
       
  1631 //		
       
  1632 CPeninputLafDataFSQ::CPeninputLafDataFSQ( TInt aLayoutType )
       
  1633 	{
       
  1634 	SetLayoutType( aLayoutType );	
       
  1635 	}
       
  1636 // ---------------------------------------------------------------------------
       
  1637 // CPeninputLafDataFSQ::ReadLafInfo()
       
  1638 // (other items were commented in a header)
       
  1639 // ---------------------------------------------------------------------------
       
  1640 //		
       
  1641 void CPeninputLafDataFSQ::ReadLafInfoL()
       
  1642 	{
       
  1643 	// clean up all the data
       
  1644 	iLayoutDataInfo.ResetAndDestroy();
       
  1645 	
       
  1646 	CPeninputQwtLayoutDataInfo* dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1647 	TAknWindowLineLayout appWnd; 
       
  1648     TAknWindowLineLayout wndLayout;
       
  1649     TAknWindowLineLayout linelayout;
       
  1650     TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect;
       
  1651     TRect rectBottomWin, rectBottomWin11x4, rectVkbCtrl;
       
  1652     TPoint base;
       
  1653     TAknWindowLineLayout keypad, cellpane;
       
  1654     
       
  1655     TAknWindowLineLayout cellPaneBK;
       
  1656     TAknLayoutRect cellPaneBKRect;
       
  1657     TRect keyBKRect;
       
  1658     TAknLayoutRect keypadRect, cellpaneRect;
       
  1659     TAknLayoutRect wndRect;
       
  1660     TAknLayoutText keyTextLayout; 
       
  1661 	TAknTextLineLayout keyText;
       
  1662 	TRect keyRect;
       
  1663 
       
  1664     TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
       
  1665 
       
  1666 	// -----------------------Landscape Mode--------------------------
       
  1667 	appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
       
  1668 	wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
       
  1669 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1670 	// Bottom pane rect
       
  1671     // Landscape info is read if i) portrait FSQ feature is not enabled (landscape FSQ)
       
  1672     // or ii) portrait FSQ feature is enabled and the current orientation is landscape. 
       
  1673     // Portrait info is set if portrait FSQ feature is enabled the current orientation 
       
  1674     // is portrait. 
       
  1675     TBool isPortraitFSQEnabled = EFalse;
       
  1676     TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
       
  1677                         KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
       
  1678     linelayout = ( !isPortraitFSQEnabled ||
       
  1679         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  1680         ? AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine()
       
  1681         : AknLayoutScalable_Avkon::popup_fep_vkbss_window(1).LayoutLine();
       
  1682 
       
  1683 	layoutrect.LayoutRect( wndRect.Rect(), linelayout );
       
  1684 	rectBottomWin = layoutrect.Rect();
       
  1685 	base = wndRect.Rect().iTl;
       
  1686     
       
  1687     if( !isLandscape )
       
  1688         {
       
  1689         linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(2).LayoutLine();
       
  1690         layoutrect.LayoutRect( wndRect.Rect(), linelayout );
       
  1691         rectBottomWin11x4 = layoutrect.Rect();
       
  1692         }
       
  1693 		
       
  1694 	// ==================10x3====================
       
  1695 	// top pane and bottom pane
       
  1696 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo );
       
  1697 	// keypad
       
  1698 	// Modify begin
       
  1699 	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(0).LayoutLine();
       
  1700 	keyText.iB += 3;
       
  1701 	dataInfo->iKeypad.iTextLayout = keyText;
       
  1702   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
       
  1703   	
       
  1704     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine();
       
  1705   	keypadRect.LayoutRect( rectBottomWin, keypad );
       
  1706   	
       
  1707     TInt functionKeyRowsHeight = 0;
       
  1708 	
       
  1709     if ( !isPortraitFSQEnabled ||
       
  1710         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  1711         {
       
  1712         // In landscape mode, there is only one function key row, and the height 
       
  1713         // of this row is identical to all the other rows
       
  1714         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
       
  1715   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1716         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1717         }
       
  1718     else
       
  1719         {
       
  1720         // In portrait mode, there are two function key rows
       
  1721         // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
       
  1722         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
       
  1723   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1724         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1725         // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
       
  1726         // OPTIONS, ENTER)
       
  1727         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
       
  1728         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1729         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1730         // Reset keypane rect
       
  1731         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
       
  1732         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1733         }
       
  1734   	    
       
  1735   	rectVkbCtrl = keypadRect.Rect();
       
  1736     rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
       
  1737   	dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
       
  1738 
       
  1739   	linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine();
       
  1740   	keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1741   	
       
  1742   	linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(0).LayoutLine();
       
  1743   	keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1744 
       
  1745   	linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(0).LayoutLine();    
       
  1746   	layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1747   	TInt rowIndentWidth = layoutrect.Rect().Width();
       
  1748   	
       
  1749     TRect rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
       
  1750     rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
       
  1751   	
       
  1752     TRect rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
       
  1753     TRect rectXBorder = RelativeRect( keycellRect.Rect(), base );
       
  1754     TRect rectXInner = RelativeRect( keylabelRect.Rect(), base );
       
  1755 
       
  1756     rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
       
  1757     rectXBorder.Move( - rectOfKeypad.iTl );
       
  1758     rectXInner.Move( - rectOfKeypad.iTl );
       
  1759   	
       
  1760   	for( TInt i = 0; i < KKeypadLayout[0][1]; i++)
       
  1761   		{
       
  1762   		TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
       
  1763   		for( TInt j = 0; j < KKeypadLayout[0][0]; j++)
       
  1764             {
       
  1765 			TRect bound = rectXPane;
       
  1766             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  1767             bound.Move( indent, 0 );
       
  1768             
       
  1769             dataInfo->iKeypad.iRects.AppendL( bound );
       
  1770             
       
  1771             TRect inner = rectXPane;
       
  1772             inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  1773             inner.Move( indent, 0 );        
       
  1774             
       
  1775             TAknLayoutText keyTextLayout; 
       
  1776             keyTextLayout.LayoutText( inner, keyText );
       
  1777             dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
       
  1778             }
       
  1779   		}
       
  1780   	// Modify end
       
  1781   	
       
  1782   	// Modify begin
       
  1783  	//keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(0).LayoutLine();
       
  1784   	//dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);	
       
  1785   	// Modify end
       
  1786   	
       
  1787   	// Add candate list laf data for ITI features
       
  1788   	// Candidate list's parent Layout window is ITUT window
       
  1789     TPeninputCandidateListLayoutData candidateListLAF;
       
  1790     TAknWindowLineLayout parentWnd;
       
  1791    	// Add tooltip box laf data for ITI features.
       
  1792    	TPeninputTooltipBoxLayoutData tooltipBoxLAF;    	                                
       
  1793     if ( isLandscape )
       
  1794         {
       
  1795       	parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 1 ).LayoutLine();
       
  1796         TAknLayoutRect parentRectLayout;
       
  1797         parentRectLayout.LayoutRect( appWnd.Rect(), parentWnd );
       
  1798         candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() );
       
  1799        	dataInfo->iCandidateList = candidateListLAF;
       
  1800         tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
       
  1801        	dataInfo->iTooltipBox = tooltipBoxLAF;
       
  1802         }
       
  1803         
       
  1804     // if portrait FSQ feature is enabled and the current orientation is portrait. 
       
  1805     if ( isPortraitFSQEnabled && !isLandscape )
       
  1806         {
       
  1807         parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 0 ).LayoutLine();
       
  1808         TAknLayoutRect parentRectLayout;
       
  1809         parentRectLayout.LayoutRect( appWnd.Rect(), parentWnd );
       
  1810         candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() );
       
  1811         dataInfo->iCandidateList = candidateListLAF;
       
  1812         tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
       
  1813         dataInfo->iTooltipBox = tooltipBoxLAF;
       
  1814         }
       
  1815 
       
  1816    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  1817   	
       
  1818 	// ==================11x3====================
       
  1819 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1820 	// Modify begin
       
  1821 	//wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
       
  1822 	//wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1823 	// Modify end
       
  1824 	// top pane and bottom pane
       
  1825 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x3, 1, *dataInfo );	
       
  1826 	// keypad
       
  1827 	// Modify begin
       
  1828 	/*
       
  1829     keypad = AknLayoutScalable_Avkon::vkb2_area_keypad_pane(1).LayoutLine();
       
  1830   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
       
  1831   	dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
       
  1832     cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(1, 0, 0).LayoutLine();
       
  1833   	
       
  1834   	for( TInt i = 0; i < KKeypadLayout[1][1]; i++)
       
  1835 		{
       
  1836 		for( TInt j = 0; j < KKeypadLayout[1][0]; j++)
       
  1837 			{
       
  1838   			cellpane = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane(1, j, i).LayoutLine();
       
  1839   			cellpaneRect.LayoutRect(keypadRect.Rect(), cellpane);
       
  1840   			keyRect = cellpaneRect.Rect();
       
  1841   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
       
  1842             cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
       
  1843             keyBKRect = cellPaneBKRect.Rect();
       
  1844             dataInfo->iKeypad.iRects.AppendL(keyBKRect);
       
  1845   			keyTextLayout.LayoutText(keyRect, keyText);
       
  1846   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
       
  1847 			}
       
  1848 		}
       
  1849 	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(1).LayoutLine();
       
  1850   	dataInfo->iKeypad.iTextLayout = keyText;	
       
  1851   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
       
  1852   	*/
       
  1853 	
       
  1854 	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(2).LayoutLine();
       
  1855     keyText.iB += 3;
       
  1856     dataInfo->iKeypad.iTextLayout = keyText;
       
  1857     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
       
  1858     
       
  1859     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
       
  1860     keypadRect.LayoutRect( rectBottomWin, keypad );
       
  1861     
       
  1862     functionKeyRowsHeight = 0;
       
  1863 	
       
  1864     if ( !isPortraitFSQEnabled ||
       
  1865         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  1866         {
       
  1867         // In landscape mode, there is only one function key row, and the height 
       
  1868         // of this row is identical to all the other rows
       
  1869         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
       
  1870   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1871         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1872         }
       
  1873     else
       
  1874         {
       
  1875         // In portrait mode, there are two function key rows
       
  1876         // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
       
  1877         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
       
  1878   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1879         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1880         // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
       
  1881         // OPTIONS, ENTER)
       
  1882         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
       
  1883         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1884         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  1885         // Reset keypane rect
       
  1886         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
       
  1887         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1888         }
       
  1889   	    
       
  1890   	rectVkbCtrl = keypadRect.Rect();
       
  1891     rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
       
  1892     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
       
  1893 
       
  1894     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine();
       
  1895     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1896     
       
  1897     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(2).LayoutLine();
       
  1898     keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  1899 
       
  1900     linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(1).LayoutLine();    
       
  1901     layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
       
  1902     rowIndentWidth = layoutrect.Rect().Width();
       
  1903     
       
  1904     rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
       
  1905     rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
       
  1906     
       
  1907     rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
       
  1908     rectXBorder = RelativeRect( keycellRect.Rect(), base );
       
  1909     rectXInner = RelativeRect( keylabelRect.Rect(), base );
       
  1910 
       
  1911     rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
       
  1912     rectXBorder.Move( - rectOfKeypad.iTl );
       
  1913     rectXInner.Move( - rectOfKeypad.iTl );
       
  1914     
       
  1915     for( TInt i = 0; i < KKeypadLayout[1][1]; i++)
       
  1916         {
       
  1917         TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
       
  1918         for( TInt j = 0; j < KKeypadLayout[1][0]; j++)
       
  1919             {
       
  1920 		    TRect bound = rectXPane;
       
  1921             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  1922             bound.Move( indent, 0 );
       
  1923             
       
  1924             dataInfo->iKeypad.iRects.AppendL( bound );
       
  1925             
       
  1926             TRect inner = rectXPane;
       
  1927             inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  1928             inner.Move( indent, 0 );        
       
  1929             
       
  1930             TAknLayoutText keyTextLayout; 
       
  1931             keyTextLayout.LayoutText( inner, keyText );
       
  1932             dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
       
  1933             }
       
  1934         }
       
  1935   	// Modify end
       
  1936   	
       
  1937     if ( isLandscape )
       
  1938         {
       
  1939       	// Add candate list laf data for ITI features
       
  1940        	dataInfo->iCandidateList = candidateListLAF;
       
  1941        	// Add tooltip box laf data for ITI features.
       
  1942        	dataInfo->iTooltipBox = tooltipBoxLAF;
       
  1943         }
       
  1944    	
       
  1945     // if portrait FSQ feature is enabled and the current orientation is portrait. 
       
  1946     if ( isPortraitFSQEnabled && !isLandscape )
       
  1947         {
       
  1948         // Add candate list laf data for ITI features
       
  1949         dataInfo->iCandidateList = candidateListLAF;
       
  1950         // Add tooltip box laf data for ITI features.
       
  1951         dataInfo->iTooltipBox = tooltipBoxLAF;
       
  1952         }
       
  1953 
       
  1954    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  1955 	
       
  1956 	// ==================11x4====================
       
  1957 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
       
  1958 	// Modify begin
       
  1959 	//wndLayout = AknLayoutScalable_Avkon::popup_fep_vkb2_window(0).LayoutLine();
       
  1960 	//wndRect.LayoutRect(appWnd.Rect(), wndLayout);
       
  1961 	// Modify end
       
  1962 	// top pane and bottom pane
       
  1963 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout11x4, 2, *dataInfo );
       
  1964 	// Modify begin
       
  1965 	// keypad
       
  1966 	/*
       
  1967     keypad = AknLayoutScalable_Avkon::vkb2_area_keypad_pane(2).LayoutLine();
       
  1968   	keypadRect.LayoutRect(wndRect.Rect(), keypad);
       
  1969     dataInfo->iKeypad.iKaypadRect = keypadRect.Rect();
       
  1970     cellPaneBK = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_g1(2, 0, 0).LayoutLine();
       
  1971   	for( TInt i = 0; i < KKeypadLayout[2][1]; i++)
       
  1972   		{
       
  1973   		for( TInt j = 0; j < KKeypadLayout[2][0]; j++)
       
  1974   			{
       
  1975   			cellpane = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane(2, j, i).LayoutLine();
       
  1976   			cellpaneRect.LayoutRect(keypadRect.Rect(), cellpane);
       
  1977   			keyRect = cellpaneRect.Rect();
       
  1978   			keyRect.Move( -keypadRect.Rect().iTl.iX, -keypadRect.Rect().iTl.iY );
       
  1979             cellPaneBKRect.LayoutRect( keyRect, cellPaneBK );
       
  1980             keyBKRect = cellPaneBKRect.Rect();
       
  1981             dataInfo->iKeypad.iRects.AppendL(keyBKRect);
       
  1982   			keyTextLayout.LayoutText(keyRect, keyText);
       
  1983   			dataInfo->iKeypad.iCharRects.AppendL(keyTextLayout.TextRect());
       
  1984   			}
       
  1985   		}
       
  1986  	keyText = AknLayoutScalable_Avkon::vkb2_cell_keypad_pane_t1(2).LayoutLine();
       
  1987   	dataInfo->iKeypad.iTextLayout = keyText; 	
       
  1988   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId(keyText.iFont, NULL);
       
  1989   	*/
       
  1990 	
       
  1991 	keyText = AknLayoutScalable_Avkon::cell_vkbss_key_t1(3).LayoutLine();
       
  1992     keyText.iB += 3;
       
  1993     dataInfo->iKeypad.iTextLayout = keyText;
       
  1994     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
       
  1995     
       
  1996     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
       
  1997     if( isLandscape )
       
  1998         {
       
  1999         keypadRect.LayoutRect( rectBottomWin, keypad );
       
  2000         }
       
  2001     else
       
  2002         {
       
  2003         keypadRect.LayoutRect( rectBottomWin11x4, keypad );
       
  2004         }
       
  2005 
       
  2006     functionKeyRowsHeight = 0;
       
  2007 	
       
  2008     if ( !isPortraitFSQEnabled ||
       
  2009         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
       
  2010         {
       
  2011         // In landscape mode, there is only one function key row, and the height 
       
  2012         // of this row is identical to all the other rows
       
  2013         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
       
  2014   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  2015         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  2016         }
       
  2017     else
       
  2018         {
       
  2019         // In portrait mode, there are two function key rows
       
  2020         // First row is represented as variety 4 (SHIFT, SPACE, CLEAR)
       
  2021         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(4).LayoutLine();
       
  2022   	    keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  2023         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  2024         // Second row is represented as variety 15 (CLOSE, MULTIRANGE, LEFT, RIGHT, 
       
  2025         // OPTIONS, ENTER)
       
  2026         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(15).LayoutLine();
       
  2027         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  2028         functionKeyRowsHeight += keypaneRect.Rect().Height();
       
  2029         // Reset keypane rect
       
  2030         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
       
  2031         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
       
  2032         }
       
  2033   	    
       
  2034   	rectVkbCtrl = keypadRect.Rect();
       
  2035     rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
       
  2036     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;    
       
  2037 
       
  2038     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine();
       
  2039     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  2040     
       
  2041     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(3).LayoutLine();
       
  2042     keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
       
  2043 
       
  2044     linelayout = AknLayoutScalable_Avkon::aid_vkbss_key_offset(1).LayoutLine();    
       
  2045     layoutrect.LayoutRect( keypadRect.Rect(), linelayout );
       
  2046     rowIndentWidth = layoutrect.Rect().Width();
       
  2047     
       
  2048     rectOfKeypad = RelativeRect( keypadRect.Rect(), base );
       
  2049     rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
       
  2050     
       
  2051     rectXPane = RelativeRect( keypaneRect.Rect(), base ); 
       
  2052     rectXBorder = RelativeRect( keycellRect.Rect(), base );
       
  2053     rectXInner = RelativeRect( keylabelRect.Rect(), base );
       
  2054 
       
  2055     rectXPane.Move( - rectOfKeypad.iTl ); //translate to keypad coord-sys
       
  2056     rectXBorder.Move( - rectOfKeypad.iTl );
       
  2057     rectXInner.Move( - rectOfKeypad.iTl );
       
  2058     
       
  2059     for( TInt i = 0; i < KKeypadLayout[2][1]; i++)
       
  2060         {
       
  2061         TInt indent = ( i % 2 == 1 ) ? rowIndentWidth : 0;
       
  2062         for( TInt j = 0; j < KKeypadLayout[2][0]; j++)
       
  2063             {
       
  2064 		    TRect bound = rectXPane;
       
  2065             bound.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  2066             bound.Move( indent, 0 );
       
  2067             
       
  2068             dataInfo->iKeypad.iRects.AppendL( bound );
       
  2069             
       
  2070             TRect inner = rectXPane;
       
  2071             inner.Move( j * rectXPane.Width(), i * rectXPane.Height() );
       
  2072             inner.Move( indent, 0 );        
       
  2073             
       
  2074             TAknLayoutText keyTextLayout; 
       
  2075             keyTextLayout.LayoutText( inner, keyText );
       
  2076             dataInfo->iKeypad.iCharRects.AppendL( keyTextLayout.TextRect() );
       
  2077             }
       
  2078         }
       
  2079 	// Modify end
       
  2080   	
       
  2081     if ( isLandscape )
       
  2082         {
       
  2083       	// Add candate list laf data for ITI features
       
  2084        	dataInfo->iCandidateList = candidateListLAF;
       
  2085        	// Add tooltip box laf data for ITI features.
       
  2086        	dataInfo->iTooltipBox = tooltipBoxLAF;
       
  2087         }
       
  2088    	
       
  2089      // if portrait FSQ feature is enabled and the current orientation is portrait. 
       
  2090     if ( isPortraitFSQEnabled && !isLandscape )
       
  2091         {
       
  2092         // Add candate list laf data for ITI features
       
  2093         dataInfo->iCandidateList = candidateListLAF;
       
  2094         // Add tooltip box laf data for ITI features.
       
  2095         dataInfo->iTooltipBox = tooltipBoxLAF;
       
  2096         }
       
  2097   	
       
  2098    	iLayoutDataInfo.AppendL( dataInfo ); 
       
  2099    	   	
       
  2100 	}	
       
  2101 
       
  2102 // ---------------------------------------------------------------------------
       
  2103 // Read LAF data for candidate list
       
  2104 // ---------------------------------------------------------------------------
       
  2105 //		
       
  2106 TPeninputCandidateListLayoutData CPeninputLafDataFSQ::
       
  2107                                  ReadLafForCandidateList( const TRect& aRect )
       
  2108     {    
       
  2109     TAknLayoutRect listpaneRect;
       
  2110     TAknLayoutRect scrollRect;
       
  2111     TAknLayoutRect candidateListRect;
       
  2112     TAknWindowLineLayout listpane;
       
  2113     TAknWindowLineLayout scrollpane;
       
  2114     TAknWindowLineLayout candidateList;   
       
  2115     
       
  2116     // If portrait FSQ feature is enabled.
       
  2117     TBool isPortraitFSQEnabled = EFalse;
       
  2118     TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
       
  2119                         KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
       
  2120 
       
  2121     if ( isPortraitFSQEnabled )
       
  2122         {
       
  2123         if ( Layout_Meta_Data::IsLandscapeOrientation() )
       
  2124             {
       
  2125             // candidate list
       
  2126             candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine();	
       
  2127             candidateListRect.LayoutRect( aRect, candidateList );	
       
  2128  
       
  2129             // list pane, its parent is candidate list
       
  2130             listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine();
       
  2131             listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
       
  2132         
       
  2133             // scroll pane, its parent is candidate list
       
  2134             scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine();  
       
  2135             scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
       
  2136             }
       
  2137         else
       
  2138             {
       
  2139             // candidate list
       
  2140             candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 2 ).LayoutLine();   
       
  2141             candidateListRect.LayoutRect( aRect, candidateList );   
       
  2142           
       
  2143             // list pane, its parent is candidate list
       
  2144             listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 0 ).LayoutLine();
       
  2145             listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
       
  2146         
       
  2147             // scroll pane, its parent is candidate list
       
  2148             scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 0 ).LayoutLine();
       
  2149             scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
       
  2150             }
       
  2151         }
       
  2152     else
       
  2153         {
       
  2154         // candidate list
       
  2155         candidateList = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 ).LayoutLine();	
       
  2156         candidateListRect.LayoutRect( aRect, candidateList );	
       
  2157  
       
  2158         // list pane, its parent is candidate list
       
  2159         listpane = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 ).LayoutLine();
       
  2160         listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
       
  2161     
       
  2162         // scroll pane, its parent is candidate list
       
  2163         scrollpane = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 ).LayoutLine();  
       
  2164         scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
       
  2165         }
       
  2166     
       
  2167     // Item pane, its parent is list pane
       
  2168     TAknWindowLineLayout itemPane 
       
  2169           = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 0 )
       
  2170             .LayoutLine();
       
  2171     TAknLayoutRect itemPaneRect;
       
  2172     itemPaneRect.LayoutRect( listpaneRect.Rect(), itemPane );
       
  2173 
       
  2174     TPeninputCandidateListLayoutData layoutData;    
       
  2175 	layoutData.iSelectionHorMargin = listpaneRect.Rect().iTl.iX;	
       
  2176 	layoutData.iSelectionVerMargin = listpaneRect.Rect().iTl.iY;		
       
  2177 	layoutData.iSelectionItemSize = itemPaneRect.Rect().Size();
       
  2178 	
       
  2179 	// Up button image. its parent is scroll pane
       
  2180 	TAknWindowLineLayout arrowUpImagePane
       
  2181 	                = AknLayoutScalable_Apps::vitu2_page_scroll_pane_g1()
       
  2182 	                  .LayoutLine();
       
  2183     TAknLayoutRect arrowUpImageRect;
       
  2184     arrowUpImageRect.LayoutRect( scrollRect.Rect(), arrowUpImagePane );
       
  2185     // Up button, its parent is scroll pane
       
  2186 	TAknWindowLineLayout arrowUpPane
       
  2187 	          = AknLayoutScalable_Apps::bg_button_pane_cp023().LayoutLine();
       
  2188     TAknLayoutRect arrowUpRect;
       
  2189     arrowUpRect.LayoutRect( scrollRect.Rect(), arrowUpPane );
       
  2190     
       
  2191     // Down button image, its parent is scroll pane
       
  2192     TAknWindowLineLayout arrowDownImagePane
       
  2193             = AknLayoutScalable_Apps::vitu2_page_scroll_pane_g2().LayoutLine();
       
  2194     TAknLayoutRect arrowDownImageRect;
       
  2195     arrowDownImageRect.LayoutRect( scrollRect.Rect(), arrowDownImagePane );
       
  2196     
       
  2197     // Down button, its parent is scroll pane
       
  2198     TAknWindowLineLayout arrowDownPane 
       
  2199                 = AknLayoutScalable_Apps::bg_button_pane_cp024().LayoutLine();
       
  2200     TAknLayoutRect arrowDownRect;
       
  2201     arrowDownRect.LayoutRect( scrollRect.Rect(), arrowDownPane );
       
  2202     
       
  2203 	layoutData.iSelectionNaviSize = arrowUpRect.Rect().Size();
       
  2204 	layoutData.iSelectionNaviInnerSize = arrowUpImageRect.Rect().Size();
       
  2205     
       
  2206 	layoutData.iSelectionTextLine 
       
  2207 	           = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane_t1()
       
  2208 	             .LayoutLine();
       
  2209     layoutData.iSelectionPageTextLine 
       
  2210             = AknLayoutScalable_Apps::vitu2_page_scroll_pane_t1().LayoutLine();
       
  2211             
       
  2212     TAknLayoutText list_item_pane_t1_layout_text;
       
  2213     list_item_pane_t1_layout_text.LayoutText( listpaneRect.Rect(), 
       
  2214                                               layoutData.iSelectionTextLine );
       
  2215     layoutData.iFont = list_item_pane_t1_layout_text.Font();
       
  2216     return layoutData;
       
  2217     }
       
  2218 
       
  2219 // ---------------------------------------------------------------------------
       
  2220 // Read LAF data for tooltip box
       
  2221 // ---------------------------------------------------------------------------
       
  2222 // 
       
  2223 TPeninputTooltipBoxLayoutData CPeninputLafDataFSQ::
       
  2224                                     ReadLafForTooltipBox( const TRect& aRect )
       
  2225     {    
       
  2226     TAknWindowLineLayout tooltipBoxLayout 
       
  2227        = AknLayoutScalable_Avkon::popup_fep_tooltip_window( 0 ).LayoutLine();
       
  2228     
       
  2229     TAknLayoutRect tooltipBoxRect;
       
  2230 	tooltipBoxRect.LayoutRect( aRect, tooltipBoxLayout );
       
  2231 	
       
  2232     TPeninputTooltipBoxLayoutData layoutData;
       
  2233     layoutData.iRect = tooltipBoxRect.Rect();
       
  2234         
       
  2235     layoutData.iTooltipTextLayout 
       
  2236                     = AknLayoutScalable_Avkon::popup_fep_tooltip_window_t1( 0 )
       
  2237                     .LayoutLine(); 
       
  2238     
       
  2239     layoutData.iFont = AknLayoutUtils::FontFromId
       
  2240                                ( layoutData.iTooltipTextLayout.iFont, NULL );
       
  2241     return layoutData;
       
  2242     }
       
  2243     
       
  2244 // End Of File