emailuis/uicomponents/src/fsmultilineitemvisualizer.cpp
changeset 0 8466d47a6819
child 29 6b8f3b30d0ec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fsmultilineitemvisualizer.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,1388 @@
+/*
+* 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:  A visualier class for the MultiLine item.
+*
+*/
+
+
+//////SYSTEM INCLUDES
+
+//////TOOLKIT INCLUDES
+// <cmail> SF
+#include "emailtrace.h"
+#include <alf/alfenv.h>
+#include <alf/alflayout.h>
+#include <alf/alfanchorlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alftexture.h>
+#include <alf/alfcontrol.h>
+#include <alf/alfimage.h>
+// </cmail>
+
+
+//////PROJECT INCLUDES
+#include "fsmultilineitemvisualizer.h"
+#include "fsmultilineitemdata.h"
+#include "fslayoutmanager.h"
+
+
+//CONSTANTS
+const TInt KZero = 0;
+const TInt KOne = 1;
+const TInt KTwo = 2;
+const TInt KThree = 3;
+const TInt KFour = 4;
+const TInt KFive = 5;
+const TInt KSix = 6;
+const TInt KSeven = 7;
+const TInt KEight = 8;
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFsMultiLineItemVisualizer* CFsMultiLineItemVisualizer::NewL( CAlfControl& aOwnerControl )
+    {
+    FUNC_LOG;
+    CFsMultiLineItemVisualizer* self = new( ELeave ) CFsMultiLineItemVisualizer( aOwnerControl );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// C++ destructor
+// ---------------------------------------------------------------------------
+//
+CFsMultiLineItemVisualizer::~CFsMultiLineItemVisualizer()
+    {
+    FUNC_LOG;
+    
+    }
+
+
+//item visualizer's interface
+
+// ---------------------------------------------------------------------------
+// The function sets how many lines the multiline item has when it's not extended.
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::SetNumberOfLinesWhenNotExtended( TInt aNumberOfLines )
+    {
+    FUNC_LOG;
+    if ( 1 <= aNumberOfLines && aNumberOfLines <= 4 && aNumberOfLines <= iNumLinesExtended )
+        {
+        iNumLinesNotExtended = aNumberOfLines;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function returns how many lines the item has when it's not extended.
+// ---------------------------------------------------------------------------
+//
+TInt CFsMultiLineItemVisualizer::NumberOfLinesWhenNotExtended( ) const
+    {
+    FUNC_LOG;
+    return iNumLinesNotExtended;
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function sets how many lines the multiline item has when it's extended.
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::SetNumberOfLinesWhenExtended( TInt aNumberOfLines )
+    {
+    FUNC_LOG;
+    if ( aNumberOfLines >= 1 && aNumberOfLines <= 4 && aNumberOfLines >= iNumLinesNotExtended )
+        {
+        iNumLinesExtended = aNumberOfLines;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function returns how many lines the item has when it's extended.
+// ---------------------------------------------------------------------------
+//
+TInt CFsMultiLineItemVisualizer::NumberOfLinesWhenExtended( ) const
+    {
+    FUNC_LOG;
+    return iNumLinesExtended;
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function sets state of the item's checkbox.
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::SetCheckboxState( TBool aChecked )
+    {
+    FUNC_LOG;
+    iCheckState = aChecked;
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function returns state of the item's checkbox. 
+// ---------------------------------------------------------------------------
+//
+TBool CFsMultiLineItemVisualizer::CheckboxState () const
+    {
+    FUNC_LOG;
+    return iCheckState;
+    }
+
+
+// ---------------------------------------------------------------------------
+// The function sets whether place holders should be kept when icons in the 
+// first column are not present. 
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::SetKeepEmptyIconsPlaceHolders( TBool aKeep )
+    {
+    FUNC_LOG;
+    iKeepPlaceHolders = aKeep;
+    }
+
+// ---------------------------------------------------------------------------
+// The function returnes whether place holders are kept in case icons are
+// not set.
+// ---------------------------------------------------------------------------
+//
+TBool CFsMultiLineItemVisualizer::IsKeepEmptyIconsPlaceHolders( ) const
+    {
+    FUNC_LOG;
+    return iKeepPlaceHolders;
+    }
+
+
+// from base class MFsTreeItemVisualizer
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// Returns the type of the item's visualizer. 
+// ---------------------------------------------------------------------------
+//
+TFsTreeItemVisualizerType CFsMultiLineItemVisualizer::Type() const
+    {
+    FUNC_LOG;
+    return EFsMultiLineItemVisualizer;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// Returns the size of an item in a normal (not extended) state.
+// ---------------------------------------------------------------------------
+//
+TSize CFsMultiLineItemVisualizer::Size() const
+    {
+    FUNC_LOG;
+    if ( IsAlwaysExtended() )
+        {
+        return ExtendedSize();
+        }
+    else
+        {
+        if ( iFlags & KFsTreeListItemManagedLayout )
+            {
+            return SizeWithNumberOfLines( iNumLinesNotExtended );
+            }
+        else
+            {
+            return iSize;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// Returns the size of an item in expanded state.
+// ---------------------------------------------------------------------------
+//    
+TSize CFsMultiLineItemVisualizer::ExtendedSize() const
+    {
+    FUNC_LOG;
+    if ( iFlags & KFsTreeListItemManagedLayout )
+        {
+        return SizeWithNumberOfLines( iNumLinesExtended );
+        }
+    else
+        {
+        return iExtendedSize;
+        }    
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// A call to this function means that the item is requested to draw itself
+// within specified parent layout. 
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::ShowL( CAlfLayout& aParentLayout, const TUint aTimeout )
+    {
+    FUNC_LOG;
+   
+    if (!iLayout)
+        {
+        iParentLayout = &aParentLayout;
+        iLayout = CAlfAnchorLayout::AddNewL(iOwnerControl,iParentLayout);
+        iLayout->EnableBrushesL();
+        iLayout->SetClipping(ETrue);
+    ///////////////////////////first line///////////////////////////
+        //text
+        if (!iFirstLineTextVis)
+            {
+            iFirstLineTextVis = CAlfTextVisual::AddNewL(iOwnerControl, iLayout );
+            }
+        //icons
+        if (!iFirstLineIconVis) //optional priority icon in first line
+            {
+            iFirstLineIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iFirstLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+        
+        if (!iCheckBoxIconVis)
+            {
+            iCheckBoxIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iCheckBoxIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+        
+        if (!iMarkIconVis)
+            {
+            iMarkIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iMarkIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+        
+        if(!iMenuIconVis)
+            {
+            iMenuIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iMenuIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+
+    ///////////////////////////second line///////////////////////////
+        //text
+        if (!iSecondLineTextVis)
+            {
+            iSecondLineTextVis = CAlfTextVisual::AddNewL(iOwnerControl, iLayout );
+            }
+        //icon
+        if (!iSecondLineIconVis)
+            {
+            iSecondLineIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iSecondLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+
+    ///////////////////////////third line///////////////////////////
+        //text
+        if (!iThirdLineTextVis)
+            {
+            iThirdLineTextVis = CAlfTextVisual::AddNewL(iOwnerControl, iLayout );
+            }
+        //icon
+        if (!iThirdLineIconVis)
+            {
+            iThirdLineIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iThirdLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+        
+    ///////////////////////////fourth line///////////////////////////
+        //text
+        if (!iFourthLineTextVis)
+            {
+            iFourthLineTextVis = CAlfTextVisual::AddNewL(iOwnerControl, iLayout );
+            }
+        //icon
+        if (!iFourthLineIconVis)
+            {
+            iFourthLineIconVis = CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iFourthLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            }
+  
+        }
+    else
+        {
+        //visuals are already created but not attached to the list layout
+        if (!iLayout->Layout()) 
+            {
+            aParentLayout.Append(iLayout, aTimeout);
+            iParentLayout = &aParentLayout;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// A call to this function means that the item is requested to update its
+// visual content. 
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::UpdateL( const MFsTreeItemData& aData,
+                                        TBool aFocused,
+                                        const TUint aLevel,
+                                        CAlfTexture*& aMarkIcon,
+                                        CAlfTexture*& aMenuIcon,
+                                        const TUint /*aTimeout*/,
+                                        TBool aUpdateData)
+    {
+    FUNC_LOG;
+    
+    if (!iLayout)
+        {
+        return;
+        }
+        
+    //text color
+    TRgb textColor;
+    if ( aFocused )
+        {
+        if (!iIsCustomTextFocusedColor)
+            {//custom color not set, use color from skin - load it in case theme has changed
+            iFocusedTextColor = FocusedStateTextSkinColor();
+            }
+        textColor = iFocusedTextColor;
+        iFlags |= KFsTreeListItemFocused;
+        }
+    else
+        {
+        if (!iIsCustomTextNormalColor)
+            {//custom color not set, use color from skin - load it in case theme has changed
+            iNormalTextColor = NormalStateTextSkinColor( );
+            }
+        textColor = iNormalTextColor;
+        iFlags &= ~KFsTreeListItemFocused;
+        }
+    
+    //text aignment in visuals    
+    TAlfAlignHorizontal currTextAlignment( EAlfAlignHLeft );            
+    currTextAlignment = CurrentTextAlignmentL( iTextAlign, NULL, NULL ); //Western/AH layout
+    
+    //text's shadow
+    TBool enableShadow(EFalse);
+    enableShadow = iFlags & KFsTreeListItemTextShadow; 
+    
+    TInt styleId = ModifiedStyleIdL( );
+    
+    //set data to the proper visuals
+    if ( aData.Type() == KFsMultiLineItemDataType )
+        {
+        const CFsMultiLineItemData* data = static_cast<const CFsMultiLineItemData*>(&aData);
+        
+        //set icons and texts to their visuals
+        
+///////////////////////////first line///////////////////////////////////////////
+        //text
+        if (iFirstLineTextVis && aUpdateData)
+            {
+            iFirstLineTextVis->Env().CancelCommands( iFirstLineTextVis );
+            
+            iFirstLineTextVis->EnableShadow( enableShadow );
+            iFirstLineTextVis->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+            iFirstLineTextVis->SetAlign( currTextAlignment, EAlfAlignVCenter );
+            iFirstLineTextVis->SetTextStyle( styleId );
+            iFirstLineTextVis->SetColor( textColor );
+            
+            iFirstLineTextVis->SetTextL( data->LineText( 0 ));
+            }
+        
+        //icon
+        if (iCheckBoxIconVis)
+            {
+            if ( CheckboxState() )
+                {
+                if ( data->CheckBoxCheckedIcon() )
+                    {
+                    iCheckBoxIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+                    iCheckBoxIconVis->SetImage( TAlfImage( *data->CheckBoxCheckedIcon() ) );
+                    }
+                else
+                    {
+                    //zero visual's opacity
+                    }
+                }
+            else 
+                {
+                if ( data->CheckBoxUncheckedIcon() )
+                    {
+                    iCheckBoxIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+                    iCheckBoxIconVis->SetImage( TAlfImage( *data->CheckBoxUncheckedIcon() ) );
+                    }
+                else
+                    {
+                    //zero visual's opacity
+                    }
+                }
+            }
+        //icon            
+        if ( iFirstLineIconVis && data->LineIcon( 0 ) )
+            {
+            iFirstLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iFirstLineIconVis->SetImage( TAlfImage( *data->LineIcon( 0 ) ) );                
+            }
+        //mark icon
+        if ( iMarkIconVis && IsMarked() && aMarkIcon )
+            {
+            iMarkIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iMarkIconVis->SetImage( *aMarkIcon );
+            }
+        //menu icon
+        if ( iMenuIconVis && (iFlags & KFsTreeListItemHasMenu) && aMenuIcon )
+            {
+            iMenuIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iMenuIconVis->SetImage( *aMenuIcon );
+            }
+///////////////////////////second line//////////////////////////////////////////
+        //text
+        if ( iSecondLineTextVis && aUpdateData)
+            {
+            iSecondLineTextVis->Env().CancelCommands( iSecondLineTextVis );
+                            
+            iSecondLineTextVis->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+            iSecondLineTextVis->SetAlign( currTextAlignment, EAlfAlignVCenter );
+            iSecondLineTextVis->EnableShadow( enableShadow );
+            iSecondLineTextVis->SetTextStyle( styleId );
+            iSecondLineTextVis->SetColor( textColor );
+            
+            iSecondLineTextVis->SetTextL( data->LineText( 1 ));
+            }
+        
+        //icon            
+        if ( iSecondLineIconVis && data->LineIcon( 1 ) )
+            {
+            iSecondLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iSecondLineIconVis->SetImage( TAlfImage( *data->LineIcon( 1 ) ) );                
+            }
+            
+///////////////////////////third line///////////////////////////////////////////
+        //text
+        if ( iThirdLineTextVis && aUpdateData )
+            {
+            iThirdLineTextVis->Env().CancelCommands( iThirdLineTextVis );
+                            
+            iThirdLineTextVis->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+            iThirdLineTextVis->SetAlign( currTextAlignment, EAlfAlignVCenter );
+            iThirdLineTextVis->EnableShadow( enableShadow );
+            iThirdLineTextVis->SetTextStyle( styleId );
+            iThirdLineTextVis->SetColor( textColor );
+            
+            iThirdLineTextVis->SetTextL( data->LineText( 2 ) );
+            }
+        
+        //icon
+        if ( iThirdLineIconVis && data->LineIcon( 2 ) )
+            {
+            iThirdLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iThirdLineIconVis->SetImage( TAlfImage( *data->LineIcon( 2 ) ) );
+            }
+            
+///////////////////////////fourth line//////////////////////////////////////////
+        //text
+        if ( iFourthLineTextVis && aUpdateData)
+            {
+            iFourthLineTextVis->Env().CancelCommands( iFourthLineTextVis );
+                            
+            iFourthLineTextVis->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+            iFourthLineTextVis->SetAlign( currTextAlignment, EAlfAlignVCenter );
+            iFourthLineTextVis->EnableShadow( enableShadow );
+            iFourthLineTextVis->SetTextStyle( styleId );
+            iFourthLineTextVis->SetColor( textColor );
+            
+            iFourthLineTextVis->SetTextL( data->LineText( 3 ) );
+            }
+        
+        //icon
+        if ( iFourthLineIconVis && data->LineIcon( 3 ) )
+            {
+            iFourthLineIconVis->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iFourthLineIconVis->SetImage( TAlfImage( *data->LineIcon( 3 ) ) );
+            }
+        
+        const TInt indent( iTextIndentation * ( aLevel - 1 ) );
+        UpdateLayout(data, indent);
+        iLayout->UpdateChildrenLayout();
+        }    
+    }
+
+
+// ---------------------------------------------------------------------------
+// From MFsTreeItemVisualizer.
+// A call to this function means that the item goes out of the visible 
+// items scope. The visualizer should destroy all its visuals to save 
+// memory. 
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::Hide( const TInt aTimeout )
+    {
+    FUNC_LOG;
+    if ( iLayout )
+        {
+        iParentLayout->Remove(iLayout, aTimeout);
+        iLayout->RemoveAndDestroyAllD();
+        iLayout = NULL;
+        iParentLayout = NULL;
+///////////////////////////first line///////////////////////////
+        iFirstLineTextVis = NULL;
+        iFirstLineIconVis = NULL;
+        iCheckBoxIconVis = NULL;
+        iMarkIconVis = NULL;
+        iMenuIconVis = NULL;
+///////////////////////////second line///////////////////////////
+        iSecondLineTextVis = NULL;
+        iSecondLineIconVis = NULL;
+///////////////////////////third line///////////////////////////
+        iThirdLineTextVis = NULL;
+        iThirdLineIconVis = NULL;
+///////////////////////////fourth line///////////////////////////
+        iFourthLineTextVis = NULL;
+        iFourthLineIconVis = NULL;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// C++ constructor
+// ---------------------------------------------------------------------------
+//
+CFsMultiLineItemVisualizer::CFsMultiLineItemVisualizer( CAlfControl& aOwnerControl )
+: CFsTreeItemVisualizerBase( aOwnerControl ),
+  iCheckState(EFalse),
+  iKeepPlaceHolders(EFalse),
+  iNumLinesNotExtended(KOne),
+  iNumLinesExtended(KFour)
+    {
+    FUNC_LOG;
+    
+    }
+
+
+// ---------------------------------------------------------------------------
+// Second phase constructor
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::ConstructL( )
+    {
+    FUNC_LOG;
+    CFsTreeItemVisualizerBase::ConstructL( ); //set text colors
+    }
+
+
+// ---------------------------------------------------------------------------
+// Updates anchor for visuals according to the current item's setup.
+// ---------------------------------------------------------------------------
+//
+void CFsMultiLineItemVisualizer::UpdateLayout(const CFsMultiLineItemData* aData, const TInt aIndentation )
+    {
+    FUNC_LOG;
+
+///////////////////////////first line///////////////////////////
+    //icon
+    TAlfTimedPoint tpFirstLineCheckBoxIconTl(0.0,0.0);
+    TAlfTimedPoint tpFirstLineCheckBoxIconBr(0.0,0.0);
+    //priority icon
+    TAlfTimedPoint tpFirstLineIconTl(0.0,0.0);
+    TAlfTimedPoint tpFirstLineIconBr(0.0,0.0);
+    //text
+    TAlfTimedPoint tpFirstLineTextTl(0.0,0.0);
+    TAlfTimedPoint tpFirstLineTextBr(0.0,0.0);
+    //mark icon
+    TAlfTimedPoint tpFirstLineMarkIconTl(0.0,0.0);
+    TAlfTimedPoint tpFirstLineMarkIconBr(0.0,0.0);
+    //menu icon
+    TAlfTimedPoint tpFirstMenuIconTl(0.0,0.0);
+    TAlfTimedPoint tpFirstMenuIconBr(0.0,0.0);
+    
+    //LM metrics
+    CFsLayoutManager::TFsLayoutMetrics firstLineIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG1),
+                                       firstLinePrioIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG2),
+                                       firstLineTextMetrics(CFsLayoutManager::EFsLmListSingleDycRowTextPane),
+                                       firstLineMenuIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG3),
+                                       firstLineMarkIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG4);
+    TInt firstLineIconVariety(KZero),
+         firstLinePrioIconVariety(KZero),
+         firstLineTextVariety(KZero),
+         firstLineMenuIconVariety(KZero),
+         firstLineMarkIconVariety(KZero); 
+    
+///////////////////////////second line///////////////////////////
+    //icon
+    TAlfTimedPoint tpSecondLineIconTl(0.0,0.0);
+    TAlfTimedPoint tpSecondLineIconBr(0.0,0.0);
+    //text
+    TAlfTimedPoint tpSecondLineTextTl(0.0,0.0);
+    TAlfTimedPoint tpSecondLineTextBr(0.0,0.0);
+    //LM metrics
+    CFsLayoutManager::TFsLayoutMetrics secondLineIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG1),
+                                       secondLineTextMetrics(CFsLayoutManager::EFsLmListSingleDycRowTextPane);
+    TInt secondLineTextVariety(KZero);
+///////////////////////////third line///////////////////////////
+    //icon
+    TAlfTimedPoint tpThirdLineIconTl(0.0,0.0);
+    TAlfTimedPoint tpThirdLineIconBr(0.0,0.0);
+    //text
+    TAlfTimedPoint tpThirdLineTextTl(0.0,0.0);
+    TAlfTimedPoint tpThirdLineTextBr(0.0,0.0);
+    //LM metrics
+    CFsLayoutManager::TFsLayoutMetrics thirdLineIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG1),
+                                       thirdLineTextMetrics(CFsLayoutManager::EFsLmListSingleDycRowTextPane);
+    TInt thirdLineTextVariety(KZero);
+///////////////////////////fourth line///////////////////////////    
+    //icon
+    TAlfTimedPoint tpFourthLineIconTl(0.0,0.0);
+    TAlfTimedPoint tpFourthLineIconBr(0.0,0.0);
+    //text
+    TAlfTimedPoint tpFourthLineTextTl(0.0,0.0);
+    TAlfTimedPoint tpFourthLineTextBr(0.0,0.0);
+    CFsLayoutManager::TFsLayoutMetrics fourthLineIconMetrics(CFsLayoutManager::EFsLmListSingleDycRowPaneG1),
+                                       fourthLineTextMetrics(CFsLayoutManager::EFsLmListSingleDycRowTextPane);
+    TInt fourthLineTextVariety(KZero);
+/////////////////////////////////////////////////////////////////    
+        
+    
+    TBool itemFocused(EFalse);
+    itemFocused = iFlags & KFsTreeListItemFocused;
+    
+    TAlfTimedValue opacity;
+    
+    TInt linesVisible(1);
+    
+    if ( (itemFocused || IsAlwaysExtended()) && IsExtendable() ) // the item has focus or is always extended
+        {
+        linesVisible = NumberOfLinesWhenExtended();
+        }
+    else
+        {
+        linesVisible = NumberOfLinesWhenNotExtended();
+        }
+
+    
+    //0. set opacities for visuals
+    ///////////////////////////first line///////////////////////////
+    
+    opacity.SetValueNow( 1.0 );
+     
+    if ( iFirstLineTextVis )
+        {
+        iFirstLineTextVis->SetOpacity(opacity);
+        }
+        
+    //set opacities to visuals in lines 2-4
+        
+    ///////////////////////////second line///////////////////////////
+    if ( linesVisible >= 2 ) // line visible?
+        {
+        opacity.SetValueNow( 1.0 );
+        }
+    else 
+        {
+        opacity.SetValueNow( 0.0 );
+        }
+     
+    if ( iSecondLineIconVis )
+        {
+        iSecondLineIconVis->SetOpacity(opacity);
+        }
+    if ( iSecondLineTextVis )
+        {
+        iSecondLineTextVis->SetOpacity(opacity);
+        }
+    ///////////////////////////third line///////////////////////////
+    if ( linesVisible >= 3 ) // line visible?
+        {
+        opacity.SetValueNow( 1.0 );
+        }
+    else 
+        {
+        opacity.SetValueNow( 0.0 );
+        }
+        
+    if ( iThirdLineIconVis )
+        {
+        iThirdLineIconVis->SetOpacity(opacity);
+        }
+    if ( iThirdLineTextVis )
+        {
+        iThirdLineTextVis->SetOpacity(opacity);
+        }
+    ///////////////////////////fourth line///////////////////////////    
+    if ( linesVisible == 4 ) // line visible?
+        {
+        opacity.SetValueNow( 1.0 );
+        }
+    else 
+        {
+        opacity.SetValueNow( 0.0 );
+        }
+    if ( iFourthLineIconVis )
+        {
+        iFourthLineIconVis->SetOpacity(opacity);
+        }
+    if ( iFourthLineTextVis )
+        {
+        iFourthLineTextVis->SetOpacity(opacity);
+        }
+    
+    //1. set anchor values for visuals
+///////////////////////////first line///////////////////////////
+    //no icons, only text
+    firstLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+    firstLineTextVariety = KEight;
+        
+    TBool isCheckboxPres(EFalse),isMarkPres(EFalse);
+    
+    if ( CheckboxState() && aData->CheckBoxCheckedIcon() ||
+         !CheckboxState() && aData->CheckBoxUncheckedIcon()   )
+        {
+        isCheckboxPres = ETrue;
+        firstLineIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+        firstLineIconVariety = KZero;
+        
+        firstLineTextVariety = KFive;
+        
+        opacity.SetValueNow( 1.0 );
+        iCheckBoxIconVis->SetOpacity(opacity);
+        }
+    else
+        {
+        isCheckboxPres = EFalse;
+        //zero image visual's opacity
+        opacity.SetValueNow( 0.0 );
+        iCheckBoxIconVis->SetOpacity(opacity);
+        }
+    
+    if ( aData->LineIcon( KZero ) )
+        {
+        if ( isCheckboxPres )
+            {
+            firstLinePrioIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG2;
+            firstLinePrioIconVariety = KZero;
+            firstLineTextVariety = KTwo;
+            }
+        else
+            {
+            firstLinePrioIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+            firstLinePrioIconVariety = KZero;
+            firstLineTextVariety = KFive;
+            }
+        opacity.SetValueNow( 1.0 );
+        iFirstLineIconVis->SetOpacity(opacity);
+        }
+    else
+        {
+        if ( !isCheckboxPres && IsKeepEmptyIconsPlaceHolders() )
+            {
+            firstLineTextVariety = KFive;
+            }
+        
+        //zero image visual's opacity
+        opacity.SetValueNow( 0.0 );
+        iFirstLineIconVis->SetOpacity(opacity);
+        }
+    
+    
+    if ( IsMarked() )
+        {
+        isMarkPres = ETrue;
+        firstLineMarkIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+        firstLineMarkIconVariety = KZero;
+        
+        if ( firstLineTextVariety == KTwo )
+            {
+            firstLineTextVariety = KOne;
+            }
+        else if ( firstLineTextVariety == KFive )
+            {
+            firstLineTextVariety = KFour;
+            }
+        else //KEight
+            {
+            firstLineTextVariety = KSeven;
+            }
+        
+        opacity.SetValueNow( 1.0 );
+        iMarkIconVis->SetOpacity(opacity);
+        }
+    else
+        {
+        isMarkPres = EFalse;
+        //zero image visual's opacity
+        opacity.SetValueNow( 0.0 );
+        iMarkIconVis->SetOpacity(opacity);
+        }
+    
+    if ( itemFocused && ( iFlags & KFsTreeListItemHasMenu ) )
+        {
+        if ( isMarkPres )
+            {
+            firstLineMenuIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+            firstLineMenuIconVariety = KZero;
+            if ( firstLineTextVariety == KOne )
+                {
+                firstLineTextVariety = KZero;
+                }
+            else if ( firstLineTextVariety ==  KFour )
+                {
+                firstLineTextVariety = KThree;
+                }
+            else //KSeven
+                {
+                firstLineTextVariety = KSix;
+                }
+            }
+        else
+            {
+            firstLineMenuIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+            firstLineMenuIconVariety = KZero;
+            
+            if ( firstLineTextVariety == KTwo )
+                {
+                firstLineTextVariety = KOne;
+                }
+            else if ( firstLineTextVariety == KFive )
+                {
+                firstLineTextVariety = KFour;
+                }
+            else //KEight
+                {
+                firstLineTextVariety = KSeven;
+                }
+            }
+        opacity.SetValueNow( 1.0 );
+        iMenuIconVis->SetOpacity(opacity);
+        }
+    else
+        {
+        //zero image visual's opacity
+        opacity.SetValueNow( 0.0 );
+        iMenuIconVis->SetOpacity(opacity);
+        }    
+    
+///////////////////////////second line///////////////////////////    
+    if ( aData->LineIcon( KOne ) )
+        {
+        secondLineIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+        secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+        
+        secondLineTextVariety = KFive;
+        }
+    else
+        {
+        if ( IsKeepEmptyIconsPlaceHolders() )
+            {
+            secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            secondLineTextVariety = KFive;
+            }
+        else
+            {
+            secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            secondLineTextVariety = KEight;
+            }
+        
+        opacity.SetValueNow( 0.0 );
+        iSecondLineIconVis->SetOpacity(opacity);
+        }
+    
+///////////////////////////third line///////////////////////////
+    if ( aData->LineIcon( KTwo ) )
+        {
+        thirdLineIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+        thirdLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+        thirdLineTextVariety = KFive;
+        }
+    else
+        {
+        if ( IsKeepEmptyIconsPlaceHolders() )
+            {
+            thirdLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            thirdLineTextVariety = KFive;
+            }
+        else
+            {
+            thirdLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            thirdLineTextVariety = KEight;
+            }
+        
+        opacity.SetValueNow( 0.0 );
+        iThirdLineIconVis->SetOpacity(opacity);
+        }
+
+///////////////////////////fourth line///////////////////////////
+    if ( aData->LineIcon( KThree ) )
+        {
+        fourthLineIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+        fourthLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+        fourthLineTextVariety = KFive;
+        }
+    else
+        {
+        if ( IsKeepEmptyIconsPlaceHolders() )
+            {
+            fourthLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            fourthLineTextVariety = KFive;
+            }
+        else
+            {
+            fourthLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+            fourthLineTextVariety = KEight;
+            }
+        
+        opacity.SetValueNow( 0.0 );
+        iFourthLineIconVis->SetOpacity(opacity);
+        }    
+
+//3. get correct metrics based on text's size range    
+    //not needed anymore
+    //layout manager is queried for medium values - LM returnes rects based on phone's global text settings 
+//4. get item size from Layout Manager - this will be used as parent in icons'/texts' size queries to LM
+    
+    //use full 4-line item size    
+    TRect rect;    
+    TInt rowVariety (KThree);//four lines
+    TRect itemRect;
+
+    itemRect = SizeWithNumberOfLines( KThree );
+    
+    //modify item size with list's indentation
+    if ( CFsLayoutManager::IsMirrored() )
+        {
+        itemRect.iBr = itemRect.iBr - TPoint(aIndentation, 0);
+        }
+    else
+        {
+        itemRect.iTl = itemRect.iTl + TPoint(aIndentation, 0);
+        }
+    
+//. Set visuals' anchors
+    
+    TInt iconVisualIndex(KErrNotFound), textVisualIndex(KErrNotFound);
+///////////////////////////first line///////////////////////////
+    TRect rowRect;
+    TInt rowNumber(KZero);
+    rowVariety = KThree;
+    rowNumber = KZero;
+
+    CFsLayoutManager::LayoutMetricsRect( itemRect, CFsLayoutManager::EFsLmListSingleDycRowPane, rowRect, rowVariety, rowNumber );
+    
+    
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            firstLineIconMetrics,
+            rect,
+            firstLineIconVariety );
+    
+    tpFirstLineCheckBoxIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFirstLineCheckBoxIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+        
+    iconVisualIndex = iLayout->FindVisual( iCheckBoxIconVis );
+    if ( iconVisualIndex != KErrNotFound )
+        {
+        tpFirstLineCheckBoxIconTl.SetStyle(EAlfTimedValueStyleLinear);        
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineCheckBoxIconTl );
+        
+        tpFirstLineCheckBoxIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineCheckBoxIconBr ); 
+        }
+    //priority icon 
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            firstLinePrioIconMetrics,
+            rect,
+            firstLinePrioIconVariety );
+    
+    tpFirstLineIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFirstLineIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    iconVisualIndex = iLayout->FindVisual( iFirstLineIconVis );
+    if ( iconVisualIndex != KErrNotFound )
+        {
+        tpFirstLineIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft,
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineIconTl );
+        
+        tpFirstLineIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight,
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineIconBr );
+        }
+    
+    //text
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            firstLineTextMetrics,
+            rect,
+            firstLineTextVariety );
+    
+    tpFirstLineTextTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFirstLineTextBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    textVisualIndex = iLayout->FindVisual( iFirstLineTextVis );
+    if ( textVisualIndex != KErrNotFound )
+        {
+        tpFirstLineTextTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineTextTl );
+        
+        tpFirstLineTextBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFirstLineTextBr ); 
+        }
+    
+    //mark icon
+    TInt markVisualIndex(KErrNotFound), menuVisualIndex(KErrNotFound);
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            firstLineMarkIconMetrics,
+            rect,
+            firstLineMarkIconVariety );
+    
+    tpFirstLineMarkIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFirstLineMarkIconBr.SetTarget(TAlfRealPoint(rect.iBr));  
+    
+    markVisualIndex = iLayout->FindVisual( iMarkIconVis );
+    if ( markVisualIndex != KErrNotFound )
+        {
+        tpFirstLineMarkIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                        markVisualIndex,
+                        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                        EAlfAnchorMetricAbsolute, 
+                        EAlfAnchorMetricAbsolute,
+                        tpFirstLineMarkIconTl );
+                
+        tpFirstLineMarkIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                        markVisualIndex,
+                        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                        EAlfAnchorMetricAbsolute, 
+                        EAlfAnchorMetricAbsolute,
+                        tpFirstLineMarkIconBr );
+        }
+    //menu icon
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            firstLineMenuIconMetrics,
+            rect,
+            firstLineMenuIconVariety );
+    
+    tpFirstMenuIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFirstMenuIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    menuVisualIndex = iLayout->FindVisual( iMenuIconVis );
+    if ( menuVisualIndex != KErrNotFound )
+        {
+        tpFirstMenuIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                        menuVisualIndex,
+                        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                        EAlfAnchorMetricAbsolute, 
+                        EAlfAnchorMetricAbsolute,
+                        tpFirstMenuIconTl );
+        
+        tpFirstMenuIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                        menuVisualIndex,
+                        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                        EAlfAnchorMetricAbsolute, 
+                        EAlfAnchorMetricAbsolute,
+                        tpFirstMenuIconBr );
+        }
+    
+    CFsLayoutManager::TFsText textInfo;
+///////////////////////////second line///////////////////////////
+    rowNumber = KOne;
+
+    CFsLayoutManager::LayoutMetricsRect( itemRect, CFsLayoutManager::EFsLmListSingleDycRowPane, rowRect, rowVariety, rowNumber );
+        
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            secondLineIconMetrics,
+            rect,
+            KZero );
+    tpSecondLineIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpSecondLineIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    iconVisualIndex = iLayout->FindVisual( iSecondLineIconVis );
+    if ( iconVisualIndex != KErrNotFound )
+        {
+        tpSecondLineIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpSecondLineIconTl );
+        
+        tpSecondLineIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpSecondLineIconBr ); 
+        }
+    
+    CFsLayoutManager::LayoutMetricsRect(
+                rowRect,
+                secondLineTextMetrics,
+                rect,
+                secondLineTextVariety );
+    
+    tpSecondLineTextTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpSecondLineTextBr.SetTarget(TAlfRealPoint(rect.iBr));
+
+    textVisualIndex = iLayout->FindVisual( iSecondLineTextVis );
+    if ( textVisualIndex != KErrNotFound )
+        {
+        tpSecondLineTextTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft,
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpSecondLineTextTl );
+        
+        tpSecondLineTextBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpSecondLineTextBr );
+        }
+///////////////////////////third line///////////////////////////
+    rowNumber = KTwo;
+
+    CFsLayoutManager::LayoutMetricsRect( itemRect, CFsLayoutManager::EFsLmListSingleDycRowPane, rowRect, rowVariety, rowNumber );
+    
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            thirdLineIconMetrics,
+            rect );
+    tpThirdLineIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpThirdLineIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    iconVisualIndex = iLayout->FindVisual( iThirdLineIconVis );
+    if ( iconVisualIndex != KErrNotFound )
+        {
+        tpThirdLineIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpThirdLineIconTl );
+        
+        tpThirdLineIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpThirdLineIconBr ); 
+        }
+    
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            thirdLineTextMetrics,
+            rect,
+            thirdLineTextVariety );
+
+    tpThirdLineTextTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpThirdLineTextBr.SetTarget(TAlfRealPoint(rect.iBr));
+        
+    textVisualIndex = iLayout->FindVisual( iThirdLineTextVis );
+    if ( textVisualIndex != KErrNotFound )
+        {
+        tpThirdLineTextTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft,
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpThirdLineTextTl );
+        
+        tpThirdLineTextBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpThirdLineTextBr );
+        }    
+    
+///////////////////////////fourth line///////////////////////////
+    rowNumber = KThree;
+
+    CFsLayoutManager::LayoutMetricsRect( itemRect, CFsLayoutManager::EFsLmListSingleDycRowPane, rowRect, rowVariety, rowNumber );
+    
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            fourthLineIconMetrics,
+            rect );
+    tpFourthLineIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFourthLineIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    iconVisualIndex = iLayout->FindVisual( iFourthLineIconVis );
+    if ( iconVisualIndex != KErrNotFound )
+        {
+        tpFourthLineIconTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFourthLineIconTl );
+        
+        tpFourthLineIconBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight, 
+                iconVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, 
+                EAlfAnchorMetricAbsolute,
+                tpFourthLineIconBr ); 
+        }
+    
+    CFsLayoutManager::LayoutMetricsRect(
+            rowRect,
+            fourthLineTextMetrics,
+            rect,
+            fourthLineTextVariety );
+
+    tpFourthLineTextTl.SetTarget(TAlfRealPoint(rect.iTl));
+    tpFourthLineTextBr.SetTarget(TAlfRealPoint(rect.iBr));
+    
+    textVisualIndex = iLayout->FindVisual( iFourthLineTextVis );
+    if ( textVisualIndex != KErrNotFound )
+        {
+        tpFourthLineTextTl.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorTopLeft,
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpFourthLineTextTl );
+        
+        tpFourthLineTextBr.SetStyle(EAlfTimedValueStyleLinear);
+        iLayout->SetAnchor( EAlfAnchorBottomRight,
+                textVisualIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute,
+                EAlfAnchorMetricAbsolute,
+                tpFourthLineTextBr );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns item's size in state with given number of lines. 
+// ---------------------------------------------------------------------------
+//
+TSize CFsMultiLineItemVisualizer::SizeWithNumberOfLines( const TInt aNumberLines ) const
+    {
+    FUNC_LOG;
+    TSize size;
+    if ( aNumberLines < KOne || aNumberLines > KFour )
+        {
+        size.iWidth = 0;
+        size.iHeight = 0;
+        }
+    else
+        {
+        /* family
+        Screen                            ->EFsLmScreen
+        application_window                ->EFsLmApplicationWindow
+        main_pane                         ->EFsLmMainPane
+        main_sp_fs_listscroll_pane_te     ->EFsLmMainSpFsListscrollPaneTe
+        main_sp_fs_list_pane              ->EFsLmMainSpFsListPane
+        list_single_fs_dyc_pane           ->EFsLmListSingleFsDycPane
+        list_single_dyc_row_pane          ->EFsLmListSingleDycRowPane
+        */
+        TRect rect, rect2;
+        CFsLayoutManager::LayoutMetricsRect( rect, CFsLayoutManager::EFsLmScreen, rect2 );
+        CFsLayoutManager::LayoutMetricsRect( rect2, CFsLayoutManager::EFsLmApplicationWindow, rect );
+        CFsLayoutManager::LayoutMetricsRect( rect, CFsLayoutManager::EFsLmMainPane, rect2 );
+        CFsLayoutManager::LayoutMetricsRect( rect2, CFsLayoutManager::EFsLmMainSpFsListscrollPaneTe, rect );
+        CFsLayoutManager::LayoutMetricsRect( rect, CFsLayoutManager::EFsLmMainSpFsListPane, rect2 );
+        
+        TInt rowVariety (KThree);//four lines
+        TRect itemRect;
+        
+        switch ( aNumberLines )
+            {
+            case KOne:
+                {
+                rowVariety = KZero;
+                break;
+                }
+            case KTwo:
+               {
+               rowVariety = KOne; 
+               break;
+               }
+           case KThree:
+               {
+               rowVariety = KTwo; 
+               break;
+               }
+           case KFour:
+           default:
+               {
+               rowVariety = KThree;
+               break;
+               }
+            }
+        
+        CFsLayoutManager::LayoutMetricsRect( rect2, CFsLayoutManager::EFsLmListSingleFsDycPane, itemRect, rowVariety );
+        
+        size = itemRect.Size();
+        }
+    
+    return size;
+    }
+
+
+//End of file
+