emailuis/uicomponents/src/fstreeplaintwolineitemvisualizer.cpp
branchRCL_3
changeset 64 3533d4323edc
child 73 c8382f7b54ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/uicomponents/src/fstreeplaintwolineitemvisualizer.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,2052 @@
+/*
+* 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 visualizer for data items with plain text.
+*  Version     : %version: tr1sido#17 %
+*
+*/
+
+
+//<cmail> removed __FS_ALFRED_SUPPORT flag
+//#include <fsconfig.h>
+//</cmail> removed __FS_ALFRED_SUPPORT flag
+#include "emailtrace.h"
+#include <AknsUtils.h>
+#include <touchlogicalfeedback.h>
+
+#include "fstreeplaintwolineitemvisualizer.h"
+#include "fstreeplaintwolineitemdata.h"
+#include "fsgenericpanic.h"
+#include "fslayoutmanager.h"
+#include "fstextstylemanager.h"
+#include "fsmarqueeclet.h"
+// <cmail> SF
+#include <alf/alfanchorlayout.h>
+#include <alf/alfimagevisual.h>
+#include <alf/alfviewportlayout.h>
+#include <alf/alftextvisual.h>
+#include <alf/alfimage.h>
+#include <alf/alfenv.h>
+#include <alf/alfcontrol.h>
+
+#include <alf/alfevent.h>
+#include <alf/alfmappingfunctions.h>
+// </cmail>
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFsTreePlainTwoLineItemVisualizer*
+    CFsTreePlainTwoLineItemVisualizer::NewL( CAlfControl& aOwnerControl )
+    {
+    CFsTreePlainTwoLineItemVisualizer* self =
+        new( ELeave ) CFsTreePlainTwoLineItemVisualizer( aOwnerControl );
+    CleanupStack::PushL( self );
+    self->ConstructL( );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// C++ destructor.
+// ---------------------------------------------------------------------------
+//
+CFsTreePlainTwoLineItemVisualizer::~CFsTreePlainTwoLineItemVisualizer()
+    {
+    FUNC_LOG;
+    delete iSecondaryTextMarquee;
+    if ( iKeyWords.Count() > 0 )
+        {
+        iKeyWords.Close();
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns visualizer's type.
+// ---------------------------------------------------------------------------
+//
+TFsTreeItemVisualizerType CFsTreePlainTwoLineItemVisualizer::Type() const
+    {
+    FUNC_LOG;
+    return EFsTreePlainTwoLineItemVisualizer;
+    }
+
+
+// ---------------------------------------------------------------------------
+//  Sets the alignment for text item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CFsTreePlainTwoLineItemVisualizer::SetSecondaryTextAlign(
+    const TAlfAlignHorizontal aAlign )
+    {
+    FUNC_LOG;
+    iSecondaryTextAlign = aAlign;
+    }
+
+// ---------------------------------------------------------------------------
+//  Turn on/off displaying preview pane (3rd line).
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::SetPreviewPaneOn( TBool aPreviewOn )
+    {
+    FUNC_LOG;
+    iPreviewPaneOn = aPreviewOn;
+    }
+
+// ---------------------------------------------------------------------------
+//  Retrurns information whether preview pane is turned on.
+// ---------------------------------------------------------------------------
+//
+TBool CFsTreePlainTwoLineItemVisualizer::IsPreviewPaneOn () const
+    {
+    FUNC_LOG;
+    return iPreviewPaneOn;
+    }
+
+// ---------------------------------------------------------------------------
+//  Sets the size of the item visualization area when it has preview pane
+//  turned on.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::SetPreviewPaneEnabledSize (
+                                                            const TSize aSize)
+    {
+    FUNC_LOG;
+    iPreviewPaneEnabledSize = aSize;
+    }
+
+// ---------------------------------------------------------------------------
+//  Function returns the size of an item when it has preview pane turned on.
+// ---------------------------------------------------------------------------
+//
+TSize CFsTreePlainTwoLineItemVisualizer::PreviewPaneEnabledSize() const
+    {
+    FUNC_LOG;
+    if ( iFlags & KFsTreeListItemManagedLayout )
+        {
+        CFsLayoutManager::TFsLayoutMetrics previewPaneSizeMetrics(CFsLayoutManager::EFsLmListMediumLineX3);
+        TRect parentLayoutRect(0,0,0,0);
+        TSize prevPaneSize(0,0);
+        TBool retVal(EFalse);
+
+        retVal = CFsLayoutManager::LayoutMetricsSize(
+                                    parentLayoutRect,
+                                    previewPaneSizeMetrics,
+                                    prevPaneSize );
+
+        if ( !retVal )
+            {
+            prevPaneSize = iPreviewPaneEnabledSize;
+            }
+
+        return prevPaneSize;
+        }
+    else
+        {
+        return iPreviewPaneEnabledSize;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+//  Function sets wether flag icon should be visible or hidden.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::SetFlagIconVisible( TBool aShowFlag )
+    {
+    FUNC_LOG;
+    iShowFlagIcon = aShowFlag;
+    }
+
+// ---------------------------------------------------------------------------
+//  Function returns information if flag icon is visible or hidden.
+// ---------------------------------------------------------------------------
+//
+TBool CFsTreePlainTwoLineItemVisualizer::IsFlagIconVisible( ) const
+    {
+    FUNC_LOG;
+    return iShowFlagIcon;
+    }
+
+// ---------------------------------------------------------------------------
+//  The function sets whether time visual should be visible when item is
+//  not focused (in one line layout).
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::SetIsTimeVisibleInFirstLineWhenNotFocused( TBool aIsVisible )
+    {
+    FUNC_LOG;
+    iIsTimeVisibleWhenNotFocused = aIsVisible;
+    }
+
+// ---------------------------------------------------------------------------
+//  The function returns whether time visual is visible when item is not
+//  focused (in one line layout).
+// ---------------------------------------------------------------------------
+//
+TBool CFsTreePlainTwoLineItemVisualizer::IsTimeVisibleInFirstLineWhenNotFocused( ) const
+    {
+    FUNC_LOG;
+    return iIsTimeVisibleWhenNotFocused;
+    }
+
+
+// From class MFsTreeItemVisualizer.
+
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns the size of an item in a normal (not extended) state.
+// ---------------------------------------------------------------------------
+//
+TSize CFsTreePlainTwoLineItemVisualizer::Size() const
+    {
+    FUNC_LOG;
+    if ( IsAlwaysExtended() )
+        {
+        //return iExtendedSize;
+        return CFsTreeItemVisualizerBase::ExtendedSize();
+        }
+    else
+        {
+        //return iSize;
+        return CFsTreeItemVisualizerBase::Size();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// Returns the size of an item in expanded state.
+// ---------------------------------------------------------------------------
+//
+TSize CFsTreePlainTwoLineItemVisualizer::ExtendedSize() const
+    {
+    FUNC_LOG;
+    if ( IsPreviewPaneOn() )
+        {
+        //return iPreviewPaneEnabledSize;
+        return PreviewPaneEnabledSize();
+        }
+    else
+        {
+        //return iExtendedSize;
+        return CFsTreeItemVisualizerBase::ExtendedSize();
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Updates the layout of the item beeing updated. Values are served by
+// layout manager.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::UpdateLayout(
+        const CFsTreePlainTwoLineItemData* aData,
+        const TInt aIndentation
+        )
+    {
+    FUNC_LOG;
+    TRect rect;
+
+    TAlfTimedPoint tpMainIconTl, tpMainIconBr;
+    TAlfTimedPoint tpMainTextTl, tpMainTextBr;
+    TAlfTimedPoint tpDateTextTl, tpDateTextBr;
+    TAlfTimedPoint tpMarkIconTl, tpMarkIconBr;
+    TAlfTimedPoint tpMenuIconTl, tpMenuIconBr;
+    TAlfTimedPoint tpFlagIconTl, tpFlagIconBr;
+    TAlfTimedPoint tpSubjTextTl, tpSubjTextBr;
+    TAlfTimedPoint tpPrevTextTl, tpPrevTextBr;
+    
+    CFsLayoutManager::TFsLayoutMetrics
+        mainIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1,
+        markIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG4,
+        menuIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG3,
+        sizeMetrics     = CFsLayoutManager::EFsLmListSingleDycRowPane,
+        exSizeMetrics   = CFsLayoutManager::EFsLmListSingleFsDycPane,
+        preSizeMetrics  = CFsLayoutManager::EFsLmListSingleFsDycPane,
+        flagIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+    
+    TInt mainIconVariety( 0 );
+    TInt mainIconRow( 0 );
+    TInt markIconVariety( 0 );
+    TInt markIconRow( 0 );
+    TInt menuIconVariety( 0 );
+    TInt menuIconRow( 0 );
+    
+    TInt sizeVariety( 0 );
+    TInt exSizeVariety( 1 );
+    TInt preSizeVariety( 2 );
+    TInt flagIconVariety( 0 );
+    TInt flagIconRow( 1 );
+
+    
+    CFsLayoutManager::TFsLayoutMetrics firstLineTextParentMetrics = 
+    CFsLayoutManager::EFsLmListSingleDycRowTextPane;
+    TInt firstLineTextParentVariety = 0;
+
+    //values are assigned to avoid compiler warnings
+    CFsLayoutManager::TFsLayoutMetrics firstLineTextMetrics[3] =
+        {
+                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1,
+                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2,
+                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2
+        };
+    TInt firstLineTextVarieties[3] =
+            {
+                    0,
+                    0,
+                    0
+            };
+    CFsLayoutManager::TFsLayoutMetrics secondLineTextMetrics =
+        CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+    TInt secondLineTextVariety = 0;
+    CFsLayoutManager::TFsLayoutMetrics thirdLineTextMetrics =
+        CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+    TInt thirdLineTextVariety = 0;
+
+    TInt firstLineTextFields = 0;
+
+    if ((iFlags & KFsTreeListItemAlwaysExtended) ||
+            (iFlags & KFsTreeListItemExtended))
+        {
+        //item extended
+        TAlfTimedValue opacity;
+        firstLineTextFields = 2;
+        if (aData->DataLength()==0)
+            {
+            firstLineTextFields--;
+            }
+        if (aData->DateTimeDataLength()==0)
+            {
+            firstLineTextFields--;
+            opacity.SetValueNow(0.0f);
+            iDateTimeTextVisual->SetOpacity(opacity);
+            }
+        else
+            {
+            opacity.SetValueNow(1.0f);
+            iDateTimeTextVisual->SetOpacity(opacity);
+            }
+
+        if (aData->IsIconSet())
+            {
+            if (iFlags & KFsTreeListItemMarked)
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //mainIcon + markIcon + menuIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 3;
+                    if (IsPreviewPaneOn())
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+						markIconRow = 2;
+                        }
+                    else
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                        markIconVariety = 1;
+						markIconRow = 0;
+                        }
+                    menuIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                    menuIconVariety = 2;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                              CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 3;
+                        firstLineTextParentVariety = 3;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 21;
+                        firstLineTextParentVariety = 3;
+                        if (IsPreviewPaneOn())
+                            {
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 13;
+                            firstLineTextParentVariety = 4;
+                            }
+                        else
+                            {
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 12;
+                            firstLineTextParentVariety = 3;
+                            }
+                        }
+                    }
+                else
+                    {
+                    //mainIcon + markIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 4;
+                    markIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                    markIconVariety = 3;
+                    firstLineTextParentVariety = 4;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 4;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 13;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 4;
+                        }
+                    }
+                }
+            else
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //mainIcon + menuIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 4;
+                    menuIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                    menuIconVariety = 3;
+                    firstLineTextParentVariety = 4;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 4;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 13;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 4;
+                        }
+                    }
+                else
+                    {
+                    //mainIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 4;
+                    firstLineTextParentVariety = 5;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 5;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 23;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 14;
+                        }
+                    }
+                }
+            secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+            secondLineTextVariety = 5;
+            flagIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+            flagIconVariety = 3;
+            }
+        else
+            {
+            if (iFlags & KFsTreeListItemMarked)
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //markIcon + menuIcon
+                    if (IsPreviewPaneOn())
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+						markIconRow = 2;
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 5;
+                        }
+                    else
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 4;
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                        menuIconVariety = 2;
+                        }
+                    firstLineTextParentVariety = 6;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                              CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 6;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 24;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 15;
+                        }
+                    }
+                else
+                    {
+                    //markIcon
+                    if (IsPreviewPaneOn())
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+						markIconRow = 2;
+                        }
+                    else
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+                        }
+                    if (firstLineTextFields==1)
+                        {
+                        if (IsPreviewPaneOn())
+                            {
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 8;
+                            firstLineTextParentVariety = 8;
+                            }
+                        else
+                            {
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 7;
+                            firstLineTextParentVariety = 7;
+                            }
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        if (IsPreviewPaneOn())
+                            {
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 26;
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 17;
+                            firstLineTextParentVariety = 8;
+                            }
+                        else
+                            {
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 25;
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 16;
+                            firstLineTextParentVariety = 7;
+                            }
+                        }
+                    }
+                }
+            else
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //menuIcon
+                    if (firstLineTextFields==1)
+                        {
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 7;
+                        firstLineTextParentVariety = 7;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 25;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 16;
+                        firstLineTextParentVariety = 7;
+                        }
+                    }
+                else
+                    {
+                    //plain item
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 8;
+                        firstLineTextParentVariety = 8;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 26;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 17;
+                        firstLineTextParentVariety = 8;
+                        }
+                    }
+                }
+
+            if (aData->IsFlagIconSet())
+                {
+                secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                secondLineTextVariety = 5;
+                flagIconMetrics = CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                flagIconVariety = 5;
+				flagIconRow = 1;
+                }
+            else
+                {
+                secondLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                secondLineTextVariety = 8;
+                }
+            }
+        //<cmail> ???
+        thirdLineTextMetrics = CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+        thirdLineTextVariety = 4;
+        //</cmail>
+        }
+    else
+        {
+
+        firstLineTextFields = 3;
+
+        TAlfTimedValue opacity;
+
+        if (aData->DataLength()==0)
+            {
+            firstLineTextFields--;
+            opacity.SetValueNow(0.0f);
+            iViewportLayout->SetOpacity(opacity);
+            }
+        else
+            {
+            opacity.SetValueNow(1.0f);
+            iViewportLayout->SetOpacity(opacity);
+            }
+
+        if (aData->SecondaryDataLength()==0)
+            {
+            firstLineTextFields--;
+            opacity.SetValueNow(0.0f);
+            iSecViewport->SetOpacity(opacity);
+            }
+        else
+            {
+            opacity.SetValueNow(1.0f);
+            iSecViewport->SetOpacity(opacity);
+            }
+
+        if (aData->DateTimeDataLength()==0)
+            {
+            firstLineTextFields--;
+            opacity.SetValueNow(0.0f);
+            iDateTimeTextVisual->SetOpacity(opacity);
+            }
+        else
+            {
+            opacity.SetValueNow(1.0f);
+            iDateTimeTextVisual->SetOpacity(opacity);
+            }
+
+        if (aData->IsIconSet())
+            {
+            if (iFlags & KFsTreeListItemMarked)
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //mainIcon + markIcon + menuIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 3;
+                    markIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                    markIconVariety = 1;
+                    menuIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                    menuIconVariety = 2;
+                    firstLineTextParentVariety = 3;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 3;
+                        }
+                    if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 21;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 12;
+                        }
+                    if (firstLineTextFields==3)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 30;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 21;
+                        firstLineTextMetrics[2] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                        firstLineTextVarieties[2] = 3;
+                        }
+                    }
+                else
+                    {
+                    //mainIcon + markIcon
+                    mainIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                    mainIconVariety = 4;
+                    markIconMetrics =
+                        CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                    markIconVariety = 3;
+                    firstLineTextParentVariety = 4;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 4;
+                        }
+                    if (firstLineTextFields==2)
+                        {
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 22;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 13;
+                        }
+                    if (firstLineTextFields==3)
+                        {
+                        if ( IsTimeVisibleInFirstLineWhenNotFocused() )
+                            {
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 31;
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 22;
+                            firstLineTextMetrics[2] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                            firstLineTextVarieties[2] = 4;
+                            if ( iDateTimeTextVisual )
+                                {
+                                opacity.SetValueNow(1.0f);
+                                iDateTimeTextVisual->SetOpacity(opacity);
+                                }
+                            }
+                        else
+                            { //hide time visual - display sender and subject only
+                            firstLineTextFields = 2;
+                            //hide time visual
+                            if ( iDateTimeTextVisual )
+                                {
+                                opacity.SetValueNow(0.0f);
+                                iDateTimeTextVisual->SetOpacity(opacity);
+                                }
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 22;
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 13;
+                            }
+                        }
+                    }
+                }
+            else
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //mainIcon + menuIcon
+                    firstLineTextParentVariety = 4;
+                    if (firstLineTextFields==1)
+                        {
+                        mainIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                        mainIconVariety = 4;
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 3;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 4;
+                        }
+                    if (firstLineTextFields==2)
+                        {
+                        mainIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                        mainIconVariety = 4;
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 3;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 22;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 13;
+                        }
+                    if (firstLineTextFields==3)
+                        {
+                        mainIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                        mainIconVariety = 4;
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 3;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 31;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 22;
+                        firstLineTextMetrics[2] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                        firstLineTextVarieties[2] = 4;
+                        }
+                    }
+                else
+                    {
+                    //mainIcon
+                    firstLineTextParentVariety = 5;
+                    if (firstLineTextFields==1)
+                        {
+                        mainIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                        mainIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 5;
+                        }
+                    if (firstLineTextFields==2)
+                        {
+                        mainIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                        mainIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 23;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 14;
+                        }
+                    if (firstLineTextFields==3)
+                        {
+                        if ( IsTimeVisibleInFirstLineWhenNotFocused() )
+                            {
+                            mainIconMetrics =
+                                CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                            mainIconVariety = 5;
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 32; 
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 23;
+                            firstLineTextMetrics[2] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                            firstLineTextVarieties[2] = 5;
+                            if ( iDateTimeTextVisual )
+                                {
+                                opacity.SetValueNow(1.0f);
+                                iDateTimeTextVisual->SetOpacity(opacity);
+                                }
+                            }
+                        else
+                            { //hide time visual - display sender and subject only
+                            firstLineTextFields = 2;
+                            mainIconMetrics =
+                                CFsLayoutManager::EFsLmListSingleDycRowPaneG1;
+                            mainIconVariety = 5;
+                            firstLineTextMetrics[0] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                            firstLineTextVarieties[0] = 23; 
+                            firstLineTextMetrics[1] =
+                                CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                            firstLineTextVarieties[1] = 14;
+                            //hide time visual
+                            if ( iDateTimeTextVisual )
+                                {
+                                opacity.SetValueNow(0.0f);
+                                iDateTimeTextVisual->SetOpacity(opacity);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        else
+            {
+            if (iFlags & KFsTreeListItemMarked)
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //markIcon + menuIcon
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextParentVariety = 7;
+                        firstLineTextMetrics[0] =
+                             CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 7;
+                        markIconMetrics =
+                             CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                        markIconVariety = 2;
+                        menuIconMetrics =
+                             CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 4;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        firstLineTextParentVariety = 6;
+                        markIconMetrics =
+                         CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                        markIconVariety = 2;
+                        menuIconMetrics =
+                         CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 4;
+                        firstLineTextMetrics[0] =
+                         CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 24;
+                        firstLineTextMetrics[1] =
+                         CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 15;
+                        }
+                    else if (firstLineTextFields==3)
+                        {
+                        firstLineTextParentVariety = 6;
+                        markIconMetrics =
+                             CFsLayoutManager::EFsLmListSingleDycRowPaneG3;
+                        markIconVariety = 2;
+                        menuIconMetrics =
+                             CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 4;
+                        firstLineTextMetrics[0] =
+                             CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 33;
+                        firstLineTextMetrics[1] =
+                             CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                        firstLineTextVarieties[1] = 24;
+                        }
+                    }
+                else
+                    {
+                    //markIcon
+                    firstLineTextParentVariety = 7;
+                    if (firstLineTextFields==1)
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 7;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        markIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        markIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 25;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 16;
+                        }
+                    else if (firstLineTextFields==3)
+                        {
+                        }
+                    }
+                }
+            else
+                {
+                if ((iFlags & KFsTreeListItemHasMenu)
+                        && (iFlags & KFsTreeListItemFocused))
+                    {
+                    //menuIcon
+                    firstLineTextParentVariety = 7;
+                    if (firstLineTextFields==1)
+                        {
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 7;
+                        }
+                    else if (firstLineTextFields==2)
+                        {
+                        menuIconMetrics =
+                            CFsLayoutManager::EFsLmListSingleDycRowPaneG4;
+                        menuIconVariety = 5;
+                        firstLineTextMetrics[0] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 25;
+                        firstLineTextMetrics[1] =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 16;
+                        }
+                    else if (firstLineTextFields==3)
+                        {
+                        }
+                    }
+                else
+                    {
+                    //plain item
+                    firstLineTextParentVariety = 8;
+                    if (firstLineTextFields==1)
+                        {
+                        firstLineTextMetrics[0]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 8;
+                        }
+                    if (firstLineTextFields==2)
+                        {
+                        firstLineTextParentVariety = 8;
+                        firstLineTextMetrics[0]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 26;
+                        firstLineTextMetrics[1]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 17;
+                        }
+                    if (firstLineTextFields==3)
+                        {
+                        firstLineTextMetrics[0]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT1;
+                        firstLineTextVarieties[0] = 35;
+                        firstLineTextMetrics[1]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT2;
+                        firstLineTextVarieties[1] = 26;
+                        firstLineTextMetrics[2]     =
+                            CFsLayoutManager::EFsLmListSingleDycRowTextPaneT3;
+                        firstLineTextVarieties[2] = 8;
+                        }
+
+                    }
+                }
+            }
+        }
+    //layout manager is queried for medium values - LM returnes rects based on phone's global text settings
+
+    TRect parentLayoutRect = TRect(iParentLayout->Size().Target().AsSize());
+    parentLayoutRect.Resize(-(iParentLayout->HorizontalPadding()*2), 0);
+
+    if (iFlags & KFsTreeListItemManagedLayout)
+        {
+        CFsLayoutManager::LayoutMetricsSize(
+                parentLayoutRect,
+                preSizeMetrics,
+                iPreviewPaneEnabledSize,
+                preSizeVariety);
+
+        CFsLayoutManager::LayoutMetricsSize(
+                parentLayoutRect,
+                exSizeMetrics,
+                iExtendedSize,
+                exSizeVariety);
+
+        CFsLayoutManager::LayoutMetricsSize(
+                parentLayoutRect,
+                sizeMetrics,
+                iSize,
+                sizeVariety);
+        }
+
+    TRect currentSize;
+    if ((iFlags & KFsTreeListItemAlwaysExtended) ||
+            (iFlags & KFsTreeListItemExtended))
+        {
+        if (IsPreviewPaneOn())
+            {
+            currentSize = iPreviewPaneEnabledSize;
+            }
+        else
+            {
+            currentSize = iExtendedSize;
+            }
+        }
+    else
+        {
+        currentSize = iSize;
+        }
+
+    if (CFsLayoutManager::IsMirrored())
+        {
+        currentSize.iBr = currentSize.iBr - TPoint(aIndentation, 0);
+        }
+    else
+        {
+        currentSize.iTl = currentSize.iTl + TPoint(aIndentation, 0);
+        }
+
+    TAlfTimedValue opacity;
+
+    if ((iFlags & KFsTreeListItemHasMenu)
+            && (iFlags & KFsTreeListItemFocused))
+        {
+        TRect iconRowParent = currentSize;
+        if (menuIconRow > 0)
+            {
+            CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, iconRowParent, menuIconRow, menuIconRow);
+            }
+        CFsLayoutManager::LayoutMetricsRect(
+                iconRowParent,
+                menuIconMetrics,
+                rect,
+                menuIconVariety);
+        tpMenuIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+        tpMenuIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+
+        TInt iconMenuVisIndex = iLayout->FindVisual(iIconMenu);
+        if ( iconMenuVisIndex != KErrNotFound )
+            {
+            tpMenuIconTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    iconMenuVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMenuIconTl );
+            tpMenuIconBr.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    iconMenuVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMenuIconBr );
+            }
+        }
+
+
+    if (iIconVisual)
+        {
+        TRect iconRowParent = currentSize;
+        if (mainIconRow > 0)
+            {
+            CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, iconRowParent, mainIconRow, mainIconRow);
+            }
+        CFsLayoutManager::LayoutMetricsRect(
+                iconRowParent,
+                mainIconMetrics,
+                rect,
+                mainIconVariety);
+        tpMainIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+        tpMainIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+
+        TInt iconVisIndex = iLayout->FindVisual(iIconVisual);
+        if ( iconVisIndex != KErrNotFound )
+            {
+            tpMainIconTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor( EAlfAnchorTopLeft,
+                    iconVisIndex,
+                    EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+                    tpMainIconTl );
+            tpMainIconBr.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor( EAlfAnchorBottomRight,
+                    iconVisIndex,
+                    EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+                    tpMainIconBr );
+            }
+        }
+
+    TInt firstLineTextIndex = 0;
+
+    if (aData->DataLength()>0)
+        {
+        TRect textParentRect;
+        CFsLayoutManager::LayoutMetricsRect(currentSize, firstLineTextParentMetrics, textParentRect, firstLineTextParentVariety);
+        CFsLayoutManager::TFsText mainTextInfo;
+        CFsLayoutManager::LayoutMetricsText(textParentRect,
+                firstLineTextMetrics[0], mainTextInfo, firstLineTextVarieties[0]);
+
+        firstLineTextIndex++;
+        tpMainTextTl.SetTarget(TAlfRealPoint(mainTextInfo.iTextRect.iTl));
+        tpMainTextBr.SetTarget(TAlfRealPoint(mainTextInfo.iTextRect.iBr));
+
+        TInt textVisIndex = iLayout->FindVisual(iViewportLayout);
+        if ( textVisIndex != KErrNotFound )
+            {
+            tpMainTextTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    textVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMainTextTl );
+            tpMainTextBr.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    textVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMainTextBr );
+            }
+        }
+
+    if (aData->SecondaryDataLength()>0)
+        {
+        CFsLayoutManager::TFsText subjTextInfo;
+
+        if ((iFlags & KFsTreeListItemAlwaysExtended) ||
+                (iFlags & KFsTreeListItemExtended))
+            {
+            TRect secondLineParentRect;            
+            CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, secondLineParentRect, 1, 1);            
+            CFsLayoutManager::LayoutMetricsRect(secondLineParentRect, CFsLayoutManager::EFsLmListSingleDycRowTextPane, secondLineParentRect, secondLineTextVariety);
+            CFsLayoutManager::LayoutMetricsText(secondLineParentRect,
+                    secondLineTextMetrics, subjTextInfo, secondLineTextVariety);
+            }
+        else
+            {
+            TRect textParentRect;
+            CFsLayoutManager::LayoutMetricsRect(currentSize, firstLineTextParentMetrics, textParentRect, firstLineTextParentVariety);
+            CFsLayoutManager::LayoutMetricsText(textParentRect,
+                    firstLineTextMetrics[firstLineTextIndex], subjTextInfo, firstLineTextVarieties[firstLineTextIndex]);
+            firstLineTextIndex++;
+            }
+
+        tpSubjTextTl.SetTarget(TAlfRealPoint(subjTextInfo.iTextRect.iTl));
+        tpSubjTextBr.SetTarget(TAlfRealPoint(subjTextInfo.iTextRect.iBr));
+        
+        if (tpMainTextTl.iY.Target() == tpSubjTextTl.iY.Target() && tpMainTextBr.iX.Target() > tpSubjTextTl.iX.Target())
+            {
+            const TReal32 delta(tpMainTextBr.iX.Target() - tpSubjTextTl.iX.Target() + 1); 
+            tpSubjTextTl.iX.SetTarget(tpSubjTextTl.iX.Target() + delta, 0);            
+            tpSubjTextBr.iX.SetTarget(tpSubjTextBr.iX.Target() - delta, 0);            
+            }
+
+        TInt seconTextVisIndex = iLayout->FindVisual(iSecViewport);
+        if ( seconTextVisIndex != KErrNotFound )
+            {
+            tpSubjTextTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    seconTextVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpSubjTextTl );
+            tpSubjTextBr.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    seconTextVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpSubjTextBr );
+            }
+        }
+
+    if ( iDateTimeTextVisual )
+        {
+        TRect textParentRect;
+        CFsLayoutManager::LayoutMetricsRect(currentSize, firstLineTextParentMetrics, textParentRect, firstLineTextParentVariety);
+        CFsLayoutManager::TFsText dateTextInfo;
+        CFsLayoutManager::LayoutMetricsText(textParentRect,
+                firstLineTextMetrics[firstLineTextIndex], dateTextInfo, firstLineTextVarieties[firstLineTextIndex]);
+
+        tpDateTextTl.SetTarget(TAlfRealPoint(dateTextInfo.iTextRect.iTl));
+        tpDateTextBr.SetTarget(TAlfRealPoint(dateTextInfo.iTextRect.iBr));
+
+        TInt textDateTimeIndex =
+                        iLayout->FindVisual(iDateTimeTextVisual);
+        if ( textDateTimeIndex != KErrNotFound )
+            {
+            tpDateTextTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    textDateTimeIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpDateTextTl );
+            tpDateTextTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    textDateTimeIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpDateTextBr );
+            }
+        }
+
+    //visual for a flag icon
+    if ( IsFlagIconVisible() && ((iFlags & KFsTreeListItemExtended) ||
+            (iFlags & KFsTreeListItemAlwaysExtended)))
+        {
+        TRect iconRowParent = currentSize;
+        if (flagIconRow > 0)
+            {
+            CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, iconRowParent, flagIconRow, flagIconRow);
+            }
+        CFsLayoutManager::LayoutMetricsRect(
+                iconRowParent,
+                flagIconMetrics,
+                rect,
+                flagIconVariety);
+        tpFlagIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+        tpFlagIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+
+        TInt iconFlagVisIndex =
+                          iLayout->FindVisual(iIconFlagVisual);
+        if ( iconFlagVisIndex != KErrNotFound )
+            {
+            tpFlagIconTl.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorTopLeft,
+                iconFlagVisIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+                tpFlagIconTl );
+            tpFlagIconBr.SetStyle(EAlfTimedValueStyleSineWave);
+            iLayout->SetAnchor(EAlfAnchorBottomRight,
+                iconFlagVisIndex,
+                EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+                EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+                tpFlagIconBr );
+            opacity.SetValueNow(1.0f);
+            iIconFlagVisual->SetOpacity(opacity);
+            }
+        }
+    else
+        {
+        if (iIconFlagVisual)
+            {
+            opacity.SetValueNow(0.0f);
+            iIconFlagVisual->SetOpacity(opacity);
+            }
+        }
+
+    if ( IsMarked() && iIconMarked )
+        {
+        if (iIconMarked)
+            {
+            TRect iconRowParent = currentSize;
+            if (markIconRow > 0)
+                {
+                CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, iconRowParent, markIconRow, markIconRow);
+                }
+            CFsLayoutManager::LayoutMetricsRect(
+                    iconRowParent,
+                    markIconMetrics,
+                    rect,
+                    markIconVariety);
+            tpMarkIconTl.SetTarget(TAlfRealPoint(rect.iTl));
+            tpMarkIconBr.SetTarget(TAlfRealPoint(rect.iBr));
+
+            TInt iconMarkedVisIndex =
+                                 iLayout->FindVisual(iIconMarked);
+            if ( iconMarkedVisIndex != KErrNotFound )
+                {
+                tpMarkIconTl.SetStyle(EAlfTimedValueStyleSineWave);
+                iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    iconMarkedVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMarkIconTl );
+                tpMarkIconBr.SetStyle(EAlfTimedValueStyleSineWave);
+                iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    iconMarkedVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpMarkIconBr );
+                }
+            }
+        opacity.SetValueNow(1.0f);
+        iIconMarked->SetOpacity(opacity);
+        }
+    else
+        {
+        if (iIconMarked)
+        	{
+        	opacity.SetValueNow(0.0f);
+        	iIconMarked->SetOpacity(opacity);
+        	}
+        }
+
+    if ( iPreviewPaneTextVisual )
+        {
+        if ( IsPreviewPaneOn() && ((iFlags & KFsTreeListItemAlwaysExtended) ||
+                (iFlags & KFsTreeListItemExtended)) )
+            {
+            TRect thirdLineParentRect;
+            CFsLayoutManager::LayoutMetricsRect(currentSize, CFsLayoutManager::EFsLmListSingleDycRowPane, thirdLineParentRect, 2, 2);
+            CFsLayoutManager::LayoutMetricsRect(thirdLineParentRect, CFsLayoutManager::EFsLmListSingleDycRowTextPane, thirdLineParentRect, thirdLineTextVariety);
+            CFsLayoutManager::TFsText prevTextInfo;
+            CFsLayoutManager::LayoutMetricsText(thirdLineParentRect,
+                    thirdLineTextMetrics, prevTextInfo, thirdLineTextVariety);
+
+            firstLineTextIndex++;
+            tpPrevTextTl.SetTarget(TAlfRealPoint(prevTextInfo.iTextRect.iTl));
+            tpPrevTextBr.SetTarget(TAlfRealPoint(prevTextInfo.iTextRect.iBr));
+
+            TInt prevPaneVisIndex =
+                      iLayout->FindVisual(iPreviewPaneTextVisual);
+            if ( prevPaneVisIndex != KErrNotFound )
+                {
+                tpPrevTextTl.SetStyle(EAlfTimedValueStyleSineWave);
+                iLayout->SetAnchor(EAlfAnchorTopLeft,
+                    prevPaneVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpPrevTextTl );
+                tpPrevTextBr.SetStyle(EAlfTimedValueStyleSineWave);
+                iLayout->SetAnchor(EAlfAnchorBottomRight,
+                    prevPaneVisIndex,
+                    EAlfAnchorOriginLeft,EAlfAnchorOriginTop,
+                    EAlfAnchorMetricAbsolute,EAlfAnchorMetricAbsolute,
+                    tpPrevTextBr );
+                }
+            }
+
+        }
+    iLayout->UpdateChildrenLayout();
+    // </cmail>
+    }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// A call to this function means that the item is requested to draw itself
+// within specified parent layout.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::ShowL( CAlfLayout& aParentLayout,
+                                        const TUint aTimeout )
+    {
+    FUNC_LOG;
+    iParentLayout = &aParentLayout;
+    if (!iLayout)
+        {
+        iLayout = CAlfAnchorLayout::AddNewL(iOwnerControl, NULL);
+        iLayout->SetTactileFeedbackL( ETouchEventStylusDown, ETouchFeedbackBasic );
+        iLayout->EnableBrushesL();
+        iLayout->SetSize(TSize(iParentLayout->Size().IntTarget().AsSize().iWidth,0));
+        iLayout->SetClipping(ETrue);
+        if (!iIconVisual)
+            {
+            iIconVisual = CAlfImageVisual::AddNewL( iOwnerControl, iLayout );
+            iIconVisual->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iIconVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iViewportLayout)
+            {
+            iViewportLayout =
+                      CAlfViewportLayout::AddNewL(iOwnerControl, iLayout);
+            iViewportLayout->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iTextVisual)
+            {
+            iTextVisual = CAlfTextVisual::AddNewL(iOwnerControl,
+                    iViewportLayout);
+            iTextVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iSecViewport)
+            {
+            iSecViewport =
+                      CAlfViewportLayout::AddNewL(iOwnerControl, iLayout);
+            iSecViewport->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iSecondaryTextVisual)
+            {
+            iSecondaryTextVisual = CAlfTextVisual::AddNewL(iOwnerControl,
+                    iSecViewport);
+            iSecondaryTextVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iIconMarked)
+            {
+            iIconMarked = CAlfImageVisual::AddNewL( iOwnerControl, iLayout );
+            iIconMarked->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iIconMarked->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iIconMenu)
+            {
+            iIconMenu =
+                        CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iIconMenu->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iIconMenu->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+        if (!iIconFlagVisual)
+            {
+            iIconFlagVisual =
+                          CAlfImageVisual::AddNewL(iOwnerControl, iLayout);
+            iIconFlagVisual->SetScaleMode( CAlfImageVisual::EScaleFit );
+            iIconFlagVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+
+         if ( !iDateTimeTextVisual )
+             {
+            iDateTimeTextVisual = CAlfTextVisual::AddNewL(iOwnerControl, iLayout);
+            iDateTimeTextVisual->SetStyle(EAlfTextStyleSmall);
+            iDateTimeTextVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+         if ( !iPreviewPaneTextVisual )
+             {
+             iPreviewPaneTextVisual = CAlfTextVisual::AddNewL(iOwnerControl,
+                     iLayout);
+             iPreviewPaneTextVisual->SetAlign(EAlfAlignHLeft,EAlfAlignVCenter);
+             iPreviewPaneTextVisual->SetFlag( EAlfVisualFlagIgnorePointer );
+            }
+         iTextMarquee = new (ELeave) TFsMarqueeClet(iOwnerControl, *iViewportLayout, TFsMarqueeClet::EScrollFromRight, TFsMarqueeClet::EScrollForth);
+         iSecondaryTextMarquee = new (ELeave) TFsMarqueeClet(iOwnerControl, *iSecViewport, TFsMarqueeClet::EScrollFromRight, TFsMarqueeClet::EScrollForth);         
+         iParentLayout->Append(iLayout, 0);
+        }
+    else
+        {
+        //visuals are already created but not attached to the list layout
+        if (!iLayout->Layout())
+            {
+            aParentLayout.Append(iLayout, aTimeout);
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// A call to this function means that the item is requested to update its
+// visual content.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::UpdateL( const MFsTreeItemData& aData,
+                                          TBool aFocused,
+                                          const TUint aLevel,
+                                          CAlfTexture*& aMarkIcon,
+                                          CAlfTexture*& aMenuIcon,
+                                          const TUint aTimeout,
+                                          TBool aUpdateData)
+    {
+    FUNC_LOG;
+    TAlfTimedValue opacity;
+
+    if (iLayout)
+        {
+        iSize.iWidth = iParentLayout->Size().Target().iX;
+        iExtendedSize.iWidth = iSize.iWidth;
+        iPreviewPaneEnabledSize.iWidth = iSize.iWidth;
+        
+        TSize layoutSize(iLayout->Size().Target().iX, iLayout->Size().Target().iY);
+        layoutSize.iWidth = iSize.iWidth;
+        iLayout->SetSize(layoutSize);
+
+        if (aFocused)
+            {
+            if (IsFocusable())
+                {
+                iFlags |= KFsTreeListItemFocused;
+                }
+            }
+        else
+            {
+            iFlags &= ~KFsTreeListItemFocused;
+            }
+
+        if ( aData.Type() == KFsTreePlainTwoLineItemDataType )
+            {
+            const CFsTreePlainTwoLineItemData* data =
+                      static_cast<const CFsTreePlainTwoLineItemData*>(&aData);
+
+            if( iIconMenu )
+                {
+                opacity.SetValueNow(0.0f);
+                iIconMenu->SetOpacity(opacity);
+                }
+                      
+            //update the ancors for current item settings
+            const TInt indent( iTextIndentation * ( aLevel - 1 ) );
+            UpdateLayout(data, indent);
+
+            //set data to visuals
+
+            //display main icon
+            if (data->IsIconSet())
+                {
+                iIconVisual->SetScaleMode( CAlfImageVisual::EScaleFit );
+                iIconVisual->SetImage(TAlfImage(data->Icon()));
+                }
+
+            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;
+                }
+            else
+                {
+                if (!iIsCustomTextNormalColor)
+                    {//custom color not set, use color from skin - load it in case theme has changed
+                    iNormalTextColor = NormalStateTextSkinColor( );
+                    }
+                textColor = iNormalTextColor;
+                }
+
+            TInt styleId = ModifiedStyleIdL( );
+
+            iOwnerControl.Env().CancelCustomCommands(this);
+
+            if( iTextVisual && aUpdateData )
+                {
+                TAlfTimedPoint tp(0,0);
+                tp.SetStyle(EAlfTimedValueStyleLinear);
+                iTextVisual->SetPos(tp);
+                iTextVisual->SetTextL(data->Data( ));
+
+                iTextVisual->EnableShadow(iFlags & KFsTreeListItemTextShadow);
+                iTextVisual->SetColor( textColor );
+                iTextVisual->SetTextStyle( styleId );
+
+//                iTextVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+                TAlfAlignHorizontal currTextAlign( EAlfAlignHLocale );
+                currTextAlign = CurrentTextAlignmentL( iTextAlign, &data->Data(), iTextVisual );
+                iTextVisual->SetAlign( currTextAlign, EAlfAlignVCenter );
+
+                iTextVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+
+                if ( currTextAlign == EAlfAlignHRight )
+                    {
+                    iTextMarquee->SetScrollDirection( TFsMarqueeClet::EScrollFromLeft );
+                    }
+                else
+                    {
+                    iTextMarquee->SetScrollDirection( TFsMarqueeClet::EScrollFromRight );
+                    }
+                }
+
+            if ( iSecondaryTextVisual && aUpdateData )
+                {
+                TAlfTimedPoint stp(0,0);
+                stp.SetStyle(EAlfTimedValueStyleLinear);
+                iSecondaryTextVisual->SetPos(stp);
+                iSecondaryTextVisual->SetTextL(data->SecondaryData());
+
+                iSecondaryTextVisual->EnableShadow(iFlags & KFsTreeListItemTextShadow);
+                iSecondaryTextVisual->SetColor( textColor );
+                iSecondaryTextVisual->SetTextStyle( styleId );
+
+//                iSecondaryTextVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+                TAlfAlignHorizontal currSecTextAlign( EAlfAlignHLocale );
+                currSecTextAlign = CurrentTextAlignmentL( iSecondaryTextAlign, &data->SecondaryData(), iSecondaryTextVisual );
+                iSecondaryTextVisual->SetAlign(currSecTextAlign,EAlfAlignVCenter );
+
+                iSecondaryTextVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+
+                if ( currSecTextAlign == EAlfAlignHRight )
+                    {
+                    iSecondaryTextMarquee->SetScrollDirection( TFsMarqueeClet::EScrollFromLeft );
+                    }
+                else
+                    {
+                    iSecondaryTextMarquee->SetScrollDirection( TFsMarqueeClet::EScrollFromRight );
+                    }
+                HighlightKeyWords(data->SecondaryData());
+                }
+
+
+
+            if (( IsExtended() || IsAlwaysExtended() ) && IsPreviewPaneOn() && aUpdateData )
+                {
+                opacity.SetTarget(1.0f, aTimeout);
+                iPreviewPaneTextVisual->SetOpacity(opacity);
+                iPreviewPaneTextVisual->SetTextL(data->PreviewPaneData());
+
+                iPreviewPaneTextVisual->EnableShadow(iFlags & KFsTreeListItemTextShadow);
+                iPreviewPaneTextVisual->SetColor( textColor );
+                iPreviewPaneTextVisual->SetTextStyle( styleId );
+
+//                iPreviewPaneTextVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+                TAlfAlignHorizontal currSecTextAlign( EAlfAlignHLocale );
+                currSecTextAlign = CurrentTextAlignmentL( EAlfAlignHLocale, &data->PreviewPaneData(), iPreviewPaneTextVisual );
+                iPreviewPaneTextVisual->SetAlign(currSecTextAlign,EAlfAlignVCenter );
+
+                iPreviewPaneTextVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+                }
+            else
+                {
+                opacity.SetTarget(0.0f, aTimeout);
+                iPreviewPaneTextVisual->SetOpacity(opacity);
+                }
+
+            if ( iDateTimeTextVisual && aUpdateData )
+                {
+                iDateTimeTextVisual->SetTextL(data->DateTimeData());
+                if (CFsLayoutManager::IsMirrored())
+                    {
+                    iDateTimeTextVisual->SetAlign(EAlfAlignHLeft,
+                                                  EAlfAlignVCenter );
+                    }
+                else
+                    {
+                    iDateTimeTextVisual->SetAlign(EAlfAlignHRight,
+                                                  EAlfAlignVCenter );
+                    }
+                iDateTimeTextVisual->SetWrapping(
+                                          CAlfTextVisual::ELineWrapTruncate);
+                iDateTimeTextVisual->EnableShadow(
+                                          iFlags & KFsTreeListItemTextShadow);
+                iDateTimeTextVisual->SetColor( textColor );
+                iDateTimeTextVisual->SetTextStyle( styleId );
+                }
+
+            if ( IsMarked() && iIconMarked && aMarkIcon )
+                {
+                iIconMarked->SetScaleMode( CAlfImageVisual::EScaleFit );
+                iIconMarked->SetImage( *aMarkIcon );
+                }
+
+            //menu icon - visible only when item is focused
+            if ((iFlags & KFsTreeListItemHasMenu) && (iFlags & KFsTreeListItemFocused))
+                {
+                opacity.SetTarget(1.0f,aTimeout);
+                iIconMenu->SetOpacity(opacity);
+                iIconMenu->SetScaleMode( CAlfImageVisual::EScaleFit );
+                iIconMenu->SetImage( *aMenuIcon );
+                }
+            else
+                {
+                opacity.SetTarget(0.0f,0);
+                iIconMenu->SetOpacity(opacity);
+                }
+
+            if ( iIconFlagVisual )
+                {
+                if (data->IsFlagIconSet())
+                    {
+                    iIconFlagVisual->SetScaleMode( CAlfImageVisual::EScaleFit );
+                    iIconFlagVisual->SetImage(TAlfImage(data->FlagIcon()));
+                    }
+                }
+
+           iTextMarquee->StopScrolling();
+           iTextVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+
+           iSecondaryTextMarquee->StopScrolling();
+           iSecondaryTextVisual->SetWrapping(CAlfTextVisual::ELineWrapTruncate);
+           }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From class MFsTreeItemVisualizer.
+// A call to this function means that the item goes out of the visible items
+// scope.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::Hide( const TInt aTimeout )
+    {
+    FUNC_LOG;
+    if ( iLayout )
+        {
+        //if marquee command was sent
+        iSecondaryTextVisual->Env().CancelCustomCommands(this);
+
+        delete iSecondaryTextMarquee;
+        iSecondaryTextMarquee = NULL;
+
+        CFsTreePlainOneLineItemVisualizer::Hide(aTimeout);
+        iSecViewport = NULL;
+        iSecondaryTextVisual = NULL;
+        iIconFlagVisual = NULL;
+        iDateTimeTextVisual = NULL;
+        iPreviewPaneTextVisual = NULL;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+//  From MFsTreeItemVisualizer.
+//  Method to marquee the text when it's too long.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::MarqueeL(const TFsTextMarqueeType aMarqueeType,
+                                                 const TUint aMarqueeSpeed,
+                                                 const TInt aMarqueeStartDelay,
+                                                 const TInt aMarqueeCycleStartDelay,
+                                                 const TInt aMarqueeRepetitions)
+    {
+    FUNC_LOG;
+    TInt marqueeSize(0), textWidth(0), marqueIdx(KErrNotFound);
+
+    if ( aMarqueeType == EFsTextMarqueeNone )
+        {
+        return;
+        }
+
+    iTextVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+    textWidth = iTextVisual->SubstringExtents(0, iTextVisual->Text().Length()).Width();
+    marqueeSize = textWidth - iViewportLayout->Size().iX.Target();
+
+    iTextVisual->Env().CancelCustomCommands(this, aMarqueeType);
+
+    if (iTextVisual && (marqueeSize>0))
+        {
+        TSize size( textWidth, iViewportLayout->Size().iY.Target() );
+        if ( aMarqueeType == EFsTextMarqueeForth )
+            {
+            iTextMarquee->SetScrollType( TFsMarqueeClet::EScrollForth );
+            }
+        else if ( aMarqueeType == EFsTextMarqueeForthBack )
+            {
+            iTextMarquee->SetScrollType( TFsMarqueeClet::EScrollBounce );
+            }
+        else if ( aMarqueeType == EFsTextMarqueeLoop )
+            {
+            iTextMarquee->SetScrollType( TFsMarqueeClet::EScrollWrap );
+            //duplicate text
+            TBufC <1> separator(_L(" "));
+            HBufC* textHeap = HBufC::NewLC( (iTextVisual->Text().Length()+1)*2+1);
+            TPtr doubleString(textHeap->Des());
+            doubleString = iTextVisual->Text();
+            doubleString.Append(_L(" "));
+            doubleString.Append(iTextVisual->Text());
+            doubleString.Append(_L(" "));
+            iTextVisual->SetTextL( doubleString );
+            CleanupStack::PopAndDestroy(textHeap);
+            size.iWidth = iTextVisual->SubstringExtents(0, iTextVisual->Text().Length()).Width();
+            }
+
+        iTextMarquee->SetScrollRepetitions( aMarqueeRepetitions );
+        TInt time(0);
+        if ( aMarqueeType == EFsTextMarqueeLoop )
+            {
+            time = textWidth * 1000 / aMarqueeSpeed;
+            }
+        else
+            {
+            time = marqueeSize * 1000 / aMarqueeSpeed;
+            }
+        iTextMarquee->SetScrollSpeed( time );
+        iTextMarquee->SetScrollableArea( size );
+        iTextMarquee->SetScrollCycleDelay( aMarqueeCycleStartDelay );
+
+        marqueIdx = 0;
+        TAlfCustomEventCommand cmd( aMarqueeType, this, marqueIdx );
+        iTextVisual->Env().Send(cmd, aMarqueeStartDelay );
+        }
+
+    iSecondaryTextVisual->SetWrapping(CAlfTextVisual::ELineWrapManual);
+
+    textWidth = iSecondaryTextVisual->SubstringExtents(0, iSecondaryTextVisual->Text().Length()).Width();
+    marqueeSize = textWidth - iSecViewport->Size().iX.Target();
+
+    if (iSecondaryTextVisual && (marqueeSize>0))
+        {
+        TSize size( textWidth, iSecViewport->Size().iY.Target() );
+        if ( aMarqueeType == EFsTextMarqueeForth )
+            {
+            iSecondaryTextMarquee->SetScrollType( TFsMarqueeClet::EScrollForth );
+            }
+        else if ( aMarqueeType == EFsTextMarqueeForthBack )
+            {
+            iSecondaryTextMarquee->SetScrollType( TFsMarqueeClet::EScrollBounce );
+            }
+        else if ( aMarqueeType == EFsTextMarqueeLoop )
+            {
+            iSecondaryTextMarquee->SetScrollType( TFsMarqueeClet::EScrollWrap );
+            //duplicate text
+            TBufC <1> separator(_L(" "));
+            HBufC* textHeap = HBufC::NewLC( (iSecondaryTextVisual->Text().Length()+1)*2+1);
+            TPtr doubleString(textHeap->Des());
+            doubleString = iSecondaryTextVisual->Text();
+            doubleString.Append(_L(" "));
+            doubleString.Append(iSecondaryTextVisual->Text());
+            doubleString.Append(_L(" "));
+            iSecondaryTextVisual->SetTextL( doubleString );
+            CleanupStack::PopAndDestroy(textHeap);
+            size.iWidth = iSecondaryTextVisual->SubstringExtents(0, iSecondaryTextVisual->Text().Length()).Width();
+            }
+
+        iSecondaryTextMarquee->SetScrollRepetitions( aMarqueeRepetitions );
+        TInt time(0);
+        if ( aMarqueeType == EFsTextMarqueeLoop )
+            {
+            time = textWidth * 1000 / aMarqueeSpeed;
+            }
+        else
+            {
+            time = marqueeSize * 1000 / aMarqueeSpeed;
+            }
+        iSecondaryTextMarquee->SetScrollSpeed( time );
+        iSecondaryTextMarquee->SetScrollableArea( size );
+        iSecondaryTextMarquee->SetScrollCycleDelay( aMarqueeCycleStartDelay );
+
+        marqueIdx = 1;
+        TAlfCustomEventCommand cmd( aMarqueeType, this, marqueIdx );
+        iTextVisual->Env().Send(cmd, aMarqueeStartDelay );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+//  Handles custom Alf event. Used with text marquee.
+// ---------------------------------------------------------------------------
+//
+TBool CFsTreePlainTwoLineItemVisualizer::OfferEventL(const TAlfEvent& aEvent)
+    {
+    FUNC_LOG;
+    TBool ret( EFalse );
+    if ( aEvent.IsCustomEvent() )
+        {
+        TInt param = aEvent.CustomParameter();
+        if ( param == EFsTextMarqueeForth ||
+             param == EFsTextMarqueeForthBack ||
+             param == EFsTextMarqueeLoop )
+            {
+            TInt idx(KErrNotFound);
+            idx = aEvent.CustomEventData();
+            ret = ETrue;
+            switch(idx)
+                {
+                case 0:
+                    {
+                    iTextMarquee->StartScrolling( );
+                    break;
+                    }
+                case 1:
+                    {
+                    iSecondaryTextMarquee->StartScrolling( );
+                    break;
+                    }
+                }
+            }
+        }
+    return ret;
+    }
+
+
+// ---------------------------------------------------------------------------
+//  C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CFsTreePlainTwoLineItemVisualizer::CFsTreePlainTwoLineItemVisualizer(
+    CAlfControl& aOwnerControl )
+    : CFsTreePlainOneLineItemVisualizer( aOwnerControl ),
+      iSecondaryTextVisual( NULL ),
+      iSecondaryTextAlign( EAlfAlignHLocale ),
+      iPreviewPaneOn( EFalse ),
+      iShowFlagIcon ( EFalse ),
+      iIconFlagVisual( NULL ),
+      iDateTimeTextVisual ( NULL ),
+      iPreviewPaneTextVisual ( NULL ),
+      iIsTimeVisibleWhenNotFocused ( ETrue )
+    {
+    FUNC_LOG;
+
+    }
+
+// ---------------------------------------------------------------------------
+//  Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CFsTreePlainTwoLineItemVisualizer::ConstructL( )
+    {
+    FUNC_LOG;
+    CFsTreePlainOneLineItemVisualizer::ConstructL();
+    }
+
+void CFsTreePlainTwoLineItemVisualizer::SetKeyWordsToHighlight(const RPointerArray<TDesC>& aKeyWords)
+    {
+    if ( iKeyWords.Count() > 0 )
+        {
+        iKeyWords.ResetAndDestroy();
+        }
+    for ( TInt i=0; i< aKeyWords.Count(); i++)
+        {
+        iKeyWords.Append(aKeyWords[i]);
+        }
+    }
+
+void CFsTreePlainTwoLineItemVisualizer::HighlightKeyWords(TDesC& aText)
+    {
+    //iBackgroundColor = FocusedStateBackGroundSkinColor();
+    iBackgroundColor = NormalStateTextSkinColor(); //temp fix for build break
+      if ( iKeyWords.Count() > 0 )
+        {
+        TInt pos = aText.FindC(*iKeyWords[0]);
+        iSecondaryTextVisual->SetHighlightRange(pos, pos+iKeyWords[0]->Length(), iBackgroundColor, iFocusedTextColor);
+        }
+    /*
+	// Code to Highlight Multiple Key words.
+    for ( TInt i=0; i <iKeyWords.Count(); i++ )
+        {
+        TInt pos = 0 ;
+        while(pos != KErrNotFound)
+            {
+            TPtrC subStr = aText.Mid(pos);
+            TInt val = subStr.FindC(*iKeyWords[i]); 
+            if ( val != KErrNotFound )
+                {
+                pos += val;
+                if( (pos + iKeyWords[i]->Length()) < aText.Length())
+                    {
+                    iSecondaryTextVisual->SetHighlightRange(pos,pos+iKeyWords[i]->Length(), color, Textcolor);
+                    pos += iKeyWords[i]->Length();
+                    }
+                }
+            else
+                {
+                pos = val;
+                }
+            }
+        }
+        */
+    }