emailuis/emailui/src/FreestyleEmailUiLayoutHandler.cpp
changeset 0 8466d47a6819
child 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleEmailUiLayoutHandler.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,2250 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  FreestyleEmailUi layout data handler implementation
+*
+*/
+
+
+// SYSTEM INCLUDE FILES
+#include "emailtrace.h"
+//#include <aknutils.h> <cmail>
+// <cmail> SF
+#include <alf/alftextstylemanager.h>
+#include <AknsUtils.h>
+#include <AknsSkinInstance.h>
+#include <alf/alfstatic.h>
+
+// <cmail> Platform layout change
+#include <aknlayoutscalable_apps.cdl.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <layoutmetadata.cdl.h>
+// </cmail>
+
+// For generic treelist layout data setting
+//<cmail>
+#include "fstreelist.h"
+//</cmail>
+
+// INTERNAL INCLUDE FILES
+#include "FreestyleEmailUiLayoutHandler.h"
+#include "FreestyleEmailUiLayoutData.h"
+
+// <cmail> Platform layout change
+template< typename T >
+TUint32 GeneralHash( const T& aValue )
+    {
+    return DefaultHash::Des8( TPckgC< T >( aValue ) );
+    }
+
+template< typename T >
+TBool GeneralPtrIdentity( const T& aP1, const T& aP2 )
+    {
+    return TPckgC< T >( aP1 ) == TPckgC< T >( aP2 );
+    }
+// </cmail> Platform layout change
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::CFSEmailUiLayoutHandler
+// Base construction. May not leave.
+// -----------------------------------------------------------------------------
+//
+CFSEmailUiLayoutHandler::CFSEmailUiLayoutHandler( CAlfEnv& aEnv )
+	: iEnv(aEnv),
+	iScreenResolution( EQvgaPortrait ),
+	iTextStyleMap( THashFunction32< TAknTextComponentLayout >( GeneralHash ),
+	    TIdentityRelation< TAknTextComponentLayout >( GeneralPtrIdentity< TAknTextComponentLayout > ) ),
+    // <cmail>
+    iNormalTextStyle( KErrNotFound ),
+    iLargeTextStyle( KErrNotFound ),
+    iSmallTextStyle( KErrNotFound )
+    // </cmail>
+ 	{
+    FUNC_LOG;
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::NewL
+// First phase construction function.
+// -----------------------------------------------------------------------------
+//	
+CFSEmailUiLayoutHandler* CFSEmailUiLayoutHandler::NewL( CAlfEnv& aEnv )
+	{
+    FUNC_LOG;
+	CFSEmailUiLayoutHandler* self = new ( ELeave ) CFSEmailUiLayoutHandler( aEnv );
+	CleanupStack::PushL( self );
+ 	self->ConstructL();
+	CleanupStack::Pop( self );	
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ConstructL
+// Symbian second phase construction. May leave.
+// -----------------------------------------------------------------------------
+//	
+void CFSEmailUiLayoutHandler::ConstructL()
+    {
+    FUNC_LOG;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::~CFSEmailUiLayoutHandler
+// D'tor
+// -----------------------------------------------------------------------------
+//
+CFSEmailUiLayoutHandler::~CFSEmailUiLayoutHandler()
+    {
+    FUNC_LOG;
+// <cmail> Platform layout change
+    DeleteTextStyles();
+// </cmail> Platform layout change
+    // <cmail>
+    if ( iNormalTextStyle != KErrNotFound )
+        {
+        CAlfStatic::Env().TextStyleManager().DeleteTextStyle( 
+                iNormalTextStyle );
+        }
+    if( iLargeTextStyle != KErrNotFound )
+        {
+        CAlfStatic::Env().TextStyleManager().DeleteTextStyle( 
+                iLargeTextStyle );
+        }
+    if( iSmallTextStyle != KErrNotFound )
+        {
+        CAlfStatic::Env().TextStyleManager().DeleteTextStyle( 
+                iSmallTextStyle );
+        }
+    // </cmail>
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ScreenResolution
+// Function can be used to fetch currently active screen resolution
+// -----------------------------------------------------------------------------
+//	
+TScreenResolution CFSEmailUiLayoutHandler::ScreenResolution() const
+	{
+    FUNC_LOG;
+	return iScreenResolution;
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ScreenOrientation
+// Function can be used to fetch orientation of the current screen resolution
+// -----------------------------------------------------------------------------
+//  
+TScreenOrientation CFSEmailUiLayoutHandler::ScreenOrientation() const
+    {
+    FUNC_LOG;
+    /*
+    TScreenOrientation orientation = EPortrait;
+    switch ( iScreenResolution )
+        {
+        case ELowResLandscape:
+        case EQvgaLandscape:
+        case EDrLandscape:
+        case EVgaLandscape:
+        case EHvgaLandscape:
+        case EWideLandscape:
+            orientation = ELandscape;
+            break;
+        case ELowResPortrait:
+        case EQvgaPortrait:
+        case EDrPortrait:
+        case EVgaPortrait:
+        case EHvgaPortrait:
+        default:
+            orientation = EPortrait;
+            break;
+        }
+        
+    return orientation;*/
+    return Layout_Meta_Data::IsLandscapeOrientation() ? ELandscape : EPortrait;
+    }
+
+// -----------------------------------------------------------------------------
+// CTeamUiAppLayoutHandler::ScreenResolutionChanged
+// Function can be used to update internal resolution value. Typically called
+// by UI in startup and when dynamic layout variant switch has occured 
+// -----------------------------------------------------------------------------
+//	
+void CFSEmailUiLayoutHandler::ScreenResolutionChanged()
+	{
+    FUNC_LOG;
+   	TRect screenRect;
+ 	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
+	switch ( screenRect.Width() )
+  		{
+		case KLowResPortraitWidth:
+			iScreenResolution = ELowResPortrait;
+			break;
+		case KLowResLandscapeWidth:
+			iScreenResolution =  ELowResLandscape;
+			break;
+		case KQvgaPortraitWidth:
+			iScreenResolution =  EQvgaPortrait;
+			break;
+		case KQvgaLandscapeWidth: // Also KHvgaPortraitWidth
+			{
+			if ( screenRect.Height() == KQvgaLandscapeHeight )
+				{
+				iScreenResolution =  EQvgaLandscape;					
+				}
+			else
+				{
+				iScreenResolution =  EHvgaPortrait;
+				}			
+			}
+			break;
+		case KDrPortraitWidth:
+			iScreenResolution =  EDrPortrait;
+			break;
+		case KDrLandscapeWidth:
+			iScreenResolution =  EDrLandscape;
+			break;
+		case KVgaPortraitWidth: // Also KHvgaLandscapeWidth
+			{
+			if ( screenRect.Height() == KHvgaLandscapeHeight )
+				{
+				iScreenResolution =  EHvgaLandscape;					
+				}
+			else
+				{
+				iScreenResolution =  EVgaPortrait;
+				}							
+			}
+			break;
+		case KVgaLandscapeWidth:
+			iScreenResolution =  EVgaLandscape;
+			break;
+		case KWideLandscapeWidth:
+			iScreenResolution =  EWideLandscape;
+			break;
+		default:
+			break;
+ 		}
+	}
+
+
+TInt CFSEmailUiLayoutHandler::GridRowsInThisResolution() const
+	{
+    FUNC_LOG;
+	TInt rowCount(0);
+	switch ( iScreenResolution )
+		{
+ 		case ELowResPortrait:
+		case EQvgaPortrait:
+ 		case EVgaPortrait:
+  		case EHvgaPortrait:
+ 		case EDrPortrait:
+
+ 		case ELowResLandscape:
+ 		case EQvgaLandscape:
+		case EVgaLandscape:	
+		case EHvgaLandscape:	
+ 		case EDrLandscape:
+  		    rowCount = 3;
+ 		    break;
+ 		    
+ 		case EWideLandscape:
+ 		    rowCount = 2;
+ 		    break;
+ 		    
+		default:
+		    rowCount = 3;
+		    break;
+		}
+	return rowCount;
+	}
+
+
+TInt CFSEmailUiLayoutHandler::GridColumnsInThisResolution() const
+	{
+    FUNC_LOG;
+	TInt columnCount(0);
+	switch ( iScreenResolution )
+		{
+ 		case ELowResPortrait:
+		case EQvgaPortrait:
+ 		case EVgaPortrait:
+  		case EHvgaPortrait:
+ 		case EDrPortrait:
+  		    columnCount = 3;
+ 		    break;
+
+ 		case ELowResLandscape:
+ 		case EQvgaLandscape:
+		case EVgaLandscape:	
+		case EHvgaLandscape:	
+ 		case EDrLandscape:
+  		    columnCount = 4;
+ 		    break;
+ 		    
+ 		case EWideLandscape:
+ 		    columnCount = 5;
+ 		    break;
+ 		    
+		default:
+		    columnCount = 3;
+		    break;
+		}
+	return columnCount;
+	}
+
+
+// Grid normal state text color, same as focused
+TRgb CFSEmailUiLayoutHandler::GridNormalStateTextSkinColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // Should use EAknsCIFsTextColorsCG3 if background is white
+     if ( AknsUtils::GetCachedColor( skin, textColor,
+            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+        {
+        textColor = KRgbBlack;
+        }
+ /*
+    // Should use EAknsCIFsTextColorsCG3 if background is white
+     if ( AknsUtils::GetCachedColor( skin, textColor,
+            KAknsIIDFsTextColors, EAknsCIFsTextColorsCG3 ) != KErrNone )
+        {
+        textColor = KRgbBlack;
+        }
+*/
+    return textColor;	
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GridIconSize
+// 
+// -----------------------------------------------------------------------------
+//
+TSize CFSEmailUiLayoutHandler::GridIconSize() const
+	{
+    FUNC_LOG;
+// <cmail> Use layout data instead of hard-coded values
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+
+    TAknLayoutRect scrollBarRect;
+    scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar());
+    TRect gridRect = mainPaneRect;
+    gridRect.iBr.iX -= scrollBarRect.Rect().Width();
+
+    TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    TAknLayoutRect itemRect;
+    itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var,0,0));
+
+    TAknLayoutRect gridIconLRect;
+    gridIconLRect.LayoutRect( itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1( 0 ) );
+    TSize iconSize = gridIconLRect.Rect().Size();
+    return iconSize;
+/*    
+	TInt iconSize(0);
+	switch ( iScreenResolution )
+		{
+		case EQvgaPortrait:
+			iconSize = KGridIconSizeInQvgaPort;
+	 		break;
+ 		case EQvgaLandscape:
+			iconSize = KGridIconSizeInQvgaLand;
+		 	break;
+ 		case EVgaPortrait:
+ 			iconSize = KGridIconSizeInVgaPort;
+ 			break;
+		case EVgaLandscape:
+			iconSize = KGridIconSizeInVgaLand;
+			break;
+  		case EHvgaPortrait:
+ 			iconSize = KGridIconSizeInHvgaPort;
+ 			break;
+		case EHvgaLandscape:
+			iconSize = KGridIconSizeInHvgaLand;
+			break;
+ 		case EWideLandscape:
+			iconSize = KGridIconSizeInWideLand;
+ 			break;
+ 		case EDrPortrait:
+			iconSize = KGridIconSizeInDoubleResPort;
+ 			break;
+ 		case EDrLandscape:
+		default:
+			iconSize = KGridIconSizeInDoubleResLand;
+			break;
+		}
+	return iconSize;*/
+// </cmail>    
+	}
+
+	
+TSize CFSEmailUiLayoutHandler::MailIconSizeInThisResolution() const
+	{
+    FUNC_LOG;
+// <cmail> Use layout data instead of hard-coded values
+	TAknLayoutRect rect;
+	rect.LayoutRect( TRect( 0, 0, 0, 0 ),
+	                AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ).LayoutLine() );
+	return rect.Rect().Size();
+	/*TSize mailListIconSize(0,0);
+	switch ( iScreenResolution )
+		{
+		case EQvgaPortrait:
+			mailListIconSize = KMailListIconSizeInQvgaPort;
+	 		break;
+ 		case EQvgaLandscape:
+			mailListIconSize = KMailListIconSizeInQvgaLand;
+		 	break;
+ 		case EVgaPortrait:
+ 			mailListIconSize = KMailListIconSizeInVgaPort;
+ 			break;
+		case EVgaLandscape:
+			mailListIconSize = KMailListIconSizeInVgaLand;
+			break;
+  		case EHvgaPortrait:
+ 			mailListIconSize = KMailListIconSizeInHvgaPort;
+ 			break;
+		case EHvgaLandscape:
+			mailListIconSize = KMailListIconSizeInHvgaLand;
+			break;
+ 		case EWideLandscape:
+			mailListIconSize = KMailListIconSizeInWideLand;
+ 			break;
+ 		case EDrPortrait:
+			mailListIconSize = KMailListIconSizeInDoubleResPort;
+ 			break;
+ 		case EDrLandscape:
+		default:
+			mailListIconSize = KMailListIconSizeInDoubleResLand;
+			break;
+		}
+	TAknUiZoom zoomLevel(EAknUiZoomNormal);
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+ 	switch ( zoomLevel )
+		{
+		// Make icon a little bit smaller in small zoom
+		case EAknUiZoomSmall:
+			{
+			mailListIconSize.iHeight-=2;
+			mailListIconSize.iWidth-=2;
+			}
+			break;
+		case EAknUiZoomLarge:
+		case EAknUiZoomNormal:
+		default:
+			{
+			}
+			break;
+		}
+	return mailListIconSize;*/
+// </cmail> Use layout data instead of hard-coded values
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::SetListMarqueeBehaviour
+// Function sets FS Email UI default values for marquee behavioutr for treelist object
+// -----------------------------------------------------------------------------
+//
+void CFSEmailUiLayoutHandler::SetListMarqueeBehaviour( CFsTreeList* aTreeList ) const
+	{
+    FUNC_LOG;
+	if ( aTreeList ) // Safety check
+		{
+		aTreeList->SetTextMarqueeType( KListTextMarqueeType );					
+		aTreeList->SetTextMarqueeSpeed ( KListTextMarqueeSpeed );
+		aTreeList->SetTextMarqueeStartDelay ( KListTextMarqueeStartDelay );
+		aTreeList->SetTextMarqueeRepetitions ( KListTextMarqueeSpeedRepeats );  
+		}	
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FolderListIconSizeInThisResolution
+// Folder list icon size, calculated based on the item size
+// -----------------------------------------------------------------------------
+//
+TSize CFSEmailUiLayoutHandler::FolderListIconSize( const TBool aPopup ) const
+    {
+    FUNC_LOG;
+    if ( aPopup )
+        {
+        TAknWindowComponentLayout g1Layout( TAknWindowComponentLayout::Compose(
+                AknLayoutScalable_Apps::list_single_dyc_row_pane( 0 ),
+                AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ) ) );
+        TAknLayoutRect paneG1;
+        paneG1.LayoutRect( DropDownMenuListRect( ELeft ), g1Layout.LayoutLine() );
+        return paneG1.Rect().Size();        
+        }
+    else
+        {
+        TRect mainPaneRect;
+        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+        
+        TAknLayoutRect scrollBarRect;
+        scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::scroll_pane());
+        TRect gridRect = mainPaneRect;
+        gridRect.iBr.iX -= scrollBarRect.Rect().Width();
+
+        TAknLayoutRect itemRect;
+        itemRect.LayoutRect( gridRect, AknLayoutScalable_Avkon::list_single_large_graphic_pane_g1( 0 ).LayoutLine() );
+
+        return itemRect.Rect().Size();
+        }
+    }      
+
+// <cmail>
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FolderListPaneRectInThisResolution
+// Folder list pane rect, taken from Avkon layouts
+// -----------------------------------------------------------------------------
+//
+TRect CFSEmailUiLayoutHandler::FolderListPaneRectInThisResolution( const TRect& aParent) const
+    {
+    FUNC_LOG;
+    TAknLayoutRect itemRect;
+    itemRect.LayoutRect(aParent, AknLayoutScalable_Avkon::listscroll_gen_pane(0,0,0));
+    return itemRect.Rect();
+    }
+// </cmail>
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FolderListIndentation
+// Folder list pane indentation in pixels, taken from Avkon layouts
+// -----------------------------------------------------------------------------
+//
+TInt CFSEmailUiLayoutHandler::FolderListIndentation( const TRect& aParent ) const
+    {
+    FUNC_LOG;
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( aParent,
+        AknLayoutScalable_Avkon::aid_indentation_list_msg().LayoutLine() );
+    return layoutRect.Rect().Width();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FolderListItemSizeInThisResolution
+// Folder list item size, taken from Avkon layouts
+// -----------------------------------------------------------------------------
+//
+TSize CFSEmailUiLayoutHandler::FolderListItemSizeInThisResolution( const TRect& aParent ) const
+	{
+    FUNC_LOG;
+    TAknLayoutRect itemRect;
+     itemRect.LayoutRect( aParent, // Only zero variety with this one
+     	AknLayoutScalable_Avkon::list_single_large_graphic_pane( 0, 0 ,0 ) );
+
+    return itemRect.Rect().Size();
+	}
+
+// <cmail>
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::DropDownMenuListRect
+// Selector ring image visual size
+// -----------------------------------------------------------------------------
+//
+TRect CFSEmailUiLayoutHandler::DropDownMenuListRect(
+        const TDropDownMenuSide aSide ) const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
+            mainPaneRect );
+    mainPaneRect.Move( 0, -mainPaneRect.iTl.iY );
+    TInt variety( aSide == ELeft ? 0 : 1 );
+    if ( Layout_Meta_Data::IsLandscapeOrientation() )
+        {
+        // landscape orientation variety is portrait + 2
+        variety += 2;
+        }
+    
+    TAknWindowComponentLayout ddMenuPane( 
+            TAknWindowComponentLayout::Compose(
+                AknLayoutScalable_Apps::main_sp_fs_email_pane(),
+                AknLayoutScalable_Apps::popup_sp_fs_action_menu_pane_cp01( variety ) 
+                ) );
+    
+    TAknLayoutRect menuPane;
+    menuPane.LayoutRect( mainPaneRect, ddMenuPane.LayoutLine() );
+    return menuPane.Rect();
+    
+    }
+// </cmail>
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::SelectorVisualSizeInThisResolution
+// Selector ring image visual size
+// -----------------------------------------------------------------------------
+//
+TSize CFSEmailUiLayoutHandler::SelectorVisualSizeInThisResolution() const
+	{
+    FUNC_LOG;
+	TSize selectorVisualSize(0,0);
+	switch ( iScreenResolution )
+		{
+		case EQvgaPortrait:
+			selectorVisualSize = KSelectorVisualSizeInQvgaPort;
+	 		break;
+ 		case EQvgaLandscape:
+			selectorVisualSize = KSelectorVisualSizeInQvgaLand;
+		 	break;
+ 		case EVgaPortrait:
+ 			selectorVisualSize = KSelectorVisualSizeInVgaPort;
+ 			break;
+		case EVgaLandscape:	
+			selectorVisualSize = KSelectorVisualSizeInVgaLand;
+			break; 
+  		case EHvgaPortrait:
+ 			selectorVisualSize = KSelectorVisualSizeInHvgaPort;
+ 			break;
+		case EHvgaLandscape:	
+			selectorVisualSize = KSelectorVisualSizeInHvgaLand;
+			break; 
+ 		case EWideLandscape:
+			selectorVisualSize = KSelectorVisualSizeInWideLand;
+ 			break;
+ 		case EDrPortrait:
+			selectorVisualSize = KSelectorVisualSizeInDoubleResPort;
+ 			break;
+ 		case EDrLandscape:
+		default:
+			selectorVisualSize = KSelectorVisualSizeInDoubleResLand;
+			break;
+		}
+	return selectorVisualSize;	
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::OneLineListNodeHeight
+// List node item height 
+// -----------------------------------------------------------------------------
+//	
+TInt CFSEmailUiLayoutHandler::OneLineListNodeHeight() const
+	{
+    FUNC_LOG;
+	//<cmail>
+    TRect mainPaneRect;
+    TAknLayoutRect listItem;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_pane( 0 ) );
+    return listItem.Rect().Height();
+    //</cmail>
+	}
+	
+	
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::OneLineListItemHeight
+// List item height
+// -----------------------------------------------------------------------------
+//
+TInt CFSEmailUiLayoutHandler::OneLineListItemHeight() const
+	{
+    FUNC_LOG;
+	//<cmail>
+    TRect mainPaneRect;
+    TAknLayoutRect listItem;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_pane( 0 ) );
+    return listItem.Rect().Height();
+    //</cmail>
+	}
+
+//<cmail>
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FolderListOneLineItemHeight
+// List item height for folder list
+// -----------------------------------------------------------------------------
+//
+TInt CFSEmailUiLayoutHandler::FolderListOneLineItemHeight( 
+        const TBool& aFullscreen ) const
+    {
+    FUNC_LOG;
+    if ( aFullscreen )
+        {        
+        return OneLineListItemHeight();
+        }
+/*    else
+        {
+        const TRect ddMenuRect( DropDownMenuListRect( ELeft ) );
+        TAknLayoutRect ddMenuPane;
+        bg_sp_fs_ctrlbar_ddmenu_pane
+        return 0;
+        }*/
+    return 0;
+    }
+//</cmail>
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ControlBarHeight
+// Control bar height
+// -----------------------------------------------------------------------------
+//
+TInt CFSEmailUiLayoutHandler::ControlBarHeight() const
+	{
+    FUNC_LOG;
+	//<cmail>
+	TRect mainPaneRect;
+    TAknLayoutRect ctrlBarRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    ctrlBarRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane( 0 ) );
+    return ctrlBarRect.Rect().Height();
+	//</cmail>
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ControlBarHeight
+// Control bar text height in twips
+// -----------------------------------------------------------------------------
+//
+/*
+TInt CFSEmailUiLayoutHandler::ControlBarTextHeight() const
+	{
+    TRect mainPaneRect;
+    TAknLayoutText ctrlBarText;
+    TInt orientation( Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0 );
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    ctrlBarText.LayoutText( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( orientation ) );
+    return ctrlBarText.Font()->FontSpecInTwips().iHeight;
+	}
+*/
+//</cmail>  Platform layout change
+
+// <cmail> changes to avoid unnecessary creating new text styles objects.
+CAlfTextStyle* CFSEmailUiLayoutHandler::FSTextStyleFromIdL( TFSEmailFont aFontId )
+    {
+    FUNC_LOG;
+    CAlfTextStyle* style = NULL;
+    
+    switch ( aFontId )
+        {
+        case EFSFontTypeNormal:
+        case EFSFontTypeNormalBold:
+        case EFSFontTypeNormalItalic:
+            if ( iNormalTextStyle == KErrNotFound ) 
+                {
+                iNormalTextStyle = CAlfStatic::Env().TextStyleManager().
+                    CreatePlatformTextStyleL( 
+                            EAknLogicalFontPrimaryFont, 
+                            EAlfTextStyleNormal );
+                }
+            style = CAlfStatic::Env().TextStyleManager().TextStyle( 
+                        iNormalTextStyle );
+            break;
+        case EFSFontTypeLarge:
+        case EFSFontTypeLargeBold:
+        case EFSFontTypeLargeItalic:
+            if ( iLargeTextStyle == KErrNotFound ) 
+                {
+                iLargeTextStyle = CAlfStatic::Env().TextStyleManager().
+                    CreatePlatformTextStyleL( 
+                            EAknLogicalFontTitleFont, 
+                            EAlfTextStyleNormal );
+                }
+            style = CAlfStatic::Env().TextStyleManager().TextStyle( 
+                        iLargeTextStyle );
+            break;
+        case EFSFontTypeSmallItalic:
+        case EFSFontTypeSmallBold:
+        case EFSFontTypeSmall:
+        default:
+            if ( iSmallTextStyle == KErrNotFound ) 
+                {
+                iSmallTextStyle = CAlfStatic::Env().TextStyleManager().
+                    CreatePlatformTextStyleL( 
+                            EAknLogicalFontSecondaryFont, 
+                            EAlfTextStyleNormal );
+                }
+            style = CAlfStatic::Env().TextStyleManager().TextStyle( 
+                    iSmallTextStyle );
+            break;
+        }
+        
+    switch ( aFontId )
+        {
+        case EFSFontTypeSmallBold:
+            style->SetBold( EStrokeWeightBold );
+            break;
+        case EFSFontTypeSmallItalic:
+            style->SetBold( EStrokeWeightNormal );
+            style->SetItalic( EPostureItalic );    
+            break;
+        case EFSFontTypeNormal:
+            style->SetBold( EStrokeWeightNormal );
+            break;
+        case EFSFontTypeNormalBold:
+            style->SetBold( EStrokeWeightBold );
+            break;
+        case EFSFontTypeNormalItalic:
+            style->SetBold( EStrokeWeightNormal );
+            style->SetItalic( EPostureItalic );
+            break;
+        case EFSFontTypeLarge:
+            style->SetBold( EStrokeWeightNormal );
+            break;
+        case EFSFontTypeLargeBold:
+            style->SetBold( EStrokeWeightBold );
+            break;
+        case EFSFontTypeLargeItalic:
+            style->SetBold( EStrokeWeightNormal );
+            style->SetItalic( EPostureItalic ); 
+            break;
+        case EFSFontTypeSmall:
+        default:
+            {
+            style->SetBold( EStrokeWeightNormal );
+            }
+            break;
+        }
+    
+    return style;
+    }
+// </cmail>
+
+TPoint CFSEmailUiLayoutHandler::ControlBarListPadding() const
+	{
+    FUNC_LOG;
+	return KControlBarListPadding;
+	}
+
+TInt CFSEmailUiLayoutHandler::ControlBarListBorderRoundingSize() const
+	{
+    FUNC_LOG;
+	return KControlBarListBorderRoundingSize;
+	}
+
+TInt CFSEmailUiLayoutHandler::ControlBarButtonBgRoundingSize() const
+	{
+    FUNC_LOG;
+	return KControlBarbuttonBorderRoundingSize;	
+	}
+
+TInt CFSEmailUiLayoutHandler::ListFadeInEffectTime() const
+	{
+    FUNC_LOG;
+	return KListFadeInEffectTime;
+	}
+
+TInt CFSEmailUiLayoutHandler::ListFadeOutEffectTime() const
+    {
+    FUNC_LOG;
+    return KListFadeOutEffectTime;
+    }
+
+TInt CFSEmailUiLayoutHandler::StatusIndicatorFadeEffectTime() const
+	{
+    FUNC_LOG;
+	return KStatusIndicatorFadeEffectTime;
+	}
+
+TInt CFSEmailUiLayoutHandler::CtrlBarListFadeEffectTime() const
+	{
+    FUNC_LOG;
+	return KCtrlBarListFadeEffectTime;
+	}
+
+TBool CFSEmailUiLayoutHandler::ViewSlideEffectActive() const
+	{
+    FUNC_LOG;
+	return KListSlideEffectActive;
+	}
+
+TBool CFSEmailUiLayoutHandler::ViewFadeEffectActive() const
+	{
+    FUNC_LOG;
+	return KListFadeEffectActive;
+	}
+
+TInt CFSEmailUiLayoutHandler::ViewSlideEffectTime() const
+	{
+    FUNC_LOG;
+	return KListSlideEffectTime;
+	}
+
+TInt CFSEmailUiLayoutHandler::ViewFadeInEffectTime() const
+    {
+    FUNC_LOG;
+    return KListFadeInEffectTime;
+    }
+
+TInt CFSEmailUiLayoutHandler::ViewFadeOutEffectTime() const
+    {
+    FUNC_LOG;
+    return KListFadeOutEffectTime;
+    }
+
+TInt CFSEmailUiLayoutHandler::ListScrollingTime() const
+	{
+    FUNC_LOG;
+	return KListScrollingTime;
+	}
+
+TInt CFSEmailUiLayoutHandler::ListItemExpansionDelay() const
+	{
+    FUNC_LOG;
+	return KListItemExpansionDelay;
+	}
+
+TInt CFSEmailUiLayoutHandler::ViewHidingDelay() const
+	{
+    FUNC_LOG;
+	return KViewChangeDelay;
+	}
+	
+TRgb CFSEmailUiLayoutHandler::ListFocusedStateTextSkinColor() const
+    {
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // <cmail> Skin support
+    if( AknsUtils::GetCachedColor( skin, textColor,
+    		KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG10 ) != KErrNone )
+    	{
+        textColor = KRgbBlack;
+    	}
+    // </cmail>
+    return textColor;
+    }
+
+TRgb CFSEmailUiLayoutHandler::ListNormalStateTextSkinColor() const
+    {
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+	// <cmail> S60 Skin support
+    if ( AknsUtils::GetCachedColor( skin, textColor,
+    	KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+    	{
+        textColor = KRgbBlack;
+    	}
+	// </cmail>        
+    return textColor;
+    }
+	
+TRgb CFSEmailUiLayoutHandler::ListNodeBackgroundColor() const
+	{
+    FUNC_LOG;
+//<cmail> skin support
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb nodeBgColor;
+    if ( AknsUtils::GetCachedColor( skin, nodeBgColor,
+            KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG19 ) != KErrNone )
+        {
+        nodeBgColor = KRgbDarkGray;
+        }
+//</cmail>
+    return nodeBgColor;
+	}
+
+TRgb CFSEmailUiLayoutHandler::ListNodeTextColor() const
+	{
+    FUNC_LOG;
+   MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    // <cmail> S60 Skin support
+   TRgb nodeTextColor;
+    if ( AknsUtils::GetCachedColor( skin, nodeTextColor,
+            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+    	{
+        nodeTextColor = KRgbWhite;
+        }
+    // </cmail>
+    return nodeTextColor;	
+	}
+
+TRgb CFSEmailUiLayoutHandler::ListHeaderBackgroundColor() const
+    {
+    FUNC_LOG;
+    // The header item bg color is gained by mixing 50/50 node bg color
+    // and list item bg color.
+    // <cmail>
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb listItemBgColor;
+    if ( AknsUtils::GetCachedColor( skin, listItemBgColor,
+        KAknsIIDQsnLineColors, EAknsCIFsTextColorsCG3 ) != KErrNone )
+        //KAknsIIDQsnLineColors, EAknsCIFsTextColorsCG5 ) != KErrNone )            
+        {
+        listItemBgColor = KRgbWhite;
+        }
+    // </cmail>
+    TRgb nodeItemBgColor = ListNodeBackgroundColor(); 
+    TRgb headerBgColor;
+    headerBgColor.SetRed( (listItemBgColor.Red()+nodeItemBgColor.Red()) / 2 );
+    headerBgColor.SetGreen( (listItemBgColor.Green()+nodeItemBgColor.Green()) / 2 );
+    headerBgColor.SetBlue( (listItemBgColor.Blue()+nodeItemBgColor.Blue()) / 2 );
+    return headerBgColor;
+    }
+
+TInt CFSEmailUiLayoutHandler::ListTextStyle() const
+	{
+    FUNC_LOG;
+	TInt listTextStyle( EAlfTextStyleSmall );
+	TAknUiZoom zoomLevel(EAknUiZoomNormal);
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+ 	switch ( zoomLevel ) 
+		{
+		case EAknUiZoomSmall:
+			{
+		    listTextStyle = EAlfTextStyleSmall;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+		    listTextStyle = EAlfTextStyleLarge;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+		    listTextStyle = EAlfTextStyleNormal;
+			}
+			break;
+		}
+	return listTextStyle;
+	}
+
+TRgb CFSEmailUiLayoutHandler::DropdownMenuTextColor() const
+    {
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+
+    // <cmail> S60 Skin support
+    if ( AknsUtils::GetCachedColor( skin, textColor,
+            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+        {
+         textColor = KRgbBlack;
+        }
+	// </cmail>        
+
+    return textColor;
+    }
+
+
+TInt CFSEmailUiLayoutHandler::ViewerFontHeightInTwips() const
+	{
+    FUNC_LOG;
+	TAknUiZoom zoomLevel(EAknUiZoomNormal);
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+	TInt heightInTwips(0);
+  	switch ( zoomLevel ) 
+		{
+		case EAknUiZoomSmall:
+			{
+		    heightInTwips = 130;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+		    heightInTwips = 190;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+		    heightInTwips = 160;
+			}
+			break;
+		}
+	return heightInTwips;
+	}
+
+TInt CFSEmailUiLayoutHandler::ListItemFontHeightInTwips( const TBool aPopup ) const
+	{
+    FUNC_LOG;
+    if ( aPopup )
+        {
+        TRect mainPaneRect;
+        TAknLayoutText itemText;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+        itemText.LayoutText( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_ddmenu_pane_t1( 0 ) );
+        return itemText.Font()->FontSpecInTwips().iHeight;        
+        }
+    else
+        {
+        TRect mainPaneRect;
+        TAknLayoutText itemText;
+        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+        itemText.LayoutText( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_text_pane_t1( 0 ) );
+        return itemText.Font()->FontSpecInTwips().iHeight;
+        }
+	}
+
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTitleFontAknLogicalFontId
+// -----------------------------------------------------------------------------
+TAknLogicalFontId CFSEmailUiLayoutHandler::ViewerTitleFontAknLogicalFontId() const
+	{
+    FUNC_LOG;
+	return KViewerLogicalTitleFontId;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTextFontAknLogicalFontId
+// -----------------------------------------------------------------------------
+TAknLogicalFontId CFSEmailUiLayoutHandler::ViewerTextFontAknLogicalFontId() const
+	{
+    FUNC_LOG;
+	return KViewerLogicalTextFontId;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTitleFontHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerTitleFontHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+    TInt heightInPixels = 0;
+    switch ( zoomLevel )
+        {
+        case EAknUiZoomSmall:
+            {
+            heightInPixels = KViewerTitleFontSizeSmall;
+            }
+            break;
+        case EAknUiZoomLarge:
+            {
+            heightInPixels = KViewerTitleFontSizeLarge;
+            }
+            break;
+        case EAknUiZoomNormal:
+        default:
+            {
+            heightInPixels = KViewerTitleFontSizeNormal;
+            }
+            break;
+        }
+    return heightInPixels;
+    */
+    TAknLayoutRect labelRect;
+    labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() );
+    TAknLayoutText layoutText;
+    layoutText.LayoutText( labelRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() );
+    return layoutText.Font()->FontMaxHeight();
+    // </cmail> Platform layout changes
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTextFontHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerTextFontHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+    TInt heightInPixels = 0;
+    switch ( zoomLevel )
+        {
+        case EAknUiZoomSmall:
+            {
+            heightInPixels = KViewerTextFontSizeSmall;
+            }
+            break;
+        case EAknUiZoomLarge:
+            {
+            heightInPixels = KViewerTextFontSizeLarge;
+            }
+            break;
+        case EAknUiZoomNormal:
+        default:
+            {
+            heightInPixels = KViewerTextFontSizeNormal;
+            }
+            break;
+        }
+    return heightInPixels;
+    */
+    TAknLayoutRect labelRect;
+    labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+    TAknLayoutText layoutText;
+    layoutText.LayoutText( labelRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_t1( 0 ) );
+    return layoutText.Font()->FontMaxHeight();
+    // </cmail> Platform layout changes
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTopMostSpaceHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerTopMostSpaceHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+	TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+	TInt heightInPixels = 0;
+  	switch ( zoomLevel )
+		{
+		case EAknUiZoomSmall:
+			{
+			heightInPixels = KViewerTopMostSpaceSmall;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+			heightInPixels = KViewerTopMostSpaceLarge;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+			heightInPixels = KViewerTopMostSpaceNormal;
+			}
+			break;
+		}
+	return heightInPixels;
+	*/
+    TAknLayoutRect labelRect;
+    labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane( 0 ) );
+    return labelRect.Rect().Height();
+    // </cmail> Platform layout changes
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerRecipientSpaceHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerRecipientSpaceHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+	TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+	TInt heightInPixels = 0;
+  	switch ( zoomLevel )
+		{
+		case EAknUiZoomSmall:
+			{
+			heightInPixels = KViewerRecipientSpaceSmall;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+			heightInPixels = KViewerRecipientSpaceLarge;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+			heightInPixels = KViewerRecipientSpaceNormal;
+			}
+			break;
+		}
+	return heightInPixels;
+	*/
+    TAknLayoutRect labelRect;
+    labelRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+    return labelRect.Rect().Height();
+    // </cmail> Platform layout changes
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerHeaderInfoSpaceHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerHeaderInfoSpaceHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+	TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+	TInt heightInPixels = 0;
+  	switch ( zoomLevel )
+		{
+		case EAknUiZoomSmall:
+			{
+			heightInPixels = KViewerHeaderInfoSpaceSmall;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+			heightInPixels = KViewerHeaderInfoSpaceLarge;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+			heightInPixels = KViewerHeaderInfoSpaceNormal;
+			}
+			break;
+		}
+	return heightInPixels;
+	*/
+	return ViewerTopMostSpaceHeight();
+    // </cmail> Platform layout changes
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerBottomMostSpaceHeight
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerBottomMostSpaceHeight() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+	/*
+	TAknUiZoom zoomLevel;
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( zoomLevel );
+	TInt heightInPixels = 0;
+  	switch ( zoomLevel )
+		{
+		case EAknUiZoomSmall:
+			{
+			heightInPixels = KViewerBottomMostSpaceSmall;
+			}
+			break;
+		case EAknUiZoomLarge:
+			{
+			heightInPixels = KViewerBottomMostSpaceLarge;
+			}
+			break;
+		case EAknUiZoomNormal:
+		default:
+			{
+			heightInPixels = KViewerBottomMostSpaceNormal;
+			}
+			break;
+		}
+	return heightInPixels;
+	*/
+	return ViewerRecipientSpaceHeight();
+    // </cmail> Platform layout changes
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerMaxRecipientLineCount
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerMaxRecipientLineCount() const
+    {
+    FUNC_LOG;
+    return KViewerMaxRecipientLineCount;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerMaxSubjectLineCount
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerMaxSubjectLineCount() const
+    {
+    FUNC_LOG;
+    return KViewerMaxSubjectLineCount;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTitleTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerTitleTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // <cmail> S60 Skin support
+    if (AknsUtils::GetCachedColor( skin, textColor,
+		KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+        {
+        textColor = KBlackFallbackTextColor;
+        }
+    // </cmail>
+
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerTextTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerTextTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // <cmail> S60 Skin support
+    if (AknsUtils::GetCachedColor( skin, textColor,
+		KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ) != KErrNone )
+    	{
+        textColor = KBlackFallbackTextColor;
+        }
+	// </cmail>
+
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerBodyTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerBodyTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    if ( AknsUtils::GetCachedColor( skin, textColor,
+            //KAknsIIDFsTextColors, EAknsCIFsTextColorsCG3 ) != KErrNone )
+            KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG13 ) != KErrNone ) // <cmail>
+        {
+        textColor = KBlackFallbackTextColor;
+        }
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerNormalHotspotTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerNormalHotspotTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // <cmail> S60 Skin support
+	if ( AknsUtils::GetCachedColor( skin, textColor,
+            KAknsIIDQsnHighlightColors,
+		EAknsCIQsnHighlightColorsCG3 ) != KErrNone )
+		{
+        textColor = KLightBlueFallbackTextColor;
+        }
+	// </cmail>
+
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerHighlightedHotspotTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerHighlightedHotspotTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    // <cmail> S60 Skin support
+	if ( AknsUtils::GetCachedColor( skin, textColor,
+			KAknsIIDQsnHighlightColors,
+			EAknsCIQsnHighlightColorsCG3 ) != KErrNone )
+		{
+        textColor = KLightBlueFallbackTextColor;
+        }
+	// </cmail>
+
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerSentTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ViewerSentTextColor() const
+	{
+    FUNC_LOG;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    TRgb textColor;
+    if ( AknsUtils::GetCachedColor( skin, textColor,
+            KAknsIIDFsTextColors, EAknsCIFsTextColorsCG8 ) != KErrNone )
+        {
+        textColor = KBlackFallbackTextColor;
+        }
+    return textColor;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerPixelsBetweenMsgStatusIconAndSubject
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerPixelsBetweenMsgStatusIconAndSubject() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    return KViewerSpaceBetweenIconAndSubject;
+    */
+    const TRect cmailPaneRect( ListCmailPaneRect() );
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+    TAknLayoutRect iconRect;
+    iconRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g1( 0 ) );
+    if (AknLayoutUtils::LayoutMirrored())
+        {
+        return cmailPaneRect.iBr.iX - iconRect.Rect().iBr.iX;
+        }
+    else
+        {
+        return Abs( cmailPaneRect.iTl.iX - iconRect.Rect().iTl.iX );
+        }
+        
+    // </cmail> Platform layout changes
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::ViewerIconSize() const
+	{
+	FUNC_LOG;
+	// <cmail> Platform layout changes
+	/*
+	return KViewerIconSize;
+	*/
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+    layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g1( 2 ) );
+    return layoutRect.Rect().Size();
+	// </cmail> Platform layout changes
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerIndentationIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::ViewerIndentationIconSize() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    return KViewerTransparentIndentationIconSize;
+    */
+	return ViewerIconSize();
+    // </cmail> Platform layout changes
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerActionMenuIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::ViewerActionMenuIconSize() const
+    {
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    return KViewerActionMenuIconSize;
+    */
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+    layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) );
+    return layoutRect.Rect().Size();
+    // </cmail> Platform layout changes
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerActionMenuIconMargin
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerActionMenuIconMargin() const
+    {
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    return KViewerActionMenuIconMargin;
+    */
+	if (AknLayoutUtils::LayoutMirrored())
+	    {
+	    TAknLayoutRect layoutRect;
+        layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+        TInt x( layoutRect.Rect().iTl.iX );
+        layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) );
+        return Abs( layoutRect.Rect().iTl.iX - x );
+	    }
+	else
+	    {
+        TAknLayoutRect layoutRect;
+        layoutRect.LayoutRect( ListCmailPaneRect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane( 0 ) );
+        TInt x( layoutRect.Rect().iBr.iX );
+        layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_detail_pane_g2( 0 ) );
+        return Abs( x - layoutRect.Rect().iBr.iX );
+	    }
+    // </cmail> Platform layout changes
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerSelectorOpacity
+// -----------------------------------------------------------------------------
+TReal CFSEmailUiLayoutHandler::ViewerSelectorOpacity() const
+    {
+    FUNC_LOG;
+    return KViewerSelectorOpacity;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerRightMarginInPixels
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerRightMarginInPixels() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        return KViewerLeftMarginWidthInPixels;
+        }
+    else
+        {
+        return KViewerRightMarginWidthInPixels;
+        }
+    */
+    const TRect cmailPaneRect( ListCmailPaneRect() );
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() );
+    TAknLayoutText captionTextRect;
+    captionTextRect.LayoutText( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() );
+    return Abs( cmailPaneRect.iBr.iX - captionTextRect.TextRect().iBr.iX );
+    // </cmail> Platform layout changes
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerLeftMarginInPixels
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerLeftMarginInPixels() const
+	{
+	FUNC_LOG;
+    // <cmail> Platform layout changes
+    /*
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        return KViewerRightMarginWidthInPixels;
+        }
+    else
+        {
+        return KViewerLeftMarginWidthInPixels;
+        }
+    */
+    const TRect cmailPaneRect( ListCmailPaneRect() );
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( cmailPaneRect, AknLayoutScalable_Apps::list_single_cmail_header_caption_pane() );
+    TAknLayoutText captionTextRect;
+    captionTextRect.LayoutText( layoutRect.Rect(), AknLayoutScalable_Apps::list_single_cmail_header_caption_pane_t1() );
+    return Abs( cmailPaneRect.iTl.iX - captionTextRect.TextRect().iTl.iX );
+    // </cmail> Platform layout changes
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerWaterMarkSizeInThisResolution
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::ViewerWaterMarkSizeInThisResolution() const
+	{
+    FUNC_LOG;
+	TSize sizeWithCurrentResolution;
+	// For now, set same size with all resolutions
+	switch ( iScreenResolution )
+		{
+ 		case ELowResPortrait:
+		case EQvgaPortrait:
+ 		case EVgaPortrait:
+  		case EHvgaPortrait:
+ 		case EDrPortrait:
+ 		case ELowResLandscape:
+ 		case EQvgaLandscape:
+		case EVgaLandscape:	
+		case EHvgaLandscape:	
+ 		case EDrLandscape:
+ 		case EWideLandscape:
+		default:
+		    sizeWithCurrentResolution = KViewerDefaultWaterMarkSizeInViewer;
+		    break;
+		}
+	return sizeWithCurrentResolution;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerWaterMarkPositionFromBottomRightCornerInThisResolution
+// -----------------------------------------------------------------------------
+TPoint CFSEmailUiLayoutHandler::ViewerWaterMarkPlaceFromBottomRightCornerInThisResolution() const
+	{
+    FUNC_LOG;
+	TPoint placeFromBottomRightCorner;
+	// For now, set place with all resolutions
+	switch ( iScreenResolution )
+		{
+ 		case ELowResPortrait:
+		case EQvgaPortrait:
+ 		case EVgaPortrait:
+  		case EHvgaPortrait:
+ 		case EDrPortrait:
+ 		case ELowResLandscape:
+ 		case EQvgaLandscape:
+		case EVgaLandscape:	
+		case EHvgaLandscape:	
+ 		case EDrLandscape:
+ 		case EWideLandscape:
+		default:
+		    placeFromBottomRightCorner = KViewerWaterMarkPositionFromBottomRightCorner;
+		    break;
+		}
+	return placeFromBottomRightCorner;
+	}
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ComposerFieldBorderColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ComposerFieldBorderColor() const
+    {
+    FUNC_LOG;
+    return GetSkinColor( KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG14, KRgbBlack );
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ComposerFieldBackgroundColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ComposerFieldBackgroundColor() const
+    {
+    FUNC_LOG;
+    return GetSkinColor( KAknsIIDFsOtherColors, EAknsCIFsOtherColorsCG12, KRgbWhite );
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ComposerHeaderFieldTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ComposerHeaderFieldTextColor() const
+        {
+    FUNC_LOG;
+    return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG4, KRgbBlack );
+        }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ComposerBodyFieldTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ComposerBodyFieldTextColor() const
+    {
+    FUNC_LOG;
+    return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG3, KRgbBlack );
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ComposerDimmedTextColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::ComposerDimmedTextColor() const
+    {
+    FUNC_LOG;
+    return GetSkinColor( KAknsIIDFsTextColors, EAknsCIFsTextColorsCG18, KRgbGray );
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::MaxPcsMatches
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::MaxPcsMatches() const
+    {
+    FUNC_LOG;
+    return KMaxPcsMatches;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::PcsPopupHighlightColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::PcsPopupHighlightColor() const
+    {
+    FUNC_LOG;
+    return KPcsPopupHighlightColor;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::PcsPopupDimmedFontColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::PcsPopupDimmedFontColor() const
+    {
+    FUNC_LOG;
+    return KPcsPopupDimmedFontColor;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ListTextureNodeExpandedSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ListTextureNodeExpandedSize() const
+    {
+    FUNC_LOG;
+    //<cmail>
+    TRect mainPaneRect;
+    TAknLayoutRect listItem;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    listItem.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ) );
+    return listItem.Rect().Height();
+    //return KListTextureNodeExpandedSize;
+    //</cmail>
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::SearchLookingGlassIconSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::SearchLookingGlassIconSize() const
+    {
+    FUNC_LOG;
+    return KSearchLookingGlassIconSize;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::statusPaneIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::statusPaneIconSize() const
+	{
+    FUNC_LOG;
+    TRect titlePaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::ETitlePane, titlePaneRect);
+    TAknLayoutRect iconRect;
+    iconRect.LayoutRect(titlePaneRect, AknLayoutScalable_Avkon::title_pane_g2(0));
+    return iconRect.Rect().Size();
+	}
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ListControlBarMailboxDefaultIconSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ListControlBarMailboxDefaultIconSize() const
+    {
+    FUNC_LOG;
+    // <cmail> Platform layout change
+    //return KListControlBarMailboxDefaultIconSize;
+    return GetControlBarMailboxIconSize().iWidth;
+    // </cmail> Platform layout change
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::EMailListBarBgIconSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::EMailListBarBgIconSize() const
+    {
+    FUNC_LOG;
+    // <cmail> Platform layout change
+    return GetControlBarRect().Size().iHeight;
+    //return KEMailListBarBgIconSize;
+    // </cmail>
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ListTextureMailboxDefaultIconSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ListTextureMailboxDefaultIconSize() const
+    {
+    FUNC_LOG;
+    return KListTextureMailboxDefaultIconSize;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::EListTextureSelectorSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::EListTextureSelectorSize() const
+    {
+    FUNC_LOG;
+    // <cmail> Platform layout change
+    return OneLineListItemHeight();
+    //return KEListTextureSelectorSize;
+    // </cmail>
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ListControlMenuIconSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ListControlMenuIconSize() const
+    {
+    FUNC_LOG;
+    // <cmail> Platform layout change
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0));
+    TAknLayoutRect iconRect;
+    iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1(0));
+    return iconRect.Rect().Height();
+    //return KListControlMenuIconSize;
+    // </cmail>
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::AttachmentIconSize
+// -----------------------------------------------------------------------------
+// <cmail>
+TSize CFSEmailUiLayoutHandler::AttachmentIconSize() const
+    {
+    FUNC_LOG;
+    TAknLayoutRect rect;
+    rect.LayoutRect( TRect(0,0,0,0),
+                    AknLayoutScalable_Apps::list_single_dyc_row_pane_g1( 0 ).LayoutLine() );
+    return rect.Rect().Size();
+    //return KAttachmentIconSize;
+// </cmail>    
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ViewerHighlightTextureSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ViewerHighlightTextureSize() const
+    {
+    FUNC_LOG;
+    return KViewerHighlightTextureSize;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ControlBarArrowTextureXSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ControlBarArrowTextureXSize() const
+    {
+    FUNC_LOG;
+    return KControlBarArrowTextureXSize;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ControlBarArrowTextureYSize
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::ControlBarArrowTextureYSize() const
+    {
+    FUNC_LOG;
+    return KControlBarArrowTextureYSize;
+    }
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetSkinColor
+// -----------------------------------------------------------------------------
+TRgb CFSEmailUiLayoutHandler::GetSkinColor( const TAknsItemID& aId, 
+        TInt aIndex, const TRgb& aFallbackColor ) const
+    {
+    FUNC_LOG;
+    TRgb color;
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+    TInt err = AknsUtils::GetCachedColor(
+        skin,
+        color,
+        aId,
+        aIndex );
+    if ( err != KErrNone )
+        {
+        color = aFallbackColor;
+        }
+    
+    return color;    
+    }
+
+// <cmail> Use layout data instead of hardcoded values
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarMailboxIconRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetControlBarMailboxIconRect() const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0));
+    TAknLayoutRect iconRect;
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g2(0));        
+        }
+    else
+        {
+        iconRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1(0));
+        }
+    return iconRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarMailboxIconPos
+// -----------------------------------------------------------------------------
+TPoint CFSEmailUiLayoutHandler::GetControlBarMailboxIconPos() const
+    {
+    FUNC_LOG;
+    return GetControlBarMailboxIconRect().iTl;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarMailboxIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::GetControlBarMailboxIconSize() const
+    {
+    FUNC_LOG;
+    return GetControlBarMailboxIconRect().Size();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarFolderListButtonRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetControlBarFolderListButtonRect() const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0));
+    TAknLayoutRect folderListButtonRect;
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        folderListButtonRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_button_pane_cp01(0));        
+        }
+    else
+        {
+        folderListButtonRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_ddmenu_pane(0));
+        }
+    return folderListButtonRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarFolderListButtonPos
+// -----------------------------------------------------------------------------
+TPoint CFSEmailUiLayoutHandler::GetControlBarFolderListButtonPos() const
+    {
+    FUNC_LOG;
+    return GetControlBarFolderListButtonRect().iTl;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarFolderListButtonSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::GetControlBarFolderListButtonSize() const
+    {
+    FUNC_LOG;
+    return GetControlBarFolderListButtonRect().Size();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarSortButtonRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetControlBarSortButtonRect() const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0));
+    TAknLayoutRect sortButtonRect;
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {
+        sortButtonRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_ddmenu_pane(0));        
+        }
+    else
+        {
+        sortButtonRect.LayoutRect(controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_button_pane_cp01(0));
+        }    
+    return sortButtonRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarSortButtonPos
+// -----------------------------------------------------------------------------
+TPoint CFSEmailUiLayoutHandler::GetControlBarSortButtonPos() const
+    {
+    FUNC_LOG;
+    return GetControlBarSortButtonRect().iTl;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarSortButtonSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::GetControlBarSortButtonSize() const
+    {
+    FUNC_LOG;
+    return GetControlBarSortButtonRect().Size();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarConnectionIconRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetControlBarConnectionIconRect() const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0 ) );
+    TAknLayoutRect iconRect;
+    // <cmail>
+    if ( AknLayoutUtils::LayoutMirrored() )
+        {        
+        iconRect.LayoutRect( controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g1( 0 ) );
+        }
+    else
+        {
+        iconRect.LayoutRect( controlBarRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_g2( 0 ) );
+        }
+    // </cmail>
+    return iconRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarConnectionIconPos
+// -----------------------------------------------------------------------------
+TPoint CFSEmailUiLayoutHandler::GetControlBarConnectionIconPos() const
+    {
+    FUNC_LOG;
+    return GetControlBarConnectionIconRect().iTl;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarConnectionIconSize
+// -----------------------------------------------------------------------------
+TSize CFSEmailUiLayoutHandler::GetControlBarConnectionIconSize() const
+    {
+    FUNC_LOG;
+    return GetControlBarConnectionIconRect().Size();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetControlBarRect() const
+    {
+    FUNC_LOG;
+    //TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; //<cmail>
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect controlBarRect;
+    controlBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane(0)); //<cmail>
+    return controlBarRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetControlBarRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::GetListRect() const
+    {
+    FUNC_LOG;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect listRect;
+    listRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_listscroll_pane_te_cp01( 0 ) );
+    return listRect.Rect();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::GetSearchListHeaderTextLayout
+// -----------------------------------------------------------------------------
+TAknLayoutText CFSEmailUiLayoutHandler::GetSearchListHeaderTextLayout() const
+    {
+    FUNC_LOG;
+    //TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0;
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);
+    mainPaneRect.Move(-mainPaneRect.iTl);
+    TAknLayoutRect headerRect;
+    headerRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane());
+    TAknLayoutText textLayout;
+    textLayout.LayoutText(headerRect.Rect(), AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1());
+    return textLayout;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::FSTextStyleFromLayoutL
+// -----------------------------------------------------------------------------
+CAlfTextStyle& CFSEmailUiLayoutHandler::FSTextStyleFromLayoutL( const TAknTextComponentLayout& aLayout  )
+    {
+    FUNC_LOG;
+    CAlfTextStyle** findResult = iTextStyleMap.Find( aLayout );
+    CAlfTextStyle* style = NULL;
+    if( !findResult )
+        {
+        TInt fontStyle(0);
+        fontStyle = CAlfStatic::Env().TextStyleManager().CreatePlatformTextStyleL( aLayout.Font(), EAlfTextStyleNormal );
+        style = CAlfStatic::Env().TextStyleManager().TextStyle( fontStyle );
+        TInt insertError( iTextStyleMap.Insert( aLayout, style ) );
+        if( insertError )
+            {
+            CAlfStatic::Env().TextStyleManager().DeleteTextStyle( style->Id() );
+            User::Leave( insertError );
+            }
+        TAknLayoutText textLayout;
+        textLayout.LayoutText(TRect(0,0,0,0), aLayout);
+        style->SetBold(textLayout.Font()->FontSpecInTwips().iFontStyle.StrokeWeight());
+        style->SetItalic(textLayout.Font()->FontSpecInTwips().iFontStyle.Posture());
+        }
+    else
+        {
+        style = *findResult;
+        }
+    return *style;
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::DeleteTextStyles
+// -----------------------------------------------------------------------------
+void CFSEmailUiLayoutHandler::DeleteTextStyles()
+    {
+    FUNC_LOG;
+    THashMapIter< TAknTextComponentLayout, CAlfTextStyle* >
+        mapIterator( iTextStyleMap );
+    CAlfTextStyle** value = mapIterator.CurrentValue();
+    while( value )
+        {
+        CAlfStatic::Env().TextStyleManager().DeleteTextStyle( ( *value )->Id() );
+        mapIterator.RemoveCurrent();
+        mapIterator.NextValue();
+        value = mapIterator.CurrentValue();
+        }
+    iTextStyleMap.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::ListCmailPaneRect
+// -----------------------------------------------------------------------------
+TRect CFSEmailUiLayoutHandler::ListCmailPaneRect() const
+    {
+    FUNC_LOG; 
+    
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_email_pane() );
+    layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::listscroll_cmail_pane() );
+    layoutRect.LayoutRect( layoutRect.Rect(), AknLayoutScalable_Apps::list_cmail_pane() );
+    return layoutRect.Rect();
+    }
+
+// </cmail> Platform layout change
+
+// <cmail> new methods
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::TitleCaptionPadding
+// 
+// Returns padding value for title caption visual
+// -----------------------------------------------------------------------------
+TInt CFSEmailUiLayoutHandler::TitleCaptionPadding() const
+    {   
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect );
+    
+    TAknLayoutRect ctrlBarPane;
+    ctrlBarPane.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane( 0 ) );
+    const TRect ctrlBarPaneRect( ctrlBarPane.Rect() );
+    
+    TAknLayoutText ctrlBarPaneT1;
+    ctrlBarPaneT1.LayoutText( ctrlBarPaneRect, AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( 0 ) );
+    const TRect ctrlBarPaneT1Rect( ctrlBarPaneT1.TextRect() );
+    
+    return Abs( ctrlBarPaneRect.iTl.iY - ctrlBarPaneT1Rect.iTl.iY );
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::SeparatorGraphicSizeInThisResolution
+// -----------------------------------------------------------------------------
+//
+TSize CFSEmailUiLayoutHandler::SeparatorGraphicSizeInThisResolution() const
+    {   
+    FUNC_LOG;
+    
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect);    
+    
+    TAknLayoutRect listRect;
+    listRect.LayoutRect(mainPaneRect, AknLayoutScalable_Apps::list_cmail_pane());         
+
+    TAknLayoutRect bodyRect;  
+    bodyRect.LayoutRect(listRect.Rect(), AknLayoutScalable_Apps::list_cmail_body_pane());   
+    
+    TAknLayoutRect itemRect;  
+    itemRect.LayoutRect(bodyRect.Rect(), AknLayoutScalable_Apps::list_cmail_body_pane_g1());       
+    
+    return itemRect.Rect().Size();      
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::SeparatorLineColor
+// -----------------------------------------------------------------------------
+//
+TRgb CFSEmailUiLayoutHandler::SeparatorLineColor() const
+    {
+    FUNC_LOG;    
+    return ViewerNormalHotspotTextColor();
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiLayoutHandler::DropDownMenuListPadding
+// -----------------------------------------------------------------------------
+//
+TInt CFSEmailUiLayoutHandler::DropDownMenuListPadding() const
+    {   
+    FUNC_LOG;   
+    // main pane
+    TRect mainPaneRect;
+    AknLayoutUtils::LayoutMetricsRect( 
+            AknLayoutUtils::EMainPane, mainPaneRect );
+    
+    // menu pane
+    TAknLayoutRect menuPane;
+    menuPane.LayoutRect( mainPaneRect, 
+            AknLayoutScalable_Apps::popup_sp_fs_action_menu_pane( 2 ) );
+    const TRect menuPaneRect( menuPane.Rect() );
+    
+    // Menu gene pane
+    TAknLayoutRect menuListPane;
+    menuListPane.LayoutRect( menuPaneRect, 
+            AknLayoutScalable_Apps::sp_fs_action_menu_list_pane( 0 ) );
+    const TRect menuListPaneRect( menuListPane.Rect() );
+           
+    return Abs( menuListPaneRect.iTl.iY - menuPaneRect.iTl.iY );
+    }
+
+// </cmail> 
+
+// End of file
+