textinput/peninputgenericvkb/src/peninputgenericlafdatamgr.cpp
branchRCL_3
changeset 19 ac7e4d1d9209
parent 11 c8fb4cf7b3ae
equal deleted inserted replaced
18:b1ea1642412e 19:ac7e4d1d9209
    22 #include <AknUtils.h> 
    22 #include <AknUtils.h> 
    23 #include <aknlayoutscalable_avkon.cdl.h>
    23 #include <aknlayoutscalable_avkon.cdl.h>
    24 #include <peninputpluginutils.h>
    24 #include <peninputpluginutils.h>
    25 #include <aknlayoutscalable_apps.cdl.h>
    25 #include <aknlayoutscalable_apps.cdl.h>
    26 #include <layoutmetadata.cdl.h>
    26 #include <layoutmetadata.cdl.h>
       
    27 #include <featdiscovery.h>   // for CFeatureDiscovery
    27 
    28 
    28 // User includes
    29 // User includes
    29 #include "peninputgenericvkblafdatamgr.h"
    30 #include "peninputgenericvkblafdatamgr.h"
    30 
    31 
    31 #define LAF_MODIFY 1
    32 #define LAF_MODIFY 1
  1034     TRect rect = aParentWndRect;
  1035     TRect rect = aParentWndRect;
  1035     rect.Move( - base.iX, - base.iY );
  1036     rect.Move( - base.iX, - base.iY );
  1036     aDataInfo.iClientRect = rect;
  1037     aDataInfo.iClientRect = rect;
  1037     aDataInfo.iQwtRect = aParentWndRect;
  1038     aDataInfo.iQwtRect = aParentWndRect;
  1038     
  1039     
  1039     TInt v1, v2;
  1040     TInt v1, v2, gridLayoutVariant;
  1040     switch ( aLayoutType )
  1041     switch ( aLayoutType )
  1041         {
  1042         {
  1042         case ELayout10x3:
  1043         case ELayout10x3:
  1043             {
  1044             {
  1044             v1 = 0;
  1045             v1 = 0;
  1045             v2 = 0;
  1046             v2 = 0;
       
  1047             gridLayoutVariant = 1;
  1046             break;
  1048             break;
  1047             }
  1049             }
  1048         case ELayout11x3:
  1050         case ELayout11x3:
  1049             {
  1051             {
  1050             v1 = 1;
  1052             v1 = 1;
  1051             v2 = 2;
  1053             v2 = 2;
       
  1054             gridLayoutVariant = 1;
  1052             break;
  1055             break;
  1053             }
  1056             }
  1054         case ELayout11x4:
  1057         case ELayout11x4:
  1055             {
  1058             {
  1056             v1 = 1;
  1059             v1 = 1;
  1057             v2 = 3;
  1060             v2 = 3;
       
  1061             gridLayoutVariant = 2;
  1058             break;
  1062             break;
  1059             }
  1063             }
  1060         default:
  1064         default:
  1061             {
  1065             {
  1062             v1 = 0;
  1066             v1 = 0;
  1063             v2 = 0;
  1067             v2 = 0;
       
  1068             gridLayoutVariant = 1;
  1064             }
  1069             }
  1065         }
  1070         }
  1066     
  1071     
  1067     // Bottom pane rect
  1072     // Landscape info is set if i) portrait FSQ feature is not enabled (landscape FSQ)
  1068     linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
  1073     // or ii) portrait FSQ feature is enabled and the current orientation is landscape. 
  1069     layoutrect.LayoutRect( aParentWndRect, linelayout );
  1074     // Note: Feature Manager is fading out and CFeatureDiscovery is recommended to use.
  1070     rectBottomWin = layoutrect.Rect();
  1075     TBool isPortraitFSQEnabled = EFalse;
  1071     
  1076     TRAP_IGNORE( isPortraitFSQEnabled = CFeatureDiscovery::IsFeatureSupportedL( 
  1072     // ICF pane rect
  1077                         KFeatureIdFfVirtualFullscrPortraitQwertyInput ) );
  1073     linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
  1078 
  1074     layoutrect.LayoutRect( aParentWndRect, linelayout );
  1079     if ( !isPortraitFSQEnabled ||
  1075     rectICFpane = layoutrect.Rect();
  1080         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
  1076     
  1081         {
  1077     // ICF bg pane rect
  1082         // Bottom pane rect
  1078     linelayout = AknLayoutScalable_Avkon::bg_icf_pane(0).LayoutLine();
  1083         linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
  1079     layoutrect.LayoutRect( rectICFpane, linelayout );
  1084         layoutrect.LayoutRect( aParentWndRect, linelayout );
  1080     rectICFBg = layoutrect.Rect();
  1085         rectBottomWin = layoutrect.Rect();
  1081     
  1086         
  1082     // ICF area rect
  1087         // ICF pane rect
  1083     linelayout = AknLayoutScalable_Avkon::list_vkb_icf_pane(0).LayoutLine();
  1088         linelayout = AknLayoutScalable_Avkon::popup_fep_vkb_icf_pane(0).LayoutLine();
  1084     layoutrect.LayoutRect( rectICFBg, linelayout );
  1089         layoutrect.LayoutRect( aParentWndRect, linelayout );
  1085     rectICF = layoutrect.Rect();
  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         }
  1086     
  1126     
  1087     aDataInfo.iICF.iRect = rectICF;
  1127     aDataInfo.iICF.iRect = rectICF;
  1088     cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine();
  1128     cellText = AknLayoutScalable_Avkon::list_vkb_icf_pane_t1(0, 0, 0).LayoutLine();
  1089     aDataInfo.iICF.iPromptTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
  1129     aDataInfo.iICF.iPromptTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
  1090     txt.LayoutText( rectICF, cellText );
  1130     txt.LayoutText( rectICF, cellText );
  1122     
  1162     
  1123     // keypad pane rect
  1163     // keypad pane rect
  1124     linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine();
  1164     linelayout = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(v1).LayoutLine();
  1125     keypadRect.LayoutRect( rectBottomWin, linelayout );
  1165     keypadRect.LayoutRect( rectBottomWin, linelayout );
  1126     
  1166     
  1127     // key pane rect
  1167     if ( !isPortraitFSQEnabled ||
  1128     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
  1168         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
  1129     keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
  1169         {
  1130 
  1170         // key pane rect
  1131     // key cell rect
  1171         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(v2).LayoutLine();
  1132     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
  1172         keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
  1133     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1173     
  1134     
  1174         // key cell rect
  1135     // key label rect
  1175         linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(v2).LayoutLine();
  1136     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
  1176         keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1137     keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1177         
  1138     
  1178         // key label rect
  1139     // pic3pane rect
  1179         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_g1(v2).LayoutLine();
  1140     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
  1180         keylabelRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1141     pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1181         
  1142     
  1182         // pic3pane rect
  1143     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
  1183         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane(v2).LayoutLine();
  1144     layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
  1184         pic3paneRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1145     pic3pLeftWidth = layoutrect.Rect().Width();
  1185         
  1146 
  1186         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g1(0).LayoutLine();
  1147     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
  1187         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
  1148     layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
  1188         pic3pLeftWidth = layoutrect.Rect().Width();
  1149     pic3pRightWidth = layoutrect.Rect().Width();
  1189     
  1150     
  1190         linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_3p_pane_g3(0).LayoutLine();
  1151     TRect rectXPane = keypaneRect.Rect();
  1191         layoutrect.LayoutRect( pic3paneRect.Rect(), linelayout );
  1152     rect = keycellRect.Rect();
  1192         pic3pRightWidth = layoutrect.Rect().Width();
  1153     rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1193         
  1154     TRect rectXBorder = rect;
  1194         TRect rectXPane = keypaneRect.Rect();
  1155     rect = keylabelRect.Rect();
  1195         rect = keycellRect.Rect();
  1156     rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1196         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1157     TRect rectXInner = rect;
  1197         TRect rectXBorder = rect;
  1158     rect = pic3paneRect.Rect();
  1198         rect = keylabelRect.Rect();
  1159     rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1199         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1160     TRect rect3PicPane = rect;
  1200         TRect rectXInner = rect;
  1161     rectXPane.Move( - rectXPane.iTl );
  1201         rect = pic3paneRect.Rect();
  1162     
  1202         rect.Move( - rectXPane.iTl.iX, - rectXPane.iTl.iY );
  1163     rect = keypadRect.Rect();
  1203         TRect rect3PicPane = rect;
  1164     rect.Move( - base.iX, - base.iY );
  1204         rectXPane.Move( - rectXPane.iTl );
  1165     TRect rectOfKeypad = rect;
  1205         
  1166     TRect rectOfButtons = rectOfKeypad;
  1206         rect = keypadRect.Rect();
  1167     rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
  1207         rect.Move( - base.iX, - base.iY );
  1168     rectOfButtons.iTl.iY += rectOfKeypad.Height();
  1208         TRect rectOfKeypad = rect;
  1169     
  1209         TRect rectOfButtons = rectOfKeypad;
  1170     TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
  1210         rectOfKeypad.iBr.iY -= keypaneRect.Rect().Height(); 
  1171     TInt dx = rectOfButtons.iTl.iX;
  1211         rectOfButtons.iTl.iY += rectOfKeypad.Height();
  1172     TInt dy = rectOfButtons.iTl.iY;
  1212         
  1173     
  1213         TInt spaceBtnWidth = rectOfButtons.Width() - rectXPane.Width() * 8;
  1174     aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1214         TInt dx = rectOfButtons.iTl.iX;
  1175     aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1215         TInt dy = rectOfButtons.iTl.iY;
  1176     dx += rectXPane.Width();
  1216         
  1177 
  1217         aDataInfo.iCloseButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1178     aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1218         aDataInfo.iCloseButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1179     aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1219         dx += rectXPane.Width();
  1180     dx += rectXPane.Width();
  1220     
  1181 
  1221         aDataInfo.iShiftButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1182     aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1222         aDataInfo.iShiftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1183     aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1223         dx += rectXPane.Width();
  1184     dx += rectXPane.Width();
  1224     
  1185 
  1225         aDataInfo.iMultiRangeButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1186     aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1226         aDataInfo.iMultiRangeButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1187     aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1227         dx += rectXPane.Width();
  1188     dx += rectXPane.Width();
  1228     
  1189 
  1229         aDataInfo.iLeftButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1190     TInt expand = spaceBtnWidth - rectXPane.Width();
  1230         aDataInfo.iLeftButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1191     aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1231         dx += rectXPane.Width();
  1192     aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
  1232     
  1193     aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1233         TInt expand = spaceBtnWidth - rectXPane.Width();
  1194     aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
  1234         aDataInfo.iSpaceButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1195     aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
  1235         aDataInfo.iSpaceButton.iRect.Resize( expand, 0 );
  1196     aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
  1236         aDataInfo.iSpaceButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1197     aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
  1237         aDataInfo.iSpaceButton.iInnerRect.Resize( expand, 0 );
  1198         aDataInfo.iSpaceButtonEx.iIconsFrameRect;
  1238         aDataInfo.iSpaceButtonEx.iIconsFrameRect = OffsetRect( rect3PicPane, dx, dy );
  1199     aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
  1239         aDataInfo.iSpaceButtonEx.iIconsFrameRect.Resize( expand, 0 );
  1200     aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
  1240         aDataInfo.iSpaceButtonEx.iMiddleIconRect = 
  1201     dx += spaceBtnWidth;
  1241             aDataInfo.iSpaceButtonEx.iIconsFrameRect;
  1202 
  1242         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iTl.iX += pic3pLeftWidth;
  1203     aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1243         aDataInfo.iSpaceButtonEx.iMiddleIconRect.iBr.iX -= pic3pRightWidth;    
  1204     aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1244         dx += spaceBtnWidth;
  1205     dx += rectXPane.Width();
  1245     
  1206 
  1246         aDataInfo.iRightButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1207     aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1247         aDataInfo.iRightButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1208     aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1248         dx += rectXPane.Width();
  1209     dx += rectXPane.Width();
  1249     
  1210 
  1250         aDataInfo.iOptionButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1211     aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1251         aDataInfo.iOptionButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1212     aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1252         dx += rectXPane.Width();
  1213     dx += rectXPane.Width();
  1253     
  1214 
  1254         aDataInfo.iEnterButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1215     aDataInfo.iClearButton.iRect = OffsetRect( rectXBorder, dx, dy );
  1255         aDataInfo.iEnterButton.iInnerRect = OffsetRect( rectXInner, dx, dy );
  1216     aDataInfo.iClearButton.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         }
  1217     
  1410     
  1218     // preview popup window
  1411     // preview popup window
  1219     TAknWindowLineLayout previewWnd, previewWndInner;
  1412     TAknWindowLineLayout previewWnd, previewWndInner;
  1220     TAknLayoutRect previewWndRect, previewWndInnerRect;
  1413     TAknLayoutRect previewWndRect, previewWndInnerRect;
  1221     previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(aLayoutParam).LayoutLine();
  1414     previewWnd = AknLayoutScalable_Avkon::popup_fep_char_preview_window(aLayoutParam).LayoutLine();
  1453 	CPeninputQwtLayoutDataInfo* dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1646 	CPeninputQwtLayoutDataInfo* dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1454 	TAknWindowLineLayout appWnd; 
  1647 	TAknWindowLineLayout appWnd; 
  1455     TAknWindowLineLayout wndLayout;
  1648     TAknWindowLineLayout wndLayout;
  1456     TAknWindowLineLayout linelayout;
  1649     TAknWindowLineLayout linelayout;
  1457     TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect;
  1650     TAknLayoutRect layoutrect, keypaneRect, keycellRect, keylabelRect;
  1458     TRect rectBottomWin, rectVkbCtrl;
  1651     TRect rectBottomWin, rectBottomWin11x4, rectVkbCtrl;
  1459     TPoint base;
  1652     TPoint base;
  1460     TAknWindowLineLayout keypad, cellpane;
  1653     TAknWindowLineLayout keypad, cellpane;
  1461     
  1654     
  1462     TAknWindowLineLayout cellPaneBK;
  1655     TAknWindowLineLayout cellPaneBK;
  1463     TAknLayoutRect cellPaneBKRect;
  1656     TAknLayoutRect cellPaneBKRect;
  1465     TAknLayoutRect keypadRect, cellpaneRect;
  1658     TAknLayoutRect keypadRect, cellpaneRect;
  1466     TAknLayoutRect wndRect;
  1659     TAknLayoutRect wndRect;
  1467     TAknLayoutText keyTextLayout; 
  1660     TAknLayoutText keyTextLayout; 
  1468 	TAknTextLineLayout keyText;
  1661 	TAknTextLineLayout keyText;
  1469 	TRect keyRect;
  1662 	TRect keyRect;
       
  1663 
       
  1664     TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
       
  1665 
  1470 	// -----------------------Landscape Mode--------------------------
  1666 	// -----------------------Landscape Mode--------------------------
  1471 	appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
  1667 	appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
  1472 	wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
  1668 	wndLayout = AknLayoutScalable_Avkon::main_fep_vtchi_ss_pane(0).LayoutLine();
  1473 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
  1669 	wndRect.LayoutRect(appWnd.Rect(), wndLayout);
  1474 	// Bottom pane rect
  1670 	// Bottom pane rect
  1475 	linelayout = AknLayoutScalable_Avkon::popup_fep_vkbss_window(0).LayoutLine();
  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 
  1476 	layoutrect.LayoutRect( wndRect.Rect(), linelayout );
  1683 	layoutrect.LayoutRect( wndRect.Rect(), linelayout );
  1477 	rectBottomWin = layoutrect.Rect();
  1684 	rectBottomWin = layoutrect.Rect();
  1478 	base = wndRect.Rect().iTl;
  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 		
  1479 	// ==================10x3====================
  1694 	// ==================10x3====================
  1480 	// top pane and bottom pane
  1695 	// top pane and bottom pane
  1481 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo );
  1696 	GetTopAndBottomPaneInfo( wndRect.Rect(), ELayout10x3, 0, *dataInfo );
  1482 	// keypad
  1697 	// keypad
  1483 	// Modify begin
  1698 	// Modify begin
  1487   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1702   	dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1488   	
  1703   	
  1489     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine();
  1704     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(0).LayoutLine();
  1490   	keypadRect.LayoutRect( rectBottomWin, keypad );
  1705   	keypadRect.LayoutRect( rectBottomWin, keypad );
  1491   	
  1706   	
  1492   	linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(0).LayoutLine();
  1707     TInt functionKeyRowsHeight = 0;
  1493   	keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
  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         }
  1494   	    
  1734   	    
  1495   	rectVkbCtrl = keypadRect.Rect();
  1735   	rectVkbCtrl = keypadRect.Rect();
  1496     rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
  1736     rectVkbCtrl.iBr.iY -= functionKeyRowsHeight;
  1497   	dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
  1737   	dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
  1498 
  1738 
  1499   	linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine();
  1739   	linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(0).LayoutLine();
  1500   	keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1740   	keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1501   	
  1741   	
  1546   	
  1786   	
  1547   	// Add candate list laf data for ITI features
  1787   	// Add candate list laf data for ITI features
  1548   	// Candidate list's parent Layout window is ITUT window
  1788   	// Candidate list's parent Layout window is ITUT window
  1549     TPeninputCandidateListLayoutData candidateListLAF;
  1789     TPeninputCandidateListLayoutData candidateListLAF;
  1550     TAknWindowLineLayout parentWnd;
  1790     TAknWindowLineLayout parentWnd;
  1551     TBool isLandscape = Layout_Meta_Data::IsLandscapeOrientation();
       
  1552    	// Add tooltip box laf data for ITI features.
  1791    	// Add tooltip box laf data for ITI features.
  1553    	TPeninputTooltipBoxLayoutData tooltipBoxLAF;    	                                
  1792    	TPeninputTooltipBoxLayoutData tooltipBoxLAF;    	                                
  1554     if ( isLandscape )
  1793     if ( isLandscape )
  1555         {
  1794         {
  1556       	parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 1 ).LayoutLine();
  1795       	parentWnd = AknLayoutScalable_Apps::popup_vitu2_window( 1 ).LayoutLine();
  1559         candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() );
  1798         candidateListLAF = ReadLafForCandidateList( parentRectLayout.Rect() );
  1560        	dataInfo->iCandidateList = candidateListLAF;
  1799        	dataInfo->iCandidateList = candidateListLAF;
  1561         tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
  1800         tooltipBoxLAF = ReadLafForTooltipBox( wndRect.Rect() );
  1562        	dataInfo->iTooltipBox = tooltipBoxLAF;
  1801        	dataInfo->iTooltipBox = tooltipBoxLAF;
  1563         }
  1802         }
  1564    	
  1803         
  1565    	
  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 
  1566    	iLayoutDataInfo.AppendL( dataInfo ); 
  1816    	iLayoutDataInfo.AppendL( dataInfo ); 
  1567   	
  1817   	
  1568 	// ==================11x3====================
  1818 	// ==================11x3====================
  1569 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1819 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1570 	// Modify begin
  1820 	// Modify begin
  1607     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1857     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1608     
  1858     
  1609     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
  1859     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
  1610     keypadRect.LayoutRect( rectBottomWin, keypad );
  1860     keypadRect.LayoutRect( rectBottomWin, keypad );
  1611     
  1861     
  1612     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(2).LayoutLine();
  1862     functionKeyRowsHeight = 0;
  1613     keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
  1863 	
  1614     
  1864     if ( !isPortraitFSQEnabled ||
  1615     rectVkbCtrl = keypadRect.Rect();
  1865         ( isPortraitFSQEnabled && Layout_Meta_Data::IsLandscapeOrientation() ) )
  1616     rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
  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;
  1617     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
  1892     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;
  1618 
  1893 
  1619     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine();
  1894     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(2).LayoutLine();
  1620     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1895     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1621     
  1896     
  1665        	dataInfo->iCandidateList = candidateListLAF;
  1940        	dataInfo->iCandidateList = candidateListLAF;
  1666        	// Add tooltip box laf data for ITI features.
  1941        	// Add tooltip box laf data for ITI features.
  1667        	dataInfo->iTooltipBox = tooltipBoxLAF;
  1942        	dataInfo->iTooltipBox = tooltipBoxLAF;
  1668         }
  1943         }
  1669    	
  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         }
  1670 
  1953 
  1671    	iLayoutDataInfo.AppendL( dataInfo ); 
  1954    	iLayoutDataInfo.AppendL( dataInfo ); 
  1672 	
  1955 	
  1673 	// ==================11x4====================
  1956 	// ==================11x4====================
  1674 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1957 	dataInfo = new( ELeave ) CPeninputQwtLayoutDataInfo;
  1709     keyText.iB += 3;
  1992     keyText.iB += 3;
  1710     dataInfo->iKeypad.iTextLayout = keyText;
  1993     dataInfo->iKeypad.iTextLayout = keyText;
  1711     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1994     dataInfo->iKeypad.iFont = AknLayoutUtils::FontFromId( keyText.iFont, NULL );
  1712     
  1995     
  1713     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
  1996     keypad = AknLayoutScalable_Avkon::grid_vkbss_keypad_pane(1).LayoutLine();
  1714     keypadRect.LayoutRect( rectBottomWin, keypad );
  1997     if( isLandscape )
  1715 
  1998         {
  1716     linelayout = AknLayoutScalable_Avkon::cell_vkbss_key_pane(3).LayoutLine();
  1999         keypadRect.LayoutRect( rectBottomWin, keypad );
  1717     keypaneRect.LayoutRect( keypadRect.Rect(), linelayout );
  2000         }
  1718     
  2001     else
  1719     rectVkbCtrl = keypadRect.Rect();
  2002         {
  1720     rectVkbCtrl.iBr.iY -= keypaneRect.Rect().Height();
  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;
  1721     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;    
  2036     dataInfo->iKeypad.iKaypadRect = rectVkbCtrl;    
  1722 
  2037 
  1723     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine();
  2038     linelayout = AknLayoutScalable_Avkon::bg_cell_vkbss_key_g1(3).LayoutLine();
  1724     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  2039     keycellRect.LayoutRect( keypaneRect.Rect(), linelayout );
  1725     
  2040     
  1769        	dataInfo->iCandidateList = candidateListLAF;
  2084        	dataInfo->iCandidateList = candidateListLAF;
  1770        	// Add tooltip box laf data for ITI features.
  2085        	// Add tooltip box laf data for ITI features.
  1771        	dataInfo->iTooltipBox = tooltipBoxLAF;
  2086        	dataInfo->iTooltipBox = tooltipBoxLAF;
  1772         }
  2087         }
  1773    	
  2088    	
  1774    	
  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   	
  1775    	iLayoutDataInfo.AppendL( dataInfo ); 
  2098    	iLayoutDataInfo.AppendL( dataInfo ); 
  1776    	   	
  2099    	   	
  1777 	}	
  2100 	}	
  1778 
  2101 
  1779 // ---------------------------------------------------------------------------
  2102 // ---------------------------------------------------------------------------
  1781 // ---------------------------------------------------------------------------
  2104 // ---------------------------------------------------------------------------
  1782 //		
  2105 //		
  1783 TPeninputCandidateListLayoutData CPeninputLafDataFSQ::
  2106 TPeninputCandidateListLayoutData CPeninputLafDataFSQ::
  1784                                  ReadLafForCandidateList( const TRect& aRect )
  2107                                  ReadLafForCandidateList( const TRect& aRect )
  1785     {    
  2108     {    
  1786 	// candidate list
       
  1787 	TAknWindowLineLayout candidateList 
       
  1788 	             = AknLayoutScalable_Apps::popup_vitu2_match_list_window( 3 )
       
  1789 	               .LayoutLine();	
       
  1790 	TAknLayoutRect candidateListRect;
       
  1791 	candidateListRect.LayoutRect( aRect, candidateList );	
       
  1792 	
       
  1793 	// list pane, its parent is candidate list
       
  1794 	TAknWindowLineLayout listpane
       
  1795 	             = AknLayoutScalable_Apps::list_vitu2_match_list_pane( 1 )
       
  1796 	               .LayoutLine();
       
  1797     TAknLayoutRect listpaneRect;
  2109     TAknLayoutRect listpaneRect;
  1798     listpaneRect.LayoutRect( candidateListRect.Rect(), listpane );
       
  1799     
       
  1800     // scroll pane, its parent is candidate list
       
  1801     TAknWindowLineLayout scrollpane
       
  1802                  = AknLayoutScalable_Apps::vitu2_page_scroll_pane( 1 )
       
  1803                    .LayoutLine();
       
  1804     TAknLayoutRect scrollRect;
  2110     TAknLayoutRect scrollRect;
  1805     scrollRect.LayoutRect( candidateListRect.Rect(), scrollpane );
  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         }
  1806     
  2166     
  1807     // Item pane, its parent is list pane
  2167     // Item pane, its parent is list pane
  1808     TAknWindowLineLayout itemPane 
  2168     TAknWindowLineLayout itemPane 
  1809           = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 0 )
  2169           = AknLayoutScalable_Apps::list_vitu2_match_list_item_pane( 0, 0, 0 )
  1810             .LayoutLine();
  2170             .LayoutLine();