--- /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;
+ }
+ }
+ }
+ */
+ }