emailuis/emailui/src/FreestyleEmailUiSearchListVisualiser.cpp
changeset 0 8466d47a6819
child 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleEmailUiSearchListVisualiser.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,2688 @@
+/*
+* Copyright (c) 2009 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: This file implements class CFSEmailUiSearchListVisualiser.
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include "emailtrace.h"
+#include <freestyleemailui.mbg>
+#include <AknUtils.h>
+#include <gulicon.h>
+#include <StringLoader.h>
+#include <FreestyleEmailUi.rsg>
+
+//<cmail>
+#include "CFSMailMessage.h"
+#include "CFSMailClient.h"
+#include "CFSMailFolder.h"
+#include "CFSMailBox.h"
+#include <alf/alfframebrush.h>
+#include <alf/alftextvisual.h>
+#include "fstreelist.h"
+#include "fstreevisualizerbase.h"
+#include "fstreeplaintwolineitemdata.h"
+#include "fstreeplaintwolineitemvisualizer.h"
+#include "fstreeplainonelinenodedata.h"
+#include "fstreeplainonelinenodevisualizer.h"
+
+//</cmail>
+#include <AknQueryDialog.h>
+//<cmail>
+#include "CFSMailCommon.h"
+#include <alf/alfanchorlayout.h>
+#include <alf/alfdecklayout.h>
+#include <alf/alfcontrolgroup.h>
+#include <alf/alfevent.h>
+#include <alf/alfbrusharray.h>
+// </cmail>
+#include <alf/alfenv.h>
+#include <alf/alfcommand.h>
+#include <aknnotewrappers.h>
+// <cmail>
+#include <aknlayoutscalable_apps.cdl.h>
+// </cmail>
+#include <featmgr.h>
+//</cmail>
+
+//<cmail>
+#include "cfsccontactactionmenu.h"
+#include "mfsccontactactionmenumodel.h"
+#include "fscontrolbar.h"
+#include "fscontrolbuttoninterface.h"
+#include "fscontrolbuttonvisualiser.h"
+#include <csxhelp/cmail.hlp.hrh>
+// </cmail>
+
+// Meeting request headers
+#include <MeetingRequestUids.hrh>
+//<cmail>
+#include "cesmricalviewer.h"
+//</cmail>
+
+// INTERNAL INCLUDES
+#include "FreestyleEmailUiLayoutHandler.h"
+#include "FreestyleEmailUiMailListModel.h"
+#include "FreestyleEmailUiMailListVisualiser.h"
+#include "FreestyleEmailUiSearchListVisualiser.h"
+#include "FreestyleEmailUiSearchListControl.h"
+#include "FreestyleEmailUiFileSystemInfo.h"
+#include "FreestyleEmailUiAppui.h"
+#include "FreestyleEmailUi.hrh"
+#include "FreestyleEmailUiTextureManager.h"
+#include "FreestyleEmailUiMailViewerVisualiser.h"
+#include "FreestyleEmailUiUtilities.h"
+#include "FreestyleEmailUiLiterals.h"
+#include "FreestyleEmailUiShortcutBinding.h"
+#include "FreestyleEmailUiMsgDetailsVisualiser.h"
+#include "FreestyleEmailCenRepHandler.h"
+#include "FreestyleEmailUiHtmlViewerView.h"
+#include "FSEmail.pan"
+
+// CONST VALUES
+static const TInt KMaxLengthOfSearchString = 255;
+//<cmail> s60 platform layouts
+//static const TInt KSearchIconWidth = 30;
+const TReal KFSHeaderTextBackgroundOpacity = 0.3f;
+//</cmail>
+static const TInt KItemExpansionDelay = 400;
+static const TInt KListScrollingDelay = 200;
+static const TInt KMaxPreviewPaneLength = 60; 
+
+
+
+CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewL(CAlfEnv& aEnv, 
+																 CFreestyleEmailUiAppUi* aAppUi,
+																 CAlfControlGroup& aSearchListControlGroup )
+    {
+    FUNC_LOG;
+    CFSEmailUiSearchListVisualiser* self = CFSEmailUiSearchListVisualiser::NewLC(aEnv, aAppUi, aSearchListControlGroup );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewLC(CAlfEnv& aEnv, 
+																  CFreestyleEmailUiAppUi* aAppUi,
+																  CAlfControlGroup& aSearchListControlGroup)
+{
+    FUNC_LOG;
+    CFSEmailUiSearchListVisualiser* self = new (ELeave) CFSEmailUiSearchListVisualiser(aAppUi, aEnv, aSearchListControlGroup);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+}
+
+void CFSEmailUiSearchListVisualiser::ConstructL()
+	{
+    FUNC_LOG;
+	BaseConstructL( R_FSEMAILUI_MAIL_SEARCH_VIEW );
+
+	// Set list as initial focused control
+	iThisViewActive = EFalse;
+	iFirstStartCompleted = EFalse;
+   	}
+	
+// CFSEmailUiSearchListVisualiser::DoFirstStartL()
+// Purpose of this function is to do first start only when search list is
+// really needed to be shown. Implemented to make app startuo faster.
+void CFSEmailUiSearchListVisualiser::DoFirstStartL()
+    {
+    FUNC_LOG;
+    TRect screenRect;
+    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );   
+     
+    // Create control and anchor layout
+    iSearchListControl = CFreestyleEmailUiSearchListControl::NewL( *iEnv, this );
+    iScreenAnchorLayout = CAlfAnchorLayout::AddNewL( *iSearchListControl );
+    iScreenAnchorLayout->SetFlags(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
+    SetSearchListLayoutAnchors();
+
+    // Create top bar layout
+    iSearchTopBarLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );  
+    iBarBgVisual = CAlfImageVisual::AddNewL( *iSearchListControl, iSearchTopBarLayout );
+        /*<cmail> paltform layout changes to cmail
+    TAlfTimedValue barBgTextureOpacity;
+    barBgTextureOpacity.SetValueNow( 1 );
+    iBarBgVisual->SetOpacity( barBgTextureOpacity );
+    CAlfTexture* barBgTexture = &iAppUi.FsTextureManager()->TextureByIndex( EMailListBarBgIcon );
+    barBgTexture->Size().SetSize( screenRect.Width(), iAppUi.LayoutHandler()->ControlBarHeight() );
+    iBarBgVisual->SetImage( TAlfImage( *barBgTexture ) );
+        */ //</cmail>
+
+        /*<cmail> magnifier image is not in cmail
+    // Add bar image component
+    iBarFindImage = CAlfImageVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
+    TAlfTimedValue barFindImageOpacity;
+    barFindImageOpacity.SetValueNow( 1 );   
+    iBarFindImage->SetOpacity( barFindImageOpacity );
+    CAlfTexture* barFindTexture = &iAppUi.FsTextureManager()->TextureByIndex( ESearchLookingGlassIcon );
+    barFindTexture->Size().SetSize( 15, 15 );
+    iBarFindImage->SetImage( TAlfImage( *barFindTexture ) );    
+        */ //</cmail>
+
+	// <cmail>
+    // Add bar text component
+    iBarTextVisual = CAlfTextVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
+    iBarTextVisual->EnableShadow(EFalse);
+    iBarTextVisual->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
+	// </cmail>
+	
+	/*<cmail> no initial text or opacity required in cmail
+    HBufC* initialSearchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
+    iBarTextVisual->SetTextL( *initialSearchText );     
+    CleanupStack::PopAndDestroy( initialSearchText );
+    TAlfTimedValue barTextVisualOpacity;
+    barTextVisualOpacity.SetValueNow( 1 );
+    iBarTextVisual->SetOpacity( barTextVisualOpacity );
+        
+    CAlfTextStyle* textStyle = iAppUi.LayoutHandler()->FSTextStyleFromIdL( EFSFontTypeSmallBold );
+    iBarTextVisual->SetTextStyle ( textStyle->Id() );*/ //</cmail>	
+    if ( !AknLayoutUtils::LayoutMirrored() )
+        {
+        iBarTextVisual->SetAlign(EAlfAlignHLeft, EAlfAlignVCenter);         
+        }
+    else
+        {
+        iBarTextVisual->SetAlign(EAlfAlignHRight, EAlfAlignVCenter);            
+        }
+
+    // Create model
+    iModel = CFSEmailUiMailListModel::NewL( &iAppUi, ETrue );  
+
+    // Create list and append to control group and anchor layout
+    iSearchListLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );  
+    iSearchListLayout->SetSize( TSize( screenRect.Width(), screenRect.Height()-
+            iAppUi.LayoutHandler()->ControlBarHeight() ) );
+    iSearchTreeListVisualizer = CFsTreeVisualizerBase::NewL(iSearchListControl, *iSearchListLayout);  
+    iSearchList = CFsTreeList::NewL(*iSearchTreeListVisualizer, *iEnv );   
+    iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
+  
+    // Set mark type and icon
+    iSearchList->SetMarkTypeL( CFsTreeList::EFsTreeListMultiMarkable ); 
+    iSearchTreeListVisualizer->SetMarkIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMarkIcon ) );
+    iSearchTreeListVisualizer->SetMenuIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMenuIcon ) );        
+	iSearchTreeListVisualizer->SetFlipState( iKeyboardFlipOpen );
+	iSearchTreeListVisualizer->SetFocusVisibility( iFocusVisible );
+    iSearchList->SetIndentationL(0);
+
+    //<cmail> events are now offered to controls in different order
+    ControlGroup().AppendL( iSearchListControl );
+    ControlGroup().AppendL( iSearchList->TreeControl() ); 
+    //</cmail>
+    //<cmail> touch
+    iSearchList->AddObserverL(*this); 
+    //</cmail>
+    iSearchOngoing = EFalse;
+ 
+    // Set mail list background 
+    //<cmail> S60 skin support
+    //iSearchTreeListVisualizer->SetBackgroundTextureL( iAppUi.FsTextureManager()->TextureByIndex( EBackgroundTextureMailList ) );  
+    //</cmail>
+  
+    iSearchTreeListVisualizer->SetItemExpansionDelay( KItemExpansionDelay );
+    iSearchList->SetScrollTime( KListScrollingDelay, 0.5 );
+
+    // Set empty text
+    HBufC* emptyText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_EMPTY_MSG_LIST_TEXT );
+    iSearchTreeListVisualizer->SetEmptyListTextL( *emptyText ); 
+    CleanupStack::PopAndDestroy( emptyText );
+    TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
+    iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor ); 
+     
+    // Create startup timer
+    iStartupCallbackTimer = CFSEmailUiGenericTimer::NewL( this );
+
+    // Set page up and page down keys
+    iSearchTreeListVisualizer->AddCustomPageUpKey( EStdKeyPageUp );
+    iSearchTreeListVisualizer->AddCustomPageDownKey( EStdKeyPageDown );
+
+    CAlfBrush* selectorBrush = iAppUi.FsTextureManager()->ListSelectorBrushL();
+    iSearchTreeListVisualizer->SetSelectorPropertiesL( selectorBrush, 1.0, CFsTreeVisualizerBase::EFsSelectorMoveSmoothly );
+  
+    iAppUi.LayoutHandler()->SetListMarqueeBehaviour( iSearchList );    
+    
+    iFirstStartCompleted = ETrue;
+   	}
+
+void CFSEmailUiSearchListVisualiser::TimerEventL( CFSEmailUiGenericTimer* /*aTriggeredTimer*/ )
+	{
+    FUNC_LOG;
+	LaunchSearchDialogL();	
+	}
+	
+CFSEmailUiSearchListVisualiser::CFSEmailUiSearchListVisualiser( CFreestyleEmailUiAppUi* aAppUi, 
+                                                                CAlfEnv& aEnv, 
+                                                                CAlfControlGroup& aSearchListControlGroup )
+    :CFsEmailUiViewBase( aSearchListControlGroup, *aAppUi ),
+    iEnv( &aEnv ),
+    iLatestSearchText(0),
+    iListAddedToControlGroup(EFalse), //<cmail>
+    iPreparedForExit(EFalse) //<cmail>
+	{
+    FUNC_LOG;
+	}
+	
+CFSEmailUiSearchListVisualiser::~CFSEmailUiSearchListVisualiser()
+	{
+    FUNC_LOG;
+    if ( iStartupCallbackTimer )
+    	{
+    	iStartupCallbackTimer->Cancel();
+    	delete iStartupCallbackTimer;
+    	}
+	iSearchStrings.ResetAndDestroy();
+	iSearchListItemArray.Reset(); 
+    delete iModel;
+	delete iLatestSearchText;
+	delete iSearchList;
+
+	}
+
+void CFSEmailUiSearchListVisualiser::PrepareForExit()
+    {
+    FUNC_LOG;
+    //<cmail> Not needed anymore as controls aren't removed from control group
+    /*if(!iListAddedToControlGroup)
+        {
+        if(iSearchList && iSearchList->TreeControl())
+            TRAP_IGNORE(ControlGroup().AppendL( iSearchList->TreeControl() ));
+        if(iSearchListControl)
+        TRAP_IGNORE(ControlGroup().AppendL( iSearchListControl ));
+        iListAddedToControlGroup = ETrue;        
+        }*/
+    //<cmail>
+    if ( iSearchOngoing )
+        {
+        TRAP_IGNORE( StopSearchL() );
+        }    
+    delete iMailBox;
+    iMailBox = NULL;
+    iPreparedForExit = ETrue;
+    }
+
+TInt CFSEmailUiSearchListVisualiser::HighlightedIndex() const
+	{
+    FUNC_LOG;
+	TFsTreeItemId focusedId = static_cast<TFsTreeItemId>( iSearchList->FocusedItem() );
+	// Map id to the index in model
+	TInt ret( KErrNotFound );
+	for ( TInt i=0; i<iSearchListItemArray.Count();i++ )
+		{
+		if ( focusedId == iSearchListItemArray[i].iSearchListItemId)
+			{
+			ret = i;
+			break;
+			}
+		}
+	return ret;
+	}
+
+	
+TUid CFSEmailUiSearchListVisualiser::Id() const
+	{
+    FUNC_LOG;
+	return SearchListViewId;	
+	}			   
+
+// <cmail> Toolbar
+/*void CFSEmailUiSearchListVisualiser::DoActivateL(const TVwsViewId& aPrevViewId,
+                     TUid aCustomMessageId,
+                     const TDesC8& aCustomMessage)*/
+void CFSEmailUiSearchListVisualiser::ChildDoActivateL(const TVwsViewId& aPrevViewId,
+                     TUid aCustomMessageId,
+                     const TDesC8& aCustomMessage)
+// </cmail> Toolbar
+	{
+    FUNC_LOG;
+	if ( !iFirstStartCompleted )
+	    {
+	    DoFirstStartL();	    
+	    }
+
+	// <cmail>
+    //iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
+    if ( aCustomMessageId != KStartListReturnToPreviousFolder )
+    	{
+    	iBarTextVisual->SetTextL(KNullDesC);	
+    	}
+    
+	if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
+		{
+		// If new search, clear old search list
+		iSearchCount=0;
+		iMsgDataCouldBeChanged = EFalse;
+		// <cmail> fixed CS high cat. finding
+		ResetResultListL();
+		}
+	// </cmail>
+
+	// Store previous view ID
+	iPreviousViewUid = aPrevViewId.iViewUid;
+	TSearchListActivationData subView;
+	TPckgBuf<TSearchListActivationData> viewData( subView );
+	viewData.Copy( aCustomMessage );
+	subView = viewData();		
+
+	// Update settings and set list mode according to settings
+	UpdateMailListSettingsL();
+
+	if ( iMailBox )
+		{
+		delete iMailBox;
+		iMailBox = NULL;
+		}
+	iMailBox = iAppUi.GetMailClient()->GetMailBoxByUidL( subView.iMailBoxId );			
+	// If mailbox data is not, try to get default MCE account
+	if ( !iMailBox )
+		{
+		CMsvSession* msvSession = iAppUi.GetMsvSession();
+		CFSMailClient* client = iAppUi.GetMailClient();
+		iMailBox = TFsEmailUiUtility::GetMceDefaultMailboxL( *client, *msvSession );				
+		}
+		
+	if ( iMailBox )	
+		{
+		iThisViewActive = ETrue;
+                //<cmail> visible/unvisible is not controlled by opacity in cmail
+		//TAlfTimedValue opacity; 
+		//opacity.SetValueNow( 1 );
+		//iScreenAnchorLayout->SetOpacity( opacity );
+                //</cmail>
+		iSearchList->ShowListL();
+		iSearchList->SetFocusedL(ETrue);
+		// Set empty text color
+	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
+		iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );  			
+
+		// Launch search dialog automatically when activated
+		if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
+			{
+			// <cmail> list reseting moved into the begining of the function
+			// requeset async launching of the search dialog because DoActivateL must
+			// not be blocked
+			iStartupCallbackTimer->Cancel(); // just in case
+			iStartupCallbackTimer->Start( iAppUi.LayoutHandler()->ViewSlideEffectTime() );			
+			}
+		else if ( iModel && iModel->Count() )
+			{
+			// Need to make sure that return to this view works even if following function leaves.
+			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );		
+			}
+		}
+    CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel ); 	
+	// Set msk always empty when view is activated.
+	SetMskL();
+	// <cmail>
+	ReScaleUiL(); // In case that Landscape/Portrait has changed.
+	// </cmail>
+
+	// <cmail> Touch
+	iSearchList->SetFocusedL(ETrue);
+	// </cmail>
+ 	}
+
+void CFSEmailUiSearchListVisualiser::ChildDoDeactivate()
+	{
+    FUNC_LOG;
+    if(iListAddedToControlGroup && (!iPreparedForExit))
+        {
+        iListAddedToControlGroup = EFalse;
+        }
+	iThisViewActive = EFalse;
+	
+    if ( !iAppUi.AppUiExitOngoing() )
+        {
+        if ( iSearchList->IsFocused() )
+            {
+            TRAP_IGNORE(iSearchList->SetFocusedL(EFalse));
+            }
+        iSearchTreeListVisualizer->NotifyControlVisibilityChange( EFalse );
+        }
+	}	
+	
+CFSEmailUiMailListModel* CFSEmailUiSearchListVisualiser::Model()
+	{
+    FUNC_LOG;
+	return iModel;	
+	}
+
+void CFSEmailUiSearchListVisualiser::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane )
+	{
+    FUNC_LOG;
+	if ( iSearchList->Count() && iModel )
+		{
+		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
+			{
+		    if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
+			   {
+			   // remove help support in pf5250
+			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
+			   }
+		    
+		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+			if ( item && item->ModelItemType() == ETypeMailItem && 
+				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
+				{
+				// Highlighted mail is calendar msg
+				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);						
+				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, EFalse);				
+				}
+			else
+				{
+				// Highlighted mail is mail msg
+				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, EFalse);						
+				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);	
+				}															
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, EFalse);								
+			}
+		}
+	else
+		{
+		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
+			{
+			
+		    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
+			   {
+			   // remove help support in pf5250
+			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
+			   }
+		    
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdMore, ETrue);								
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);								
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);								
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, ETrue);	
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdReadEmail, ETrue);								
+			}				
+		}
+		
+	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS ||
+	     aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
+		{
+		if ( iSearchList->Count() )
+			{
+		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+			if ( item && item->ModelItemType() == ETypeMailItem )
+				{
+				CFSMailMessage* messagePtr = &item->MessagePtr();
+				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_Read ) )
+					{
+					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsRead, ETrue);																	
+					}
+				else
+					{					
+					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsUnread, ETrue);																	
+					}			
+				}
+			}	
+		}	
+		
+	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
+		{
+		if ( iSearchList->Count() )
+			{		
+		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+			if ( item && item->ModelItemType() == ETypeMailItem )
+				{
+				CFSMailMessage* messagePtr = &item->MessagePtr();
+				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
+					{											 
+				    TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
+				    if ( iAppUi.MrViewerInstanceL() )
+				    	{
+				    	// Search must be stopped, otherwise resolve will lead to crash
+		                if ( iSearchOngoing )
+		                     {
+		                     StopSearchL();
+		                     }
+					    mrMethod = iAppUi.MrViewerInstanceL()->ResolveMeetingRequestMethodL( item->MessagePtr() );
+				   		}
+					switch ( mrMethod )
+						{
+						case EESMRMeetingRequestMethodRequest:
+						    {
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
+						    }
+							break;
+						case EESMRMeetingRequestMethodCancellation:
+						    {
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);						
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);						
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);	
+							
+							TBool supportsRemove = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaRemoveFromCalendar );
+							if( !supportsRemove )
+                                {
+                                aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
+                                }
+						    }
+							break;
+						default:
+						case EESMRMeetingRequestMethodUnknown:
+						case EESMRMeetingRequestMethodResponse:
+						    {
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);						
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);						
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);						
+							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);
+						    }
+							break;
+						}			
+					}			
+				}
+			
+			}
+		}
+		
+
+	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_MORE )
+		{
+// <cmail> Prevent Download Manager opening with attachments
+//		if ( iAppUi.DownloadInfoMediator() && !iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads() )
+//			{
+//			aMenuPane->SetItemDimmed(EFsEmailUiCmdDownloadManager, ETrue);																				
+//			}
+// </cmail>
+		}
+	
+	if (aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS) 
+	    {
+        CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+        CFSMailMessage* messagePtr = &item->MessagePtr();
+        TInt menuIndex( 0 );   
+        
+        //Get # of recipients
+        TInt numRecipients(0);
+        if ( messagePtr )
+            {
+            numRecipients =TFsEmailUiUtility::CountRecepients( messagePtr );
+            if ( numRecipients == 1 )
+                {
+                //check if the malbox ownmailaddress is same as the recipients email address. If not, then assume that the
+                //email is a distribution list and we need to inc num of Recipients so that "Reply ALL" option appears in UI.
+                if ( messagePtr->GetToRecipients().Count() )
+                    {
+                    if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetToRecipients()[0]->GetEmailAddress()) )
+                        {
+                        numRecipients++;
+                        }
+                    }
+                    if ( messagePtr->GetCCRecipients().Count() )
+                        {
+                        if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetCCRecipients()[0]->GetEmailAddress()) )
+                            {
+                            numRecipients++;
+                            }
+                        }
+                    if ( messagePtr->GetBCCRecipients().Count() )
+                        {
+                        if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetBCCRecipients()[0]->GetEmailAddress()) )
+                            {
+                            numRecipients++;
+                            }
+                        }                
+                }
+            
+            }                    
+        if ( numRecipients > 1 )
+            {
+            aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, EFalse );
+            }
+        else if ( aMenuPane->MenuItemExists( EFsEmailUiCmdActionsReplyAll, menuIndex ) )
+            {
+            aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, ETrue );
+            }
+	    }
+		
+	if ( !iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
+		{
+	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
+		   {
+		   // remove help support in pf5250
+		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
+		   }
+	    
+		aMenuPane->SetItemDimmed(EFsEmailUiCmdStopSearch, ETrue);						
+		if ( iSearchCount == 0 )
+			{
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);		
+			}
+		else
+			{
+			aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);								
+			}
+		}
+
+	if ( iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
+		{
+	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
+		   {
+		   // remove help support in pf5250
+		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
+		   }
+	    
+		aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);						
+		aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);						
+		}		
+		
+	iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane, CFSEmailUiShortcutBinding::EContextSearchResults );
+	}
+
+void CFSEmailUiSearchListVisualiser::RefreshL()
+	{
+    FUNC_LOG;
+    if ( iFirstStartCompleted ) //Safety
+        {
+        if ( iModel && iModel->Count() )
+             {
+             // Check if zoom level has been switched and refresh items if so
+             TAknUiZoom prevZoomLevel = iCurrentZoomLevel;   
+             CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel );
+             if ( prevZoomLevel != iCurrentZoomLevel )
+                 {
+                 for ( TInt i=0; i<iModel->Count(); i++ )
+                     {
+                     // Set font height
+                     iSearchListItemArray[i].iTreeItemVisualiser->
+                         SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );               
+                     iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[i].iSearchListItemId );
+                     }                   
+                 }
+             }       
+        }
+	}
+
+	
+void CFSEmailUiSearchListVisualiser::CreatePlainNodeL( const TDesC& aItemDataBuff,
+                                                     CFsTreePlainOneLineNodeData* &aItemData,
+                                                     CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const
+	{
+    FUNC_LOG;
+    aItemData = CFsTreePlainOneLineNodeData::NewL();
+    aItemData->SetDataL( aItemDataBuff );
+	aItemData->SetIconExpanded( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeExpanded) );
+    aItemData->SetIconCollapsed( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeCollapsed) );	        
+    aNodeVisualizer = CFsTreePlainOneLineNodeVisualizer::NewL( *iSearchList->TreeControl() );
+   	TRect screenRect;
+ 	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );	
+    TInt nodeHeight = iAppUi.LayoutHandler()->OneLineListNodeHeight();
+    aNodeVisualizer->SetSize( TSize(screenRect.Width(), nodeHeight) );
+    aNodeVisualizer->SetExtendable(EFalse);
+  	// Set correct skin text colors for the list items  
+   	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
+   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
+    aNodeVisualizer->SetFocusedStateTextColor( focusedColor );
+    aNodeVisualizer->SetNormalStateTextColor( normalColor );	 
+ 	}
+
+	
+void CFSEmailUiSearchListVisualiser::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType )
+	{
+    FUNC_LOG;
+    CFsEmailUiViewBase::HandleDynamicVariantSwitchL( aType );
+    if ( iFirstStartCompleted ) // Safety
+        {
+        if ( iSearchTreeListVisualizer )
+            {
+            TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
+            iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );            
+            }
+        ReScaleUiL();        
+        }
+	}
+
+void CFSEmailUiSearchListVisualiser::GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const
+    {
+    aLayoutArray.Append( iScreenAnchorLayout );
+    }
+
+// -----------------------------------------------------------------------------
+// CFSEmailUiMailListVisualiser::FlipStateChangedL
+// Called when keyboard flip state is changed
+// -----------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::FlipStateChangedL( TBool aKeyboardFlipOpen )
+    {
+    CFsEmailUiViewBase::FlipStateChangedL( aKeyboardFlipOpen );
+    iSearchTreeListVisualizer->SetFlipState( iKeyboardFlipOpen );
+    }
+
+// -----------------------------------------------------------------------------
+//  CFSEmailUiSearchListVisualiser::HandleTimerFocusStateChange
+// -----------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::HandleTimerFocusStateChange( TBool aShow )
+    {
+    CFsEmailUiViewBase::HandleTimerFocusStateChange( aShow );
+    iSearchTreeListVisualizer->SetFocusVisibility( aShow );
+    }
+
+// ---------------------------------------------------------------------------
+// CFSEmailUiSearchListVisualiser::SetStatusBarLayout()
+// Sets status bar layout
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::SetStatusBarLayout()
+	{
+	if ( StatusPane()->CurrentLayoutResId() != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT )
+		{
+		TRAP_IGNORE(
+			StatusPane()->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ));
+		}
+	}
+
+void CFSEmailUiSearchListVisualiser::HandleCommandL( TInt aCommand )
+    {
+    FUNC_LOG;
+    switch ( aCommand )
+        {
+       	case EAknSoftkeySelect:
+			{
+			TInt modelCount(0);
+			if ( iModel )
+				{
+				modelCount = iModel->Count();				
+				}
+		 	if ( modelCount ) // Safety check
+		 		{
+			  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+				if ( item && item->ModelItemType() == ETypeMailItem )
+					{
+					CFSMailMessage* messagePtr = &item->MessagePtr();
+					if ( messagePtr )
+						{
+						OpenHighlightedMailL();							
+						}
+					}
+		 		}
+ 			}        	
+        	break;         	
+        case EAknSoftkeyBack:
+			{
+			if ( !iAppUi.ViewSwitchingOngoing())
+				{
+				if ( iSearchOngoing )
+					{
+					StopSearchL();
+					}
+                                //<cmail> useless code removed
+				//HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
+				//iBarTextVisual->SetTextL( *searchText );		
+				//CleanupStack::PopAndDestroy( searchText );
+                                //</cmail>
+		 		TVwsViewId viewId = TVwsViewId( KFSEmailUiUid, MailListId );
+				TMailListActivationData tmp;	
+				if ( iMsgDataCouldBeChanged )
+					{
+					tmp.iRequestRefresh = ETrue;
+					iMsgDataCouldBeChanged = EFalse; // List starts a new search
+					}	
+				const TPckgBuf<TMailListActivationData> pkgOut( tmp );	
+				iAppUi.ReturnToPreviousViewL( pkgOut );        								
+				}
+			}
+	       	break;
+        case EEikCmdExit:
+        case EAknSoftkeyExit:
+        case EFsEmailUiCmdExit:
+            iAppUi.Exit();
+            break;
+       	case EFsEmailUiCmdCalActionsReplyAsMail:
+		case EFsEmailUiCmdActionsReply:
+			{
+			if ( iSearchList->Count() )
+				{
+				iMsgDataCouldBeChanged = ETrue;
+		   	 	ReplyL( NULL ); // Function will check marked/highlighted msg				
+				}
+			}
+            break;
+		case EFsEmailUiCmdActionsReplyAll:
+			{
+			if ( iSearchList->Count() )
+				{
+				iMsgDataCouldBeChanged = ETrue;
+				ReplyAllL( NULL ); // Function will check marked/highlighted msg
+				}
+			}
+            break;
+       	case EFsEmailUiCmdCalActionsForwardAsMail:
+		case EFsEmailUiCmdActionsForward:
+			{
+			if ( iSearchList->Count() )
+				{
+				iMsgDataCouldBeChanged = ETrue;
+				ForwardL( NULL ); // Function will check marked/highlighted msg
+				}
+			}      
+            break;
+		case EFsEmailUiCmdGoToTop:
+			{
+			if ( iSearchListItemArray.Count() )
+			    {
+			    TInt bottomItemId = iSearchListItemArray[0].iSearchListItemId;
+    			iSearchTreeListVisualizer->SetFocusedItemL( bottomItemId );
+			    }
+			}
+            break;
+		case EFsEmailUiCmdGoToBottom:
+			{
+			if ( iSearchListItemArray.Count() )
+			    {
+			    TInt bottomItemId = iSearchListItemArray[ iSearchListItemArray.Count()-1 ].iSearchListItemId;
+    			iSearchTreeListVisualizer->SetFocusedItemL( bottomItemId );
+			    }
+			}
+            break;
+        case EFsEmailUiCmdPageUp:
+            {
+            TKeyEvent simEvent = { EKeyPageUp, EStdKeyPageUp, 0, 0 };
+            iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
+            }
+            break;
+        case EFsEmailUiCmdPageDown:
+            {
+            TKeyEvent simEvent = { EKeyPageDown, EStdKeyPageDown, 0, 0 };
+            iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
+            }
+            break;
+
+       	case EFsEmailUiCmdActionsDeleteCalEvent:
+		case EFsEmailUiCmdActionsDelete:
+			{
+ 			if ( iSearchList->Count() )
+				{
+				DeleteFocusedMessageL();
+				}
+			}
+            break;
+        case EAknSoftkeyOpen:
+        case EFsEmailUiCmdOpen:
+        	{
+ 			if ( iSearchList->Count() )
+				{
+				OpenHighlightedMailL();	       	
+				}
+			}
+        	break;	
+       	case EFsEmailUiCmdNewSearch:
+        case EFsEmailUiCmdSearch:
+        	{
+			LaunchSearchDialogL();						 			        		
+        	}
+        	break;     	        	   	        	
+        case EFsEmailUiCmdStopSearch:
+        	{
+			StopSearchL();
+        	}
+        	break;  
+       	case EFsEmailUiCmdMessageDetails:
+			{
+ 			if ( iSearchList->Count() )
+				{
+				CFSEmailUiMailListModelItem* item =
+					static_cast<CFSEmailUiMailListModelItem*>( Model()->Item( HighlightedIndex() ) );		
+				CFSMailMessage& msg = item->MessagePtr();
+				
+	  			TMsgDetailsActivationData msgDetailsData;
+	  			msgDetailsData.iMailBoxId = msg.GetMailBoxId();
+	  			msgDetailsData.iFolderId = msg.GetFolderId();
+	  			msgDetailsData.iMessageId = msg.GetMessageId();
+				
+				const TPckgBuf<TMsgDetailsActivationData> pkgOut( msgDetailsData );
+				iAppUi.EnterFsEmailViewL( MsgDetailsViewId, KStartMsgDetailsToBeginning,  pkgOut);					
+				}
+			}
+			break;
+       	case EFsEmailUiCmdHelp:
+  			{
+			TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
+  			}
+  			break; 
+       	case EFsEmailUiCmdActionsCallSender:
+			{
+			if ( iSearchList->Count() )
+				{
+				CallToSenderL();		
+				}
+			}
+			break;
+    	case EFsEmailUiCmdActionsAddContact:
+    		{
+			if ( iSearchList->Count() ) 
+				{
+			    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    			
+				if ( item && item->ModelItemType() == ETypeMailItem )
+					{
+					CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
+					TDesC* emailAddress(0);
+					if ( fromAddress )
+						{
+						emailAddress = &fromAddress->GetEmailAddress();		
+						}
+					if ( emailAddress && emailAddress->Length() )
+						{
+						TAddToContactsType aType;
+						//Query to "update existing" or "Create new" --> EFALSE = user choosed "cancel"
+						if ( CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddtoContactsQueryL( aType ) )
+							{
+							CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddToContactL( 
+									*emailAddress, EContactUpdateEmail, aType, this );		
+							}										
+						}
+					}
+				}
+    		}			
+			break;
+        case EFsEmailUiCmdMarkAsReadUnreadToggle:
+            {
+            if ( iSearchList->Count() )
+                {
+           		CFSEmailUiMailListModelItem* item = 
+        			static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
+        		if ( item && item->ModelItemType() == ETypeMailItem )
+        			{
+        			if ( item->MessagePtr().IsFlagSet(EFSMsgFlag_Read) )
+        				{
+        				HandleCommandL( EFsEmailUiCmdMarkAsUnread );
+        				}
+        			else
+        				{
+        				HandleCommandL( EFsEmailUiCmdMarkAsRead );
+        				}
+        			}
+                }
+            }
+            break;
+        case EFsEmailUiCmdMarkAsUnread:
+            {
+            ChangeReadStatusOfHighlightedL( EFalse );
+            }
+            break;
+        case EFsEmailUiCmdMarkAsRead:
+            {
+            ChangeReadStatusOfHighlightedL( ETrue );
+            }
+            break;
+        case EFsEmailUiCmdCalActionsAccept:
+        case EFsEmailUiCmdCalActionsTentative:
+        case EFsEmailUiCmdCalActionsDecline:
+        case EFsEmailUiCmdCalRemoveFromCalendar:
+			{
+		    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    			
+			if ( item && item->ModelItemType() == ETypeMailItem && 
+				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) )
+				{
+			    ChangeReadStatusOfHighlightedL( ETrue );
+                iAppUi.MailViewer().HandleMrCommandL( aCommand, 
+                                                       iAppUi.GetActiveMailbox()->GetId(),
+                                                       item->MessagePtr().GetFolderId(),
+                                                       item->MessagePtr().GetMessageId() );
+				}				
+			}
+        	break;							
+// <cmail> Prevent Download Manager opening with attachments
+//       	case EFsEmailUiCmdDownloadManager:
+//       		{
+//			if (iSearchOngoing)
+//				{
+//				StopSearchL();
+//				}	
+//  			iAppUi.EnterFsEmailViewL( DownloadManagerViewId );       			
+//       		}       		
+//			break;
+// </cmail>
+       	case EFsEmailUiCmdReadEmail:
+			{
+			iAppUi.StartReadingEmailsL();
+			}  			    		
+			break;
+        default:
+        	break;
+        }	
+    }
+
+
+TInt CFSEmailUiSearchListVisualiser::LaunchSearchDialogL()
+	{
+    FUNC_LOG;
+	if ( !iLatestSearchText )
+		{
+		iLatestSearchText = HBufC::NewL( KMaxLengthOfSearchString );
+		}
+	TPtr16 textData = iLatestSearchText->Des();
+	CAknQueryDialog* dlg = CAknQueryDialog::NewL( textData );
+	HBufC* searchPrompt = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_LABEL );
+	dlg->SetPromptL(*searchPrompt);
+	CleanupStack::PopAndDestroy( searchPrompt );
+	TInt ret = dlg->ExecuteLD( R_FSEMAILUI_FIND_MAIL_DIALOG );
+	if ( ret )
+		{
+		// Stop any ongoing search before starting a new one
+		if ( iSearchOngoing )
+		    {
+		    StopSearchL();
+		    }	        
+              //<cmail> make list and header visible by showing control group
+		else if( !iListAddedToControlGroup )
+            {
+            //ControlGroup().AppendL( iSearchListControl );
+            //ControlGroup().AppendL( iSearchList->TreeControl() );
+            iListAddedToControlGroup = ETrue;
+            }
+		iSearchList->SetScrollbarVisibilityL( EFsScrollbarAuto );
+             //</cmail>
+		// Set searching text
+		HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCHING );	
+		HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + KSpace().Length() );
+		finalText->Des().Append( *searchText );
+		finalText->Des().Append( KSpace );
+		finalText->Des().Append( *iLatestSearchText );			
+		iBarTextVisual->SetTextL( *finalText );		
+		CleanupStack::PopAndDestroy( finalText );		
+		CleanupStack::PopAndDestroy( searchText );				
+		StartSearchL();		
+		}
+	return ret;
+	}
+
+
+void CFSEmailUiSearchListVisualiser::UpdateMailListSettingsL()
+	{
+    FUNC_LOG;
+	if ( iAppUi.GetCRHandler() )
+		{
+		iNodesInUse = iAppUi.GetCRHandler()->TitleDividers();
+		TInt lineValue = iAppUi.GetCRHandler()->MessageListLayout();
+		TInt bodyPreviewValue = iAppUi.GetCRHandler()->BodyPreview();
+		if ( lineValue == 1 ) // 1-line layouts
+			{
+			if ( bodyPreviewValue == 0 )
+				{
+				iListMode = EListControlTypeSingleLinePreviewOff;
+				}
+			else
+				{
+				iListMode = EListControlTypeSingleLinePreviewOn;
+				}
+			}
+		else //
+			{
+			if ( bodyPreviewValue == 0 )
+				{
+				iListMode = EListControlTypeDoubleLinePreviewOff;
+				}
+			else
+				{
+				iListMode = EListControlTypeDoubleLinePreviewOn;
+				}					
+			}
+		}
+	else
+		{
+		iNodesInUse = EListControlSeparatorDisabled;
+		iListMode = EListControlTypeDoubleLinePreviewOff;
+		}
+	}
+	
+	
+TBool CFSEmailUiSearchListVisualiser::OfferEventL(const TAlfEvent& aEvent)
+    {
+    FUNC_LOG;
+    TBool result(EFalse);
+  
+    if ( aEvent.IsKeyEvent() && aEvent.Code() == EEventKey )
+        {
+        TInt scanCode = aEvent.KeyEvent().iScanCode;
+        // Swap right and left controls in mirrored layout
+        if ( AknLayoutUtils::LayoutMirrored() )
+            {
+            if ( scanCode == EStdKeyRightArrow ) scanCode = EStdKeyLeftArrow;
+            else if ( scanCode == EStdKeyLeftArrow ) scanCode = EStdKeyRightArrow;
+            }
+        
+        switch ( scanCode )
+            {
+            case EStdKeyDevice3: // CENTER CLICK
+            case EStdKeyEnter:  // ENTER EITHER SELECTS ITEM IN TOOLBAR OR OPENS MAIL
+            case EStdKeyNkpEnter:
+                {
+                if ( iSearchList->Count() )
+                    {
+                    OpenHighlightedMailL();         		
+                    }
+                result = ETrue;         	
+                }
+                break;
+            case EStdKeyYes:
+                {
+                if ( iSearchList->Count() )
+                    {
+                    CallToSenderL();				
+                    }
+                }
+                break;
+            case EStdKeyRightArrow:
+                 {     
+                 if ( iSearchList->Count() )
+                      {
+                      LaunchActionMenuL();                       
+                      }                
+                 result = ETrue; 
+                 }
+                 break;
+            default:
+                {
+                // check keyboard shortcuts:
+                TInt command = 
+                    iAppUi.ShortcutBinding().CommandForShortcutKey( aEvent.KeyEvent(),
+                        CFSEmailUiShortcutBinding::EContextSearchResults );
+                if ( command >= 0 )
+                    {
+                    HandleCommandL( command );
+                    result = ETrue;
+                    }
+                }
+                break;
+            }
+        }
+    else if (aEvent.IsPointerEvent())
+        {
+        iSearchList->TreeControl()->OfferEventL(aEvent);
+        }
+    
+    return result;   
+    }
+
+
+
+void CFSEmailUiSearchListVisualiser::ReScaleUiL()
+	{
+    FUNC_LOG;
+    if ( iFirstStartCompleted ) //Safety
+        {
+        SetSearchListLayoutAnchors();
+        iScreenAnchorLayout->UpdateChildrenLayout();
+        iSearchListLayout->UpdateChildrenLayout();
+        // Set bar text color from skin 
+        if ( iBarTextVisual )
+            {
+			//<cmail>
+			SetHeaderAttributesL();
+			/*TRgb barTextColor( KRgbBlack );
+		    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), 
+		                               barTextColor, KAknsIIDFsTextColors, EAknsCIFsTextColorsCG10 );
+			iBarTextVisual->SetColor( barTextColor );*/
+			//</cmail>
+            }
+        RefreshL();
+        //iSearchTreeListVisualizer->HideList();
+        iSearchTreeListVisualizer->ShowListL();                
+        }
+ 	}
+
+void CFSEmailUiSearchListVisualiser::SetSearchListLayoutAnchors()
+	{
+    FUNC_LOG;
+	// Set anchors so that list leaves space for control bar
+
+	// The anchor layout mirrors itself automatically when necessary.
+	// There's no need to mirror anything manually here.
+	
+	// BAR BACGROUND IMAGE
+    //<cmail> platform layout changes
+    TRect contBarRect = iAppUi.LayoutHandler()->GetControlBarRect();
+    TPoint& tl( contBarRect.iTl );
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 0, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint( tl.iX, tl.iY ));
+    TPoint& br( contBarRect.iBr );
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 0, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint( br.iX, br.iY ));
+    //</cmail>
+
+	// LOOKING GLASS IMAGE
+    //<cmail> search magnifier icon removed from cmail
+    /*TRect searchIconRect( iAppUi.LayoutHandler()->GetControlBarMailboxIconRect() );
+    const TPoint& tl( searchIconRect.iTl );
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 1, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricRelativeToSize, EAlfAnchorMetricRelativeToSize,
+        TAlfTimedPoint(0, 0 ));
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 1, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint(KSearchIconWidth, iAppUi.LayoutHandler()->ControlBarHeight()));*/	
+        
+	// TEXT
+    //<cmail> platform layout changes
+    TRect textRect =  iAppUi.LayoutHandler()->GetSearchListHeaderTextLayout().TextRect();
+    tl = textRect.iTl;
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 1, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint( tl.iX, tl.iY ));
+    br = textRect.iBr;
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 1, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint( br.iX, br.iY ));
+    //</cmail>
+
+    //<cmail> platform layout changes
+    TRect listRect = iAppUi.LayoutHandler()->GetListRect();
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 2, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint(listRect.iTl.iX, listRect.iTl.iY));
+    iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 2, 
+        EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
+        EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
+        TAlfTimedPoint(listRect.iBr.iX, listRect.iBr.iY));
+    //</cmail>
+	}
+
+
+TFSMailMsgId CFSEmailUiSearchListVisualiser::MsgIdFromIndex( TInt aItemIdx ) const
+    {
+    FUNC_LOG;
+	TFSMailMsgId msgId; // constructs null ID
+    if ( 0 <= aItemIdx && aItemIdx < iModel->Count() )
+        {
+        CFSEmailUiMailListModelItem* item = 
+    			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(aItemIdx));
+    	if ( item->ModelItemType() == ETypeMailItem )
+    	    {
+    	    msgId = item->MessagePtr().GetMessageId();
+    	    }
+        }
+        
+    return msgId;
+    }
+	
+TFSMailMsgId CFSEmailUiSearchListVisualiser::MsgIdFromListId( TFsTreeItemId aListId ) const
+	{
+    FUNC_LOG;
+	TFSMailMsgId msgId;
+	for ( TInt i=0; i<iModel->Count();i++)
+		{
+		CFSEmailUiMailListModelItem* item = 
+			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
+		if ( item->ModelItemType() == ETypeMailItem &&
+		     aListId == item->CorrespondingListId() )
+			{
+			msgId = item->MessagePtr().GetMessageId();
+			break;
+			}
+		}	
+	return msgId;
+	}
+
+CFSMailMessage& CFSEmailUiSearchListVisualiser::MsgPtrFromListId( TFsTreeItemId aListId )
+	{
+    FUNC_LOG;
+	CFSMailMessage* msgPtr(NULL);
+	for ( TInt i=0; i<iModel->Count();i++)
+		{
+		CFSEmailUiMailListModelItem* item = 
+			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
+		if ( aListId == item->CorrespondingListId() )
+			{
+			msgPtr = &item->MessagePtr();
+			}
+		}
+	return *msgPtr;	
+	}
+	
+	// Item data and visualiser helper functions 
+MFsTreeItemData* CFSEmailUiSearchListVisualiser::ItemDataFromItemId( TFsTreeItemId aItemId )
+	{
+    FUNC_LOG;
+	TInt i(0);
+	MFsTreeItemData* itemData(NULL);
+	for ( ; i<iSearchListItemArray.Count(); i++ )
+		{
+		if ( aItemId == iSearchListItemArray[i].iSearchListItemId )
+			{
+			itemData = iSearchListItemArray[i].iTreeItemData;
+			}
+		}
+	return itemData;
+	}
+	
+MFsTreeItemVisualizer* CFSEmailUiSearchListVisualiser::ItemVisualiserFromItemId( TFsTreeItemId aItemId )
+	{
+    FUNC_LOG;
+	TInt i(0);
+	MFsTreeItemVisualizer* itemVis(NULL);
+	for ( ; i<iSearchListItemArray.Count(); i++ )
+		{
+		if ( aItemId == iSearchListItemArray[i].iSearchListItemId )
+			{
+			itemVis = iSearchListItemArray[i].iTreeItemVisualiser;
+			}
+		}
+	return itemVis;
+	}
+
+// Helpers to get the ordinal of a message in the iModel
+TInt CFSEmailUiSearchListVisualiser::ItemIndexFromMessageId( const TFSMailMsgId& aMessageId ) const
+    {
+    FUNC_LOG;
+	TInt idx = KErrNotFound;
+	
+	for ( TInt i=0; i<iModel->Count() ; i++ )
+		{
+		CFSEmailUiMailListModelItem* item = 
+			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
+		if ( item->ModelItemType() == ETypeMailItem &&
+		     aMessageId == item->MessagePtr().GetMessageId() )
+			{
+			idx = i;
+			break;
+			}
+		}	
+	
+	return idx;
+    }
+	
+TInt CFSEmailUiSearchListVisualiser::NextMessageIndex( TInt aCurMsgIdx ) const
+    {
+    FUNC_LOG;
+	TInt idx = KErrNotFound;
+	
+	for ( TInt i=aCurMsgIdx+1 ; i<iModel->Count() ; i++ )
+		{
+		CFSEmailUiMailListModelItem* item = 
+			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
+		if ( item && item->ModelItemType() == ETypeMailItem )
+			{
+			idx = i;
+			break;
+			}
+		}	
+	
+	return idx;
+    }
+	
+TInt CFSEmailUiSearchListVisualiser::PreviousMessageIndex( TInt aCurMsgIdx ) const
+    {
+    FUNC_LOG;
+	TInt idx = KErrNotFound;
+	
+	if ( aCurMsgIdx < iModel->Count() )
+	    {
+    	for ( TInt i=aCurMsgIdx-1 ; i>=0 ; i-- )
+    		{
+    		CFSEmailUiMailListModelItem* item = 
+    			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
+    		if ( item && item->ModelItemType() == ETypeMailItem )
+    			{
+    			idx = i;
+    			break;
+    			}
+    		}	
+	    }
+	
+	return idx;
+    }
+
+
+void CFSEmailUiSearchListVisualiser::OpenHighlightedMailL()
+	{
+    FUNC_LOG;
+	if (iSearchOngoing)
+		{
+		StopSearchL();
+		}		
+	
+	CFSEmailUiMailListModelItem* item =
+		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ) );
+	if ( item->ModelItemType() == ETypeMailItem )
+		{
+		// First make sure that the highlighted message really exists in the store
+		// Get confirmed msg ptr 
+		CFSMailMessage* confirmedMsgPtr(0);
+		TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL(iAppUi.GetActiveMailboxId(), 
+							item->MessagePtr().GetFolderId(), item->MessagePtr().GetMessageId(), EFSMsgDataEnvelope ) );
+		if ( confirmedMsgPtr && err == KErrNone )
+			{
+		 	CFSMailFolder* highlightedMsgFolder = 
+		 		iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), confirmedMsgPtr->GetFolderId() );
+			CleanupStack::PushL( highlightedMsgFolder ); 
+			TInt msgFolderType = highlightedMsgFolder->GetFolderType();
+			TFSMailMsgId highlightedMsgFolderId = highlightedMsgFolder->GetFolderId();
+			CleanupStack::PopAndDestroy( highlightedMsgFolder );			
+			// Pointer confirmed, store Id and delete not needed anymore
+			TFSMailMsgId confirmedId = confirmedMsgPtr->GetMessageId();
+			delete confirmedMsgPtr;
+			
+			// Open to editor from drafts
+			if ( msgFolderType == EFSDraftsFolder )
+				{
+				TEditorLaunchParams params;
+				params.iMailboxId = iAppUi.GetActiveMailboxId();
+				params.iActivatedExternally = EFalse;
+				params.iMsgId = confirmedId;
+				params.iFolderId = highlightedMsgFolderId;
+			    iAppUi.LaunchEditorL( KEditorCmdOpen, params );						
+				}
+			else if ( msgFolderType == EFSOutbox )
+				{
+				TFsEmailUiUtility::ShowErrorNoteL( R_FREESTYLE_EMAIL_UI_OPEN_FROM_OUTBOX_NOTE, ETrue );
+				}
+			else
+				{
+				THtmlViewerActivationData tmp;	
+				tmp.iMailBoxId = iAppUi.GetActiveMailbox()->GetId();
+				tmp.iMessageId = confirmedId;
+				tmp.iFolderId = highlightedMsgFolderId;	
+				
+				const TPckgBuf<THtmlViewerActivationData> pkgOut( tmp );	
+				ChangeReadStatusOfHighlightedL( ETrue ); 									
+				iAppUi.EnterFsEmailViewL( HtmlViewerId, KStartViewerWithMsgId, pkgOut );								
+				}					
+			}
+		else if ( err == KErrNotFound )
+			{
+			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );							
+			}
+		}
+	}
+
+
+
+void CFSEmailUiSearchListVisualiser::ReplyL( CFSMailMessage* aMsgPtr )
+	{
+    FUNC_LOG;
+	DoReplyForwardL( KEditorCmdReply, aMsgPtr );
+	}
+	
+void CFSEmailUiSearchListVisualiser::ReplyAllL(  CFSMailMessage* aMsgPtr )
+	{
+    FUNC_LOG;
+	DoReplyForwardL( KEditorCmdReplyAll, aMsgPtr );
+	}
+	
+void CFSEmailUiSearchListVisualiser::ForwardL( CFSMailMessage* aMsgPtr )
+	{
+    FUNC_LOG;
+	DoReplyForwardL( KEditorCmdForward, aMsgPtr );
+	}
+
+void CFSEmailUiSearchListVisualiser::DoReplyForwardL( TEditorLaunchMode aMode, CFSMailMessage* aMsgPtr )
+    {
+    FUNC_LOG;
+    // Stop search when reply/forward has been selected
+	if ( iSearchOngoing )
+		{
+		StopSearchL();
+		} 
+    
+    if ( iModel->Count() )
+        {
+       	CFSMailMessage* messagePointer = aMsgPtr;
+    	if ( !messagePointer  )
+    		{
+            RFsTreeItemIdList markedEntries;	
+    		iSearchList->GetMarkedItemsL( markedEntries );
+    		TInt markedCount = markedEntries.Count();
+    		if ( markedCount == 0 )
+    			{
+       		    CFSEmailUiMailListModelItem* item = NULL;
+       		    item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
+       		    if (item)
+       		        {
+       		        messagePointer = &item->MessagePtr();
+       		        }
+    			}
+    		else if ( markedCount == 1)
+    			{
+    			messagePointer = &MsgPtrFromListId( markedEntries[0] );
+    			}	
+    		}
+    	if ( messagePointer )
+    		{
+    		// No reply/Forward for calendar messages, at least not in 1.0
+	   		if ( !messagePointer->IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
+    			{
+	    		TEditorLaunchParams params;
+	    		params.iMailboxId = iAppUi.GetActiveMailboxId();
+	    		params.iActivatedExternally = EFalse;								
+	    		params.iMsgId = messagePointer->GetMessageId();
+	    		iAppUi.LaunchEditorL( aMode, params );			    			
+    			}      				
+    		}
+        }
+    }
+
+void CFSEmailUiSearchListVisualiser::StartSearchL()
+	{
+    FUNC_LOG;
+	iSearchCount++;
+	
+    // Reset previous results before starting new search
+	// <cmail> fixed CS high cat. finding
+	ResetResultListL();
+    TLex lex( *iLatestSearchText );
+    while ( !lex.Eos() )
+        {
+        HBufC* token = lex.NextToken().AllocLC();
+      
+        iSearchStrings.AppendL( token );
+        
+        CleanupStack::Pop( token );
+        }
+    
+	TFSMailSortCriteria sortCriteria;
+    sortCriteria.iField = EFSMailSortByDate;
+    sortCriteria.iOrder = EFSMailDescending;
+   	iSearchOngoing = ETrue;
+	// Model and list is set to be empty, set also MSK to empty
+	SetMskL();
+	// Initialisr TextSearcher
+	
+	// Start search.
+	iMailBox->SearchL( iSearchStrings, sortCriteria, *this );
+	}
+
+void CFSEmailUiSearchListVisualiser::StopSearchL()
+	{
+    FUNC_LOG;
+	iSearchOngoing = EFalse;
+	if ( iMailBox )
+		{		
+		iMailBox->CancelSearch();
+		}		
+	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
+	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
+	finalText->Des().Append( *searchText );
+	finalText->Des().Append( KSpace );
+	finalText->Des().Append( *iLatestSearchText );			
+	iBarTextVisual->SetTextL( *finalText );		
+	CleanupStack::PopAndDestroy( finalText );
+	CleanupStack::PopAndDestroy( searchText );	
+	}
+
+void CFSEmailUiSearchListVisualiser::ResetResultListL()
+    {
+	// <cmail> fixed CS high cat. finding    
+    FUNC_LOG;
+    iModel->Reset();
+    iSearchList->RemoveAllL();
+    iSearchListItemArray.Reset();
+    iSearchStrings.ResetAndDestroy();
+    }
+
+void CFSEmailUiSearchListVisualiser::MatchFoundL( CFSMailMessage* aMatchMessage )
+	{
+    FUNC_LOG;
+    
+	if ( !iSearchList->IsFocused() )
+		{
+		iSearchList->SetFocusedL( ETrue );
+		}
+
+	// Delete receved owned object and add confirmed msg pointer to model insteaed
+	// This is done because it seems that matched message objects seems to be different
+	// in some protocols than original messages
+	CleanupStack::PushL( aMatchMessage );
+	CFSMailMessage* confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
+						aMatchMessage->GetFolderId(), aMatchMessage->GetMessageId(), EFSMsgDataEnvelope );
+	CleanupStack::PopAndDestroy( aMatchMessage );
+	
+	if ( confirmedMsgPtr ) // Append item into model and list if msg pointer was confirmed
+		{
+		// Append to model
+		CFSEmailUiMailListModelItem* newItem = CFSEmailUiMailListModelItem::NewL( confirmedMsgPtr, ETypeMailItem);		    				    	
+		iModel->AppendL(newItem);
+
+		// Append to list
+	   	TRect screenRect;
+	 	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );	 
+
+		CFSMailAddress* fromAddress = confirmedMsgPtr->GetSender();		
+		TDesC* diplayName(0);
+		if ( fromAddress )
+			{
+			diplayName = &fromAddress->GetDisplayName();				
+			}
+			
+		// Set first line of data
+		HBufC* dispName(0);
+		if ( fromAddress && diplayName && diplayName->Length() != 0 )
+			{
+			dispName = HBufC::NewLC( diplayName->Length() );
+			dispName->Des().Append( *diplayName );
+			}
+		else if ( fromAddress && fromAddress->GetEmailAddress().Length() != 0 )
+			{
+			dispName = HBufC::NewLC( fromAddress->GetEmailAddress().Length() );
+			dispName->Des().Append( fromAddress->GetEmailAddress() );
+			}
+		else
+			{
+			dispName = HBufC::NewLC( 0 );
+			dispName->Des().Append( KNullDesC );				
+			}
+			
+		// Drop out unwanted characters from display name such as <> and ""
+		// And set display name data
+		if ( dispName )
+			{
+			TFsEmailUiUtility::StripDisplayName( *dispName );		
+			}
+		// Create item data and 
+		CFsTreePlainTwoLineItemData* itemData = CFsTreePlainTwoLineItemData::NewL();			
+
+		itemData->SetDataL( *dispName );				
+		CleanupStack::PopAndDestroy( dispName );
+		
+		// Set time text data
+		HBufC* timeText = TFsEmailUiUtility::ListMsgTimeTextFromMsgLC( confirmedMsgPtr, EFalse );			
+		itemData->SetDateTimeDataL ( *timeText );	 			
+		CleanupStack::PopAndDestroy();
+
+		// Set second line of data
+	
+		HBufC* subjectText = TFsEmailUiUtility::CreateSubjectTextLC( confirmedMsgPtr );
+
+		
+		    itemData->SetSecondaryDataL( *subjectText);
+	
+              
+              
+		
+		CleanupStack::PopAndDestroy( subjectText );
+
+		
+		// Set message icon
+		CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( confirmedMsgPtr, *iAppUi.FsTextureManager() );	
+		itemData->SetIcon ( *itemTexture );
+	    CFsTreePlainTwoLineItemVisualizer* itemVisualizer = CFsTreePlainTwoLineItemVisualizer::NewL(*iSearchList->TreeControl());
+	   
+	    
+		itemVisualizer->SetExtendable( ETrue );     		 
+		TInt itemHeight = iAppUi.LayoutHandler()->OneLineListItemHeight();
+
+		itemVisualizer->SetSize(TSize(screenRect.Width(), itemHeight));
+	 	itemVisualizer->SetExtendedSize(TSize(screenRect.Width(), 2*itemHeight));	 
+	    
+	 	// Set menu icon
+	 	itemVisualizer->SetFlags( itemVisualizer->Flags() | KFsTreeListItemHasMenu );
+	    
+		// Set font height
+		itemVisualizer->SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );		
+
+		// Set font bolding
+		if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_Read ) )
+			{	
+			itemVisualizer->SetTextBold( EFalse );
+			}
+		else
+			{
+			itemVisualizer->SetTextBold( ETrue );
+			}		
+
+	  	// Set correct skin text colors for the list items  
+	   	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
+	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
+	    itemVisualizer->SetFocusedStateTextColor( focusedColor );
+	    itemVisualizer->SetNormalStateTextColor( normalColor );
+	    
+		switch ( iListMode )
+		    {
+		    case EListControlTypeDoubleLinePreviewOn:
+		    case EListControlTypeSingleLinePreviewOn:
+				itemVisualizer->SetPreviewPaneOn( ETrue ); 
+				itemVisualizer->SetPreviewPaneEnabledSize( TSize(screenRect.Width(), 3*itemHeight) ); 
+		        // fall through
+		    case EListControlTypeDoubleLinePreviewOff:
+		    case EListControlTypeSingleLinePreviewOff:
+	   	 		itemVisualizer->SetExtendable(ETrue);
+	 			itemVisualizer->SetExtendedSize(TSize(screenRect.Width(), 2*itemHeight));
+	 			break;
+		    default:
+		        break;
+		    }
+
+		// Update initial preview pane text for items if needed
+	  	if ( iListMode == EListControlTypeSingleLinePreviewOn || 
+			 iListMode == EListControlTypeDoubleLinePreviewOn )
+			{
+			UpdatePreviewPaneTextForItemL( itemData, confirmedMsgPtr );
+			}
+
+		// Set follow up flag icon
+		if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
+			{
+			if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
+				{
+			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
+				itemVisualizer->SetFlagIconVisible( ETrue );		 		
+				}
+			else if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
+				{
+			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
+				itemVisualizer->SetFlagIconVisible( ETrue );				 		
+				}
+			else
+				{
+		 	    itemVisualizer->SetFlagIconVisible( EFalse );			
+				}		
+			}
+	 	else
+	 	    {
+	 	    itemVisualizer->SetFlagIconVisible( EFalse );
+	 	    }
+
+		TFsTreeItemId itemId = iSearchList->InsertItemL( *itemData, *itemVisualizer, KFsTreeRootID );    		  
+		if (iSearchList->FocusedItem() == KFsTreeNoneID)
+		    {
+		    iSearchList->SetFocusedItemL(itemId);
+		    }
+		
+		SSearchListItem searchListItem;
+		searchListItem.iSearchListItemId = itemId;
+		searchListItem.iTreeItemData = itemData;
+		searchListItem.iTreeItemVisualiser = itemVisualizer;			
+	    iSearchListItemArray.AppendL( searchListItem );
+	    newItem->AddCorrespondingListId( itemId );      
+
+		if ( iSearchList->Count() == 1 ) // Call only once, temp fix because of error in generic
+			{
+			if ( iListMode == EListControlTypeDoubleLinePreviewOn ||
+				 iListMode == EListControlTypeDoubleLinePreviewOff )
+				{
+		        iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( ETrue );
+		 		}
+			else
+				{
+				// Set the extendedability and extended size
+		   		iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( EFalse ); 		
+				}		
+			
+			// Set msk to "Open when first is found".
+			SetMskL();
+			}	
+		}
+        
+	}
+
+// ---------------------------------------------------------------------------
+// HandleMailBoxEventL
+// Function removes objects from the list that are deleted.
+// Also updates icon and read status if synced so from the server
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::HandleMailBoxEventL( TFSMailEvent aEvent,
+    TFSMailMsgId aMailbox, TAny* aParam1, TAny* aParam2, TAny* /*aParam3*/ )
+    {
+    FUNC_LOG;
+    if ( iFirstStartCompleted ) // Safety
+        {
+        CFSMailBox* activeMailbox = iAppUi.GetActiveMailbox();
+        if ( activeMailbox && aMailbox.Id() == activeMailbox->GetId().Id() ) // Safety, in list events that only concern active mailbox are handled 
+            {
+            if ( iModel && iModel->Count() && aEvent == TFSEventMailDeleted )
+                {
+                RArray<TFSMailMsgId>* removedEntries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
+                if ( removedEntries && removedEntries->Count() )
+                    {
+                    RemoveMsgItemsFromListIfFoundL( *removedEntries );
+                    }               
+                }
+            else if ( iModel && iModel->Count() && aEvent == TFSEventMailChanged )
+                {
+                // Get array of changed entries
+                RArray<TFSMailMsgId>* entries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
+                // Get ID of the folder that this cahnge concerns.
+                TFSMailMsgId* parentFolderId = static_cast<TFSMailMsgId*>( aParam2 );
+                for ( TInt i=0 ; i < entries->Count() ; i++)
+                    {           
+                    TFSMailMsgId entryId = (*entries)[i];
+                    CFSMailMessage* confirmedMsgPtr(0); 
+                    TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
+                                            *parentFolderId, entryId, EFSMsgDataEnvelope ) );
+                    if ( confirmedMsgPtr && err == KErrNone )
+                        {
+                        CleanupStack::PushL( confirmedMsgPtr );
+                        UpdateMsgIconAndBoldingL( confirmedMsgPtr );
+                        CleanupStack::PopAndDestroy( confirmedMsgPtr ); 
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// RemoveMsgItemsFromListIfFoundL
+// Message removing from list if found. Does not panic or return found status.
+// ---------------------------------------------------------------------------
+//	
+void CFSEmailUiSearchListVisualiser::RemoveMsgItemsFromListIfFoundL( const RArray<TFSMailMsgId>& aEntryIds )
+	{
+    FUNC_LOG;
+	if ( iModel && iModel->Count() )
+		{
+		for ( TInt i=0 ; i<aEntryIds.Count() ; ++i )
+		    {
+		    const TFSMailMsgId& entryId = aEntryIds[i];
+	    	if ( !entryId.IsNullId() )
+	    		{
+	        	TInt idx = ItemIndexFromMessageId( entryId );
+	        	if ( idx >= 0 )
+	        	    {
+	    			iSearchList->RemoveL( iSearchListItemArray[idx].iSearchListItemId ); // remove from list			
+	    			iSearchListItemArray.Remove( idx ); // remove from internal array.		 				 	
+	    	 		iModel->RemoveAndDestroy( idx ); // Remove from model
+	        	    }    	
+	    		}
+		    }					
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// UpdatePreviewPaneTextForItemL
+// Updates preview pane text for item
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::UpdatePreviewPaneTextForItemL(CFsTreePlainTwoLineItemData* aItemData, CFSMailMessage* aMsgPtr  )
+	{
+    FUNC_LOG;
+	// Preview pane data update
+	if ( aMsgPtr && ( iListMode == EListControlTypeSingleLinePreviewOn || 
+		 iListMode == EListControlTypeDoubleLinePreviewOn ) )
+		{
+		CFSMailMessagePart* textPart = aMsgPtr->PlainTextBodyPartL();
+		CleanupStack::PushL( textPart );
+		if ( textPart && ( textPart->FetchLoadState() == EFSPartial ||
+			 textPart->FetchLoadState() == EFSFull ) )
+			{
+            TInt previewSize = Min( KMaxPreviewPaneLength, textPart->FetchedContentSize() );
+            HBufC* plainTextData16 = HBufC::NewLC( previewSize );
+            TPtr textPtr = plainTextData16->Des();
+
+            textPart->GetContentToBufferL( textPtr, 0 ); // Zero is start offset                
+            // Crop out line feed, paragraph break, and tabulator           
+            TFsEmailUiUtility::FilterListItemTextL( textPtr );
+            aItemData->SetPreviewPaneDataL( *plainTextData16 );
+
+            CleanupStack::PopAndDestroy( plainTextData16 );                     
+			}
+
+		// Else display message size in preview pane
+		else
+			{
+			TUint contentSize = aMsgPtr->ContentSize();
+			HBufC* sizeDesc = TFsEmailUiUtility::CreateSizeDescLC( contentSize );
+			HBufC* msgSizeText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_PREV_PANE_MSG_SIZE, *sizeDesc );
+			aItemData->SetPreviewPaneDataL( *msgSizeText ); 				
+			CleanupStack::PopAndDestroy( msgSizeText );
+			CleanupStack::PopAndDestroy( sizeDesc );
+			}
+		CleanupStack::PopAndDestroy( textPart );
+		}
+	}
+
+void CFSEmailUiSearchListVisualiser::SearchCompletedL()
+	{
+    FUNC_LOG;
+	iSearchOngoing = EFalse;
+	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
+	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
+	finalText->Des().Append( *searchText );
+	finalText->Des().Append( KSpace );
+	finalText->Des().Append( *iLatestSearchText );			
+	iBarTextVisual->SetTextL( *finalText );		
+	CleanupStack::PopAndDestroy( finalText );
+	CleanupStack::PopAndDestroy( searchText );	
+	}
+
+
+void CFSEmailUiSearchListVisualiser::ChangeReadStatusOfHighlightedL( TInt aRead )
+	{
+    FUNC_LOG;
+	if ( iSearchList->Count() )
+		{
+		CFSEmailUiMailListModelItem* selectedItem = 
+	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
+	 		
+	 	TBool wasRead = selectedItem->MessagePtr().IsFlagSet( EFSMsgFlag_Read );
+	 	if ( (wasRead && !aRead) || (!wasRead && aRead) )
+	 	    {
+	 	    // Read status is changed
+	 	    iMsgDataCouldBeChanged = ETrue;
+
+    		if ( aRead )
+     			{
+    			// Send flags, local and server
+     			selectedItem->MessagePtr().SetFlag( EFSMsgFlag_Read );
+    			}
+    		else
+    			{
+    			// Send flags, local and server
+     			selectedItem->MessagePtr().ResetFlag( EFSMsgFlag_Read );
+    			}
+    		selectedItem->MessagePtr().SaveMessageL();	// Save flag
+    		// Switch icon to correct one
+    		UpdateMsgIconAndBoldingL( HighlightedIndex() );
+	 	    }
+		}
+	} 
+	
+void CFSEmailUiSearchListVisualiser::CheckAndUpdateFocusedMessageL()
+	{
+    FUNC_LOG;
+	if ( iModel && iModel->Count() ) // Needed safety check
+		{
+		TInt highlightedIndex = HighlightedIndex();
+		CFSEmailUiMailListModelItem* selectedItem = 
+	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( highlightedIndex ));	
+		if ( selectedItem->ModelItemType() == ETypeMailItem )
+			{
+			CFSMailMessage* msgPtr = &selectedItem->MessagePtr();		
+			if ( msgPtr )
+				{
+				CFSMailFolder* folderPtr = 
+				    iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), msgPtr->GetFolderId() );
+				CleanupStack::PushL( folderPtr );
+
+	    		if ( !folderPtr )
+	    			{
+	    			// Pointer is not valid anymore, msg has been delete,
+	    			// so it must be removed from the search list
+	    			RemoveFocusedFromListL();    			
+	    			}
+	    		else 
+	    			{
+	    			CFSMailMessage* confirmedMsgPtr(0);
+	    			TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
+	    										folderPtr->GetFolderId(), msgPtr->GetMessageId(), EFSMsgDataEnvelope ) );
+	    			if ( confirmedMsgPtr && err == KErrNone)
+	    				{
+	    				CleanupStack::PushL( confirmedMsgPtr );
+	    				UpdateMsgIconAndBoldingL( confirmedMsgPtr );
+	    				CleanupStack::PopAndDestroy( confirmedMsgPtr );	
+	    				}
+	    			else
+	    				{
+	    				RemoveFocusedFromListL();	
+	    				}
+	    			}
+	    			
+	    		CleanupStack::PopAndDestroy( folderPtr );
+				}
+			}		
+		}
+	}
+
+void CFSEmailUiSearchListVisualiser::RemoveFocusedFromListL()
+	{
+    FUNC_LOG;
+	iMsgDataCouldBeChanged = ETrue;
+	SSearchListItem item;
+	item.iSearchListItemId = iSearchList->FocusedItem();
+	TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );								
+	iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.		 				 	
+	iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model												
+	iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list						
+	}
+
+
+// Updates our own message object with the data from a given message object.
+// The messages are matched with the message ID.
+void CFSEmailUiSearchListVisualiser::UpdateMsgIconAndBoldingL( CFSMailMessage* aMsgPtr )
+	{
+    FUNC_LOG;
+	if ( aMsgPtr )
+		{
+		for ( TInt i=0 ; i < iModel->Count() ; i++)
+			{
+			CFSEmailUiMailListModelItem* item =
+				static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(i) );
+			if ( item && item->ModelItemType()==ETypeMailItem && 
+				 item->MessagePtr().GetMessageId() == aMsgPtr->GetMessageId() )
+				{
+				// Update all flags
+				TUint32 prevFlags = item->MessagePtr().GetFlags();
+				TUint32 newFlags = aMsgPtr->GetFlags();
+				if ( prevFlags != newFlags )
+				    {
+    				item->MessagePtr().ResetFlag( prevFlags );
+    				item->MessagePtr().SetFlag( newFlags );
+    				
+    				// Save changed flags in internal model array					
+    				item->MessagePtr().SaveMessageL();
+    				iMsgDataCouldBeChanged = ETrue;
+				    }
+				
+				// Update the list item graphics
+				UpdateMsgIconAndBoldingL( i );
+				break;
+				}
+			}
+		}
+	}
+
+// Updates list item at given index to match the state of the message object
+void CFSEmailUiSearchListVisualiser::UpdateMsgIconAndBoldingL( TInt aListIndex )
+    {
+    FUNC_LOG;
+    if (aListIndex < iSearchListItemArray.Count())
+    	{
+	    CFSEmailUiMailListModelItem* item =
+		    static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(aListIndex) );
+	    if ( item && item->ModelItemType()==ETypeMailItem )
+		    {
+		    CFSMailMessage* msgPtr = &item->MessagePtr();
+		    CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( msgPtr, *iAppUi.FsTextureManager() );	
+		    CFsTreePlainTwoLineItemData* itemData = 
+                static_cast<CFsTreePlainTwoLineItemData*>( iSearchListItemArray[aListIndex].iTreeItemData );
+		    CFsTreePlainTwoLineItemVisualizer* itemVis = 
+                static_cast<CFsTreePlainTwoLineItemVisualizer*>( iSearchListItemArray[aListIndex].iTreeItemVisualiser );			
+		    itemData->SetIcon( *itemTexture );		
+		    if ( msgPtr->IsFlagSet( EFSMsgFlag_Read ) )
+			    {			
+			    itemVis->SetTextBold( EFalse );
+			    }
+		    else
+			   {	
+			   itemVis->SetTextBold( ETrue );
+			   }
+		    // Set follow up flag icon correctly
+		    if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
+			    {
+			    if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
+				    {
+			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
+				    itemVis->SetFlagIconVisible( ETrue );		 		
+				    }
+			    else if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
+				    {
+			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
+				    itemVis->SetFlagIconVisible( ETrue );				 		
+				    }
+			    else
+				    {
+		 	        itemVis->SetFlagIconVisible( EFalse );			
+				    }		
+			    }
+		    else
+		        {
+		        itemVis->SetFlagIconVisible( EFalse );
+		        }		    
+		    iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[aListIndex].iSearchListItemId );
+		    }
+    	}
+    }
+    
+
+// Delete messages 
+void CFSEmailUiSearchListVisualiser::DeleteFocusedMessageL()
+	{
+    FUNC_LOG;
+	if ( iSearchList->Count() )
+		{
+		TInt currentItemIndex = HighlightedIndex();
+		CFSEmailUiMailListModelItem* item =
+			static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(currentItemIndex));
+		if ( item && item->ModelItemType() == ETypeMailItem )
+			{
+			CFSMailMessage& messagePtr = item->MessagePtr();
+			TInt queryTextId(0);
+            if ( messagePtr.IsFlagSet( EFSMsgFlag_CalendarMsg ))
+                {
+                queryTextId = R_FREESTYLE_EMAIL_DELETE_CALEVENT_NOTE;
+                }
+            else
+                {
+                queryTextId = R_FREESTYLE_EMAIL_DELETE_MAIL_NOTE;
+                }
+            HBufC* msgSubject = TFsEmailUiUtility::CreateSubjectTextLC( &messagePtr );
+
+            TInt okToDelete( ETrue );
+            if ( iAppUi.GetCRHandler()->WarnBeforeDelete() )
+               {
+               okToDelete = TFsEmailUiUtility::ShowConfirmationQueryL( queryTextId, *msgSubject );
+               }
+            CleanupStack::PopAndDestroy( msgSubject );
+			
+			if ( okToDelete )
+ 				{
+ 				iMsgDataCouldBeChanged = ETrue; // Refresh
+ 				// Delete message from framework, and perform internal housekeeping
+ 				TFSMailMsgId msgId = messagePtr.GetMessageId();					
+ 				RArray<TFSMailMsgId> msgIds;
+ 				msgIds.Append( msgId ); 			
+				TFSMailMsgId folderId = messagePtr.GetFolderId();
+				TFSMailMsgId mailBox = iAppUi.GetActiveMailbox()->GetId(); 
+				iAppUi.GetMailClient()->DeleteMessagesByUidL( mailBox, folderId, msgIds );			
+	 			msgIds.Reset();						
+				SSearchListItem item;
+				item.iSearchListItemId = iSearchList->FocusedItem();
+				TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );								
+				iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.		 				 	
+		 		iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model												
+				iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list			
+				}					
+			}
+		}			
+	}
+
+
+// Navigation functions, used mainly from viewer
+TBool CFSEmailUiSearchListVisualiser::IsNextMsgAvailable( TFSMailMsgId aCurrentMsgId, 
+														  TFSMailMsgId& aFoundNextMsgId,
+														  TFSMailMsgId& aFoundNextMsgFolderId ) const
+	{
+    FUNC_LOG;
+	TBool ret(EFalse);
+
+	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
+	if ( curIdx >= 0 )
+	    {
+	    TInt nextIdx = NextMessageIndex(curIdx);
+	    if ( nextIdx >= 0 )
+	        {
+	        ret = ETrue;
+	        aFoundNextMsgId = MsgIdFromIndex(nextIdx);
+	        CFSEmailUiMailListModelItem* item = 
+    			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( nextIdx ));
+    		if ( item->ModelItemType() == ETypeMailItem )
+    	  	  {
+    	 	   aFoundNextMsgFolderId = item->MessagePtr().GetFolderId();
+    	 	   }	        
+	        }
+	    }
+		
+	return ret;
+	}
+
+
+TBool CFSEmailUiSearchListVisualiser::IsPreviousMsgAvailable( TFSMailMsgId aCurrentMsgId, 
+														  	  TFSMailMsgId& aFoundPreviousMsgId,
+														  	  TFSMailMsgId& aFoundPrevMsgFolderId ) const
+	{
+    FUNC_LOG;
+	TBool ret(EFalse);
+	
+	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
+	if ( curIdx >= 0 )
+	    {
+	    TInt prevIdx = PreviousMessageIndex(curIdx);
+	    if ( prevIdx >= 0 )
+	        {
+	        ret = ETrue;
+	        aFoundPreviousMsgId = MsgIdFromIndex(prevIdx);
+	     	CFSEmailUiMailListModelItem* item = 
+    			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( prevIdx ));
+    		if ( item->ModelItemType() == ETypeMailItem )
+    	  	  {
+    	 	   aFoundPrevMsgFolderId = item->MessagePtr().GetFolderId();
+    	 	   }   
+	        }
+	    }
+				
+    return ret;
+	}
+
+TInt CFSEmailUiSearchListVisualiser::MoveToNextMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId )
+	{
+    FUNC_LOG;
+	TInt ret(KErrNotFound);
+	
+	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
+	TInt nextIdx = NextMessageIndex( curIdx );
+	
+	if ( curIdx >= 0 && nextIdx >= 0 )
+	    {
+	    // Focus the new message
+	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[nextIdx].iSearchListItemId );
+	    ChangeReadStatusOfHighlightedL( ETrue );
+        aFoundNextMsgId = MsgIdFromIndex( nextIdx );
+	    ret = KErrNone;
+	    }
+	if ( ret == KErrNone )
+		{
+		OpenHighlightedMailL();
+		}		
+	return ret;
+	}
+
+TInt CFSEmailUiSearchListVisualiser::MoveToPreviousMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId )
+	{
+    FUNC_LOG;
+	TInt ret(KErrNotFound);
+	
+	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
+	TInt prevIdx = PreviousMessageIndex( curIdx );
+	
+	if ( curIdx >= 0 && prevIdx >= 0 )
+	    {
+	    // Focus the new message
+	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[prevIdx].iSearchListItemId );
+	    ChangeReadStatusOfHighlightedL( ETrue );
+        aFoundPreviousMsgId = MsgIdFromIndex( prevIdx );
+	    ret = KErrNone;
+	    }
+	if ( ret == KErrNone )
+		{
+		OpenHighlightedMailL();
+		}		
+	return ret;
+	}
+
+
+	// Helper functions to get highlighted message id and folder id
+TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageFolderId()
+	{
+    FUNC_LOG;
+	TFSMailMsgId ret;
+ 	if ( iSearchList->Count() && iModel )
+		{
+	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+		if ( item && item->ModelItemType() == ETypeMailItem )
+			{
+			ret = item->MessagePtr().GetFolderId();
+			}			
+		}
+	return ret;
+	}
+
+TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageId()
+	{
+    FUNC_LOG;
+	TFSMailMsgId ret;
+	if ( iSearchList->Count() && iModel )
+		{
+	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+		if ( item && item->ModelItemType() == ETypeMailItem )
+			{
+			ret = item->MessagePtr().GetMessageId();
+			}		
+		}
+	return ret;
+	}
+
+
+//<cmail> Touch
+// ---------------------------------------------------------------------------
+// CFSEmailUiSearchListVisualiser::TreeListEventL
+// From MFsTreeListObserver
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::TreeListEventL( const TFsTreeListEvent aEvent, const TFsTreeItemId /*aId*/ )
+    {
+    FUNC_LOG;
+    
+    switch(aEvent)
+        {
+        case MFsTreeListObserver::EFsTreeListItemTouchAction:
+            DoHandleActionL(); 
+            break; 
+        case MFsTreeListObserver::EFsTreeListItemTouchLongTap:
+            if ( iSearchList->Count() )
+                 {
+                 LaunchActionMenuL();                       
+                 }                
+            break; 
+        case MFsTreeListObserver::EFsTreeListItemWillGetFocused:
+            {
+            SetMskL(); 
+            break;
+            }            
+        case MFsTreeListObserver::EFsTreeListItemTouchFocused:
+        default:
+            //Just ignore rest of events
+            break;             
+        }                   
+    }
+
+// ---------------------------------------------------------------------------
+// CFSEmailUiSearchListVisualiser::DoHandleActionL
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::DoHandleActionL()
+    {
+    FUNC_LOG;
+    TInt modelCount = 0; 
+    
+    if ( iModel )
+        {
+        modelCount = iModel->Count();               
+        }
+    if ( modelCount ) // Safety check
+        {
+        CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+        if ( item && item->ModelItemType() == ETypeMailItem )
+            {
+            CFSMailMessage* messagePtr = &item->MessagePtr();
+            if ( messagePtr )
+                {
+                OpenHighlightedMailL();                         
+                }
+            }
+        }    
+    }
+
+//</cmail> 
+
+// ---------------------------------------------------------------------------
+// From MFSEmailUiContactHandlerObserver
+// The ownership of the CLS items in the contacts array is transferred to the
+// observer, and they must be deleted by the observer.
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::OperationCompleteL(
+    TContactHandlerCmd /*aCmd*/, const RPointerArray<CFSEmailUiClsItem>& /*aContacts*/ )
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// From MFSEmailUiContactHandlerObserver
+// Handles error in contact handler operation.
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::OperationErrorL(
+    TContactHandlerCmd /*aCmd*/, TInt /*aError*/ )
+    {
+    FUNC_LOG;
+    }
+
+void CFSEmailUiSearchListVisualiser::CallToSenderL()
+	{
+    FUNC_LOG;
+	CFSEmailUiMailListModelItem* item =
+		dynamic_cast<CFSEmailUiMailListModelItem*>
+			( iModel->Item( HighlightedIndex() ) );
+	if ( item && item->ModelItemType() == ETypeMailItem )
+		{
+		CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
+		TDesC* emailAddress(0);
+		if ( fromAddress )
+			{
+			emailAddress = &fromAddress->GetEmailAddress();		
+			}
+		if ( emailAddress && emailAddress->Length() )
+			{
+			CFsDelayedLoader::InstanceL()->GetContactHandlerL()->
+				FindAndCallToContactByEmailL( *emailAddress,
+					iAppUi.GetActiveMailbox(), this, ETrue );									
+			}
+		}		
+	}
+
+
+// ---------------------------------------------------------------------------
+// Logic for changing msk
+// ---------------------------------------------------------------------------
+// 
+void CFSEmailUiSearchListVisualiser::SetMskL()
+	{
+    FUNC_LOG;
+	if ( iFirstStartCompleted )
+	    {
+	    if ( iSearchList && iSearchList->Count() )
+	        {
+	        ChangeMskCommandL( R_FSE_QTN_MSK_OPEN );    
+	        }
+	    else
+	        {
+	        ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );           
+	        }
+	    }
+	}
+
+
+// ---------------------------------------------------------------------------
+// LaunchActionMenuL
+// Function launches action menu based on the highlighted or marked messages
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::LaunchActionMenuL()
+    {
+    FUNC_LOG;
+    if ( iModel && iModel->Count() )
+        {
+        // Remove old items from action menu
+        CFSEmailUiActionMenu::RemoveAllL();
+        // Construct item list
+        RFsEActionMenuIdList itemList;
+        CleanupClosePushL( itemList );
+        
+        CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
+        // Right click action menu for calendar events
+        if ( item && item->ModelItemType() == ETypeMailItem && 
+              item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
+             {
+             TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
+             if ( iAppUi.MrViewerInstanceL() )
+                 {
+                 // Search must be stopped, otherwise resolve will lead to crash
+                 if ( iSearchOngoing )
+                      {
+                      StopSearchL();
+                      }
+                 mrMethod = iAppUi.MrViewerInstanceL()->ResolveMeetingRequestMethodL( item->MessagePtr() );
+                 }
+             switch ( mrMethod )
+                 {
+                 case EESMRMeetingRequestMethodRequest:
+                     itemList.AppendL( FsEActionMenuAccept );
+                     itemList.AppendL( FsEActionMenuTentative );
+                     itemList.AppendL( FsEActionMenuDecline );                      
+                     break;
+                 case EESMRMeetingRequestMethodCancellation:
+                     {
+                     TBool supportsRemove = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaRemoveFromCalendar );
+                     if( supportsRemove )
+                         {
+                         itemList.AppendL( FsEActionMenuRemoveFormCal );                                          
+                         }
+                     break;
+                     }
+                 default:
+                 case EESMRMeetingRequestMethodUnknown:
+                 case EESMRMeetingRequestMethodResponse:
+                     itemList.AppendL( FsEActionMenuOpen);
+                     break;
+                 }             
+             }
+        // Right click action menu for normal mail items
+        else
+             {
+             itemList.AppendL( FsEActionMenuReply );
+            //Get # of recipients
+            TInt numRecipients(0);
+            CFSMailMessage* messagePtr = &item->MessagePtr();
+            if ( messagePtr )
+                {
+                numRecipients =TFsEmailUiUtility::CountRecepients( messagePtr );
+                if ( numRecipients == 1 )
+                    {
+                    //check if the malbox ownmailaddress is same as the recipients email address. If not, then assume that the
+                    //email is a distribution list and we need to inc num of Recipients so that "Reply ALL" option appears in UI.
+                    if ( messagePtr->GetToRecipients().Count() )
+                        {
+                        if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetToRecipients()[0]->GetEmailAddress()) )
+                            {
+                            numRecipients++;
+                            }
+                        }
+                    if ( messagePtr->GetCCRecipients().Count() )
+                        {
+                        if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetCCRecipients()[0]->GetEmailAddress()) )
+                            {
+                            numRecipients++;
+                            }
+                        }
+                    if ( messagePtr->GetBCCRecipients().Count() )
+                        {
+                        if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetBCCRecipients()[0]->GetEmailAddress()) )
+                            {
+                            numRecipients++;
+                            }
+                        }                
+                    }
+                
+                }
+              
+             if ( numRecipients > 1 )
+                 {
+                 itemList.AppendL( FsEActionMenuReplyAll );
+                 }          
+             itemList.AppendL( FsEActionMenuForward );            
+             }  
+        // Add mark as read/unread options
+        if ( item->MessagePtr().IsFlagSet(EFSMsgFlag_Read) )
+            {
+            itemList.AppendL( FsEActionMenuMarkUnread );
+            }
+        else 
+            {
+            itemList.AppendL( FsEActionMenuMarkRead );
+            }           
+        itemList.AppendL( FsEActionMenuDelete );     
+        
+// <cmail> Touch
+        TActionMenuCustomItemId itemId = CFSEmailUiActionMenu::ExecuteL( itemList, EFscCustom, 0, this );
+// </cmail>
+        CleanupStack::PopAndDestroy( &itemList );
+        HandleActionMenuCommandL( itemId ); 
+        }
+    }
+
+
+// <cmail>
+// ---------------------------------------------------------------------------
+// ActionMenuPosition
+// ---------------------------------------------------------------------------
+//
+TPoint CFSEmailUiSearchListVisualiser::ActionMenuPosition()
+    {
+    TAlfRealRect focusRect;
+    TFsTreeItemId listItemId = iSearchList->FocusedItem();
+    iSearchList->GetItemDisplayRectTarget(listItemId, focusRect);
+    return focusRect.iTl;
+    }
+// </cmail>
+
+
+// ---------------------------------------------------------------------------
+// HandleActionMenuCommandL
+// Action menu command callback handler
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::HandleActionMenuCommandL( TActionMenuCustomItemId itemId )
+    {
+    FUNC_LOG;
+    // Map each Action Menu ID to correcponding command ID.
+    TInt commandId = KErrNotFound;
+    
+    switch( itemId )
+        {
+        case FsEActionMenuOpenCalendarEvent:
+        case FsEActionMenuOpen:
+            commandId = EFsEmailUiCmdOpen;
+            break;
+        case FsEActionMenuAccept:
+            commandId = EFsEmailUiCmdCalActionsAccept;
+            break;
+        case FsEActionMenuTentative:
+            commandId = EFsEmailUiCmdCalActionsTentative;
+            break;
+        case FsEActionMenuDecline:
+            commandId = EFsEmailUiCmdCalActionsDecline;
+            break;
+        case FsEActionMenuRemoveFormCal:
+            commandId = EFsEmailUiCmdCalRemoveFromCalendar;
+            break;
+        case FsEActionMenuMarkRead:
+            commandId = EFsEmailUiCmdMarkAsRead;
+            break;
+        case FsEActionMenuMarkUnread:
+            commandId = EFsEmailUiCmdMarkAsUnread;
+            break;          
+        case FsEActionMenuDelete:
+            commandId = EFsEmailUiCmdActionsDelete;
+            break;                          
+        case FsEActionMenuReply:
+            commandId = EFsEmailUiCmdActionsReply;
+            break;
+        case FsEActionMenuReplyAll:
+            commandId = EFsEmailUiCmdActionsReplyAll;
+            break;
+        case FsEActionMenuForward:
+            commandId = EFsEmailUiCmdActionsForward;
+            break;
+        case FsEActionMenuMove:
+            commandId = EFsEmailUiCmdActionsMoveMessage;
+            break;
+        case FsEActionMenuMoveToDrafts:
+            commandId = EFsEmailUiCmdActionsMoveToDrafts;
+            break;
+        case FsEActionMenuDismissed:
+            commandId = KErrCancel;
+            break;
+        default:
+            __ASSERT_DEBUG( EFalse, Panic( EFSEmailUiUnexpectedValue ) );
+            break;
+        }
+    
+    if ( commandId >= 0 )
+        {
+        HandleCommandL( commandId );
+        }
+    }
+
+//<cmail>
+// ---------------------------------------------------------------------------
+// CFSEmailUiSearchListVisualiser::SetHeaderTextAttributesL()
+//
+// Apply header text/background attributes
+// This creates i.e "Search result: %S " title caption and background graphics
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSearchListVisualiser::SetHeaderAttributesL()
+	{
+	// Set bar text color/style from skin	
+	iBarTextVisual->SetTextStyle( iAppUi.LayoutHandler()->
+	        FSTextStyleFromLayoutL( AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( 0 ) ).Id() );
+	iBarTextVisual->SetColor( iAppUi.LayoutHandler()->
+							ListNormalStateTextSkinColor() );
+
+    if( iBarBgVisual->Brushes() )
+        {
+        iBarBgVisual->Brushes()->Reset();
+        }
+    iBarBgVisual->EnableBrushesL();
+    CAlfBrush* selectorBrush = iAppUi.FsTextureManager()->
+                   NewCtrlBarSelectorBrushLC();
+    selectorBrush->SetOpacity( KFSHeaderTextBackgroundOpacity );
+    iBarBgVisual->Brushes()->AppendL( selectorBrush, EAlfHasOwnership );
+    CleanupStack::Pop( selectorBrush );
+	}
+//</cmail>
+
+
+
+
+// End of file