emailuis/emailui/src/FreestyleEmailUiSearchListVisualiser.cpp
changeset 2 5253a20d2a1e
parent 1 12c456ceeff2
child 4 e7aa27f58ae1
equal deleted inserted replaced
1:12c456ceeff2 2:5253a20d2a1e
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    56 #include <layoutmetadata.cdl.h>
    56 #include <layoutmetadata.cdl.h>
    57 #include <aknlayoutscalable_apps.cdl.h>
    57 #include <aknlayoutscalable_apps.cdl.h>
    58 // </cmail>
    58 // </cmail>
    59 #include <featmgr.h>
    59 #include <featmgr.h>
    60 //</cmail>
    60 //</cmail>
       
    61 #include <aknstyluspopupmenu.h>
    61 
    62 
    62 //<cmail>
    63 //<cmail>
    63 #include "cfsccontactactionmenu.h"
       
    64 #include "mfsccontactactionmenumodel.h"
    64 #include "mfsccontactactionmenumodel.h"
    65 #include "fscontrolbar.h"
    65 #include "fscontrolbar.h"
    66 #include "fscontrolbuttoninterface.h"
    66 #include "fscontrolbuttoninterface.h"
    67 #include "fscontrolbuttonvisualiser.h"
    67 #include "fscontrolbuttonvisualiser.h"
    68 #include <csxhelp/cmail.hlp.hrh>
    68 #include <csxhelp/cmail.hlp.hrh>
    99 //static const TInt KSearchIconWidth = 30;
    99 //static const TInt KSearchIconWidth = 30;
   100 const TReal KFSHeaderTextBackgroundOpacity = 0.3f;
   100 const TReal KFSHeaderTextBackgroundOpacity = 0.3f;
   101 //</cmail>
   101 //</cmail>
   102 static const TInt KItemExpansionDelay = 400;
   102 static const TInt KItemExpansionDelay = 400;
   103 static const TInt KListScrollingDelay = 200;
   103 static const TInt KListScrollingDelay = 200;
   104 static const TInt KMaxPreviewPaneLength = 60; 
   104 static const TInt KMaxPreviewPaneLength = 60;
   105 
   105 
   106 
   106 //<cmail> define search required priorities
   107 
   107 #define KStandardSearchPriority   CActive::EPriorityStandard  
   108 CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewL(CAlfEnv& aEnv, 
   108 #define KCallingSearchPriority   ( CActive::EPriorityIdle - 1 )
       
   109 
       
   110 
       
   111 CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewL(CAlfEnv& aEnv,
   109 																 CFreestyleEmailUiAppUi* aAppUi,
   112 																 CFreestyleEmailUiAppUi* aAppUi,
   110 																 CAlfControlGroup& aSearchListControlGroup )
   113 																 CAlfControlGroup& aSearchListControlGroup )
   111     {
   114     {
   112     FUNC_LOG;
   115     FUNC_LOG;
   113     CFSEmailUiSearchListVisualiser* self = CFSEmailUiSearchListVisualiser::NewLC(aEnv, aAppUi, aSearchListControlGroup );
   116     CFSEmailUiSearchListVisualiser* self = CFSEmailUiSearchListVisualiser::NewLC(aEnv, aAppUi, aSearchListControlGroup );
   114     CleanupStack::Pop(self);
   117     CleanupStack::Pop(self);
   115     return self;
   118     return self;
   116     }
   119     }
   117 
   120 
   118 CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewLC(CAlfEnv& aEnv, 
   121 CFSEmailUiSearchListVisualiser* CFSEmailUiSearchListVisualiser::NewLC(CAlfEnv& aEnv,
   119 																  CFreestyleEmailUiAppUi* aAppUi,
   122 																  CFreestyleEmailUiAppUi* aAppUi,
   120 																  CAlfControlGroup& aSearchListControlGroup)
   123 																  CAlfControlGroup& aSearchListControlGroup)
   121 {
   124 {
   122     FUNC_LOG;
   125     FUNC_LOG;
   123     CFSEmailUiSearchListVisualiser* self = new (ELeave) CFSEmailUiSearchListVisualiser(aAppUi, aEnv, aSearchListControlGroup);
   126     CFSEmailUiSearchListVisualiser* self = new (ELeave) CFSEmailUiSearchListVisualiser(aAppUi, aEnv, aSearchListControlGroup);
   133 
   136 
   134 	// Set list as initial focused control
   137 	// Set list as initial focused control
   135 	iThisViewActive = EFalse;
   138 	iThisViewActive = EFalse;
   136 	iFirstStartCompleted = EFalse;
   139 	iFirstStartCompleted = EFalse;
   137    	}
   140    	}
   138 	
   141 
   139 // CFSEmailUiSearchListVisualiser::DoFirstStartL()
   142 // CFSEmailUiSearchListVisualiser::DoFirstStartL()
   140 // Purpose of this function is to do first start only when search list is
   143 // Purpose of this function is to do first start only when search list is
   141 // really needed to be shown. Implemented to make app startuo faster.
   144 // really needed to be shown. Implemented to make app startuo faster.
   142 void CFSEmailUiSearchListVisualiser::DoFirstStartL()
   145 void CFSEmailUiSearchListVisualiser::DoFirstStartL()
   143     {
   146     {
   144     FUNC_LOG;
   147     FUNC_LOG;
   145     TRect screenRect;
   148     TRect screenRect;
   146     AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );   
   149     AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
   147      
   150 
   148     // Create control and anchor layout
   151     // Create control and anchor layout
   149     iSearchListControl = CFreestyleEmailUiSearchListControl::NewL( *iEnv, this );
   152     iSearchListControl = CFreestyleEmailUiSearchListControl::NewL( *iEnv, this );
   150     iScreenAnchorLayout = CAlfAnchorLayout::AddNewL( *iSearchListControl );
   153     iScreenAnchorLayout = CAlfAnchorLayout::AddNewL( *iSearchListControl );
   151     iScreenAnchorLayout->SetFlags(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
   154     iScreenAnchorLayout->SetFlags(EAlfVisualFlagAutomaticLocaleMirroringEnabled);
   152     SetSearchListLayoutAnchors();
   155     SetSearchListLayoutAnchors();
   153 
   156 
   154     // Create top bar layout
   157     // Create top bar layout
   155     iSearchTopBarLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );  
   158     iSearchTopBarLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   156     iBarBgVisual = CAlfImageVisual::AddNewL( *iSearchListControl, iSearchTopBarLayout );
   159     iBarBgVisual = CAlfImageVisual::AddNewL( *iSearchListControl, iSearchTopBarLayout );
   157         /*<cmail> paltform layout changes to cmail
   160         /*<cmail> paltform layout changes to cmail
   158     TAlfTimedValue barBgTextureOpacity;
   161     TAlfTimedValue barBgTextureOpacity;
   159     barBgTextureOpacity.SetValueNow( 1 );
   162     barBgTextureOpacity.SetValueNow( 1 );
   160     iBarBgVisual->SetOpacity( barBgTextureOpacity );
   163     iBarBgVisual->SetOpacity( barBgTextureOpacity );
   165 
   168 
   166         /*<cmail> magnifier image is not in cmail
   169         /*<cmail> magnifier image is not in cmail
   167     // Add bar image component
   170     // Add bar image component
   168     iBarFindImage = CAlfImageVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   171     iBarFindImage = CAlfImageVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   169     TAlfTimedValue barFindImageOpacity;
   172     TAlfTimedValue barFindImageOpacity;
   170     barFindImageOpacity.SetValueNow( 1 );   
   173     barFindImageOpacity.SetValueNow( 1 );
   171     iBarFindImage->SetOpacity( barFindImageOpacity );
   174     iBarFindImage->SetOpacity( barFindImageOpacity );
   172     CAlfTexture* barFindTexture = &iAppUi.FsTextureManager()->TextureByIndex( ESearchLookingGlassIcon );
   175     CAlfTexture* barFindTexture = &iAppUi.FsTextureManager()->TextureByIndex( ESearchLookingGlassIcon );
   173     barFindTexture->Size().SetSize( 15, 15 );
   176     barFindTexture->Size().SetSize( 15, 15 );
   174     iBarFindImage->SetImage( TAlfImage( *barFindTexture ) );    
   177     iBarFindImage->SetImage( TAlfImage( *barFindTexture ) );
   175         */ //</cmail>
   178         */ //</cmail>
   176 
   179 
   177 	// <cmail>
   180 	// <cmail>
   178     // Add bar text component
   181     // Add bar text component
   179     iBarTextVisual = CAlfTextVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   182     iBarTextVisual = CAlfTextVisual::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   180     iBarTextVisual->EnableShadow(EFalse);
   183     iBarTextVisual->EnableShadow(EFalse);
   181     iBarTextVisual->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
   184     iBarTextVisual->SetWrapping( CAlfTextVisual::ELineWrapTruncate );
   182 	// </cmail>
   185 	// </cmail>
   183 	
   186 
   184 	/*<cmail> no initial text or opacity required in cmail
   187 	/*<cmail> no initial text or opacity required in cmail
   185     HBufC* initialSearchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
   188     HBufC* initialSearchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
   186     iBarTextVisual->SetTextL( *initialSearchText );     
   189     iBarTextVisual->SetTextL( *initialSearchText );
   187     CleanupStack::PopAndDestroy( initialSearchText );
   190     CleanupStack::PopAndDestroy( initialSearchText );
   188     TAlfTimedValue barTextVisualOpacity;
   191     TAlfTimedValue barTextVisualOpacity;
   189     barTextVisualOpacity.SetValueNow( 1 );
   192     barTextVisualOpacity.SetValueNow( 1 );
   190     iBarTextVisual->SetOpacity( barTextVisualOpacity );
   193     iBarTextVisual->SetOpacity( barTextVisualOpacity );
   191         
   194 
   192     CAlfTextStyle* textStyle = iAppUi.LayoutHandler()->FSTextStyleFromIdL( EFSFontTypeSmallBold );
   195     CAlfTextStyle* textStyle = iAppUi.LayoutHandler()->FSTextStyleFromIdL( EFSFontTypeSmallBold );
   193     iBarTextVisual->SetTextStyle ( textStyle->Id() );*/ //</cmail>	
   196     iBarTextVisual->SetTextStyle ( textStyle->Id() );*/ //</cmail>
   194     if ( !AknLayoutUtils::LayoutMirrored() )
   197     if ( !AknLayoutUtils::LayoutMirrored() )
   195         {
   198         {
   196         iBarTextVisual->SetAlign(EAlfAlignHLeft, EAlfAlignVCenter);         
   199         iBarTextVisual->SetAlign(EAlfAlignHLeft, EAlfAlignVCenter);
   197         }
   200         }
   198     else
   201     else
   199         {
   202         {
   200         iBarTextVisual->SetAlign(EAlfAlignHRight, EAlfAlignVCenter);            
   203         iBarTextVisual->SetAlign(EAlfAlignHRight, EAlfAlignVCenter);
   201         }
   204         }
   202 
   205 
   203     // Create model
   206     // Create model
   204     iModel = CFSEmailUiMailListModel::NewL( &iAppUi, ETrue );  
   207     iModel = CFSEmailUiMailListModel::NewL( &iAppUi, ETrue );
   205 
   208 
   206     // Create list and append to control group and anchor layout
   209     // Create list and append to control group and anchor layout
   207     iSearchListLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );  
   210     iSearchListLayout = CAlfDeckLayout::AddNewL( *iSearchListControl, iScreenAnchorLayout );
   208     iSearchListLayout->SetSize( TSize( screenRect.Width(), screenRect.Height()-
   211     iSearchListLayout->SetSize( TSize( screenRect.Width(), screenRect.Height()-
   209             iAppUi.LayoutHandler()->ControlBarHeight() ) );
   212             iAppUi.LayoutHandler()->ControlBarHeight() ) );
   210     iSearchTreeListVisualizer = CFsTreeVisualizerBase::NewL(iSearchListControl, *iSearchListLayout);  
   213     iSearchTreeListVisualizer = CFsTreeVisualizerBase::NewL(iSearchListControl, *iSearchListLayout);
   211     iSearchList = CFsTreeList::NewL(*iSearchTreeListVisualizer, *iEnv );   
   214     iSearchList = CFsTreeList::NewL(*iSearchTreeListVisualizer, *iEnv );
   212     iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
   215     iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
   213   
   216 
   214     // Set mark type and icon
   217     // Set mark type and icon
   215     iSearchList->SetMarkTypeL( CFsTreeList::EFsTreeListMultiMarkable ); 
   218     iSearchList->SetMarkTypeL( CFsTreeList::EFsTreeListMultiMarkable );
   216     iSearchTreeListVisualizer->SetMarkIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMarkIcon ) );
   219     iSearchTreeListVisualizer->SetMarkIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMarkIcon ) );
   217     iSearchTreeListVisualizer->SetMenuIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMenuIcon ) );        
   220     iSearchTreeListVisualizer->SetMenuIcon( iAppUi.FsTextureManager()->TextureByIndex( EListControlMenuIcon ) );
   218 	iSearchTreeListVisualizer->SetFlipState( iKeyboardFlipOpen );
   221 	iSearchTreeListVisualizer->SetFlipState( iKeyboardFlipOpen );
   219 	iSearchTreeListVisualizer->SetFocusVisibility( iFocusVisible );
   222 	iSearchTreeListVisualizer->SetFocusVisibility( iFocusVisible );
   220     iSearchList->SetIndentationL(0);
   223     iSearchList->SetIndentationL(0);
   221 
   224 
   222     //<cmail> events are now offered to controls in different order
   225     //<cmail> events are now offered to controls in different order
   223     ControlGroup().AppendL( iSearchListControl );
   226     ControlGroup().AppendL( iSearchListControl );
   224     ControlGroup().AppendL( iSearchList->TreeControl() ); 
   227     ControlGroup().AppendL( iSearchList->TreeControl() );
   225     //</cmail>
   228     //</cmail>
   226     //<cmail> touch
   229     //<cmail> touch
   227     iSearchList->AddObserverL(*this); 
   230     iSearchList->AddObserverL(*this);
   228     //</cmail>
   231     //</cmail>
   229     iSearchOngoing = EFalse;
   232     iSearchOngoing = EFalse;
   230  
   233 
   231     // Set mail list background 
   234 
       
   235     // Initializing the default stylus long tap popup menu
       
   236     if( !iStylusPopUpMenu )
       
   237         {
       
   238         TPoint point( 0, 0 );
       
   239         iStylusPopUpMenu = CAknStylusPopUpMenu::NewL( this , point );
       
   240         TResourceReader reader;
       
   241         iCoeEnv->CreateResourceReaderLC( reader,
       
   242                 R_STYLUS_POPUP_MENU_SEARCH_LIST_VIEW );
       
   243         iStylusPopUpMenu->ConstructFromResourceL( reader );
       
   244         CleanupStack::PopAndDestroy();
       
   245         }
       
   246 
       
   247     // Set mail list background
   232     //<cmail> S60 skin support
   248     //<cmail> S60 skin support
   233     //iSearchTreeListVisualizer->SetBackgroundTextureL( iAppUi.FsTextureManager()->TextureByIndex( EBackgroundTextureMailList ) );  
   249     //iSearchTreeListVisualizer->SetBackgroundTextureL( iAppUi.FsTextureManager()->TextureByIndex( EBackgroundTextureMailList ) );
   234     //</cmail>
   250     //</cmail>
   235   
   251 
   236     iSearchTreeListVisualizer->SetItemExpansionDelay( KItemExpansionDelay );
   252     iSearchTreeListVisualizer->SetItemExpansionDelay( KItemExpansionDelay );
   237     iSearchList->SetScrollTime( KListScrollingDelay, 0.5 );
   253     iSearchList->SetScrollTime( KListScrollingDelay, 0.5 );
   238 
   254 
   239     // Set empty text
   255     // Set empty text
   240     HBufC* emptyText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_EMPTY_MSG_LIST_TEXT );
   256     HBufC* emptyText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_EMPTY_MSG_LIST_TEXT );
   241     iSearchTreeListVisualizer->SetEmptyListTextL( *emptyText ); 
   257     iSearchTreeListVisualizer->SetEmptyListTextL( *emptyText );
   242     CleanupStack::PopAndDestroy( emptyText );
   258     CleanupStack::PopAndDestroy( emptyText );
   243     TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   259     TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   244     iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor ); 
   260     iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );
   245      
   261 
   246     // Create startup timer
   262     // Create startup timer
   247     iStartupCallbackTimer = CFSEmailUiGenericTimer::NewL( this );
   263     iStartupCallbackTimer = CFSEmailUiGenericTimer::NewL( this );
   248 
   264 
   249     // Set page up and page down keys
   265     // Set page up and page down keys
   250     iSearchTreeListVisualizer->AddCustomPageUpKey( EStdKeyPageUp );
   266     iSearchTreeListVisualizer->AddCustomPageUpKey( EStdKeyPageUp );
   251     iSearchTreeListVisualizer->AddCustomPageDownKey( EStdKeyPageDown );
   267     iSearchTreeListVisualizer->AddCustomPageDownKey( EStdKeyPageDown );
   252 
   268 
   253     CAlfBrush* selectorBrush = iAppUi.FsTextureManager()->ListSelectorBrushL();
   269     CAlfBrush* selectorBrush = iAppUi.FsTextureManager()->ListSelectorBrushL();
   254     iSearchTreeListVisualizer->SetSelectorPropertiesL( selectorBrush, 1.0, CFsTreeVisualizerBase::EFsSelectorMoveSmoothly );
   270     iSearchTreeListVisualizer->SetSelectorPropertiesL( selectorBrush, 1.0, CFsTreeVisualizerBase::EFsSelectorMoveSmoothly );
   255   
   271 
   256     iAppUi.LayoutHandler()->SetListMarqueeBehaviour( iSearchList );    
   272     iAppUi.LayoutHandler()->SetListMarqueeBehaviour( iSearchList );
   257     
   273 
   258     iFirstStartCompleted = ETrue;
   274     iFirstStartCompleted = ETrue;
   259    	}
   275    	}
   260 
   276 
   261 void CFSEmailUiSearchListVisualiser::TimerEventL( CFSEmailUiGenericTimer* /*aTriggeredTimer*/ )
   277 void CFSEmailUiSearchListVisualiser::TimerEventL( CFSEmailUiGenericTimer* /*aTriggeredTimer*/ )
   262 	{
   278 	{
   263     FUNC_LOG;
   279     FUNC_LOG;
   264 	LaunchSearchDialogL();	
   280 	LaunchSearchDialogL();
   265 	}
   281 	}
   266 	
   282 
   267 CFSEmailUiSearchListVisualiser::CFSEmailUiSearchListVisualiser( CFreestyleEmailUiAppUi* aAppUi, 
   283 CFSEmailUiSearchListVisualiser::CFSEmailUiSearchListVisualiser( CFreestyleEmailUiAppUi* aAppUi,
   268                                                                 CAlfEnv& aEnv, 
   284                                                                 CAlfEnv& aEnv,
   269                                                                 CAlfControlGroup& aSearchListControlGroup )
   285                                                                 CAlfControlGroup& aSearchListControlGroup )
   270     :CFsEmailUiViewBase( aSearchListControlGroup, *aAppUi ),
   286     :CFsEmailUiViewBase( aSearchListControlGroup, *aAppUi ),
   271     iEnv( &aEnv ),
   287     iEnv( &aEnv ),
   272     iLatestSearchText(0),
   288     iLatestSearchText( 0 ),
   273     iListAddedToControlGroup(EFalse), //<cmail>
   289     iListAddedToControlGroup( EFalse ),
   274     iPreparedForExit(EFalse) //<cmail>
   290     iConsumeStdKeyYes_KeyUp( EFalse ), // for consuming the call event if call for contact processed
   275 	{
   291     iRequiredSearchPriority( KStandardSearchPriority ),  // for search email priority decreasing
   276     FUNC_LOG;
   292     iPreparedForExit( EFalse )
   277 	}
   293 	{
   278 	
   294     FUNC_LOG;
       
   295 	}
       
   296 
   279 CFSEmailUiSearchListVisualiser::~CFSEmailUiSearchListVisualiser()
   297 CFSEmailUiSearchListVisualiser::~CFSEmailUiSearchListVisualiser()
   280 	{
   298 	{
   281     FUNC_LOG;
   299     FUNC_LOG;
   282     if ( iStartupCallbackTimer )
   300     if ( iStartupCallbackTimer )
   283     	{
   301     	{
   284     	iStartupCallbackTimer->Cancel();
   302     	iStartupCallbackTimer->Cancel();
   285     	delete iStartupCallbackTimer;
   303     	delete iStartupCallbackTimer;
   286     	}
   304     	}
   287 	iSearchStrings.ResetAndDestroy();
   305 	iSearchStrings.ResetAndDestroy();
   288 	iSearchListItemArray.Reset(); 
   306 	iSearchListItemArray.Reset();
   289     delete iModel;
   307     delete iModel;
   290 	delete iLatestSearchText;
   308 	delete iLatestSearchText;
   291 	delete iSearchList;
   309 	delete iSearchList;
   292 
   310     delete iStylusPopUpMenu;
   293 	}
   311 	}
   294 
   312 
   295 void CFSEmailUiSearchListVisualiser::PrepareForExit()
   313 void CFSEmailUiSearchListVisualiser::PrepareForExit()
   296     {
   314     {
   297     FUNC_LOG;
   315     FUNC_LOG;
   300         {
   318         {
   301         if(iSearchList && iSearchList->TreeControl())
   319         if(iSearchList && iSearchList->TreeControl())
   302             TRAP_IGNORE(ControlGroup().AppendL( iSearchList->TreeControl() ));
   320             TRAP_IGNORE(ControlGroup().AppendL( iSearchList->TreeControl() ));
   303         if(iSearchListControl)
   321         if(iSearchListControl)
   304         TRAP_IGNORE(ControlGroup().AppendL( iSearchListControl ));
   322         TRAP_IGNORE(ControlGroup().AppendL( iSearchListControl ));
   305         iListAddedToControlGroup = ETrue;        
   323         iListAddedToControlGroup = ETrue;
   306         }*/
   324         }*/
   307     //<cmail>
   325     //<cmail>
   308     if ( iSearchOngoing )
   326     if ( iSearchOngoing )
   309         {
   327         {
   310         TRAP_IGNORE( StopSearchL() );
   328         TRAP_IGNORE( StopSearchL() );
   311         }    
   329         }
   312     delete iMailBox;
   330     delete iMailBox;
   313     iMailBox = NULL;
   331     iMailBox = NULL;
       
   332     TRAP_IGNORE( ResetResultListL() );
   314     iPreparedForExit = ETrue;
   333     iPreparedForExit = ETrue;
   315     }
   334     }
   316 
   335 
   317 TInt CFSEmailUiSearchListVisualiser::HighlightedIndex() const
   336 TInt CFSEmailUiSearchListVisualiser::HighlightedIndex() const
   318 	{
   337 	{
   329 			}
   348 			}
   330 		}
   349 		}
   331 	return ret;
   350 	return ret;
   332 	}
   351 	}
   333 
   352 
   334 	
   353 
   335 TUid CFSEmailUiSearchListVisualiser::Id() const
   354 TUid CFSEmailUiSearchListVisualiser::Id() const
   336 	{
   355 	{
   337     FUNC_LOG;
   356     FUNC_LOG;
   338 	return SearchListViewId;	
   357 	return SearchListViewId;
   339 	}			   
   358 	}
   340 
   359 
   341 // <cmail> Toolbar
   360 // <cmail> Toolbar
   342 /*void CFSEmailUiSearchListVisualiser::DoActivateL(const TVwsViewId& aPrevViewId,
   361 /*void CFSEmailUiSearchListVisualiser::DoActivateL(const TVwsViewId& aPrevViewId,
   343                      TUid aCustomMessageId,
   362                      TUid aCustomMessageId,
   344                      const TDesC8& aCustomMessage)*/
   363                      const TDesC8& aCustomMessage)*/
   348 // </cmail> Toolbar
   367 // </cmail> Toolbar
   349 	{
   368 	{
   350     FUNC_LOG;
   369     FUNC_LOG;
   351 	if ( !iFirstStartCompleted )
   370 	if ( !iFirstStartCompleted )
   352 	    {
   371 	    {
   353 	    DoFirstStartL();	    
   372 	    DoFirstStartL();
   354 	    }
   373 	    }
   355 
   374 
   356 	// <cmail>
   375 	// <cmail>
   357     //iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
   376     //iSearchList->SetScrollbarVisibilityL( EFsScrollbarHideAlways );
   358     if ( aCustomMessageId != KStartListReturnToPreviousFolder )
   377     if ( aCustomMessageId != KStartListReturnToPreviousFolder )
   359     	{
   378     	{
   360     	iBarTextVisual->SetTextL(KNullDesC);	
   379     	iBarTextVisual->SetTextL(KNullDesC);
   361     	}
   380     	}
   362     
   381 
   363 	if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
   382 	if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
   364 		{
   383 		{
   365 		// If new search, clear old search list
   384 		// If new search, clear old search list
   366 		iSearchCount=0;
   385 		iSearchCount=0;
   367 		iMsgDataCouldBeChanged = EFalse;
   386 		iMsgDataCouldBeChanged = EFalse;
   373 	// Store previous view ID
   392 	// Store previous view ID
   374 	iPreviousViewUid = aPrevViewId.iViewUid;
   393 	iPreviousViewUid = aPrevViewId.iViewUid;
   375 	TSearchListActivationData subView;
   394 	TSearchListActivationData subView;
   376 	TPckgBuf<TSearchListActivationData> viewData( subView );
   395 	TPckgBuf<TSearchListActivationData> viewData( subView );
   377 	viewData.Copy( aCustomMessage );
   396 	viewData.Copy( aCustomMessage );
   378 	subView = viewData();		
   397 	subView = viewData();
   379 
   398 
   380 	// Update settings and set list mode according to settings
   399 	// Update settings and set list mode according to settings
   381 	UpdateMailListSettingsL();
   400 	UpdateMailListSettingsL();
   382 
   401 
   383 	if ( iMailBox )
   402 	if ( iMailBox )
   384 		{
   403 		{
   385 		delete iMailBox;
   404 		delete iMailBox;
   386 		iMailBox = NULL;
   405 		iMailBox = NULL;
   387 		}
   406 		}
   388 	iMailBox = iAppUi.GetMailClient()->GetMailBoxByUidL( subView.iMailBoxId );			
   407 	iMailBox = iAppUi.GetMailClient()->GetMailBoxByUidL( subView.iMailBoxId );
   389 	// If mailbox data is not, try to get default MCE account
   408 	// If mailbox data is not, try to get default MCE account
   390 	if ( !iMailBox )
   409 	if ( !iMailBox )
   391 		{
   410 		{
   392 		CMsvSession* msvSession = iAppUi.GetMsvSession();
   411 		CMsvSession* msvSession = iAppUi.GetMsvSession();
   393 		CFSMailClient* client = iAppUi.GetMailClient();
   412 		CFSMailClient* client = iAppUi.GetMailClient();
   394 		iMailBox = TFsEmailUiUtility::GetMceDefaultMailboxL( *client, *msvSession );				
   413 		iMailBox = TFsEmailUiUtility::GetMceDefaultMailboxL( *client, *msvSession );
   395 		}
   414 		}
   396 		
   415 
   397 	if ( iMailBox )	
   416 	if ( iMailBox )
   398 		{
   417 		{
   399 		iThisViewActive = ETrue;
   418 		iThisViewActive = ETrue;
   400                 //<cmail> visible/unvisible is not controlled by opacity in cmail
   419                 //<cmail> visible/unvisible is not controlled by opacity in cmail
   401 		//TAlfTimedValue opacity; 
   420 		//TAlfTimedValue opacity;
   402 		//opacity.SetValueNow( 1 );
   421 		//opacity.SetValueNow( 1 );
   403 		//iScreenAnchorLayout->SetOpacity( opacity );
   422 		//iScreenAnchorLayout->SetOpacity( opacity );
   404                 //</cmail>
   423                 //</cmail>
   405 		iSearchList->ShowListL();
   424 		iSearchList->ShowListL();
   406 		iSearchList->SetFocusedL(ETrue);
   425 		iSearchList->SetFocusedL(ETrue);
   407 		// Set empty text color
   426 		// Set empty text color
   408 	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   427 	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   409 		iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );  			
   428 		iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );
   410 
   429 
   411 		// Launch search dialog automatically when activated
   430 		// Launch search dialog automatically when activated
   412 		if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
   431 		if ( &aCustomMessage && aCustomMessageId == KStartNewSearch )
   413 			{
   432 			{
   414 			// <cmail> list reseting moved into the begining of the function
   433 			// <cmail> list reseting moved into the begining of the function
   415 			// requeset async launching of the search dialog because DoActivateL must
   434 			// requeset async launching of the search dialog because DoActivateL must
   416 			// not be blocked
   435 			// not be blocked
   417 			iStartupCallbackTimer->Cancel(); // just in case
   436 			iStartupCallbackTimer->Cancel(); // just in case
   418 			iStartupCallbackTimer->Start( iAppUi.LayoutHandler()->ViewSlideEffectTime() );			
   437 			iStartupCallbackTimer->Start( iAppUi.LayoutHandler()->ViewSlideEffectTime() );
   419 			}
   438 			}
   420 		else if ( iModel && iModel->Count() )
   439 		else if ( iModel && iModel->Count() )
   421 			{
   440 			{
   422 			// Need to make sure that return to this view works even if following function leaves.
   441 			// Need to make sure that return to this view works even if following function leaves.
   423 			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );		
   442 			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );
   424 			}
   443 			}
   425 		}
   444 		}
   426     CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel ); 	
   445     CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel );
   427 	// Set msk always empty when view is activated.
   446 	// Set msk always empty when view is activated.
   428 	SetMskL();
   447 	SetMskL();
   429 	// <cmail>
   448 	// <cmail>
   430 	ReScaleUiL(); // In case that Landscape/Portrait has changed.
   449 	ReScaleUiL(); // In case that Landscape/Portrait has changed.
   431 	// </cmail>
   450 	// </cmail>
   442     if(iListAddedToControlGroup && (!iPreparedForExit))
   461     if(iListAddedToControlGroup && (!iPreparedForExit))
   443         {
   462         {
   444         iListAddedToControlGroup = EFalse;
   463         iListAddedToControlGroup = EFalse;
   445         }
   464         }
   446 	iThisViewActive = EFalse;
   465 	iThisViewActive = EFalse;
   447 	
   466 
   448     if ( !iAppUi.AppUiExitOngoing() )
   467     if ( !iAppUi.AppUiExitOngoing() )
   449         {
   468         {
   450         if ( iSearchList->IsFocused() )
   469         if ( iSearchList->IsFocused() )
   451             {
   470             {
   452             TRAP_IGNORE(iSearchList->SetFocusedL(EFalse));
   471             TRAP_IGNORE(iSearchList->SetFocusedL(EFalse));
   453             }
   472             }
   454         iSearchTreeListVisualizer->NotifyControlVisibilityChange( EFalse );
   473         iSearchTreeListVisualizer->NotifyControlVisibilityChange( EFalse );
   455         }
   474         }
   456 	}	
   475 	}
   457 	
   476 
   458 CFSEmailUiMailListModel* CFSEmailUiSearchListVisualiser::Model()
   477 CFSEmailUiMailListModel* CFSEmailUiSearchListVisualiser::Model()
   459 	{
   478 	{
   460     FUNC_LOG;
   479     FUNC_LOG;
   461 	return iModel;	
   480 	return iModel;
   462 	}
   481 	}
   463 
   482 
   464 void CFSEmailUiSearchListVisualiser::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane )
   483 void CFSEmailUiSearchListVisualiser::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane )
   465 	{
   484 	{
   466     FUNC_LOG;
   485     FUNC_LOG;
   469 		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   488 		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   470 			{
   489 			{
   471 		    if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
   490 		    if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
   472 			   {
   491 			   {
   473 			   // remove help support in pf5250
   492 			   // remove help support in pf5250
   474 			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
   493 			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);
   475 			   }
   494 			   }
   476 		    
   495 
   477 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
   496 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   478 			if ( item && item->ModelItemType() == ETypeMailItem && 
   497 			if ( item && item->ModelItemType() == ETypeMailItem &&
   479 				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
   498 				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) )
   480 				{
   499 				{
   481 				// Highlighted mail is calendar msg
   500 				// Highlighted mail is calendar msg
   482 				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);						
   501 				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);
   483 				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, EFalse);				
   502 				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, EFalse);
   484 				}
   503 				}
   485 			else
   504 			else
   486 				{
   505 				{
   487 				// Highlighted mail is mail msg
   506 				// Highlighted mail is mail msg
   488 				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, EFalse);						
   507 				aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, EFalse);
   489 				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);	
   508 				aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);
   490 				}															
   509 				}
   491 			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, EFalse);								
   510 			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, EFalse);
   492 			}
   511 			}
   493 		}
   512 		}
   494 	else
   513 	else
   495 		{
   514 		{
   496 		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   515 		if ( aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   497 			{
   516 			{
   498 			
   517 
   499 		    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   518 		    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   500 			   {
   519 			   {
   501 			   // remove help support in pf5250
   520 			   // remove help support in pf5250
   502 			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
   521 			   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);
   503 			   }
   522 			   }
   504 		    
   523 
   505 			aMenuPane->SetItemDimmed(EFsEmailUiCmdMore, ETrue);								
   524 			aMenuPane->SetItemDimmed(EFsEmailUiCmdMore, ETrue);
   506 			aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);								
   525 			aMenuPane->SetItemDimmed(EFsEmailUiCmdMailActions, ETrue);
   507 			aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);								
   526 			aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActions, ETrue);
   508 			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, ETrue);	
   527 			aMenuPane->SetItemDimmed(EFsEmailUiCmdOpen, ETrue);
   509 			aMenuPane->SetItemDimmed(EFsEmailUiCmdReadEmail, ETrue);								
   528 			aMenuPane->SetItemDimmed(EFsEmailUiCmdReadEmail, ETrue);
   510 			}				
   529 			}
   511 		}
   530 		}
   512 		
   531 
   513 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS ||
   532 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS ||
   514 	     aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
   533 	     aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
   515 		{
   534 		{
   516 		if ( iSearchList->Count() )
   535 		if ( iSearchList->Count() )
   517 			{
   536 			{
   518 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
   537 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   519 			if ( item && item->ModelItemType() == ETypeMailItem )
   538 			if ( item && item->ModelItemType() == ETypeMailItem )
   520 				{
   539 				{
   521 				CFSMailMessage* messagePtr = &item->MessagePtr();
   540 				CFSMailMessage* messagePtr = &item->MessagePtr();
   522 				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_Read ) )
   541 				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_Read ) )
   523 					{
   542 					{
   524 					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsRead, ETrue);																	
   543 					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsRead, ETrue);
   525 					}
   544 					}
   526 				else
   545 				else
   527 					{					
   546 					{
   528 					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsUnread, ETrue);																	
   547 					aMenuPane->SetItemDimmed(EFsEmailUiCmdMarkAsUnread, ETrue);
   529 					}			
   548 					}
   530 				}
   549 				}
   531 			}	
   550 			}
   532 		}	
   551 		}
   533 		
   552 
   534 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
   553 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_CALEVENT_ACTIONS)
   535 		{
   554 		{
   536 		if ( iSearchList->Count() )
   555 		if ( iSearchList->Count() )
   537 			{		
   556 			{
   538 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
   557 		  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   539 			if ( item && item->ModelItemType() == ETypeMailItem )
   558 			if ( item && item->ModelItemType() == ETypeMailItem )
   540 				{
   559 				{
   541 				CFSMailMessage* messagePtr = &item->MessagePtr();
   560 				CFSMailMessage* messagePtr = &item->MessagePtr();
   542 				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
   561 				if ( messagePtr && messagePtr->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
   543 					{											 
   562 					{
   544 				    TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
   563 				    TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
   545 				    if ( iAppUi.MrViewerInstanceL() )
   564 				    if ( iAppUi.MrViewerInstanceL() )
   546 				    	{
   565 				    	{
   547 				    	// Search must be stopped, otherwise resolve will lead to crash
   566 				    	// Search must be stopped, otherwise resolve will lead to crash
   548 		                if ( iSearchOngoing )
   567 		                if ( iSearchOngoing )
   558 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
   577 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
   559 						    }
   578 						    }
   560 							break;
   579 							break;
   561 						case EESMRMeetingRequestMethodCancellation:
   580 						case EESMRMeetingRequestMethodCancellation:
   562 						    {
   581 						    {
   563 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);						
   582 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);
   564 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);						
   583 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);
   565 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);	
   584 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);
   566 							
   585 
   567 							TBool supportsRemove = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaRemoveFromCalendar );
   586 							TBool supportsRemove = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaRemoveFromCalendar );
   568 							if( !supportsRemove )
   587 							if( !supportsRemove )
   569                                 {
   588                                 {
   570                                 aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
   589                                 aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
   571                                 }
   590                                 }
   573 							break;
   592 							break;
   574 						default:
   593 						default:
   575 						case EESMRMeetingRequestMethodUnknown:
   594 						case EESMRMeetingRequestMethodUnknown:
   576 						case EESMRMeetingRequestMethodResponse:
   595 						case EESMRMeetingRequestMethodResponse:
   577 						    {
   596 						    {
   578 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);						
   597 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalRemoveFromCalendar, ETrue);
   579 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);						
   598 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsAccept, ETrue);
   580 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);						
   599 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsTentative, ETrue);
   581 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);
   600 							aMenuPane->SetItemDimmed(EFsEmailUiCmdCalActionsDecline, ETrue);
   582 						    }
   601 						    }
   583 							break;
   602 							break;
   584 						}			
   603 						}
   585 					}			
   604 					}
   586 				}
   605 				}
   587 			
   606 
   588 			}
   607 			}
   589 		}
   608 		}
   590 		
   609 
   591 
   610 
   592 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_MORE )
   611 	if ( aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_MORE )
   593 		{
   612 		{
   594 // <cmail> Prevent Download Manager opening with attachments
   613 // <cmail> Prevent Download Manager opening with attachments
   595 //		if ( iAppUi.DownloadInfoMediator() && !iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads() )
   614 //		if ( iAppUi.DownloadInfoMediator() && !iAppUi.DownloadInfoMediator()->IsAnyAttachmentDownloads() )
   596 //			{
   615 //			{
   597 //			aMenuPane->SetItemDimmed(EFsEmailUiCmdDownloadManager, ETrue);																				
   616 //			aMenuPane->SetItemDimmed(EFsEmailUiCmdDownloadManager, ETrue);
   598 //			}
   617 //			}
   599 // </cmail>
   618 // </cmail>
   600 		}
   619 		}
   601 	
   620 
   602 	if (aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS) 
   621 	if (aResourceId == R_FSEMAILUI_SEARCHLIST_SUBMENU_ACTIONS)
   603 	    {
   622 	    {
   604         CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
   623         CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   605         CFSMailMessage* messagePtr = &item->MessagePtr();
   624         CFSMailMessage* messagePtr = &item->MessagePtr();
   606         TInt menuIndex( 0 );   
   625         TInt menuIndex( 0 );
   607         
   626 
   608         //Get # of recipients
   627         //Get # of recipients
   609         TInt numRecipients(0);
   628         TInt numRecipients(0);
   610         if ( messagePtr )
   629         if ( messagePtr )
   611             {
   630             {
   612             numRecipients =TFsEmailUiUtility::CountRecepients( messagePtr );
   631             numRecipients =TFsEmailUiUtility::CountRecepients( messagePtr );
   632                         {
   651                         {
   633                         if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetBCCRecipients()[0]->GetEmailAddress()) )
   652                         if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetBCCRecipients()[0]->GetEmailAddress()) )
   634                             {
   653                             {
   635                             numRecipients++;
   654                             numRecipients++;
   636                             }
   655                             }
   637                         }                
   656                         }
   638                 }
   657                 }
   639             
   658 
   640             }                    
   659             }
   641         if ( numRecipients > 1 )
   660         if ( numRecipients > 1 )
   642             {
   661             {
   643             aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, EFalse );
   662             aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, EFalse );
   644             }
   663             }
   645         else if ( aMenuPane->MenuItemExists( EFsEmailUiCmdActionsReplyAll, menuIndex ) )
   664         else if ( aMenuPane->MenuItemExists( EFsEmailUiCmdActionsReplyAll, menuIndex ) )
   646             {
   665             {
   647             aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, ETrue );
   666             aMenuPane->SetItemDimmed( EFsEmailUiCmdActionsReplyAll, ETrue );
   648             }
   667             }
   649 	    }
   668 	    }
   650 		
   669 
   651 	if ( !iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   670 	if ( !iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   652 		{
   671 		{
   653 	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   672 	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   654 		   {
   673 		   {
   655 		   // remove help support in pf5250
   674 		   // remove help support in pf5250
   656 		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
   675 		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);
   657 		   }
   676 		   }
   658 	    
   677 
   659 		aMenuPane->SetItemDimmed(EFsEmailUiCmdStopSearch, ETrue);						
   678 		aMenuPane->SetItemDimmed(EFsEmailUiCmdStopSearch, ETrue);
   660 		if ( iSearchCount == 0 )
   679 		if ( iSearchCount == 0 )
   661 			{
   680 			{
   662 			aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);		
   681 			aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);
   663 			}
   682 			}
   664 		else
   683 		else
   665 			{
   684 			{
   666 			aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);								
   685 			aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);
   667 			}
   686 			}
   668 		}
   687 		}
   669 
   688 
   670 	if ( iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   689 	if ( iSearchOngoing && aResourceId == R_FSEMAILUI_SEARCHLIST_MENUPANE )
   671 		{
   690 		{
   672 	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   691 	    if (FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ))
   673 		   {
   692 		   {
   674 		   // remove help support in pf5250
   693 		   // remove help support in pf5250
   675 		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);      
   694 		   aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue);
   676 		   }
   695 		   }
   677 	    
   696 
   678 		aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);						
   697 		aMenuPane->SetItemDimmed(EFsEmailUiCmdSearch, ETrue);
   679 		aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);						
   698 		aMenuPane->SetItemDimmed(EFsEmailUiCmdNewSearch, ETrue);
   680 		}		
   699 		}
   681 		
   700 
   682 	iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane, CFSEmailUiShortcutBinding::EContextSearchResults );
   701 	iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane, CFSEmailUiShortcutBinding::EContextSearchResults );
   683 	}
   702 	}
   684 
   703 
   685 void CFSEmailUiSearchListVisualiser::RefreshL()
   704 void CFSEmailUiSearchListVisualiser::RefreshL()
   686 	{
   705 	{
   688     if ( iFirstStartCompleted ) //Safety
   707     if ( iFirstStartCompleted ) //Safety
   689         {
   708         {
   690         if ( iModel && iModel->Count() )
   709         if ( iModel && iModel->Count() )
   691              {
   710              {
   692              // Check if zoom level has been switched and refresh items if so
   711              // Check if zoom level has been switched and refresh items if so
   693              TAknUiZoom prevZoomLevel = iCurrentZoomLevel;   
   712              TAknUiZoom prevZoomLevel = iCurrentZoomLevel;
   694              CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel );
   713              CAknEnv::Static()->GetCurrentGlobalUiZoom( iCurrentZoomLevel );
   695              if ( prevZoomLevel != iCurrentZoomLevel )
   714              if ( prevZoomLevel != iCurrentZoomLevel )
   696                  {
   715                  {
   697                  for ( TInt i=0; i<iModel->Count(); i++ )
   716                  for ( TInt i=0; i<iModel->Count(); i++ )
   698                      {
   717                      {
   699                      // Set font height
   718                      // Set font height
   700                      iSearchListItemArray[i].iTreeItemVisualiser->
   719                      iSearchListItemArray[i].iTreeItemVisualiser->
   701                          SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );               
   720                          SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );
   702                      iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[i].iSearchListItemId );
   721                      iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[i].iSearchListItemId );
   703                      }                   
   722                      }
   704                  }
   723                  }
   705              }       
   724              }
   706         }
   725         }
   707 	}
   726 	}
   708 
   727 
   709 	
   728 
   710 void CFSEmailUiSearchListVisualiser::CreatePlainNodeL( const TDesC& aItemDataBuff,
   729 void CFSEmailUiSearchListVisualiser::CreatePlainNodeL( const TDesC& aItemDataBuff,
   711                                                      CFsTreePlainOneLineNodeData* &aItemData,
   730                                                      CFsTreePlainOneLineNodeData* &aItemData,
   712                                                      CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const
   731                                                      CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const
   713 	{
   732 	{
   714     FUNC_LOG;
   733     FUNC_LOG;
   715     aItemData = CFsTreePlainOneLineNodeData::NewL();
   734     aItemData = CFsTreePlainOneLineNodeData::NewL();
   716     aItemData->SetDataL( aItemDataBuff );
   735     aItemData->SetDataL( aItemDataBuff );
   717 	aItemData->SetIconExpanded( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeExpanded) );
   736 	aItemData->SetIconExpanded( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeExpanded) );
   718     aItemData->SetIconCollapsed( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeCollapsed) );	        
   737     aItemData->SetIconCollapsed( iAppUi.FsTextureManager()->TextureByIndex(EListTextureNodeCollapsed) );
   719     aNodeVisualizer = CFsTreePlainOneLineNodeVisualizer::NewL( *iSearchList->TreeControl() );
   738     aNodeVisualizer = CFsTreePlainOneLineNodeVisualizer::NewL( *iSearchList->TreeControl() );
   720    	TRect screenRect;
   739    	TRect screenRect;
   721  	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );	
   740  	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
   722     TInt nodeHeight = iAppUi.LayoutHandler()->OneLineListNodeHeight();
   741     TInt nodeHeight = iAppUi.LayoutHandler()->OneLineListNodeHeight();
   723     aNodeVisualizer->SetSize( TSize(screenRect.Width(), nodeHeight) );
   742     aNodeVisualizer->SetSize( TSize(screenRect.Width(), nodeHeight) );
   724     aNodeVisualizer->SetExtendable(EFalse);
   743     aNodeVisualizer->SetExtendable(EFalse);
   725   	// Set correct skin text colors for the list items  
   744   	// Set correct skin text colors for the list items
   726    	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
   745    	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
   727    	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   746    	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   728     aNodeVisualizer->SetFocusedStateTextColor( focusedColor );
   747     aNodeVisualizer->SetFocusedStateTextColor( focusedColor );
   729     aNodeVisualizer->SetNormalStateTextColor( normalColor );	 
   748     aNodeVisualizer->SetNormalStateTextColor( normalColor );
   730  	}
   749  	}
   731 
   750 
   732 	
   751 
   733 void CFSEmailUiSearchListVisualiser::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType )
   752 void CFSEmailUiSearchListVisualiser::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType )
   734 	{
   753 	{
   735     FUNC_LOG;
   754     FUNC_LOG;
   736     CFsEmailUiViewBase::HandleDynamicVariantSwitchL( aType );
   755     CFsEmailUiViewBase::HandleDynamicVariantSwitchL( aType );
   737     if ( iFirstStartCompleted ) // Safety
   756     if ( iFirstStartCompleted ) // Safety
   738         {
   757         {
   739         if ( aType == EScreenLayoutChanged )
   758         if ( aType == EScreenLayoutChanged )
   740             {
   759             {
   741             SetStatusBarLayout();
   760             SetStatusBarLayout();
   742             }
   761             }
   743     
   762 
   744         if ( iSearchTreeListVisualizer )
   763         if ( iSearchTreeListVisualizer )
   745             {
   764             {
   746             TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   765             TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
   747             iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );            
   766             iSearchTreeListVisualizer->RootNodeVisualizer()->SetNormalStateTextColor( normalColor );
   748             }
   767             }
   749         ReScaleUiL();        
   768         ReScaleUiL();
   750         }
   769         }
   751 	}
   770 	}
   752 
   771 
   753 void CFSEmailUiSearchListVisualiser::GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const
   772 void CFSEmailUiSearchListVisualiser::GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const
   754     {
   773     {
   772 //
   791 //
   773 void CFSEmailUiSearchListVisualiser::FocusVisibilityChange(
   792 void CFSEmailUiSearchListVisualiser::FocusVisibilityChange(
   774         TBool aVisible )
   793         TBool aVisible )
   775     {
   794     {
   776     CFsEmailUiViewBase::FocusVisibilityChange( aVisible );
   795     CFsEmailUiViewBase::FocusVisibilityChange( aVisible );
       
   796 
       
   797     if ( iStylusPopUpMenuVisible && !aVisible )
       
   798         {
       
   799         // Do not allow to remove the focus from a list element if the pop up
       
   800         // menu was just launched.
       
   801         return;
       
   802         }
       
   803 
   777     iSearchTreeListVisualizer->SetFocusVisibility( aVisible );
   804     iSearchTreeListVisualizer->SetFocusVisibility( aVisible );
   778     }
   805     }
   779 
   806 
   780 // ---------------------------------------------------------------------------
   807 // ---------------------------------------------------------------------------
   781 // CFSEmailUiSearchListVisualiser::SetStatusBarLayout()
   808 // CFSEmailUiSearchListVisualiser::SetStatusBarLayout()
   788     if( Layout_Meta_Data::IsLandscapeOrientation() )
   815     if( Layout_Meta_Data::IsLandscapeOrientation() )
   789         {
   816         {
   790         // landscape must use different layout
   817         // landscape must use different layout
   791         res = R_AVKON_STATUS_PANE_LAYOUT_IDLE_FLAT;
   818         res = R_AVKON_STATUS_PANE_LAYOUT_IDLE_FLAT;
   792         }
   819         }
   793     
   820 
   794     if ( StatusPane()->CurrentLayoutResId() !=  res )
   821     if ( StatusPane()->CurrentLayoutResId() !=  res )
   795         {
   822         {
   796         TRAP_IGNORE(
   823         TRAP_IGNORE(
   797             StatusPane()->SwitchLayoutL( res ));
   824             StatusPane()->SwitchLayoutL( res ));
   798         }
   825         }
   799 	}
   826 	}
   800 
   827 
   801 void CFSEmailUiSearchListVisualiser::HandleCommandL( TInt aCommand )
   828 void CFSEmailUiSearchListVisualiser::HandleCommandL( TInt aCommand )
   802     {
   829     {
   803     FUNC_LOG;
   830     FUNC_LOG;
       
   831 
       
   832 
   804     switch ( aCommand )
   833     switch ( aCommand )
   805         {
   834         {
   806        	case EAknSoftkeySelect:
   835        	case EAknSoftkeySelect:
   807 			{
   836 			{
   808 			TInt modelCount(0);
   837 			TInt modelCount(0);
   809 			if ( iModel )
   838 			if ( iModel )
   810 				{
   839 				{
   811 				modelCount = iModel->Count();				
   840 				modelCount = iModel->Count();
   812 				}
   841 				}
   813 		 	if ( modelCount ) // Safety check
   842 		 	if ( modelCount ) // Safety check
   814 		 		{
   843 		 		{
   815 			  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
   844 			  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   816 				if ( item && item->ModelItemType() == ETypeMailItem )
   845 				if ( item && item->ModelItemType() == ETypeMailItem )
   817 					{
   846 					{
   818 					CFSMailMessage* messagePtr = &item->MessagePtr();
   847 					CFSMailMessage* messagePtr = &item->MessagePtr();
   819 					if ( messagePtr )
   848 					if ( messagePtr )
   820 						{
   849 						{
   821 						OpenHighlightedMailL();							
   850 						OpenHighlightedMailL();
   822 						}
   851 						}
   823 					}
   852 					}
   824 		 		}
   853 		 		}
   825  			}        	
   854  			}
   826         	break;         	
   855         	break;
   827         case EAknSoftkeyBack:
   856         case EAknSoftkeyBack:
   828 			{
   857 			{
   829 			if ( !iAppUi.ViewSwitchingOngoing())
   858 			if ( !iAppUi.ViewSwitchingOngoing())
   830 				{
   859 				{
   831 				if ( iSearchOngoing )
   860 				if ( iSearchOngoing )
   832 					{
   861 					{
   833 					StopSearchL();
   862 					StopSearchL();
   834 					}
   863 					}
   835                                 //<cmail> useless code removed
   864                                 //<cmail> useless code removed
   836 				//HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
   865 				//HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH );
   837 				//iBarTextVisual->SetTextL( *searchText );		
   866 				//iBarTextVisual->SetTextL( *searchText );
   838 				//CleanupStack::PopAndDestroy( searchText );
   867 				//CleanupStack::PopAndDestroy( searchText );
   839                                 //</cmail>
   868                                 //</cmail>
   840 		 		TVwsViewId viewId = TVwsViewId( KFSEmailUiUid, MailListId );
   869 		 		TVwsViewId viewId = TVwsViewId( KFSEmailUiUid, MailListId );
   841 				TMailListActivationData tmp;	
   870 				TMailListActivationData tmp;
   842 				if ( iMsgDataCouldBeChanged )
   871 				if ( iMsgDataCouldBeChanged )
   843 					{
   872 					{
   844 					tmp.iRequestRefresh = ETrue;
   873 					tmp.iRequestRefresh = ETrue;
   845 					iMsgDataCouldBeChanged = EFalse; // List starts a new search
   874 					iMsgDataCouldBeChanged = EFalse; // List starts a new search
   846 					}	
   875 					}
   847 				const TPckgBuf<TMailListActivationData> pkgOut( tmp );	
   876 				const TPckgBuf<TMailListActivationData> pkgOut( tmp );
   848 				iAppUi.ReturnToPreviousViewL( pkgOut );        								
   877 				iAppUi.ReturnToPreviousViewL( pkgOut );
   849 				}
   878 				}
   850 			}
   879 			}
   851 	       	break;
   880 	       	break;
   852         case EEikCmdExit:
   881         case EEikCmdExit:
   853         case EAknSoftkeyExit:
   882         case EAknSoftkeyExit:
   858 		case EFsEmailUiCmdActionsReply:
   887 		case EFsEmailUiCmdActionsReply:
   859 			{
   888 			{
   860 			if ( iSearchList->Count() )
   889 			if ( iSearchList->Count() )
   861 				{
   890 				{
   862 				iMsgDataCouldBeChanged = ETrue;
   891 				iMsgDataCouldBeChanged = ETrue;
   863 		   	 	ReplyL( NULL ); // Function will check marked/highlighted msg				
   892 		   	 	ReplyL( NULL ); // Function will check marked/highlighted msg
   864 				}
   893 				}
   865 			}
   894 			}
   866             break;
   895             break;
   867 		case EFsEmailUiCmdActionsReplyAll:
   896 		case EFsEmailUiCmdActionsReplyAll:
   868 			{
   897 			{
   879 			if ( iSearchList->Count() )
   908 			if ( iSearchList->Count() )
   880 				{
   909 				{
   881 				iMsgDataCouldBeChanged = ETrue;
   910 				iMsgDataCouldBeChanged = ETrue;
   882 				ForwardL( NULL ); // Function will check marked/highlighted msg
   911 				ForwardL( NULL ); // Function will check marked/highlighted msg
   883 				}
   912 				}
   884 			}      
   913 			}
   885             break;
   914             break;
   886 		case EFsEmailUiCmdGoToTop:
   915 		case EFsEmailUiCmdGoToTop:
   887 			{
   916 			{
   888 			if ( iSearchListItemArray.Count() )
   917 			if ( iSearchListItemArray.Count() )
   889 			    {
   918 			    {
   931     			}
   960     			}
   932         case EFsEmailUiCmdOpen:
   961         case EFsEmailUiCmdOpen:
   933         	{
   962         	{
   934  			if ( iSearchList->Count() )
   963  			if ( iSearchList->Count() )
   935 				{
   964 				{
   936 				OpenHighlightedMailL();	       	
   965 				OpenHighlightedMailL();
   937 				}
   966 				}
   938 			}
   967 			}
   939         	break;	
   968         	break;
   940        	case EFsEmailUiCmdNewSearch:
   969        	case EFsEmailUiCmdNewSearch:
   941         case EFsEmailUiCmdSearch:
   970         case EFsEmailUiCmdSearch:
   942         	{
   971         	{
   943 			LaunchSearchDialogL();						 			        		
   972 			LaunchSearchDialogL();
   944         	}
   973         	}
   945         	break;     	        	   	        	
   974         	break;
   946         case EFsEmailUiCmdStopSearch:
   975         case EFsEmailUiCmdStopSearch:
   947         	{
   976         	{
   948 			StopSearchL();
   977 			StopSearchL();
   949         	}
   978         	}
   950         	break;  
   979         	break;
   951        	case EFsEmailUiCmdMessageDetails:
   980        	case EFsEmailUiCmdMessageDetails:
   952 			{
   981 			{
   953  			if ( iSearchList->Count() )
   982  			if ( iSearchList->Count() )
   954 				{
   983 				{
   955 				CFSEmailUiMailListModelItem* item =
   984 				CFSEmailUiMailListModelItem* item =
   956 					static_cast<CFSEmailUiMailListModelItem*>( Model()->Item( HighlightedIndex() ) );		
   985 					static_cast<CFSEmailUiMailListModelItem*>( Model()->Item( HighlightedIndex() ) );
   957 				CFSMailMessage& msg = item->MessagePtr();
   986 				CFSMailMessage& msg = item->MessagePtr();
   958 				
   987 
   959 	  			TMsgDetailsActivationData msgDetailsData;
   988 	  			TMsgDetailsActivationData msgDetailsData;
   960 	  			msgDetailsData.iMailBoxId = msg.GetMailBoxId();
   989 	  			msgDetailsData.iMailBoxId = msg.GetMailBoxId();
   961 	  			msgDetailsData.iFolderId = msg.GetFolderId();
   990 	  			msgDetailsData.iFolderId = msg.GetFolderId();
   962 	  			msgDetailsData.iMessageId = msg.GetMessageId();
   991 	  			msgDetailsData.iMessageId = msg.GetMessageId();
   963 				
   992 
   964 				const TPckgBuf<TMsgDetailsActivationData> pkgOut( msgDetailsData );
   993 				const TPckgBuf<TMsgDetailsActivationData> pkgOut( msgDetailsData );
   965 				iAppUi.EnterFsEmailViewL( MsgDetailsViewId, KStartMsgDetailsToBeginning,  pkgOut);					
   994 				iAppUi.EnterFsEmailViewL( MsgDetailsViewId, KStartMsgDetailsToBeginning,  pkgOut);
   966 				}
   995 				}
   967 			}
   996 			}
   968 			break;
   997 			break;
   969        	case EFsEmailUiCmdHelp:
   998        	case EFsEmailUiCmdHelp:
   970   			{
   999   			{
   971 			TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
  1000 			TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
   972   			}
  1001   			}
   973   			break; 
  1002   			break;
   974        	case EFsEmailUiCmdActionsCallSender:
  1003        	case EFsEmailUiCmdActionsCallSender:
   975 			{
  1004 			{
   976 			if ( iSearchList->Count() )
  1005 			if ( iSearchList->Count() )
   977 				{
  1006 				{
   978 				CallToSenderL();		
  1007 				CallToSenderL();
   979 				}
  1008 				}
   980 			}
  1009 			}
   981 			break;
  1010 			break;
   982     	case EFsEmailUiCmdActionsAddContact:
  1011     	case EFsEmailUiCmdActionsAddContact:
   983     		{
  1012     		{
   984 			if ( iSearchList->Count() ) 
  1013 			if ( iSearchList->Count() )
   985 				{
  1014 				{
   986 			    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    			
  1015 			    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
   987 				if ( item && item->ModelItemType() == ETypeMailItem )
  1016 				if ( item && item->ModelItemType() == ETypeMailItem )
   988 					{
  1017 					{
   989 					CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
  1018 					CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
   990 					TDesC* emailAddress(0);
  1019 					TDesC* emailAddress(0);
   991 					if ( fromAddress )
  1020 					if ( fromAddress )
   992 						{
  1021 						{
   993 						emailAddress = &fromAddress->GetEmailAddress();		
  1022 						emailAddress = &fromAddress->GetEmailAddress();
   994 						}
  1023 						}
   995 					if ( emailAddress && emailAddress->Length() )
  1024 					if ( emailAddress && emailAddress->Length() )
   996 						{
  1025 						{
   997 						TAddToContactsType aType;
  1026 						TAddToContactsType aType;
   998 						//Query to "update existing" or "Create new" --> EFALSE = user choosed "cancel"
  1027 						//Query to "update existing" or "Create new" --> EFALSE = user choosed "cancel"
   999 						if ( CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddtoContactsQueryL( aType ) )
  1028 						if ( CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddtoContactsQueryL( aType ) )
  1000 							{
  1029 							{
  1001 							CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddToContactL( 
  1030 							CFsDelayedLoader::InstanceL()->GetContactHandlerL()->AddToContactL(
  1002 									*emailAddress, EContactUpdateEmail, aType, this );		
  1031 									*emailAddress, EContactUpdateEmail, aType, this );
  1003 							}										
  1032 							}
  1004 						}
  1033 						}
  1005 					}
  1034 					}
  1006 				}
  1035 				}
  1007     		}			
  1036     		}
  1008 			break;
  1037 			break;
  1009         case EFsEmailUiCmdMarkAsReadUnreadToggle:
  1038         case EFsEmailUiCmdMarkAsReadUnreadToggle:
  1010             {
  1039             {
  1011             if ( iSearchList->Count() )
  1040             if ( iSearchList->Count() )
  1012                 {
  1041                 {
  1013            		CFSEmailUiMailListModelItem* item = 
  1042            		CFSEmailUiMailListModelItem* item =
  1014         			static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
  1043         			static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
  1015         		if ( item && item->ModelItemType() == ETypeMailItem )
  1044         		if ( item && item->ModelItemType() == ETypeMailItem )
  1016         			{
  1045         			{
  1017         			if ( item->MessagePtr().IsFlagSet(EFSMsgFlag_Read) )
  1046         			if ( item->MessagePtr().IsFlagSet(EFSMsgFlag_Read) )
  1018         				{
  1047         				{
  1039         case EFsEmailUiCmdCalActionsAccept:
  1068         case EFsEmailUiCmdCalActionsAccept:
  1040         case EFsEmailUiCmdCalActionsTentative:
  1069         case EFsEmailUiCmdCalActionsTentative:
  1041         case EFsEmailUiCmdCalActionsDecline:
  1070         case EFsEmailUiCmdCalActionsDecline:
  1042         case EFsEmailUiCmdCalRemoveFromCalendar:
  1071         case EFsEmailUiCmdCalRemoveFromCalendar:
  1043 			{
  1072 			{
  1044 		    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    			
  1073 		    CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
  1045 			if ( item && item->ModelItemType() == ETypeMailItem && 
  1074 			if ( item && item->ModelItemType() == ETypeMailItem &&
  1046 				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) )
  1075 				 item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) )
  1047 				{
  1076 				{
  1048 			    ChangeReadStatusOfHighlightedL( ETrue );
  1077 			    ChangeReadStatusOfHighlightedL( ETrue );
  1049                 iAppUi.MailViewer().HandleMrCommandL( aCommand, 
  1078                 iAppUi.MailViewer().HandleMrCommandL( aCommand,
  1050                                                        iAppUi.GetActiveMailbox()->GetId(),
  1079                                                        iAppUi.GetActiveMailbox()->GetId(),
  1051                                                        item->MessagePtr().GetFolderId(),
  1080                                                        item->MessagePtr().GetFolderId(),
  1052                                                        item->MessagePtr().GetMessageId() );
  1081                                                        item->MessagePtr().GetMessageId() );
  1053 				}				
  1082 				}
  1054 			}
  1083 			}
  1055         	break;							
  1084         	break;
  1056 // <cmail> Prevent Download Manager opening with attachments
  1085 // <cmail> Prevent Download Manager opening with attachments
  1057 //       	case EFsEmailUiCmdDownloadManager:
  1086 //       	case EFsEmailUiCmdDownloadManager:
  1058 //       		{
  1087 //       		{
  1059 //			if (iSearchOngoing)
  1088 //			if (iSearchOngoing)
  1060 //				{
  1089 //				{
  1061 //				StopSearchL();
  1090 //				StopSearchL();
  1062 //				}	
  1091 //				}
  1063 //  			iAppUi.EnterFsEmailViewL( DownloadManagerViewId );       			
  1092 //  			iAppUi.EnterFsEmailViewL( DownloadManagerViewId );
  1064 //       		}       		
  1093 //       		}
  1065 //			break;
  1094 //			break;
  1066 // </cmail>
  1095 // </cmail>
  1067        	case EFsEmailUiCmdReadEmail:
  1096        	case EFsEmailUiCmdReadEmail:
  1068 			{
  1097 			{
  1069 			iAppUi.StartReadingEmailsL();
  1098 			iAppUi.StartReadingEmailsL();
  1070 			}  			    		
  1099 			}
  1071 			break;
  1100 			break;
  1072         default:
  1101         default:
  1073         	break;
  1102         	break;
  1074         }	
  1103         }
       
  1104 
       
  1105     // Check if the focus needs to be removed after selecting an command from
       
  1106     // the stylus popup menu.
       
  1107     if ( ( iStylusPopUpMenuVisible ) &&
       
  1108          ( aCommand == KErrCancel ||
       
  1109            aCommand == EFsEmailUiCmdActionsDelete ||
       
  1110            aCommand == EFsEmailUiCmdMarkAsRead ||
       
  1111            aCommand == EFsEmailUiCmdMarkAsUnread ||
       
  1112            aCommand == EFsEmailUiCmdActionsMove ||
       
  1113            aCommand == EFsEmailUiCmdMarkUnmarkToggle ) )
       
  1114         {
       
  1115         // We end up here if the user selects an option from the pop up menu
       
  1116         // or exits the menu by tapping outside of it's area.
       
  1117         // Remove the focus from a list item if an item is focused.
       
  1118         iStylusPopUpMenuVisible = EFalse;
       
  1119         iAppUi.SetFocusVisibility( EFalse );
       
  1120         }
       
  1121 
  1075     }
  1122     }
  1076 
  1123 
  1077 
  1124 
  1078 TInt CFSEmailUiSearchListVisualiser::LaunchSearchDialogL()
  1125 TInt CFSEmailUiSearchListVisualiser::LaunchSearchDialogL()
  1079 	{
  1126 	{
  1092 		{
  1139 		{
  1093 		// Stop any ongoing search before starting a new one
  1140 		// Stop any ongoing search before starting a new one
  1094 		if ( iSearchOngoing )
  1141 		if ( iSearchOngoing )
  1095 		    {
  1142 		    {
  1096 		    StopSearchL();
  1143 		    StopSearchL();
  1097 		    }	        
  1144 		    }
  1098               //<cmail> make list and header visible by showing control group
  1145               //<cmail> make list and header visible by showing control group
  1099 		else if( !iListAddedToControlGroup )
  1146 		else if( !iListAddedToControlGroup )
  1100             {
  1147             {
  1101             //ControlGroup().AppendL( iSearchListControl );
  1148             //ControlGroup().AppendL( iSearchListControl );
  1102             //ControlGroup().AppendL( iSearchList->TreeControl() );
  1149             //ControlGroup().AppendL( iSearchList->TreeControl() );
  1103             iListAddedToControlGroup = ETrue;
  1150             iListAddedToControlGroup = ETrue;
  1104             }
  1151             }
  1105 		iSearchList->SetScrollbarVisibilityL( EFsScrollbarAuto );
  1152 		iSearchList->SetScrollbarVisibilityL( EFsScrollbarAuto );
  1106              //</cmail>
  1153              //</cmail>
  1107 		// Set searching text
  1154 		// Set searching text
  1108 		HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCHING );	
  1155 		HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCHING );
  1109 		HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + KSpace().Length() );
  1156 		HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + KSpace().Length() );
  1110 		finalText->Des().Append( *searchText );
  1157 		finalText->Des().Append( *searchText );
  1111 		finalText->Des().Append( KSpace );
  1158 		finalText->Des().Append( KSpace );
  1112 		finalText->Des().Append( *iLatestSearchText );			
  1159 		finalText->Des().Append( *iLatestSearchText );
  1113 		iBarTextVisual->SetTextL( *finalText );		
  1160 		iBarTextVisual->SetTextL( *finalText );
  1114 		CleanupStack::PopAndDestroy( finalText );		
  1161 		CleanupStack::PopAndDestroy( finalText );
  1115 		CleanupStack::PopAndDestroy( searchText );				
  1162 		CleanupStack::PopAndDestroy( searchText );
  1116 		StartSearchL();		
  1163 		StartSearchL();
  1117 		}
  1164 		}
  1118 	return ret;
  1165 	return ret;
  1119 	}
  1166 	}
  1120 
  1167 
  1121 
  1168 
  1145 				iListMode = EListControlTypeDoubleLinePreviewOff;
  1192 				iListMode = EListControlTypeDoubleLinePreviewOff;
  1146 				}
  1193 				}
  1147 			else
  1194 			else
  1148 				{
  1195 				{
  1149 				iListMode = EListControlTypeDoubleLinePreviewOn;
  1196 				iListMode = EListControlTypeDoubleLinePreviewOn;
  1150 				}					
  1197 				}
  1151 			}
  1198 			}
  1152 		}
  1199 		}
  1153 	else
  1200 	else
  1154 		{
  1201 		{
  1155 		iNodesInUse = EListControlSeparatorDisabled;
  1202 		iNodesInUse = EListControlSeparatorDisabled;
  1156 		iListMode = EListControlTypeDoubleLinePreviewOff;
  1203 		iListMode = EListControlTypeDoubleLinePreviewOff;
  1157 		}
  1204 		}
  1158 	}
  1205 	}
  1159 	
  1206 
  1160 	
  1207 
  1161 TBool CFSEmailUiSearchListVisualiser::OfferEventL(const TAlfEvent& aEvent)
  1208 TBool CFSEmailUiSearchListVisualiser::OfferEventL(const TAlfEvent& aEvent)
  1162     {
  1209     {
  1163     FUNC_LOG;
  1210     FUNC_LOG;
  1164     TBool result(EFalse);
  1211     TBool result(EFalse);
  1165   
  1212     // On KeyUp of EStdKeyYes usually Call application is called - prevent it if call for contact was previously called
       
  1213     if ( iConsumeStdKeyYes_KeyUp && aEvent.IsKeyEvent() && (aEvent.Code() == EEventKeyUp )) 
       
  1214 		{
       
  1215 		iConsumeStdKeyYes_KeyUp = EFalse; // in case call button was consumed elsewhere first key up enables calling Call application
       
  1216 		if ( EStdKeyYes == aEvent.KeyEvent().iScanCode) 
       
  1217 			{
       
  1218 			  result = ETrue; // consume not to switch to Call application when call to contact was processed
       
  1219 			}
       
  1220 		}
       
  1221 
  1166     if ( aEvent.IsKeyEvent() && aEvent.Code() == EEventKey )
  1222     if ( aEvent.IsKeyEvent() && aEvent.Code() == EEventKey )
  1167         {
  1223         {
  1168         TInt scanCode = aEvent.KeyEvent().iScanCode;
  1224         TInt scanCode = aEvent.KeyEvent().iScanCode;
  1169         // Swap right and left controls in mirrored layout
  1225         // Swap right and left controls in mirrored layout
  1170         if ( AknLayoutUtils::LayoutMirrored() )
  1226         if ( AknLayoutUtils::LayoutMirrored() )
  1184             // If the focus was not active already, ignore the key press
  1240             // If the focus was not active already, ignore the key press
  1185             if( !iAppUi.SetFocusVisibility( ETrue ) )
  1241             if( !iAppUi.SetFocusVisibility( ETrue ) )
  1186                 {
  1242                 {
  1187                 return ETrue;
  1243                 return ETrue;
  1188                 }
  1244                 }
  1189             
  1245 
  1190 			}
  1246 			}
  1191         switch ( scanCode )
  1247         switch ( scanCode )
  1192             {
  1248             {
  1193             case EStdKeyDevice3: // CENTER CLICK
  1249             case EStdKeyDevice3: // CENTER CLICK
  1194             case EStdKeyEnter:  // ENTER EITHER SELECTS ITEM IN TOOLBAR OR OPENS MAIL
  1250             case EStdKeyEnter:  // ENTER EITHER SELECTS ITEM IN TOOLBAR OR OPENS MAIL
  1195             case EStdKeyNkpEnter:
  1251             case EStdKeyNkpEnter:
  1196                 {
  1252                 {
  1197                 if ( iSearchList->Count() )
  1253                 if ( iSearchList->Count() )
  1198                     {
  1254                     {
  1199                     OpenHighlightedMailL();         		
  1255                     OpenHighlightedMailL();
  1200                     }
  1256                     }
  1201                 result = ETrue;         	
  1257                 result = ETrue;
  1202                 }
  1258                 }
  1203                 break;
  1259                 break;
  1204             case EStdKeyYes:
  1260             case EStdKeyYes:
  1205                 {
  1261                 {
  1206                 if ( iSearchList->Count() )
  1262                 if ( iSearchList->Count() )
  1207                     {
  1263                     {
  1208                     CallToSenderL();				
  1264                     result = CallToSenderL();	
       
  1265                     iConsumeStdKeyYes_KeyUp = result;
  1209                     }
  1266                     }
  1210                 }
  1267                 }
  1211                 break;
  1268                 break;
  1212             case EStdKeyRightArrow:
       
  1213                  {     
       
  1214                  if ( iSearchList->Count() )
       
  1215                       {
       
  1216                       LaunchActionMenuL();                       
       
  1217                       }                
       
  1218                  result = ETrue; 
       
  1219                  }
       
  1220                  break;
       
  1221             default:
  1269             default:
  1222                 {
  1270                 {
  1223                 // check keyboard shortcuts:
  1271                 // check keyboard shortcuts:
  1224                 TInt command = 
  1272                 TInt command =
  1225                     iAppUi.ShortcutBinding().CommandForShortcutKey( aEvent.KeyEvent(),
  1273                     iAppUi.ShortcutBinding().CommandForShortcutKey( aEvent.KeyEvent(),
  1226                         CFSEmailUiShortcutBinding::EContextSearchResults );
  1274                         CFSEmailUiShortcutBinding::EContextSearchResults );
  1227                 if ( command >= 0 )
  1275                 if ( command >= 0 )
  1228                     {
  1276                     {
  1229                     HandleCommandL( command );
  1277                     HandleCommandL( command );
  1235         }
  1283         }
  1236     else if (aEvent.IsPointerEvent())
  1284     else if (aEvent.IsPointerEvent())
  1237         {
  1285         {
  1238         iSearchList->TreeControl()->OfferEventL(aEvent);
  1286         iSearchList->TreeControl()->OfferEventL(aEvent);
  1239         }
  1287         }
  1240     
  1288 
  1241     return result;   
  1289     return result;
  1242     }
  1290     }
  1243 
  1291 
  1244 
  1292 
  1245 
  1293 
  1246 void CFSEmailUiSearchListVisualiser::ReScaleUiL()
  1294 void CFSEmailUiSearchListVisualiser::ReScaleUiL()
  1249     if ( iFirstStartCompleted ) //Safety
  1297     if ( iFirstStartCompleted ) //Safety
  1250         {
  1298         {
  1251         SetSearchListLayoutAnchors();
  1299         SetSearchListLayoutAnchors();
  1252         iScreenAnchorLayout->UpdateChildrenLayout();
  1300         iScreenAnchorLayout->UpdateChildrenLayout();
  1253         iSearchListLayout->UpdateChildrenLayout();
  1301         iSearchListLayout->UpdateChildrenLayout();
  1254         // Set bar text color from skin 
  1302         // Set bar text color from skin
  1255         if ( iBarTextVisual )
  1303         if ( iBarTextVisual )
  1256             {
  1304             {
  1257 			//<cmail>
  1305 			//<cmail>
  1258 			SetHeaderAttributesL();
  1306 			SetHeaderAttributesL();
  1259 			/*TRgb barTextColor( KRgbBlack );
  1307 			/*TRgb barTextColor( KRgbBlack );
  1260 		    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), 
  1308 		    AknsUtils::GetCachedColor( AknsUtils::SkinInstance(),
  1261 		                               barTextColor, KAknsIIDFsTextColors, EAknsCIFsTextColorsCG10 );
  1309 		                               barTextColor, KAknsIIDFsTextColors, EAknsCIFsTextColorsCG10 );
  1262 			iBarTextVisual->SetColor( barTextColor );*/
  1310 			iBarTextVisual->SetColor( barTextColor );*/
  1263 			//</cmail>
  1311 			//</cmail>
  1264             }
  1312             }
  1265         RefreshL();
  1313         RefreshL();
  1266         //iSearchTreeListVisualizer->HideList();
  1314         //iSearchTreeListVisualizer->HideList();
  1267         iSearchTreeListVisualizer->ShowListL();                
  1315         iSearchTreeListVisualizer->ShowListL();
  1268         }
  1316         }
  1269  	}
  1317  	}
  1270 
  1318 
  1271 void CFSEmailUiSearchListVisualiser::SetSearchListLayoutAnchors()
  1319 void CFSEmailUiSearchListVisualiser::SetSearchListLayoutAnchors()
  1272 	{
  1320 	{
  1273     FUNC_LOG;
  1321     FUNC_LOG;
  1274 	// Set anchors so that list leaves space for control bar
  1322 	// Set anchors so that list leaves space for control bar
  1275 
  1323 
  1276 	// The anchor layout mirrors itself automatically when necessary.
  1324 	// The anchor layout mirrors itself automatically when necessary.
  1277 	// There's no need to mirror anything manually here.
  1325 	// There's no need to mirror anything manually here.
  1278 	
  1326 
  1279 	// BAR BACGROUND IMAGE
  1327 	// BAR BACGROUND IMAGE
  1280     TRect contBarRect = iAppUi.LayoutHandler()->GetControlBarRect();
  1328     TRect contBarRect = iAppUi.LayoutHandler()->GetControlBarRect();
  1281     TPoint& tl( contBarRect.iTl );
  1329     TPoint& tl( contBarRect.iTl );
  1282     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 0, 
  1330     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 0,
  1283         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1331         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1284         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1332         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1285         TAlfTimedPoint( tl.iX, tl.iY ));
  1333         TAlfTimedPoint( tl.iX, tl.iY ));
  1286     TPoint& br( contBarRect.iBr );
  1334     TPoint& br( contBarRect.iBr );
  1287     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 0, 
  1335     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 0,
  1288         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1336         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1289         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1337         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1290         TAlfTimedPoint( br.iX, br.iY ));
  1338         TAlfTimedPoint( br.iX, br.iY ));
  1291         
  1339 
  1292 	// TEXT
  1340 	// TEXT
  1293     TRect textRect =  iAppUi.LayoutHandler()->GetSearchListHeaderTextLayout().TextRect();
  1341     TRect textRect =  iAppUi.LayoutHandler()->GetSearchListHeaderTextLayout().TextRect();
  1294     tl = textRect.iTl;
  1342     tl = textRect.iTl;
  1295     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 1, 
  1343     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 1,
  1296         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1344         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1297         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1345         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1298         TAlfTimedPoint( tl.iX, tl.iY ));
  1346         TAlfTimedPoint( tl.iX, tl.iY ));
  1299     br = textRect.iBr;
  1347     br = textRect.iBr;
  1300     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 1, 
  1348     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 1,
  1301         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1349         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1302         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1350         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1303         TAlfTimedPoint( br.iX, br.iY ));
  1351         TAlfTimedPoint( br.iX, br.iY ));
  1304 
  1352 
  1305     TRect listRect = iAppUi.LayoutHandler()->GetListRect( ETrue );
  1353     TRect listRect = iAppUi.LayoutHandler()->GetListRect( ETrue );
  1306     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 2, 
  1354     iScreenAnchorLayout->SetAnchor(EAlfAnchorTopLeft, 2,
  1307         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1355         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1308         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1356         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1309         TAlfTimedPoint(listRect.iTl.iX, listRect.iTl.iY));
  1357         TAlfTimedPoint(listRect.iTl.iX, listRect.iTl.iY));
  1310     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 2, 
  1358     iScreenAnchorLayout->SetAnchor(EAlfAnchorBottomRight, 2,
  1311         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1359         EAlfAnchorOriginLeft, EAlfAnchorOriginTop,
  1312         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1360         EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute,
  1313         TAlfTimedPoint(listRect.iBr.iX, listRect.iBr.iY));
  1361         TAlfTimedPoint(listRect.iBr.iX, listRect.iBr.iY));
  1314 	}
  1362 	}
  1315 
  1363 
  1318     {
  1366     {
  1319     FUNC_LOG;
  1367     FUNC_LOG;
  1320 	TFSMailMsgId msgId; // constructs null ID
  1368 	TFSMailMsgId msgId; // constructs null ID
  1321     if ( 0 <= aItemIdx && aItemIdx < iModel->Count() )
  1369     if ( 0 <= aItemIdx && aItemIdx < iModel->Count() )
  1322         {
  1370         {
  1323         CFSEmailUiMailListModelItem* item = 
  1371         CFSEmailUiMailListModelItem* item =
  1324     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(aItemIdx));
  1372     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(aItemIdx));
  1325     	if ( item->ModelItemType() == ETypeMailItem )
  1373     	if ( item->ModelItemType() == ETypeMailItem )
  1326     	    {
  1374     	    {
  1327     	    msgId = item->MessagePtr().GetMessageId();
  1375     	    msgId = item->MessagePtr().GetMessageId();
  1328     	    }
  1376     	    }
  1329         }
  1377         }
  1330         
  1378 
  1331     return msgId;
  1379     return msgId;
  1332     }
  1380     }
  1333 	
  1381 
  1334 TFSMailMsgId CFSEmailUiSearchListVisualiser::MsgIdFromListId( TFsTreeItemId aListId ) const
  1382 TFSMailMsgId CFSEmailUiSearchListVisualiser::MsgIdFromListId( TFsTreeItemId aListId ) const
  1335 	{
  1383 	{
  1336     FUNC_LOG;
  1384     FUNC_LOG;
  1337 	TFSMailMsgId msgId;
  1385 	TFSMailMsgId msgId;
  1338 	for ( TInt i=0; i<iModel->Count();i++)
  1386 	for ( TInt i=0; i<iModel->Count();i++)
  1339 		{
  1387 		{
  1340 		CFSEmailUiMailListModelItem* item = 
  1388 		CFSEmailUiMailListModelItem* item =
  1341 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1389 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1342 		if ( item->ModelItemType() == ETypeMailItem &&
  1390 		if ( item->ModelItemType() == ETypeMailItem &&
  1343 		     aListId == item->CorrespondingListId() )
  1391 		     aListId == item->CorrespondingListId() )
  1344 			{
  1392 			{
  1345 			msgId = item->MessagePtr().GetMessageId();
  1393 			msgId = item->MessagePtr().GetMessageId();
  1346 			break;
  1394 			break;
  1347 			}
  1395 			}
  1348 		}	
  1396 		}
  1349 	return msgId;
  1397 	return msgId;
  1350 	}
  1398 	}
  1351 
  1399 
  1352 CFSMailMessage& CFSEmailUiSearchListVisualiser::MsgPtrFromListId( TFsTreeItemId aListId )
  1400 CFSMailMessage& CFSEmailUiSearchListVisualiser::MsgPtrFromListId( TFsTreeItemId aListId )
  1353 	{
  1401 	{
  1354     FUNC_LOG;
  1402     FUNC_LOG;
  1355 	CFSMailMessage* msgPtr(NULL);
  1403 	CFSMailMessage* msgPtr(NULL);
  1356 	for ( TInt i=0; i<iModel->Count();i++)
  1404 	for ( TInt i=0; i<iModel->Count();i++)
  1357 		{
  1405 		{
  1358 		CFSEmailUiMailListModelItem* item = 
  1406 		CFSEmailUiMailListModelItem* item =
  1359 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1407 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1360 		if ( aListId == item->CorrespondingListId() )
  1408 		if ( aListId == item->CorrespondingListId() )
  1361 			{
  1409 			{
  1362 			msgPtr = &item->MessagePtr();
  1410 			msgPtr = &item->MessagePtr();
  1363 			}
  1411 			}
  1364 		}
  1412 		}
  1365 	return *msgPtr;	
  1413 	return *msgPtr;
  1366 	}
  1414 	}
  1367 	
  1415 
  1368 	// Item data and visualiser helper functions 
  1416 	// Item data and visualiser helper functions
  1369 MFsTreeItemData* CFSEmailUiSearchListVisualiser::ItemDataFromItemId( TFsTreeItemId aItemId )
  1417 MFsTreeItemData* CFSEmailUiSearchListVisualiser::ItemDataFromItemId( TFsTreeItemId aItemId )
  1370 	{
  1418 	{
  1371     FUNC_LOG;
  1419     FUNC_LOG;
  1372 	TInt i(0);
  1420 	TInt i(0);
  1373 	MFsTreeItemData* itemData(NULL);
  1421 	MFsTreeItemData* itemData(NULL);
  1378 			itemData = iSearchListItemArray[i].iTreeItemData;
  1426 			itemData = iSearchListItemArray[i].iTreeItemData;
  1379 			}
  1427 			}
  1380 		}
  1428 		}
  1381 	return itemData;
  1429 	return itemData;
  1382 	}
  1430 	}
  1383 	
  1431 
  1384 MFsTreeItemVisualizer* CFSEmailUiSearchListVisualiser::ItemVisualiserFromItemId( TFsTreeItemId aItemId )
  1432 MFsTreeItemVisualizer* CFSEmailUiSearchListVisualiser::ItemVisualiserFromItemId( TFsTreeItemId aItemId )
  1385 	{
  1433 	{
  1386     FUNC_LOG;
  1434     FUNC_LOG;
  1387 	TInt i(0);
  1435 	TInt i(0);
  1388 	MFsTreeItemVisualizer* itemVis(NULL);
  1436 	MFsTreeItemVisualizer* itemVis(NULL);
  1399 // Helpers to get the ordinal of a message in the iModel
  1447 // Helpers to get the ordinal of a message in the iModel
  1400 TInt CFSEmailUiSearchListVisualiser::ItemIndexFromMessageId( const TFSMailMsgId& aMessageId ) const
  1448 TInt CFSEmailUiSearchListVisualiser::ItemIndexFromMessageId( const TFSMailMsgId& aMessageId ) const
  1401     {
  1449     {
  1402     FUNC_LOG;
  1450     FUNC_LOG;
  1403 	TInt idx = KErrNotFound;
  1451 	TInt idx = KErrNotFound;
  1404 	
  1452 
  1405 	for ( TInt i=0; i<iModel->Count() ; i++ )
  1453 	for ( TInt i=0; i<iModel->Count() ; i++ )
  1406 		{
  1454 		{
  1407 		CFSEmailUiMailListModelItem* item = 
  1455 		CFSEmailUiMailListModelItem* item =
  1408 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1456 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1409 		if ( item->ModelItemType() == ETypeMailItem &&
  1457 		if ( item->ModelItemType() == ETypeMailItem &&
  1410 		     aMessageId == item->MessagePtr().GetMessageId() )
  1458 		     aMessageId == item->MessagePtr().GetMessageId() )
  1411 			{
  1459 			{
  1412 			idx = i;
  1460 			idx = i;
  1413 			break;
  1461 			break;
  1414 			}
  1462 			}
  1415 		}	
  1463 		}
  1416 	
  1464 
  1417 	return idx;
  1465 	return idx;
  1418     }
  1466     }
  1419 	
  1467 
  1420 TInt CFSEmailUiSearchListVisualiser::NextMessageIndex( TInt aCurMsgIdx ) const
  1468 TInt CFSEmailUiSearchListVisualiser::NextMessageIndex( TInt aCurMsgIdx ) const
  1421     {
  1469     {
  1422     FUNC_LOG;
  1470     FUNC_LOG;
  1423 	TInt idx = KErrNotFound;
  1471 	TInt idx = KErrNotFound;
  1424 	
  1472 
  1425 	for ( TInt i=aCurMsgIdx+1 ; i<iModel->Count() ; i++ )
  1473 	for ( TInt i=aCurMsgIdx+1 ; i<iModel->Count() ; i++ )
  1426 		{
  1474 		{
  1427 		CFSEmailUiMailListModelItem* item = 
  1475 		CFSEmailUiMailListModelItem* item =
  1428 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1476 			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1429 		if ( item && item->ModelItemType() == ETypeMailItem )
  1477 		if ( item && item->ModelItemType() == ETypeMailItem )
  1430 			{
  1478 			{
  1431 			idx = i;
  1479 			idx = i;
  1432 			break;
  1480 			break;
  1433 			}
  1481 			}
  1434 		}	
  1482 		}
  1435 	
  1483 
  1436 	return idx;
  1484 	return idx;
  1437     }
  1485     }
  1438 	
  1486 
  1439 TInt CFSEmailUiSearchListVisualiser::PreviousMessageIndex( TInt aCurMsgIdx ) const
  1487 TInt CFSEmailUiSearchListVisualiser::PreviousMessageIndex( TInt aCurMsgIdx ) const
  1440     {
  1488     {
  1441     FUNC_LOG;
  1489     FUNC_LOG;
  1442 	TInt idx = KErrNotFound;
  1490 	TInt idx = KErrNotFound;
  1443 	
  1491 
  1444 	if ( aCurMsgIdx < iModel->Count() )
  1492 	if ( aCurMsgIdx < iModel->Count() )
  1445 	    {
  1493 	    {
  1446     	for ( TInt i=aCurMsgIdx-1 ; i>=0 ; i-- )
  1494     	for ( TInt i=aCurMsgIdx-1 ; i>=0 ; i-- )
  1447     		{
  1495     		{
  1448     		CFSEmailUiMailListModelItem* item = 
  1496     		CFSEmailUiMailListModelItem* item =
  1449     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1497     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item(i));
  1450     		if ( item && item->ModelItemType() == ETypeMailItem )
  1498     		if ( item && item->ModelItemType() == ETypeMailItem )
  1451     			{
  1499     			{
  1452     			idx = i;
  1500     			idx = i;
  1453     			break;
  1501     			break;
  1454     			}
  1502     			}
  1455     		}	
  1503     		}
  1456 	    }
  1504 	    }
  1457 	
  1505 
  1458 	return idx;
  1506 	return idx;
  1459     }
  1507     }
  1460 
  1508 
  1461 
  1509 
  1462 void CFSEmailUiSearchListVisualiser::OpenHighlightedMailL()
  1510 void CFSEmailUiSearchListVisualiser::OpenHighlightedMailL()
  1463 	{
  1511 	{
  1464     FUNC_LOG;
  1512     FUNC_LOG;
  1465 	if (iSearchOngoing)
  1513 	if (iSearchOngoing)
  1466 		{
  1514 		{
  1467 		StopSearchL();
  1515 		StopSearchL();
  1468 		}		
  1516 		}
  1469 	
  1517 
  1470 	CFSEmailUiMailListModelItem* item =
  1518 	CFSEmailUiMailListModelItem* item =
  1471 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ) );
  1519 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ) );
  1472 	if ( item->ModelItemType() == ETypeMailItem )
  1520 	if ( item->ModelItemType() == ETypeMailItem )
  1473 		{
  1521 		{
  1474 		// First make sure that the highlighted message really exists in the store
  1522 		// First make sure that the highlighted message really exists in the store
  1475 		// Get confirmed msg ptr 
  1523 		// Get confirmed msg ptr
  1476 		CFSMailMessage* confirmedMsgPtr(0);
  1524 		CFSMailMessage* confirmedMsgPtr(0);
  1477 		TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL(iAppUi.GetActiveMailboxId(), 
  1525 		TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL(iAppUi.GetActiveMailboxId(),
  1478 							item->MessagePtr().GetFolderId(), item->MessagePtr().GetMessageId(), EFSMsgDataEnvelope ) );
  1526 							item->MessagePtr().GetFolderId(), item->MessagePtr().GetMessageId(), EFSMsgDataEnvelope ) );
  1479 		if ( confirmedMsgPtr && err == KErrNone )
  1527 		if ( confirmedMsgPtr && err == KErrNone )
  1480 			{
  1528 			{
  1481 		 	CFSMailFolder* highlightedMsgFolder = 
  1529 		 	CFSMailFolder* highlightedMsgFolder =
  1482 		 		iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), confirmedMsgPtr->GetFolderId() );
  1530 		 		iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), confirmedMsgPtr->GetFolderId() );
  1483 			CleanupStack::PushL( highlightedMsgFolder ); 
  1531 			CleanupStack::PushL( highlightedMsgFolder );
  1484 			TInt msgFolderType = highlightedMsgFolder->GetFolderType();
  1532 			TInt msgFolderType = highlightedMsgFolder->GetFolderType();
  1485 			TFSMailMsgId highlightedMsgFolderId = highlightedMsgFolder->GetFolderId();
  1533 			TFSMailMsgId highlightedMsgFolderId = highlightedMsgFolder->GetFolderId();
  1486 			CleanupStack::PopAndDestroy( highlightedMsgFolder );			
  1534 			CleanupStack::PopAndDestroy( highlightedMsgFolder );
  1487 			// Pointer confirmed, store Id and delete not needed anymore
  1535 			// Pointer confirmed, store Id and delete not needed anymore
  1488 			TFSMailMsgId confirmedId = confirmedMsgPtr->GetMessageId();
  1536 			TFSMailMsgId confirmedId = confirmedMsgPtr->GetMessageId();
  1489 			delete confirmedMsgPtr;
  1537 			delete confirmedMsgPtr;
  1490 			
  1538 
  1491 			// Open to editor from drafts
  1539 			// Open to editor from drafts
  1492 			if ( msgFolderType == EFSDraftsFolder )
  1540 			if ( msgFolderType == EFSDraftsFolder )
  1493 				{
  1541 				{
  1494 				TEditorLaunchParams params;
  1542 				TEditorLaunchParams params;
  1495 				params.iMailboxId = iAppUi.GetActiveMailboxId();
  1543 				params.iMailboxId = iAppUi.GetActiveMailboxId();
  1496 				params.iActivatedExternally = EFalse;
  1544 				params.iActivatedExternally = EFalse;
  1497 				params.iMsgId = confirmedId;
  1545 				params.iMsgId = confirmedId;
  1498 				params.iFolderId = highlightedMsgFolderId;
  1546 				params.iFolderId = highlightedMsgFolderId;
  1499 			    iAppUi.LaunchEditorL( KEditorCmdOpen, params );						
  1547 			    iAppUi.LaunchEditorL( KEditorCmdOpen, params );
  1500 				}
  1548 				}
  1501 			else if ( msgFolderType == EFSOutbox )
  1549 			else if ( msgFolderType == EFSOutbox )
  1502 				{
  1550 				{
  1503 				TFsEmailUiUtility::ShowErrorNoteL( R_FREESTYLE_EMAIL_UI_OPEN_FROM_OUTBOX_NOTE, ETrue );
  1551 				TFsEmailUiUtility::ShowErrorNoteL( R_FREESTYLE_EMAIL_UI_OPEN_FROM_OUTBOX_NOTE, ETrue );
  1504 				}
  1552 				}
  1505 			else
  1553 			else
  1506 				{
  1554 				{
  1507 				THtmlViewerActivationData tmp;	
  1555 				THtmlViewerActivationData tmp;
  1508 				tmp.iMailBoxId = iAppUi.GetActiveMailbox()->GetId();
  1556 				tmp.iMailBoxId = iAppUi.GetActiveMailbox()->GetId();
  1509 				tmp.iMessageId = confirmedId;
  1557 				tmp.iMessageId = confirmedId;
  1510 				tmp.iFolderId = highlightedMsgFolderId;	
  1558 				tmp.iFolderId = highlightedMsgFolderId;
  1511 				
  1559 
  1512 				const TPckgBuf<THtmlViewerActivationData> pkgOut( tmp );	
  1560 				const TPckgBuf<THtmlViewerActivationData> pkgOut( tmp );
  1513 				ChangeReadStatusOfHighlightedL( ETrue ); 									
  1561 				ChangeReadStatusOfHighlightedL( ETrue );
  1514 				iAppUi.EnterFsEmailViewL( HtmlViewerId, KStartViewerWithMsgId, pkgOut );								
  1562 				iAppUi.EnterFsEmailViewL( HtmlViewerId, KStartViewerWithMsgId, pkgOut );
  1515 				}					
  1563 				}
  1516 			}
  1564 			}
  1517 		else if ( err == KErrNotFound )
  1565 		else if ( err == KErrNotFound )
  1518 			{
  1566 			{
  1519 			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );							
  1567 			TRAP_IGNORE( CheckAndUpdateFocusedMessageL() );
  1520 			}
  1568 			}
  1521 		}
  1569 		}
  1522 	}
  1570 	}
  1523 
  1571 
  1524 
  1572 
  1526 void CFSEmailUiSearchListVisualiser::ReplyL( CFSMailMessage* aMsgPtr )
  1574 void CFSEmailUiSearchListVisualiser::ReplyL( CFSMailMessage* aMsgPtr )
  1527 	{
  1575 	{
  1528     FUNC_LOG;
  1576     FUNC_LOG;
  1529 	DoReplyForwardL( KEditorCmdReply, aMsgPtr );
  1577 	DoReplyForwardL( KEditorCmdReply, aMsgPtr );
  1530 	}
  1578 	}
  1531 	
  1579 
  1532 void CFSEmailUiSearchListVisualiser::ReplyAllL(  CFSMailMessage* aMsgPtr )
  1580 void CFSEmailUiSearchListVisualiser::ReplyAllL(  CFSMailMessage* aMsgPtr )
  1533 	{
  1581 	{
  1534     FUNC_LOG;
  1582     FUNC_LOG;
  1535 	DoReplyForwardL( KEditorCmdReplyAll, aMsgPtr );
  1583 	DoReplyForwardL( KEditorCmdReplyAll, aMsgPtr );
  1536 	}
  1584 	}
  1537 	
  1585 
  1538 void CFSEmailUiSearchListVisualiser::ForwardL( CFSMailMessage* aMsgPtr )
  1586 void CFSEmailUiSearchListVisualiser::ForwardL( CFSMailMessage* aMsgPtr )
  1539 	{
  1587 	{
  1540     FUNC_LOG;
  1588     FUNC_LOG;
  1541 	DoReplyForwardL( KEditorCmdForward, aMsgPtr );
  1589 	DoReplyForwardL( KEditorCmdForward, aMsgPtr );
  1542 	}
  1590 	}
  1546     FUNC_LOG;
  1594     FUNC_LOG;
  1547     // Stop search when reply/forward has been selected
  1595     // Stop search when reply/forward has been selected
  1548 	if ( iSearchOngoing )
  1596 	if ( iSearchOngoing )
  1549 		{
  1597 		{
  1550 		StopSearchL();
  1598 		StopSearchL();
  1551 		} 
  1599 		}
  1552     
  1600 
  1553     if ( iModel->Count() )
  1601     if ( iModel->Count() )
  1554         {
  1602         {
  1555        	CFSMailMessage* messagePointer = aMsgPtr;
  1603        	CFSMailMessage* messagePointer = aMsgPtr;
  1556     	if ( !messagePointer  )
  1604     	if ( !messagePointer  )
  1557     		{
  1605     		{
  1558             RFsTreeItemIdList markedEntries;	
  1606             RFsTreeItemIdList markedEntries;
  1559     		iSearchList->GetMarkedItemsL( markedEntries );
  1607     		iSearchList->GetMarkedItemsL( markedEntries );
  1560     		TInt markedCount = markedEntries.Count();
  1608     		TInt markedCount = markedEntries.Count();
  1561     		if ( markedCount == 0 )
  1609     		if ( markedCount == 0 )
  1562     			{
  1610     			{
  1563        		    CFSEmailUiMailListModelItem* item = NULL;
  1611        		    CFSEmailUiMailListModelItem* item = NULL;
  1568        		        }
  1616        		        }
  1569     			}
  1617     			}
  1570     		else if ( markedCount == 1)
  1618     		else if ( markedCount == 1)
  1571     			{
  1619     			{
  1572     			messagePointer = &MsgPtrFromListId( markedEntries[0] );
  1620     			messagePointer = &MsgPtrFromListId( markedEntries[0] );
  1573     			}	
  1621     			}
  1574     		}
  1622     		}
  1575     	if ( messagePointer )
  1623     	if ( messagePointer )
  1576     		{
  1624     		{
  1577     		// No reply/Forward for calendar messages, at least not in 1.0
  1625     		// No reply/Forward for calendar messages, at least not in 1.0
  1578 	   		if ( !messagePointer->IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
  1626 	   		if ( !messagePointer->IsFlagSet( EFSMsgFlag_CalendarMsg ) )
  1579     			{
  1627     			{
  1580 	    		TEditorLaunchParams params;
  1628 	    		TEditorLaunchParams params;
  1581 	    		params.iMailboxId = iAppUi.GetActiveMailboxId();
  1629 	    		params.iMailboxId = iAppUi.GetActiveMailboxId();
  1582 	    		params.iActivatedExternally = EFalse;								
  1630 	    		params.iActivatedExternally = EFalse;
  1583 	    		params.iMsgId = messagePointer->GetMessageId();
  1631 	    		params.iMsgId = messagePointer->GetMessageId();
  1584 	    		iAppUi.LaunchEditorL( aMode, params );			    			
  1632 	    		iAppUi.LaunchEditorL( aMode, params );
  1585     			}      				
  1633     			}
  1586     		}
  1634     		}
  1587         }
  1635         }
  1588     }
  1636     }
  1589 
  1637 
  1590 void CFSEmailUiSearchListVisualiser::StartSearchL()
  1638 void CFSEmailUiSearchListVisualiser::StartSearchL()
  1591 	{
  1639 	{
  1592     FUNC_LOG;
  1640     FUNC_LOG;
  1593 	iSearchCount++;
  1641 	iSearchCount++;
  1594 	
  1642 
  1595     // Reset previous results before starting new search
  1643     // Reset previous results before starting new search
  1596 	// <cmail> fixed CS high cat. finding
  1644 	// <cmail> fixed CS high cat. finding
  1597 	ResetResultListL();
  1645 	ResetResultListL();
  1598     TLex lex( *iLatestSearchText );
  1646     TLex lex( *iLatestSearchText );
  1599     while ( !lex.Eos() )
  1647     while ( !lex.Eos() )
  1600         {
  1648         {
  1601         HBufC* token = lex.NextToken().AllocLC();
  1649         HBufC* token = lex.NextToken().AllocLC();
  1602       
  1650 
  1603         iSearchStrings.AppendL( token );
  1651         iSearchStrings.AppendL( token );
  1604         
  1652 
  1605         CleanupStack::Pop( token );
  1653         CleanupStack::Pop( token );
  1606         }
  1654         }
  1607     
  1655 
  1608 	TFSMailSortCriteria sortCriteria;
  1656 	TFSMailSortCriteria sortCriteria;
  1609     sortCriteria.iField = EFSMailSortByDate;
  1657     sortCriteria.iField = EFSMailSortByDate;
  1610     sortCriteria.iOrder = EFSMailDescending;
  1658     sortCriteria.iOrder = EFSMailDescending;
  1611    	iSearchOngoing = ETrue;
  1659    	iSearchOngoing = ETrue;
  1612 	// Model and list is set to be empty, set also MSK to empty
  1660 	// Model and list is set to be empty, set also MSK to empty
  1613 	SetMskL();
  1661 	SetMskL();
  1614 	// Initialisr TextSearcher
  1662 	// Initialisr TextSearcher
  1615 	
  1663 
  1616 	// Start search.
  1664 	// Start search.
  1617 	iMailBox->SearchL( iSearchStrings, sortCriteria, *this );
  1665 	iMailBox->SearchL( iSearchStrings, sortCriteria, *this );
  1618 	}
  1666 	}
  1619 
  1667 
  1620 void CFSEmailUiSearchListVisualiser::StopSearchL()
  1668 void CFSEmailUiSearchListVisualiser::StopSearchL()
  1621 	{
  1669 	{
  1622     FUNC_LOG;
  1670     FUNC_LOG;
  1623 	iSearchOngoing = EFalse;
  1671 	iSearchOngoing = EFalse;
  1624 	if ( iMailBox )
  1672 	if ( iMailBox )
  1625 		{		
  1673 		{
  1626 		iMailBox->CancelSearch();
  1674 		iMailBox->CancelSearch();
  1627 		}		
  1675 		}
  1628 	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
  1676 	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
  1629 	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
  1677 	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
  1630 	finalText->Des().Append( *searchText );
  1678 	finalText->Des().Append( *searchText );
  1631 	finalText->Des().Append( KSpace );
  1679 	finalText->Des().Append( KSpace );
  1632 	finalText->Des().Append( *iLatestSearchText );			
  1680 	finalText->Des().Append( *iLatestSearchText );
  1633 	iBarTextVisual->SetTextL( *finalText );		
  1681 	iBarTextVisual->SetTextL( *finalText );
  1634 	CleanupStack::PopAndDestroy( finalText );
  1682 	CleanupStack::PopAndDestroy( finalText );
  1635 	CleanupStack::PopAndDestroy( searchText );	
  1683 	CleanupStack::PopAndDestroy( searchText );
       
  1684 	iRequiredSearchPriority = KStandardSearchPriority; // <cmail> return back
  1636 	}
  1685 	}
  1637 
  1686 
  1638 void CFSEmailUiSearchListVisualiser::ResetResultListL()
  1687 void CFSEmailUiSearchListVisualiser::ResetResultListL()
  1639     {
  1688     {
  1640 	// <cmail> fixed CS high cat. finding    
  1689     FUNC_LOG;
  1641     FUNC_LOG;
  1690     if( iModel )
  1642     iModel->Reset();
  1691         {
  1643     iSearchList->RemoveAllL();
  1692         iModel->Reset();
       
  1693         }
       
  1694     if( iSearchList )
       
  1695         {
       
  1696         iSearchList->RemoveAllL();
       
  1697         }
  1644     iSearchListItemArray.Reset();
  1698     iSearchListItemArray.Reset();
  1645     iSearchStrings.ResetAndDestroy();
  1699     iSearchStrings.ResetAndDestroy();
  1646     }
  1700     }
  1647 
  1701 
  1648 void CFSEmailUiSearchListVisualiser::MatchFoundL( CFSMailMessage* aMatchMessage )
  1702 void CFSEmailUiSearchListVisualiser::MatchFoundL( CFSMailMessage* aMatchMessage )
  1649 	{
  1703 	{
  1650     FUNC_LOG;
  1704     FUNC_LOG;
  1651     
  1705 
  1652 	if ( !iSearchList->IsFocused() )
  1706 	if ( !iSearchList->IsFocused() )
  1653 		{
  1707 		{
  1654 		iSearchList->SetFocusedL( ETrue );
  1708 		iSearchList->SetFocusedL( ETrue );
  1655 		}
  1709 		}
  1656 
  1710 
  1657 	// Delete receved owned object and add confirmed msg pointer to model insteaed
  1711 	// Delete receved owned object and add confirmed msg pointer to model insteaed
  1658 	// This is done because it seems that matched message objects seems to be different
  1712 	// This is done because it seems that matched message objects seems to be different
  1659 	// in some protocols than original messages
  1713 	// in some protocols than original messages
  1660 	CleanupStack::PushL( aMatchMessage );
  1714 	CleanupStack::PushL( aMatchMessage );
  1661 	CFSMailMessage* confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
  1715 	CFSMailMessage* confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(),
  1662 						aMatchMessage->GetFolderId(), aMatchMessage->GetMessageId(), EFSMsgDataEnvelope );
  1716 						aMatchMessage->GetFolderId(), aMatchMessage->GetMessageId(), EFSMsgDataEnvelope );
  1663 	CleanupStack::PopAndDestroy( aMatchMessage );
  1717 	CleanupStack::PopAndDestroy( aMatchMessage );
  1664 	
  1718 
  1665 	if ( confirmedMsgPtr ) // Append item into model and list if msg pointer was confirmed
  1719 	if ( confirmedMsgPtr ) // Append item into model and list if msg pointer was confirmed
  1666 		{
  1720 		{
  1667 		// Append to model
  1721 		// Append to model
  1668 		CFSEmailUiMailListModelItem* newItem = CFSEmailUiMailListModelItem::NewL( confirmedMsgPtr, ETypeMailItem);		    				    	
  1722 		CFSEmailUiMailListModelItem* newItem = CFSEmailUiMailListModelItem::NewL( confirmedMsgPtr, ETypeMailItem);
  1669 		iModel->AppendL(newItem);
  1723 		iModel->AppendL(newItem);
  1670 
  1724 
  1671 		// Append to list
  1725 		// Append to list
  1672 	   	TRect screenRect;
  1726 	   	TRect screenRect;
  1673 	 	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );	 
  1727 	 	AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
  1674 
  1728 
  1675 		CFSMailAddress* fromAddress = confirmedMsgPtr->GetSender();		
  1729 		CFSMailAddress* fromAddress = confirmedMsgPtr->GetSender();
  1676 		TDesC* diplayName(0);
  1730 		TDesC* diplayName = NULL;
  1677 		if ( fromAddress )
  1731 		if ( fromAddress )
  1678 			{
  1732 			{
  1679 			diplayName = &fromAddress->GetDisplayName();				
  1733 			diplayName = &fromAddress->GetDisplayName();
  1680 			}
  1734 			}
  1681 			
  1735 
  1682 		// Set first line of data
  1736 		// Set first line of data
  1683 		HBufC* dispName(0);
  1737 		HBufC* dispName = NULL;
  1684 		if ( fromAddress && diplayName && diplayName->Length() != 0 )
  1738 		if ( fromAddress && diplayName && diplayName->Length() != 0 )
  1685 			{
  1739 			{
  1686 			dispName = HBufC::NewLC( diplayName->Length() );
  1740 			dispName = HBufC::NewLC( diplayName->Length() );
  1687 			dispName->Des().Append( *diplayName );
  1741 			dispName->Des().Append( *diplayName );
  1688 			}
  1742 			}
  1692 			dispName->Des().Append( fromAddress->GetEmailAddress() );
  1746 			dispName->Des().Append( fromAddress->GetEmailAddress() );
  1693 			}
  1747 			}
  1694 		else
  1748 		else
  1695 			{
  1749 			{
  1696 			dispName = HBufC::NewLC( 0 );
  1750 			dispName = HBufC::NewLC( 0 );
  1697 			dispName->Des().Append( KNullDesC );				
  1751 			dispName->Des().Append( KNullDesC );
  1698 			}
  1752 			}
  1699 			
  1753 
  1700 		// Drop out unwanted characters from display name such as <> and ""
  1754 		// Drop out unwanted characters from display name such as <> and ""
  1701 		// And set display name data
  1755 		// And set display name data
  1702 		if ( dispName )
  1756 		if ( dispName )
  1703 			{
  1757 			{
  1704 			TFsEmailUiUtility::StripDisplayName( *dispName );		
  1758 			TFsEmailUiUtility::StripDisplayName( *dispName );
  1705 			}
  1759 			}
  1706 		// Create item data and 
  1760 		// Create item data and
  1707 		CFsTreePlainTwoLineItemData* itemData = CFsTreePlainTwoLineItemData::NewL();			
  1761 		CFsTreePlainTwoLineItemData* itemData = CFsTreePlainTwoLineItemData::NewL();
  1708 
  1762 
  1709 		itemData->SetDataL( *dispName );				
  1763 		itemData->SetDataL( *dispName );
  1710 		CleanupStack::PopAndDestroy( dispName );
  1764 		CleanupStack::PopAndDestroy( dispName );
  1711 		
  1765 
  1712 		// Set time text data
  1766 		// Set time text data
  1713 		HBufC* timeText = TFsEmailUiUtility::ListMsgTimeTextFromMsgLC( confirmedMsgPtr, EFalse );			
  1767 		HBufC* timeText = TFsEmailUiUtility::ListMsgTimeTextFromMsgLC( confirmedMsgPtr, EFalse );
  1714 		itemData->SetDateTimeDataL ( *timeText );	 			
  1768 		itemData->SetDateTimeDataL ( *timeText );
  1715 		CleanupStack::PopAndDestroy();
  1769 		CleanupStack::PopAndDestroy();
  1716 
  1770 
  1717 		// Set second line of data
  1771 		// Set second line of data
  1718 	
       
  1719 		HBufC* subjectText = TFsEmailUiUtility::CreateSubjectTextLC( confirmedMsgPtr );
  1772 		HBufC* subjectText = TFsEmailUiUtility::CreateSubjectTextLC( confirmedMsgPtr );
  1720 
  1773 		itemData->SetSecondaryDataL( *subjectText );
  1721 		
       
  1722 		    itemData->SetSecondaryDataL( *subjectText);
       
  1723 	
       
  1724               
       
  1725               
       
  1726 		
       
  1727 		CleanupStack::PopAndDestroy( subjectText );
  1774 		CleanupStack::PopAndDestroy( subjectText );
  1728 
  1775 
  1729 		
       
  1730 		// Set message icon
  1776 		// Set message icon
  1731 		CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( confirmedMsgPtr, *iAppUi.FsTextureManager() );	
  1777 		CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( confirmedMsgPtr, *iAppUi.FsTextureManager() );
  1732 		itemData->SetIcon ( *itemTexture );
  1778 		itemData->SetIcon ( *itemTexture );
  1733 	    CFsTreePlainTwoLineItemVisualizer* itemVisualizer = CFsTreePlainTwoLineItemVisualizer::NewL(*iSearchList->TreeControl());
  1779 	    CFsTreePlainTwoLineItemVisualizer* itemVisualizer = CFsTreePlainTwoLineItemVisualizer::NewL(*iSearchList->TreeControl());
  1734 	   
  1780 
  1735 	    
  1781 		itemVisualizer->SetExtendable( ETrue );
  1736 		itemVisualizer->SetExtendable( ETrue );     		 
       
  1737 		TInt itemHeight = iAppUi.LayoutHandler()->OneLineListItemHeight();
  1782 		TInt itemHeight = iAppUi.LayoutHandler()->OneLineListItemHeight();
  1738 
  1783 
  1739 		itemVisualizer->SetSize(TSize(screenRect.Width(), itemHeight));
  1784 		itemVisualizer->SetSize( TSize( screenRect.Width(), itemHeight ) );
  1740 	 	itemVisualizer->SetExtendedSize(TSize(screenRect.Width(), 2*itemHeight));	 
  1785 	 	itemVisualizer->SetExtendedSize( TSize( screenRect.Width(), 2*itemHeight ) );
  1741 	    
  1786 
  1742 	 	// Set menu icon
       
  1743 	 	itemVisualizer->SetFlags( itemVisualizer->Flags() | KFsTreeListItemHasMenu );
       
  1744 	    
       
  1745 		// Set font height
  1787 		// Set font height
  1746 		itemVisualizer->SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );		
  1788 		itemVisualizer->SetFontHeight( iAppUi.LayoutHandler()->ListItemFontHeightInTwips() );
  1747 
  1789 
  1748 		// Set font bolding
  1790 		// Set font bolding
  1749 		if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_Read ) )
  1791 		if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_Read ) )
  1750 			{	
  1792 			{
  1751 			itemVisualizer->SetTextBold( EFalse );
  1793 			itemVisualizer->SetTextBold( EFalse );
  1752 			}
  1794 			}
  1753 		else
  1795 		else
  1754 			{
  1796 			{
  1755 			itemVisualizer->SetTextBold( ETrue );
  1797 			itemVisualizer->SetTextBold( ETrue );
  1756 			}		
  1798 			}
  1757 
  1799 
  1758 	  	// Set correct skin text colors for the list items  
  1800 	  	// Set correct skin text colors for the list items
  1759 	   	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
  1801 	   	TRgb focusedColor = iAppUi.LayoutHandler()->ListFocusedStateTextSkinColor();
  1760 	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
  1802 	   	TRgb normalColor = iAppUi.LayoutHandler()->ListNormalStateTextSkinColor();
  1761 	    itemVisualizer->SetFocusedStateTextColor( focusedColor );
  1803 	    itemVisualizer->SetFocusedStateTextColor( focusedColor );
  1762 	    itemVisualizer->SetNormalStateTextColor( normalColor );
  1804 	    itemVisualizer->SetNormalStateTextColor( normalColor );
  1763 	    
  1805 
  1764 		switch ( iListMode )
  1806 		switch ( iListMode )
  1765 		    {
  1807 		    {
  1766 		    case EListControlTypeDoubleLinePreviewOn:
  1808 		    case EListControlTypeDoubleLinePreviewOn:
  1767 		    case EListControlTypeSingleLinePreviewOn:
  1809 		    case EListControlTypeSingleLinePreviewOn:
  1768 				itemVisualizer->SetPreviewPaneOn( ETrue ); 
  1810 				itemVisualizer->SetPreviewPaneOn( ETrue );
  1769 				itemVisualizer->SetPreviewPaneEnabledSize( TSize(screenRect.Width(), 3*itemHeight) ); 
  1811 				itemVisualizer->SetPreviewPaneEnabledSize( TSize(screenRect.Width(), 3*itemHeight) );
  1770 		        // fall through
  1812 		        // fall through
  1771 		    case EListControlTypeDoubleLinePreviewOff:
  1813 		    case EListControlTypeDoubleLinePreviewOff:
  1772 		    case EListControlTypeSingleLinePreviewOff:
  1814 		    case EListControlTypeSingleLinePreviewOff:
  1773 	   	 		itemVisualizer->SetExtendable(ETrue);
  1815 	   	 		itemVisualizer->SetExtendable(ETrue);
  1774 	 			itemVisualizer->SetExtendedSize(TSize(screenRect.Width(), 2*itemHeight));
  1816 	 			itemVisualizer->SetExtendedSize(TSize(screenRect.Width(), 2*itemHeight));
  1776 		    default:
  1818 		    default:
  1777 		        break;
  1819 		        break;
  1778 		    }
  1820 		    }
  1779 
  1821 
  1780 		// Update initial preview pane text for items if needed
  1822 		// Update initial preview pane text for items if needed
  1781 	  	if ( iListMode == EListControlTypeSingleLinePreviewOn || 
  1823 	  	if ( iListMode == EListControlTypeSingleLinePreviewOn ||
  1782 			 iListMode == EListControlTypeDoubleLinePreviewOn )
  1824 			 iListMode == EListControlTypeDoubleLinePreviewOn )
  1783 			{
  1825 			{
  1784 			UpdatePreviewPaneTextForItemL( itemData, confirmedMsgPtr );
  1826 			UpdatePreviewPaneTextForItemL( itemData, confirmedMsgPtr );
  1785 			}
  1827 			}
  1786 
  1828 
  1788 		if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
  1830 		if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
  1789 			{
  1831 			{
  1790 			if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
  1832 			if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
  1791 				{
  1833 				{
  1792 			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
  1834 			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
  1793 				itemVisualizer->SetFlagIconVisible( ETrue );		 		
  1835 				itemVisualizer->SetFlagIconVisible( ETrue );
  1794 				}
  1836 				}
  1795 			else if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
  1837 			else if ( confirmedMsgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
  1796 				{
  1838 				{
  1797 			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
  1839 			 	itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
  1798 				itemVisualizer->SetFlagIconVisible( ETrue );				 		
  1840 				itemVisualizer->SetFlagIconVisible( ETrue );
  1799 				}
  1841 				}
  1800 			else
  1842 			else
  1801 				{
  1843 				{
  1802 		 	    itemVisualizer->SetFlagIconVisible( EFalse );			
  1844 		 	    itemVisualizer->SetFlagIconVisible( EFalse );
  1803 				}		
  1845 				}
  1804 			}
  1846 			}
  1805 	 	else
  1847 	 	else
  1806 	 	    {
  1848 	 	    {
  1807 	 	    itemVisualizer->SetFlagIconVisible( EFalse );
  1849 	 	    itemVisualizer->SetFlagIconVisible( EFalse );
  1808 	 	    }
  1850 	 	    }
  1809 
  1851 
  1810 		TFsTreeItemId itemId = iSearchList->InsertItemL( *itemData, *itemVisualizer, KFsTreeRootID );    		  
  1852 		TFsTreeItemId itemId = iSearchList->InsertItemL( *itemData, *itemVisualizer, KFsTreeRootID );
  1811 		if (iSearchList->FocusedItem() == KFsTreeNoneID)
  1853 		if (iSearchList->FocusedItem() == KFsTreeNoneID)
  1812 		    {
  1854 		    {
  1813 		    iSearchList->SetFocusedItemL(itemId);
  1855 		    iSearchList->SetFocusedItemL(itemId);
  1814 		    }
  1856 		    }
  1815 		
  1857 
  1816 		SSearchListItem searchListItem;
  1858 		SSearchListItem searchListItem;
  1817 		searchListItem.iSearchListItemId = itemId;
  1859 		searchListItem.iSearchListItemId = itemId;
  1818 		searchListItem.iTreeItemData = itemData;
  1860 		searchListItem.iTreeItemData = itemData;
  1819 		searchListItem.iTreeItemVisualiser = itemVisualizer;			
  1861 		searchListItem.iTreeItemVisualiser = itemVisualizer;
  1820 	    iSearchListItemArray.AppendL( searchListItem );
  1862 	    iSearchListItemArray.AppendL( searchListItem );
  1821 	    newItem->AddCorrespondingListId( itemId );      
  1863 	    newItem->AddCorrespondingListId( itemId );
  1822 
  1864 
  1823 		if ( iSearchList->Count() == 1 ) // Call only once, temp fix because of error in generic
  1865 		if ( iSearchList->Count() == 1 ) // Call only once, temp fix because of error in generic
  1824 			{
  1866 			{
  1825 			if ( iListMode == EListControlTypeDoubleLinePreviewOn ||
  1867 			if ( iListMode == EListControlTypeDoubleLinePreviewOn ||
  1826 				 iListMode == EListControlTypeDoubleLinePreviewOff )
  1868 				 iListMode == EListControlTypeDoubleLinePreviewOff )
  1828 		        iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( ETrue );
  1870 		        iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( ETrue );
  1829 		 		}
  1871 		 		}
  1830 			else
  1872 			else
  1831 				{
  1873 				{
  1832 				// Set the extendedability and extended size
  1874 				// Set the extendedability and extended size
  1833 		   		iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( EFalse ); 		
  1875 		   		iSearchTreeListVisualizer->SetItemsAlwaysExtendedL( EFalse );
  1834 				}		
  1876 				}
  1835 			
  1877 
  1836 			// Set msk to "Open when first is found".
  1878 			// Set msk to "Open when first is found".
  1837 			SetMskL();
  1879 			SetMskL();
  1838 			}	
  1880 			}
  1839 		}
  1881 		}
  1840         
  1882 
  1841 	}
  1883 	}
  1842 
  1884 
  1843 // ---------------------------------------------------------------------------
  1885 // ---------------------------------------------------------------------------
  1844 // HandleMailBoxEventL
  1886 // HandleMailBoxEventL
  1845 // Function removes objects from the list that are deleted.
  1887 // Function removes objects from the list that are deleted.
  1851     {
  1893     {
  1852     FUNC_LOG;
  1894     FUNC_LOG;
  1853     if ( iFirstStartCompleted ) // Safety
  1895     if ( iFirstStartCompleted ) // Safety
  1854         {
  1896         {
  1855         CFSMailBox* activeMailbox = iAppUi.GetActiveMailbox();
  1897         CFSMailBox* activeMailbox = iAppUi.GetActiveMailbox();
  1856         if ( activeMailbox && aMailbox.Id() == activeMailbox->GetId().Id() ) // Safety, in list events that only concern active mailbox are handled 
  1898         if ( activeMailbox && aMailbox.Id() == activeMailbox->GetId().Id() ) // Safety, in list events that only concern active mailbox are handled
  1857             {
  1899             {
  1858             if ( iModel && iModel->Count() && aEvent == TFSEventMailDeleted )
  1900             if ( iModel && iModel->Count() && aEvent == TFSEventMailDeleted )
  1859                 {
  1901                 {
  1860                 RArray<TFSMailMsgId>* removedEntries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
  1902                 RArray<TFSMailMsgId>* removedEntries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
  1861                 if ( removedEntries && removedEntries->Count() )
  1903                 if ( removedEntries && removedEntries->Count() )
  1862                     {
  1904                     {
  1863                     RemoveMsgItemsFromListIfFoundL( *removedEntries );
  1905                     RemoveMsgItemsFromListIfFoundL( *removedEntries );
  1864                     }               
  1906                     }
  1865                 }
  1907                 }
  1866             else if ( iModel && iModel->Count() && aEvent == TFSEventMailChanged )
  1908             else if ( iModel && iModel->Count() && aEvent == TFSEventMailChanged )
  1867                 {
  1909                 {
  1868                 // Get array of changed entries
  1910                 // Get array of changed entries
  1869                 RArray<TFSMailMsgId>* entries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
  1911                 RArray<TFSMailMsgId>* entries = static_cast<RArray<TFSMailMsgId>*>(aParam1);
  1870                 // Get ID of the folder that this cahnge concerns.
  1912                 // Get ID of the folder that this cahnge concerns.
  1871                 TFSMailMsgId* parentFolderId = static_cast<TFSMailMsgId*>( aParam2 );
  1913                 TFSMailMsgId* parentFolderId = static_cast<TFSMailMsgId*>( aParam2 );
  1872                 for ( TInt i=0 ; i < entries->Count() ; i++)
  1914                 for ( TInt i=0 ; i < entries->Count() ; i++)
  1873                     {           
  1915                     {
  1874                     TFSMailMsgId entryId = (*entries)[i];
  1916                     TFSMailMsgId entryId = (*entries)[i];
  1875                     CFSMailMessage* confirmedMsgPtr(0); 
  1917                     CFSMailMessage* confirmedMsgPtr(0);
  1876                     TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
  1918                     TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(),
  1877                                             *parentFolderId, entryId, EFSMsgDataEnvelope ) );
  1919                                             *parentFolderId, entryId, EFSMsgDataEnvelope ) );
  1878                     if ( confirmedMsgPtr && err == KErrNone )
  1920                     if ( confirmedMsgPtr && err == KErrNone )
  1879                         {
  1921                         {
  1880                         CleanupStack::PushL( confirmedMsgPtr );
  1922                         CleanupStack::PushL( confirmedMsgPtr );
  1881                         UpdateMsgIconAndBoldingL( confirmedMsgPtr );
  1923                         UpdateMsgIconAndBoldingL( confirmedMsgPtr );
  1882                         CleanupStack::PopAndDestroy( confirmedMsgPtr ); 
  1924                         CleanupStack::PopAndDestroy( confirmedMsgPtr );
  1883                         }
  1925                         }
  1884                     }
  1926                     }
  1885                 }
  1927                 }
  1886             }
  1928             }
  1887         }
  1929         }
  1889 
  1931 
  1890 // ---------------------------------------------------------------------------
  1932 // ---------------------------------------------------------------------------
  1891 // RemoveMsgItemsFromListIfFoundL
  1933 // RemoveMsgItemsFromListIfFoundL
  1892 // Message removing from list if found. Does not panic or return found status.
  1934 // Message removing from list if found. Does not panic or return found status.
  1893 // ---------------------------------------------------------------------------
  1935 // ---------------------------------------------------------------------------
  1894 //	
  1936 //
  1895 void CFSEmailUiSearchListVisualiser::RemoveMsgItemsFromListIfFoundL( const RArray<TFSMailMsgId>& aEntryIds )
  1937 void CFSEmailUiSearchListVisualiser::RemoveMsgItemsFromListIfFoundL( const RArray<TFSMailMsgId>& aEntryIds )
  1896 	{
  1938 	{
  1897     FUNC_LOG;
  1939     FUNC_LOG;
  1898 	if ( iModel && iModel->Count() )
  1940 	if ( iModel && iModel->Count() )
  1899 		{
  1941 		{
  1903 	    	if ( !entryId.IsNullId() )
  1945 	    	if ( !entryId.IsNullId() )
  1904 	    		{
  1946 	    		{
  1905 	        	TInt idx = ItemIndexFromMessageId( entryId );
  1947 	        	TInt idx = ItemIndexFromMessageId( entryId );
  1906 	        	if ( idx >= 0 )
  1948 	        	if ( idx >= 0 )
  1907 	        	    {
  1949 	        	    {
  1908 	    			iSearchList->RemoveL( iSearchListItemArray[idx].iSearchListItemId ); // remove from list			
  1950 	    			iSearchList->RemoveL( iSearchListItemArray[idx].iSearchListItemId ); // remove from list
  1909 	    			iSearchListItemArray.Remove( idx ); // remove from internal array.		 				 	
  1951 	    			iSearchListItemArray.Remove( idx ); // remove from internal array.
  1910 	    	 		iModel->RemoveAndDestroy( idx ); // Remove from model
  1952 	    	 		iModel->RemoveAndDestroy( idx ); // Remove from model
  1911 	        	    }    	
  1953 	        	    }
  1912 	    		}
  1954 	    		}
  1913 		    }					
  1955 		    }
  1914 		}
  1956 		}
  1915 	}
  1957 	}
  1916 
  1958 
  1917 // ---------------------------------------------------------------------------
  1959 // ---------------------------------------------------------------------------
  1918 // UpdatePreviewPaneTextForItemL
  1960 // UpdatePreviewPaneTextForItemL
  1921 //
  1963 //
  1922 void CFSEmailUiSearchListVisualiser::UpdatePreviewPaneTextForItemL(CFsTreePlainTwoLineItemData* aItemData, CFSMailMessage* aMsgPtr  )
  1964 void CFSEmailUiSearchListVisualiser::UpdatePreviewPaneTextForItemL(CFsTreePlainTwoLineItemData* aItemData, CFSMailMessage* aMsgPtr  )
  1923 	{
  1965 	{
  1924     FUNC_LOG;
  1966     FUNC_LOG;
  1925 	// Preview pane data update
  1967 	// Preview pane data update
  1926 	if ( aMsgPtr && ( iListMode == EListControlTypeSingleLinePreviewOn || 
  1968 	if ( aMsgPtr && ( iListMode == EListControlTypeSingleLinePreviewOn ||
  1927 		 iListMode == EListControlTypeDoubleLinePreviewOn ) )
  1969 		 iListMode == EListControlTypeDoubleLinePreviewOn ) )
  1928 		{
  1970 		{
  1929 		CFSMailMessagePart* textPart = aMsgPtr->PlainTextBodyPartL();
  1971 		CFSMailMessagePart* textPart = aMsgPtr->PlainTextBodyPartL();
  1930 		CleanupStack::PushL( textPart );
  1972 		CleanupStack::PushL( textPart );
  1931 		if ( textPart && ( textPart->FetchLoadState() == EFSPartial ||
  1973 		if ( textPart && ( textPart->FetchLoadState() == EFSPartial ||
  1933 			{
  1975 			{
  1934             TInt previewSize = Min( KMaxPreviewPaneLength, textPart->FetchedContentSize() );
  1976             TInt previewSize = Min( KMaxPreviewPaneLength, textPart->FetchedContentSize() );
  1935             HBufC* plainTextData16 = HBufC::NewLC( previewSize );
  1977             HBufC* plainTextData16 = HBufC::NewLC( previewSize );
  1936             TPtr textPtr = plainTextData16->Des();
  1978             TPtr textPtr = plainTextData16->Des();
  1937 
  1979 
  1938             textPart->GetContentToBufferL( textPtr, 0 ); // Zero is start offset                
  1980             textPart->GetContentToBufferL( textPtr, 0 ); // Zero is start offset
  1939             // Crop out line feed, paragraph break, and tabulator           
  1981             // Crop out line feed, paragraph break, and tabulator
  1940             TFsEmailUiUtility::FilterListItemTextL( textPtr );
  1982             TFsEmailUiUtility::FilterListItemTextL( textPtr );
  1941             aItemData->SetPreviewPaneDataL( *plainTextData16 );
  1983             aItemData->SetPreviewPaneDataL( *plainTextData16 );
  1942 
  1984 
  1943             CleanupStack::PopAndDestroy( plainTextData16 );                     
  1985             CleanupStack::PopAndDestroy( plainTextData16 );
  1944 			}
  1986 			}
  1945 
  1987 
  1946 		// Else display message size in preview pane
  1988 		// Else display message size in preview pane
  1947 		else
  1989 		else
  1948 			{
  1990 			{
  1949 			TUint contentSize = aMsgPtr->ContentSize();
  1991 			TUint contentSize = aMsgPtr->ContentSize();
  1950 			HBufC* sizeDesc = TFsEmailUiUtility::CreateSizeDescLC( contentSize );
  1992 			HBufC* sizeDesc = TFsEmailUiUtility::CreateSizeDescLC( contentSize );
  1951 			HBufC* msgSizeText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_PREV_PANE_MSG_SIZE, *sizeDesc );
  1993 			HBufC* msgSizeText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_PREV_PANE_MSG_SIZE, *sizeDesc );
  1952 			aItemData->SetPreviewPaneDataL( *msgSizeText ); 				
  1994 			aItemData->SetPreviewPaneDataL( *msgSizeText );
  1953 			CleanupStack::PopAndDestroy( msgSizeText );
  1995 			CleanupStack::PopAndDestroy( msgSizeText );
  1954 			CleanupStack::PopAndDestroy( sizeDesc );
  1996 			CleanupStack::PopAndDestroy( sizeDesc );
  1955 			}
  1997 			}
  1956 		CleanupStack::PopAndDestroy( textPart );
  1998 		CleanupStack::PopAndDestroy( textPart );
  1957 		}
  1999 		}
  1963 	iSearchOngoing = EFalse;
  2005 	iSearchOngoing = EFalse;
  1964 	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
  2006 	HBufC* searchText = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_FIND_DLG_SEARCH_RESULTS );
  1965 	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
  2007 	HBufC* finalText = HBufC::NewLC( searchText->Length() + iLatestSearchText->Length() + 4 );
  1966 	finalText->Des().Append( *searchText );
  2008 	finalText->Des().Append( *searchText );
  1967 	finalText->Des().Append( KSpace );
  2009 	finalText->Des().Append( KSpace );
  1968 	finalText->Des().Append( *iLatestSearchText );			
  2010 	finalText->Des().Append( *iLatestSearchText );
  1969 	iBarTextVisual->SetTextL( *finalText );		
  2011 	iBarTextVisual->SetTextL( *finalText );
  1970 	CleanupStack::PopAndDestroy( finalText );
  2012 	CleanupStack::PopAndDestroy( finalText );
  1971 	CleanupStack::PopAndDestroy( searchText );	
  2013 	CleanupStack::PopAndDestroy( searchText );
       
  2014 	iRequiredSearchPriority = KStandardSearchPriority; //<cmail> return back
  1972 	}
  2015 	}
  1973 
  2016 
  1974 
  2017 
  1975 void CFSEmailUiSearchListVisualiser::ChangeReadStatusOfHighlightedL( TInt aRead )
  2018 void CFSEmailUiSearchListVisualiser::ChangeReadStatusOfHighlightedL( TInt aRead )
  1976 	{
  2019 	{
  1977     FUNC_LOG;
  2020     FUNC_LOG;
  1978 	if ( iSearchList->Count() )
  2021 	if ( iSearchList->Count() )
  1979 		{
  2022 		{
  1980 		CFSEmailUiMailListModelItem* selectedItem = 
  2023 		CFSEmailUiMailListModelItem* selectedItem =
  1981 	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
  2024 	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ));
  1982 	 		
  2025 
  1983 	 	TBool wasRead = selectedItem->MessagePtr().IsFlagSet( EFSMsgFlag_Read );
  2026 	 	TBool wasRead = selectedItem->MessagePtr().IsFlagSet( EFSMsgFlag_Read );
  1984 	 	if ( (wasRead && !aRead) || (!wasRead && aRead) )
  2027 	 	if ( (wasRead && !aRead) || (!wasRead && aRead) )
  1985 	 	    {
  2028 	 	    {
  1986 	 	    // Read status is changed
  2029 	 	    // Read status is changed
  1987 	 	    iMsgDataCouldBeChanged = ETrue;
  2030 	 	    iMsgDataCouldBeChanged = ETrue;
  1999     		selectedItem->MessagePtr().SaveMessageL();	// Save flag
  2042     		selectedItem->MessagePtr().SaveMessageL();	// Save flag
  2000     		// Switch icon to correct one
  2043     		// Switch icon to correct one
  2001     		UpdateMsgIconAndBoldingL( HighlightedIndex() );
  2044     		UpdateMsgIconAndBoldingL( HighlightedIndex() );
  2002 	 	    }
  2045 	 	    }
  2003 		}
  2046 		}
  2004 	} 
  2047 	}
  2005 	
  2048 
  2006 void CFSEmailUiSearchListVisualiser::CheckAndUpdateFocusedMessageL()
  2049 void CFSEmailUiSearchListVisualiser::CheckAndUpdateFocusedMessageL()
  2007 	{
  2050 	{
  2008     FUNC_LOG;
  2051     FUNC_LOG;
  2009 	if ( iModel && iModel->Count() ) // Needed safety check
  2052 	if ( iModel && iModel->Count() ) // Needed safety check
  2010 		{
  2053 		{
  2011 		TInt highlightedIndex = HighlightedIndex();
  2054 		TInt highlightedIndex = HighlightedIndex();
  2012 		CFSEmailUiMailListModelItem* selectedItem = 
  2055 		CFSEmailUiMailListModelItem* selectedItem =
  2013 	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( highlightedIndex ));	
  2056 	 		static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( highlightedIndex ));
  2014 		if ( selectedItem->ModelItemType() == ETypeMailItem )
  2057 		if ( selectedItem->ModelItemType() == ETypeMailItem )
  2015 			{
  2058 			{
  2016 			CFSMailMessage* msgPtr = &selectedItem->MessagePtr();		
  2059 			CFSMailMessage* msgPtr = &selectedItem->MessagePtr();
  2017 			if ( msgPtr )
  2060 			if ( msgPtr )
  2018 				{
  2061 				{
  2019 				CFSMailFolder* folderPtr = 
  2062 				CFSMailFolder* folderPtr =
  2020 				    iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), msgPtr->GetFolderId() );
  2063 				    iAppUi.GetMailClient()->GetFolderByUidL( iAppUi.GetActiveMailboxId(), msgPtr->GetFolderId() );
  2021 				CleanupStack::PushL( folderPtr );
  2064 				CleanupStack::PushL( folderPtr );
  2022 
  2065 
  2023 	    		if ( !folderPtr )
  2066 	    		if ( !folderPtr )
  2024 	    			{
  2067 	    			{
  2025 	    			// Pointer is not valid anymore, msg has been delete,
  2068 	    			// Pointer is not valid anymore, msg has been delete,
  2026 	    			// so it must be removed from the search list
  2069 	    			// so it must be removed from the search list
  2027 	    			RemoveFocusedFromListL();    			
  2070 	    			RemoveFocusedFromListL();
  2028 	    			}
  2071 	    			}
  2029 	    		else 
  2072 	    		else
  2030 	    			{
  2073 	    			{
  2031 	    			CFSMailMessage* confirmedMsgPtr(0);
  2074 	    			CFSMailMessage* confirmedMsgPtr(0);
  2032 	    			TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(), 
  2075 	    			TRAPD( err, confirmedMsgPtr = iAppUi.GetMailClient()->GetMessageByUidL( iAppUi.GetActiveMailboxId(),
  2033 	    										folderPtr->GetFolderId(), msgPtr->GetMessageId(), EFSMsgDataEnvelope ) );
  2076 	    										folderPtr->GetFolderId(), msgPtr->GetMessageId(), EFSMsgDataEnvelope ) );
  2034 	    			if ( confirmedMsgPtr && err == KErrNone)
  2077 	    			if ( confirmedMsgPtr && err == KErrNone)
  2035 	    				{
  2078 	    				{
  2036 	    				CleanupStack::PushL( confirmedMsgPtr );
  2079 	    				CleanupStack::PushL( confirmedMsgPtr );
  2037 	    				UpdateMsgIconAndBoldingL( confirmedMsgPtr );
  2080 	    				UpdateMsgIconAndBoldingL( confirmedMsgPtr );
  2038 	    				CleanupStack::PopAndDestroy( confirmedMsgPtr );	
  2081 	    				CleanupStack::PopAndDestroy( confirmedMsgPtr );
  2039 	    				}
  2082 	    				}
  2040 	    			else
  2083 	    			else
  2041 	    				{
  2084 	    				{
  2042 	    				RemoveFocusedFromListL();	
  2085 	    				RemoveFocusedFromListL();
  2043 	    				}
  2086 	    				}
  2044 	    			}
  2087 	    			}
  2045 	    			
  2088 
  2046 	    		CleanupStack::PopAndDestroy( folderPtr );
  2089 	    		CleanupStack::PopAndDestroy( folderPtr );
  2047 				}
  2090 				}
  2048 			}		
  2091 			}
  2049 		}
  2092 		}
  2050 	}
  2093 	}
  2051 
  2094 
  2052 void CFSEmailUiSearchListVisualiser::RemoveFocusedFromListL()
  2095 void CFSEmailUiSearchListVisualiser::RemoveFocusedFromListL()
  2053 	{
  2096 	{
  2054     FUNC_LOG;
  2097     FUNC_LOG;
  2055 	iMsgDataCouldBeChanged = ETrue;
  2098 	iMsgDataCouldBeChanged = ETrue;
  2056 	SSearchListItem item;
  2099 	SSearchListItem item;
  2057 	item.iSearchListItemId = iSearchList->FocusedItem();
  2100 	item.iSearchListItemId = iSearchList->FocusedItem();
  2058 	TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );								
  2101 	TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );
  2059 	iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.		 				 	
  2102 	iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.
  2060 	iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model												
  2103 	iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model
  2061 	iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list						
  2104 	iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list
  2062 	}
  2105 	}
  2063 
  2106 
  2064 
  2107 
  2065 // Updates our own message object with the data from a given message object.
  2108 // Updates our own message object with the data from a given message object.
  2066 // The messages are matched with the message ID.
  2109 // The messages are matched with the message ID.
  2071 		{
  2114 		{
  2072 		for ( TInt i=0 ; i < iModel->Count() ; i++)
  2115 		for ( TInt i=0 ; i < iModel->Count() ; i++)
  2073 			{
  2116 			{
  2074 			CFSEmailUiMailListModelItem* item =
  2117 			CFSEmailUiMailListModelItem* item =
  2075 				static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(i) );
  2118 				static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(i) );
  2076 			if ( item && item->ModelItemType()==ETypeMailItem && 
  2119 			if ( item && item->ModelItemType()==ETypeMailItem &&
  2077 				 item->MessagePtr().GetMessageId() == aMsgPtr->GetMessageId() )
  2120 				 item->MessagePtr().GetMessageId() == aMsgPtr->GetMessageId() )
  2078 				{
  2121 				{
  2079 				// Update all flags
  2122 				// Update all flags
  2080 				TUint32 prevFlags = item->MessagePtr().GetFlags();
  2123 				TUint32 prevFlags = item->MessagePtr().GetFlags();
  2081 				TUint32 newFlags = aMsgPtr->GetFlags();
  2124 				TUint32 newFlags = aMsgPtr->GetFlags();
  2082 				if ( prevFlags != newFlags )
  2125 				if ( prevFlags != newFlags )
  2083 				    {
  2126 				    {
  2084     				item->MessagePtr().ResetFlag( prevFlags );
  2127     				item->MessagePtr().ResetFlag( prevFlags );
  2085     				item->MessagePtr().SetFlag( newFlags );
  2128     				item->MessagePtr().SetFlag( newFlags );
  2086     				
  2129 
  2087     				// Save changed flags in internal model array					
  2130     				// Save changed flags in internal model array
  2088     				item->MessagePtr().SaveMessageL();
  2131     				item->MessagePtr().SaveMessageL();
  2089     				iMsgDataCouldBeChanged = ETrue;
  2132     				iMsgDataCouldBeChanged = ETrue;
  2090 				    }
  2133 				    }
  2091 				
  2134 
  2092 				// Update the list item graphics
  2135 				// Update the list item graphics
  2093 				UpdateMsgIconAndBoldingL( i );
  2136 				UpdateMsgIconAndBoldingL( i );
  2094 				break;
  2137 				break;
  2095 				}
  2138 				}
  2096 			}
  2139 			}
  2106 	    CFSEmailUiMailListModelItem* item =
  2149 	    CFSEmailUiMailListModelItem* item =
  2107 		    static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(aListIndex) );
  2150 		    static_cast<CFSEmailUiMailListModelItem*>( Model()->Item(aListIndex) );
  2108 	    if ( item && item->ModelItemType()==ETypeMailItem )
  2151 	    if ( item && item->ModelItemType()==ETypeMailItem )
  2109 		    {
  2152 		    {
  2110 		    CFSMailMessage* msgPtr = &item->MessagePtr();
  2153 		    CFSMailMessage* msgPtr = &item->MessagePtr();
  2111 		    CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( msgPtr, *iAppUi.FsTextureManager() );	
  2154 		    CAlfTexture* itemTexture = &TFsEmailUiUtility::GetMsgIcon( msgPtr, *iAppUi.FsTextureManager() );
  2112 		    CFsTreePlainTwoLineItemData* itemData = 
  2155 		    CFsTreePlainTwoLineItemData* itemData =
  2113                 static_cast<CFsTreePlainTwoLineItemData*>( iSearchListItemArray[aListIndex].iTreeItemData );
  2156                 static_cast<CFsTreePlainTwoLineItemData*>( iSearchListItemArray[aListIndex].iTreeItemData );
  2114 		    CFsTreePlainTwoLineItemVisualizer* itemVis = 
  2157 		    CFsTreePlainTwoLineItemVisualizer* itemVis =
  2115                 static_cast<CFsTreePlainTwoLineItemVisualizer*>( iSearchListItemArray[aListIndex].iTreeItemVisualiser );			
  2158                 static_cast<CFsTreePlainTwoLineItemVisualizer*>( iSearchListItemArray[aListIndex].iTreeItemVisualiser );
  2116 		    itemData->SetIcon( *itemTexture );		
  2159 		    itemData->SetIcon( *itemTexture );
  2117 		    if ( msgPtr->IsFlagSet( EFSMsgFlag_Read ) )
  2160 		    if ( msgPtr->IsFlagSet( EFSMsgFlag_Read ) )
  2118 			    {			
  2161 			    {
  2119 			    itemVis->SetTextBold( EFalse );
  2162 			    itemVis->SetTextBold( EFalse );
  2120 			    }
  2163 			    }
  2121 		    else
  2164 		    else
  2122 			   {	
  2165 			   {
  2123 			   itemVis->SetTextBold( ETrue );
  2166 			   itemVis->SetTextBold( ETrue );
  2124 			   }
  2167 			   }
  2125 		    // Set follow up flag icon correctly
  2168 		    // Set follow up flag icon correctly
  2126 		    if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
  2169 		    if ( TFsEmailUiUtility::IsFollowUpSupported( *iAppUi.GetActiveMailbox() ) )
  2127 			    {
  2170 			    {
  2128 			    if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
  2171 			    if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUp ) )
  2129 				    {
  2172 				    {
  2130 			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
  2173 			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagList ) );
  2131 				    itemVis->SetFlagIconVisible( ETrue );		 		
  2174 				    itemVis->SetFlagIconVisible( ETrue );
  2132 				    }
  2175 				    }
  2133 			    else if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
  2176 			    else if ( msgPtr->IsFlagSet( EFSMsgFlag_FollowUpComplete ) )
  2134 				    {
  2177 				    {
  2135 			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
  2178 			 	    itemData->SetFlagIcon( iAppUi.FsTextureManager()->TextureByIndex( EFollowUpFlagCompleteList ) );
  2136 				    itemVis->SetFlagIconVisible( ETrue );				 		
  2179 				    itemVis->SetFlagIconVisible( ETrue );
  2137 				    }
  2180 				    }
  2138 			    else
  2181 			    else
  2139 				    {
  2182 				    {
  2140 		 	        itemVis->SetFlagIconVisible( EFalse );			
  2183 		 	        itemVis->SetFlagIconVisible( EFalse );
  2141 				    }		
  2184 				    }
  2142 			    }
  2185 			    }
  2143 		    else
  2186 		    else
  2144 		        {
  2187 		        {
  2145 		        itemVis->SetFlagIconVisible( EFalse );
  2188 		        itemVis->SetFlagIconVisible( EFalse );
  2146 		        }		    
  2189 		        }
  2147 		    iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[aListIndex].iSearchListItemId );
  2190 		    iSearchTreeListVisualizer->UpdateItemL( iSearchListItemArray[aListIndex].iSearchListItemId );
  2148 		    }
  2191 		    }
  2149     	}
  2192     	}
  2150     }
  2193     }
  2151     
  2194 
  2152 
  2195 
  2153 // Delete messages 
  2196 // Delete messages
  2154 void CFSEmailUiSearchListVisualiser::DeleteFocusedMessageL()
  2197 void CFSEmailUiSearchListVisualiser::DeleteFocusedMessageL()
  2155 	{
  2198 	{
  2156     FUNC_LOG;
  2199     FUNC_LOG;
  2157 	if ( iSearchList->Count() )
  2200 	if ( iSearchList->Count() )
  2158 		{
  2201 		{
  2177             if ( iAppUi.GetCRHandler()->WarnBeforeDelete() )
  2220             if ( iAppUi.GetCRHandler()->WarnBeforeDelete() )
  2178                {
  2221                {
  2179                okToDelete = TFsEmailUiUtility::ShowConfirmationQueryL( queryTextId, *msgSubject );
  2222                okToDelete = TFsEmailUiUtility::ShowConfirmationQueryL( queryTextId, *msgSubject );
  2180                }
  2223                }
  2181             CleanupStack::PopAndDestroy( msgSubject );
  2224             CleanupStack::PopAndDestroy( msgSubject );
  2182 			
  2225 
  2183 			if ( okToDelete )
  2226 			if ( okToDelete )
  2184  				{
  2227  				{
  2185  				iMsgDataCouldBeChanged = ETrue; // Refresh
  2228  				iMsgDataCouldBeChanged = ETrue; // Refresh
  2186  				// Delete message from framework, and perform internal housekeeping
  2229  				// Delete message from framework, and perform internal housekeeping
  2187  				TFSMailMsgId msgId = messagePtr.GetMessageId();					
  2230  				TFSMailMsgId msgId = messagePtr.GetMessageId();
  2188  				RArray<TFSMailMsgId> msgIds;
  2231  				RArray<TFSMailMsgId> msgIds;
  2189  				msgIds.Append( msgId ); 			
  2232  				msgIds.Append( msgId );
  2190 				TFSMailMsgId folderId = messagePtr.GetFolderId();
  2233 				TFSMailMsgId folderId = messagePtr.GetFolderId();
  2191 				TFSMailMsgId mailBox = iAppUi.GetActiveMailbox()->GetId(); 
  2234 				TFSMailMsgId mailBox = iAppUi.GetActiveMailbox()->GetId();
  2192 				iAppUi.GetMailClient()->DeleteMessagesByUidL( mailBox, folderId, msgIds );			
  2235 				iAppUi.GetMailClient()->DeleteMessagesByUidL( mailBox, folderId, msgIds );
  2193 	 			msgIds.Reset();						
  2236 	 			msgIds.Reset();
  2194 				SSearchListItem item;
  2237 				SSearchListItem item;
  2195 				item.iSearchListItemId = iSearchList->FocusedItem();
  2238 				item.iSearchListItemId = iSearchList->FocusedItem();
  2196 				TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );								
  2239 				TInt IndexToBeDestroyed = iSearchListItemArray.Find( item );
  2197 				iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.		 				 	
  2240 				iSearchListItemArray.Remove( IndexToBeDestroyed ); // remove from internal array.
  2198 		 		iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model												
  2241 		 		iModel->RemoveAndDestroy( IndexToBeDestroyed ); // Remove from model
  2199 				iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list			
  2242 				iSearchList->RemoveL( iSearchList->FocusedItem() );		// remove from list
  2200 				}					
  2243 				}
  2201 			}
  2244 			}
  2202 		}			
  2245 		}
  2203 	}
  2246 	}
  2204 
  2247 
  2205 
  2248 
  2206 // Navigation functions, used mainly from viewer
  2249 // Navigation functions, used mainly from viewer
  2207 TBool CFSEmailUiSearchListVisualiser::IsNextMsgAvailable( TFSMailMsgId aCurrentMsgId, 
  2250 TBool CFSEmailUiSearchListVisualiser::IsNextMsgAvailable( TFSMailMsgId aCurrentMsgId,
  2208 														  TFSMailMsgId& aFoundNextMsgId,
  2251 														  TFSMailMsgId& aFoundNextMsgId,
  2209 														  TFSMailMsgId& aFoundNextMsgFolderId ) const
  2252 														  TFSMailMsgId& aFoundNextMsgFolderId ) const
  2210 	{
  2253 	{
  2211     FUNC_LOG;
  2254     FUNC_LOG;
  2212 	TBool ret(EFalse);
  2255 	TBool ret(EFalse);
  2217 	    TInt nextIdx = NextMessageIndex(curIdx);
  2260 	    TInt nextIdx = NextMessageIndex(curIdx);
  2218 	    if ( nextIdx >= 0 )
  2261 	    if ( nextIdx >= 0 )
  2219 	        {
  2262 	        {
  2220 	        ret = ETrue;
  2263 	        ret = ETrue;
  2221 	        aFoundNextMsgId = MsgIdFromIndex(nextIdx);
  2264 	        aFoundNextMsgId = MsgIdFromIndex(nextIdx);
  2222 	        CFSEmailUiMailListModelItem* item = 
  2265 	        CFSEmailUiMailListModelItem* item =
  2223     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( nextIdx ));
  2266     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( nextIdx ));
  2224     		if ( item->ModelItemType() == ETypeMailItem )
  2267     		if ( item->ModelItemType() == ETypeMailItem )
  2225     	  	  {
  2268     	  	  {
  2226     	 	   aFoundNextMsgFolderId = item->MessagePtr().GetFolderId();
  2269     	 	   aFoundNextMsgFolderId = item->MessagePtr().GetFolderId();
  2227     	 	   }	        
  2270     	 	   }
  2228 	        }
  2271 	        }
  2229 	    }
  2272 	    }
  2230 		
  2273 
  2231 	return ret;
  2274 	return ret;
  2232 	}
  2275 	}
  2233 
  2276 
  2234 
  2277 
  2235 TBool CFSEmailUiSearchListVisualiser::IsPreviousMsgAvailable( TFSMailMsgId aCurrentMsgId, 
  2278 TBool CFSEmailUiSearchListVisualiser::IsPreviousMsgAvailable( TFSMailMsgId aCurrentMsgId,
  2236 														  	  TFSMailMsgId& aFoundPreviousMsgId,
  2279 														  	  TFSMailMsgId& aFoundPreviousMsgId,
  2237 														  	  TFSMailMsgId& aFoundPrevMsgFolderId ) const
  2280 														  	  TFSMailMsgId& aFoundPrevMsgFolderId ) const
  2238 	{
  2281 	{
  2239     FUNC_LOG;
  2282     FUNC_LOG;
  2240 	TBool ret(EFalse);
  2283 	TBool ret(EFalse);
  2241 	
  2284 
  2242 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2285 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2243 	if ( curIdx >= 0 )
  2286 	if ( curIdx >= 0 )
  2244 	    {
  2287 	    {
  2245 	    TInt prevIdx = PreviousMessageIndex(curIdx);
  2288 	    TInt prevIdx = PreviousMessageIndex(curIdx);
  2246 	    if ( prevIdx >= 0 )
  2289 	    if ( prevIdx >= 0 )
  2247 	        {
  2290 	        {
  2248 	        ret = ETrue;
  2291 	        ret = ETrue;
  2249 	        aFoundPreviousMsgId = MsgIdFromIndex(prevIdx);
  2292 	        aFoundPreviousMsgId = MsgIdFromIndex(prevIdx);
  2250 	     	CFSEmailUiMailListModelItem* item = 
  2293 	     	CFSEmailUiMailListModelItem* item =
  2251     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( prevIdx ));
  2294     			static_cast<CFSEmailUiMailListModelItem*>(iModel->Item( prevIdx ));
  2252     		if ( item->ModelItemType() == ETypeMailItem )
  2295     		if ( item->ModelItemType() == ETypeMailItem )
  2253     	  	  {
  2296     	  	  {
  2254     	 	   aFoundPrevMsgFolderId = item->MessagePtr().GetFolderId();
  2297     	 	   aFoundPrevMsgFolderId = item->MessagePtr().GetFolderId();
  2255     	 	   }   
  2298     	 	   }
  2256 	        }
  2299 	        }
  2257 	    }
  2300 	    }
  2258 				
  2301 
  2259     return ret;
  2302     return ret;
  2260 	}
  2303 	}
  2261 
  2304 
  2262 TInt CFSEmailUiSearchListVisualiser::MoveToNextMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId )
  2305 TInt CFSEmailUiSearchListVisualiser::MoveToNextMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId )
  2263 	{
  2306 	{
  2264     FUNC_LOG;
  2307     FUNC_LOG;
  2265 	TInt ret(KErrNotFound);
  2308 	TInt ret(KErrNotFound);
  2266 	
  2309 
  2267 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2310 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2268 	TInt nextIdx = NextMessageIndex( curIdx );
  2311 	TInt nextIdx = NextMessageIndex( curIdx );
  2269 	
  2312 
  2270 	if ( curIdx >= 0 && nextIdx >= 0 )
  2313 	if ( curIdx >= 0 && nextIdx >= 0 )
  2271 	    {
  2314 	    {
  2272 	    // Focus the new message
  2315 	    // Focus the new message
  2273 	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[nextIdx].iSearchListItemId );
  2316 	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[nextIdx].iSearchListItemId );
  2274 	    ChangeReadStatusOfHighlightedL( ETrue );
  2317 	    ChangeReadStatusOfHighlightedL( ETrue );
  2276 	    ret = KErrNone;
  2319 	    ret = KErrNone;
  2277 	    }
  2320 	    }
  2278 	if ( ret == KErrNone )
  2321 	if ( ret == KErrNone )
  2279 		{
  2322 		{
  2280 		OpenHighlightedMailL();
  2323 		OpenHighlightedMailL();
  2281 		}		
  2324 		}
  2282 	return ret;
  2325 	return ret;
  2283 	}
  2326 	}
  2284 
  2327 
  2285 TInt CFSEmailUiSearchListVisualiser::MoveToPreviousMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId )
  2328 TInt CFSEmailUiSearchListVisualiser::MoveToPreviousMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId )
  2286 	{
  2329 	{
  2287     FUNC_LOG;
  2330     FUNC_LOG;
  2288 	TInt ret(KErrNotFound);
  2331 	TInt ret(KErrNotFound);
  2289 	
  2332 
  2290 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2333 	TInt curIdx = ItemIndexFromMessageId( aCurrentMsgId );
  2291 	TInt prevIdx = PreviousMessageIndex( curIdx );
  2334 	TInt prevIdx = PreviousMessageIndex( curIdx );
  2292 	
  2335 
  2293 	if ( curIdx >= 0 && prevIdx >= 0 )
  2336 	if ( curIdx >= 0 && prevIdx >= 0 )
  2294 	    {
  2337 	    {
  2295 	    // Focus the new message
  2338 	    // Focus the new message
  2296 	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[prevIdx].iSearchListItemId );
  2339 	    iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[prevIdx].iSearchListItemId );
  2297 	    ChangeReadStatusOfHighlightedL( ETrue );
  2340 	    ChangeReadStatusOfHighlightedL( ETrue );
  2298         aFoundPreviousMsgId = MsgIdFromIndex( prevIdx );
  2341         aFoundPreviousMsgId = MsgIdFromIndex( prevIdx );
  2299 	    ret = KErrNone;
  2342 	    ret = KErrNone;
  2300 	    }
  2343 	    }
  2301 	
  2344 
  2302 	if ( ret == KErrNone )
  2345 	if ( ret == KErrNone )
  2303 		{
  2346 		{
  2304 		OpenHighlightedMailL();
  2347 		OpenHighlightedMailL();
  2305 		}		
  2348 		}
  2306 	return ret;
  2349 	return ret;
  2307 	}
  2350 	}
  2308 
  2351 
  2309 TInt CFSEmailUiSearchListVisualiser::MoveToPreviousMsgAfterDeleteL( TFSMailMsgId aFoundPreviousMsgId )
  2352 TInt CFSEmailUiSearchListVisualiser::MoveToPreviousMsgAfterDeleteL( TFSMailMsgId aFoundPreviousMsgId )
  2310 	{
  2353 	{
  2311 	FUNC_LOG;
  2354 	FUNC_LOG;
  2312 	TInt ret(KErrNotFound);	
  2355 	TInt ret(KErrNotFound);
  2313 	
  2356 
  2314 	TInt idx = ItemIndexFromMessageId( aFoundPreviousMsgId );	
  2357 	TInt idx = ItemIndexFromMessageId( aFoundPreviousMsgId );
  2315 	if ( idx >= 0 )
  2358 	if ( idx >= 0 )
  2316 		{		
  2359 		{
  2317 		// Focus the previous message
  2360 		// Focus the previous message
  2318 		iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[idx].iSearchListItemId );
  2361 		iSearchTreeListVisualizer->SetFocusedItemL( iSearchListItemArray[idx].iSearchListItemId );
  2319 		ChangeReadStatusOfHighlightedL( ETrue );
  2362 		ChangeReadStatusOfHighlightedL( ETrue );
  2320 		ret = KErrNone;		
  2363 		ret = KErrNone;
  2321 		}
  2364 		}
  2322 
  2365 
  2323 	if ( ret == KErrNone )
  2366 	if ( ret == KErrNone )
  2324 		{
  2367 		{
  2325 		OpenHighlightedMailL();
  2368 		OpenHighlightedMailL();
  2326 		}
  2369 		}
  2327 	
  2370 
  2328 	return ret;
  2371 	return ret;
  2329 	}
  2372 	}
  2330 
  2373 
  2331 	// Helper functions to get highlighted message id and folder id
  2374 	// Helper functions to get highlighted message id and folder id
  2332 TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageFolderId()
  2375 TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageFolderId()
  2333 	{
  2376 	{
  2334     FUNC_LOG;
  2377     FUNC_LOG;
  2335 	TFSMailMsgId ret;
  2378 	TFSMailMsgId ret;
  2336  	if ( iSearchList->Count() && iModel )
  2379  	if ( iSearchList->Count() && iModel )
  2337 		{
  2380 		{
  2338 	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
  2381 	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
  2339 		if ( item && item->ModelItemType() == ETypeMailItem )
  2382 		if ( item && item->ModelItemType() == ETypeMailItem )
  2340 			{
  2383 			{
  2341 			ret = item->MessagePtr().GetFolderId();
  2384 			ret = item->MessagePtr().GetFolderId();
  2342 			}			
  2385 			}
  2343 		}
  2386 		}
  2344 	return ret;
  2387 	return ret;
  2345 	}
  2388 	}
  2346 
  2389 
  2347 TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageId()
  2390 TFSMailMsgId CFSEmailUiSearchListVisualiser::HighlightedMessageId()
  2348 	{
  2391 	{
  2349     FUNC_LOG;
  2392     FUNC_LOG;
  2350 	TFSMailMsgId ret;
  2393 	TFSMailMsgId ret;
  2351 	if ( iSearchList->Count() && iModel )
  2394 	if ( iSearchList->Count() && iModel )
  2352 		{
  2395 		{
  2353 	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
  2396 	  	CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
  2354 		if ( item && item->ModelItemType() == ETypeMailItem )
  2397 		if ( item && item->ModelItemType() == ETypeMailItem )
  2355 			{
  2398 			{
  2356 			ret = item->MessagePtr().GetMessageId();
  2399 			ret = item->MessagePtr().GetMessageId();
  2357 			}		
  2400 			}
  2358 		}
  2401 		}
  2359 	return ret;
  2402 	return ret;
  2360 	}
  2403 	}
  2361 
  2404 
  2362 
  2405 
  2364 // ---------------------------------------------------------------------------
  2407 // ---------------------------------------------------------------------------
  2365 // CFSEmailUiSearchListVisualiser::TreeListEventL
  2408 // CFSEmailUiSearchListVisualiser::TreeListEventL
  2366 // From MFsTreeListObserver
  2409 // From MFsTreeListObserver
  2367 // ---------------------------------------------------------------------------
  2410 // ---------------------------------------------------------------------------
  2368 //
  2411 //
  2369 void CFSEmailUiSearchListVisualiser::TreeListEventL( const TFsTreeListEvent aEvent, const TFsTreeItemId /*aId*/ )
  2412 void CFSEmailUiSearchListVisualiser::TreeListEventL( const TFsTreeListEvent aEvent,
       
  2413                                                      const TFsTreeItemId /*aId*/,
       
  2414                                                      const TPoint& aPoint )
  2370     {
  2415     {
  2371     FUNC_LOG;
  2416     FUNC_LOG;
  2372     
  2417 
  2373     switch(aEvent)
  2418     switch(aEvent)
  2374         {
  2419         {
  2375         case MFsTreeListObserver::EFsTreeListItemTouchAction:
  2420         case MFsTreeListObserver::EFsTreeListItemTouchAction:
  2376             DoHandleActionL(); 
  2421             DoHandleActionL();
  2377             break; 
  2422             break;
  2378         case MFsTreeListObserver::EFsTreeListItemTouchLongTap:
  2423         case MFsTreeListObserver::EFsTreeListItemTouchLongTap:
  2379             if ( iSearchList->Count() )
  2424             if ( iSearchList->Count() )
  2380                  {
  2425                 {
  2381                  LaunchActionMenuL();                       
  2426                 LaunchStylusPopupMenuL( aPoint );
  2382                  }                
  2427                 }
  2383             break; 
  2428             break;
  2384         case MFsTreeListObserver::EFsTreeListItemWillGetFocused:
  2429         case MFsTreeListObserver::EFsTreeListItemWillGetFocused:
  2385             {
  2430             {
  2386             SetMskL(); 
  2431             SetMskL();
  2387             break;
  2432             break;
  2388             }            
  2433             }
  2389         case MFsTreeListObserver::EFsFocusVisibilityChange:
  2434         case MFsTreeListObserver::EFsFocusVisibilityChange:
  2390         	{
  2435         	{
  2391         	iAppUi.SetFocusVisibility( EFalse );
  2436         	iAppUi.SetFocusVisibility( EFalse );
  2392         	break;
  2437         	break;
  2393         	}
  2438         	}
  2394         case MFsTreeListObserver::EFsTreeListItemTouchFocused:
  2439         case MFsTreeListObserver::EFsTreeListItemTouchFocused:
  2395         default:
  2440         default:
  2396             //Just ignore rest of events
  2441             //Just ignore rest of events
  2397             break;             
  2442             break;
  2398         }                   
  2443         }
  2399     }
  2444     }
  2400 
  2445 
  2401 // ---------------------------------------------------------------------------
  2446 // ---------------------------------------------------------------------------
  2402 // CFSEmailUiSearchListVisualiser::DoHandleActionL
  2447 // CFSEmailUiSearchListVisualiser::DoHandleActionL
  2403 // ---------------------------------------------------------------------------
  2448 // ---------------------------------------------------------------------------
  2404 //
  2449 //
  2405 void CFSEmailUiSearchListVisualiser::DoHandleActionL()
  2450 void CFSEmailUiSearchListVisualiser::DoHandleActionL()
  2406     {
  2451     {
  2407     FUNC_LOG;
  2452     FUNC_LOG;
  2408     TInt modelCount = 0; 
  2453     TInt modelCount = 0;
  2409     
  2454 
  2410     if ( iModel )
  2455     if ( iModel )
  2411         {
  2456         {
  2412         modelCount = iModel->Count();               
  2457         modelCount = iModel->Count();
  2413         }
  2458         }
  2414     if ( modelCount ) // Safety check
  2459     if ( modelCount ) // Safety check
  2415         {
  2460         {
  2416         CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
  2461         CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));
  2417         if ( item && item->ModelItemType() == ETypeMailItem )
  2462         if ( item && item->ModelItemType() == ETypeMailItem )
  2418             {
  2463             {
  2419             CFSMailMessage* messagePtr = &item->MessagePtr();
  2464             CFSMailMessage* messagePtr = &item->MessagePtr();
  2420             if ( messagePtr )
  2465             if ( messagePtr )
  2421                 {
  2466                 {
  2422                 OpenHighlightedMailL();                         
  2467                 OpenHighlightedMailL();
  2423                 }
  2468                 }
  2424             }
  2469             }
  2425         }    
  2470         }
  2426     }
  2471     }
  2427 
  2472 
  2428 //</cmail> 
  2473 //</cmail>
  2429 
  2474 
  2430 // ---------------------------------------------------------------------------
  2475 // ---------------------------------------------------------------------------
  2431 // From MFSEmailUiContactHandlerObserver
  2476 // From MFSEmailUiContactHandlerObserver
  2432 // The ownership of the CLS items in the contacts array is transferred to the
  2477 // The ownership of the CLS items in the contacts array is transferred to the
  2433 // observer, and they must be deleted by the observer.
  2478 // observer, and they must be deleted by the observer.
  2435 //
  2480 //
  2436 void CFSEmailUiSearchListVisualiser::OperationCompleteL(
  2481 void CFSEmailUiSearchListVisualiser::OperationCompleteL(
  2437     TContactHandlerCmd /*aCmd*/, const RPointerArray<CFSEmailUiClsItem>& /*aContacts*/ )
  2482     TContactHandlerCmd /*aCmd*/, const RPointerArray<CFSEmailUiClsItem>& /*aContacts*/ )
  2438     {
  2483     {
  2439     FUNC_LOG;
  2484     FUNC_LOG;
       
  2485     iRequiredSearchPriority = KStandardSearchPriority; //<cmail> return back
  2440     }
  2486     }
  2441 
  2487 
  2442 // ---------------------------------------------------------------------------
  2488 // ---------------------------------------------------------------------------
  2443 // From MFSEmailUiContactHandlerObserver
  2489 // From MFSEmailUiContactHandlerObserver
  2444 // Handles error in contact handler operation.
  2490 // Handles error in contact handler operation.
  2446 //
  2492 //
  2447 void CFSEmailUiSearchListVisualiser::OperationErrorL(
  2493 void CFSEmailUiSearchListVisualiser::OperationErrorL(
  2448     TContactHandlerCmd /*aCmd*/, TInt /*aError*/ )
  2494     TContactHandlerCmd /*aCmd*/, TInt /*aError*/ )
  2449     {
  2495     {
  2450     FUNC_LOG;
  2496     FUNC_LOG;
       
  2497     iRequiredSearchPriority = KStandardSearchPriority; //<cmail> return back
  2451     }
  2498     }
  2452 
  2499 
  2453 void CFSEmailUiSearchListVisualiser::CallToSenderL()
  2500 TBool CFSEmailUiSearchListVisualiser::CallToSenderL()
  2454 	{
  2501 	{
  2455     FUNC_LOG;
  2502     FUNC_LOG;
  2456 	CFSEmailUiMailListModelItem* item =
  2503 	CFSEmailUiMailListModelItem* item =
  2457 		dynamic_cast<CFSEmailUiMailListModelItem*>
  2504 		dynamic_cast<CFSEmailUiMailListModelItem*>
  2458 			( iModel->Item( HighlightedIndex() ) );
  2505 			( iModel->Item( HighlightedIndex() ) );
  2460 		{
  2507 		{
  2461 		CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
  2508 		CFSMailAddress* fromAddress = item->MessagePtr().GetSender();
  2462 		TDesC* emailAddress(0);
  2509 		TDesC* emailAddress(0);
  2463 		if ( fromAddress )
  2510 		if ( fromAddress )
  2464 			{
  2511 			{
  2465 			emailAddress = &fromAddress->GetEmailAddress();		
  2512 			emailAddress = &fromAddress->GetEmailAddress();
  2466 			}
  2513 			}
  2467 		if ( emailAddress && emailAddress->Length() )
  2514 		if ( emailAddress && emailAddress->Length() )
  2468 			{
  2515 			{
  2469 			CFsDelayedLoader::InstanceL()->GetContactHandlerL()->
  2516 			CFsDelayedLoader::InstanceL()->GetContactHandlerL()->
  2470 				FindAndCallToContactByEmailL( *emailAddress,
  2517 				FindAndCallToContactByEmailL( *emailAddress,
  2471 					iAppUi.GetActiveMailbox(), this, ETrue );									
  2518 					iAppUi.GetActiveMailbox(), this, ETrue );
  2472 			}
  2519                    iRequiredSearchPriority = KCallingSearchPriority; //decrease priority to enable search for contact
  2473 		}		
  2520                    return ETrue; // searching started - consume keyup event
       
  2521 			}
       
  2522 		}
       
  2523   return EFalse; //no calling key up will execute Call app
  2474 	}
  2524 	}
  2475 
  2525 
  2476 
  2526 
  2477 // ---------------------------------------------------------------------------
  2527 // ---------------------------------------------------------------------------
  2478 // Logic for changing msk
  2528 // Logic for changing msk
  2479 // ---------------------------------------------------------------------------
  2529 // ---------------------------------------------------------------------------
  2480 // 
  2530 //
  2481 void CFSEmailUiSearchListVisualiser::SetMskL()
  2531 void CFSEmailUiSearchListVisualiser::SetMskL()
  2482 	{
  2532 	{
  2483     FUNC_LOG;
  2533     FUNC_LOG;
  2484 	if ( iFirstStartCompleted )
  2534 	if ( iFirstStartCompleted )
  2485 	    {
  2535 	    {
  2486 	    if ( iSearchList && iSearchList->Count() )
  2536 	    if ( iSearchList && iSearchList->Count() )
  2487 	        {
  2537 	        {
  2488 	        ChangeMskCommandL( R_FSE_QTN_MSK_OPEN );    
  2538 	        ChangeMskCommandL( R_FSE_QTN_MSK_OPEN );
  2489 	        }
  2539 	        }
  2490 	    else
  2540 	    else
  2491 	        {
  2541 	        {
  2492 	        ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );           
  2542 	        ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
  2493 	        }
  2543 	        }
  2494 	    }
  2544 	    }
  2495 	}
  2545 	}
  2496 
       
  2497 
       
  2498 // ---------------------------------------------------------------------------
       
  2499 // LaunchActionMenuL
       
  2500 // Function launches action menu based on the highlighted or marked messages
       
  2501 // ---------------------------------------------------------------------------
       
  2502 //
       
  2503 void CFSEmailUiSearchListVisualiser::LaunchActionMenuL()
       
  2504     {
       
  2505     FUNC_LOG;
       
  2506     if ( iModel && iModel->Count() )
       
  2507         {
       
  2508         // Remove old items from action menu
       
  2509         CFSEmailUiActionMenu::RemoveAllL();
       
  2510         // Construct item list
       
  2511         RFsEActionMenuIdList itemList;
       
  2512         CleanupClosePushL( itemList );
       
  2513         
       
  2514         CFSEmailUiMailListModelItem* item = dynamic_cast<CFSEmailUiMailListModelItem*>(iModel->Item(HighlightedIndex()));    
       
  2515         // Right click action menu for calendar events
       
  2516         if ( item && item->ModelItemType() == ETypeMailItem && 
       
  2517               item->MessagePtr().IsFlagSet( EFSMsgFlag_CalendarMsg ) ) 
       
  2518              {
       
  2519              TESMRMeetingRequestMethod mrMethod( EESMRMeetingRequestMethodUnknown );
       
  2520              if ( iAppUi.MrViewerInstanceL() )
       
  2521                  {
       
  2522                  // Search must be stopped, otherwise resolve will lead to crash
       
  2523                  if ( iSearchOngoing )
       
  2524                       {
       
  2525                       StopSearchL();
       
  2526                       }
       
  2527                  mrMethod = iAppUi.MrViewerInstanceL()->ResolveMeetingRequestMethodL( item->MessagePtr() );
       
  2528                  }
       
  2529              switch ( mrMethod )
       
  2530                  {
       
  2531                  case EESMRMeetingRequestMethodRequest:
       
  2532                      itemList.AppendL( FsEActionMenuAccept );
       
  2533                      itemList.AppendL( FsEActionMenuTentative );
       
  2534                      itemList.AppendL( FsEActionMenuDecline );                      
       
  2535                      break;
       
  2536                  case EESMRMeetingRequestMethodCancellation:
       
  2537                      {
       
  2538                      TBool supportsRemove = iAppUi.GetActiveMailbox()->HasCapability( EFSMBoxCapaRemoveFromCalendar );
       
  2539                      if( supportsRemove )
       
  2540                          {
       
  2541                          itemList.AppendL( FsEActionMenuRemoveFormCal );                                          
       
  2542                          }
       
  2543                      break;
       
  2544                      }
       
  2545                  default:
       
  2546                  case EESMRMeetingRequestMethodUnknown:
       
  2547                  case EESMRMeetingRequestMethodResponse:
       
  2548                      itemList.AppendL( FsEActionMenuOpen);
       
  2549                      break;
       
  2550                  }             
       
  2551              }
       
  2552         // Right click action menu for normal mail items
       
  2553         else
       
  2554              {
       
  2555              itemList.AppendL( FsEActionMenuReply );
       
  2556             //Get # of recipients
       
  2557             TInt numRecipients(0);
       
  2558             CFSMailMessage* messagePtr = &item->MessagePtr();
       
  2559             if ( messagePtr )
       
  2560                 {
       
  2561                 numRecipients =TFsEmailUiUtility::CountRecepients( messagePtr );
       
  2562                 if ( numRecipients == 1 )
       
  2563                     {
       
  2564                     //check if the malbox ownmailaddress is same as the recipients email address. If not, then assume that the
       
  2565                     //email is a distribution list and we need to inc num of Recipients so that "Reply ALL" option appears in UI.
       
  2566                     if ( messagePtr->GetToRecipients().Count() )
       
  2567                         {
       
  2568                         if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetToRecipients()[0]->GetEmailAddress()) )
       
  2569                             {
       
  2570                             numRecipients++;
       
  2571                             }
       
  2572                         }
       
  2573                     if ( messagePtr->GetCCRecipients().Count() )
       
  2574                         {
       
  2575                         if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetCCRecipients()[0]->GetEmailAddress()) )
       
  2576                             {
       
  2577                             numRecipients++;
       
  2578                             }
       
  2579                         }
       
  2580                     if ( messagePtr->GetBCCRecipients().Count() )
       
  2581                         {
       
  2582                         if ( iAppUi.GetActiveMailbox()->OwnMailAddress().GetEmailAddress().Compare(messagePtr->GetBCCRecipients()[0]->GetEmailAddress()) )
       
  2583                             {
       
  2584                             numRecipients++;
       
  2585                             }
       
  2586                         }                
       
  2587                     }
       
  2588                 
       
  2589                 }
       
  2590               
       
  2591              if ( numRecipients > 1 )
       
  2592                  {
       
  2593                  itemList.AppendL( FsEActionMenuReplyAll );
       
  2594                  }          
       
  2595              itemList.AppendL( FsEActionMenuForward );            
       
  2596              }  
       
  2597         // Add mark as read/unread options
       
  2598         if ( item->MessagePtr().IsFlagSet(EFSMsgFlag_Read) )
       
  2599             {
       
  2600             itemList.AppendL( FsEActionMenuMarkUnread );
       
  2601             }
       
  2602         else 
       
  2603             {
       
  2604             itemList.AppendL( FsEActionMenuMarkRead );
       
  2605             }           
       
  2606         itemList.AppendL( FsEActionMenuDelete );     
       
  2607         
       
  2608 // <cmail> Touch
       
  2609         TActionMenuCustomItemId itemId = CFSEmailUiActionMenu::ExecuteL( itemList, EFscCustom, 0, this );
       
  2610 // </cmail>
       
  2611         CleanupStack::PopAndDestroy( &itemList );
       
  2612         HandleActionMenuCommandL( itemId ); 
       
  2613         }
       
  2614     }
       
  2615 
       
  2616 
       
  2617 // <cmail>
       
  2618 // ---------------------------------------------------------------------------
       
  2619 // ActionMenuPosition
       
  2620 // ---------------------------------------------------------------------------
       
  2621 //
       
  2622 TPoint CFSEmailUiSearchListVisualiser::ActionMenuPosition()
       
  2623     {
       
  2624     TAlfRealRect focusRect;
       
  2625     TFsTreeItemId listItemId = iSearchList->FocusedItem();
       
  2626     iSearchList->GetItemDisplayRectTarget(listItemId, focusRect);
       
  2627     return focusRect.iTl;
       
  2628     }
       
  2629 // </cmail>
       
  2630 
       
  2631 
       
  2632 // ---------------------------------------------------------------------------
       
  2633 // HandleActionMenuCommandL
       
  2634 // Action menu command callback handler
       
  2635 // ---------------------------------------------------------------------------
       
  2636 //
       
  2637 void CFSEmailUiSearchListVisualiser::HandleActionMenuCommandL( TActionMenuCustomItemId itemId )
       
  2638     {
       
  2639     FUNC_LOG;
       
  2640     // Map each Action Menu ID to correcponding command ID.
       
  2641     TInt commandId = KErrNotFound;
       
  2642     
       
  2643     switch( itemId )
       
  2644         {
       
  2645         case FsEActionMenuOpenCalendarEvent:
       
  2646         case FsEActionMenuOpen:
       
  2647             commandId = EFsEmailUiCmdOpen;
       
  2648             break;
       
  2649         case FsEActionMenuAccept:
       
  2650             commandId = EFsEmailUiCmdCalActionsAccept;
       
  2651             break;
       
  2652         case FsEActionMenuTentative:
       
  2653             commandId = EFsEmailUiCmdCalActionsTentative;
       
  2654             break;
       
  2655         case FsEActionMenuDecline:
       
  2656             commandId = EFsEmailUiCmdCalActionsDecline;
       
  2657             break;
       
  2658         case FsEActionMenuRemoveFormCal:
       
  2659             commandId = EFsEmailUiCmdCalRemoveFromCalendar;
       
  2660             break;
       
  2661         case FsEActionMenuMarkRead:
       
  2662             commandId = EFsEmailUiCmdMarkAsRead;
       
  2663             break;
       
  2664         case FsEActionMenuMarkUnread:
       
  2665             commandId = EFsEmailUiCmdMarkAsUnread;
       
  2666             break;          
       
  2667         case FsEActionMenuDelete:
       
  2668             commandId = EFsEmailUiCmdActionsDelete;
       
  2669             break;                          
       
  2670         case FsEActionMenuReply:
       
  2671             commandId = EFsEmailUiCmdActionsReply;
       
  2672             break;
       
  2673         case FsEActionMenuReplyAll:
       
  2674             commandId = EFsEmailUiCmdActionsReplyAll;
       
  2675             break;
       
  2676         case FsEActionMenuForward:
       
  2677             commandId = EFsEmailUiCmdActionsForward;
       
  2678             break;
       
  2679         case FsEActionMenuMove:
       
  2680             commandId = EFsEmailUiCmdActionsMoveMessage;
       
  2681             break;
       
  2682         case FsEActionMenuMoveToDrafts:
       
  2683             commandId = EFsEmailUiCmdActionsMoveToDrafts;
       
  2684             break;
       
  2685         case FsEActionMenuDismissed:
       
  2686             commandId = KErrCancel;
       
  2687             break;
       
  2688         default:
       
  2689             __ASSERT_DEBUG( EFalse, Panic( EFSEmailUiUnexpectedValue ) );
       
  2690             break;
       
  2691         }
       
  2692     
       
  2693     if ( commandId >= 0 )
       
  2694         {
       
  2695         HandleCommandL( commandId );
       
  2696         }
       
  2697     }
       
  2698 
  2546 
  2699 //<cmail>
  2547 //<cmail>
  2700 // ---------------------------------------------------------------------------
  2548 // ---------------------------------------------------------------------------
  2701 // CFSEmailUiSearchListVisualiser::SetHeaderTextAttributesL()
  2549 // CFSEmailUiSearchListVisualiser::SetHeaderTextAttributesL()
  2702 //
  2550 //
  2704 // This creates i.e "Search result: %S " title caption and background graphics
  2552 // This creates i.e "Search result: %S " title caption and background graphics
  2705 // ---------------------------------------------------------------------------
  2553 // ---------------------------------------------------------------------------
  2706 //
  2554 //
  2707 void CFSEmailUiSearchListVisualiser::SetHeaderAttributesL()
  2555 void CFSEmailUiSearchListVisualiser::SetHeaderAttributesL()
  2708 	{
  2556 	{
  2709 	// Set bar text color/style from skin	
  2557 	// Set bar text color/style from skin
  2710 	iBarTextVisual->SetTextStyle( iAppUi.LayoutHandler()->
  2558 	iBarTextVisual->SetTextStyle( iAppUi.LayoutHandler()->
  2711 	        FSTextStyleFromLayoutL( AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( 0 ) ).Id() );
  2559 	        FSTextStyleFromLayoutL( AknLayoutScalable_Apps::main_sp_fs_ctrlbar_pane_t1( 0 ) ).Id() );
  2712 	iBarTextVisual->SetColor( iAppUi.LayoutHandler()->
  2560 	iBarTextVisual->SetColor( iAppUi.LayoutHandler()->
  2713 							ListNormalStateTextSkinColor() );
  2561 							ListNormalStateTextSkinColor() );
  2714 
  2562 
  2725 	}
  2573 	}
  2726 //</cmail>
  2574 //</cmail>
  2727 
  2575 
  2728 
  2576 
  2729 
  2577 
       
  2578 // ---------------------------------------------------------------------------
       
  2579 // LaunchStylusPopupMenuL
       
  2580 // Function launches avkon stylus popup menu based for the tapped item
       
  2581 // ---------------------------------------------------------------------------
       
  2582 //
       
  2583 void CFSEmailUiSearchListVisualiser::LaunchStylusPopupMenuL( const TPoint& aPoint )
       
  2584     {
       
  2585     // Verify that the item's type is correct
       
  2586     CFSEmailUiMailListModelItem* item =
       
  2587         static_cast<CFSEmailUiMailListModelItem*>( iModel->Item( HighlightedIndex() ) );
       
  2588     if ( item && ( item->ModelItemType() == ETypeMailItem ) )
       
  2589         {
       
  2590         // Add mark as read / unread options
       
  2591         const CFSMailMessage& message = item->MessagePtr();
       
  2592 
       
  2593         TBool messageRead( message.IsFlagSet( EFSMsgFlag_Read ) );
       
  2594         iStylusPopUpMenu->SetItemDimmed( EFsEmailUiCmdMarkAsUnread, !messageRead );
       
  2595         iStylusPopUpMenu->SetItemDimmed( EFsEmailUiCmdMarkAsRead, messageRead );
       
  2596 
       
  2597         // Set the position for the popup
       
  2598         iStylusPopUpMenu->SetPosition( aPoint );
       
  2599 
       
  2600         // Display the popup and set the flag to indicate that the menu was
       
  2601         // launched so that list focus stays visible.
       
  2602         iStylusPopUpMenu->ShowMenu();
       
  2603         iStylusPopUpMenuVisible = ETrue;
       
  2604         }
       
  2605     }
       
  2606 
       
  2607 // ---------------------------------------------------------------------------
       
  2608 // ClientRequiredSearchPriority
       
  2609 // the email searching priority may be decreased to enable searching for contacts
       
  2610 // ---------------------------------------------------------------------------
       
  2611 //
       
  2612 void CFSEmailUiSearchListVisualiser::ClientRequiredSearchPriority( TInt *apRequiredSearchPriority )
       
  2613     {
       
  2614     FUNC_LOG;
       
  2615     if (iRequiredSearchPriority != (*apRequiredSearchPriority))
       
  2616     *apRequiredSearchPriority = iRequiredSearchPriority; 
       
  2617     return;
       
  2618     }
  2730 
  2619 
  2731 // End of file
  2620 // End of file