emailuis/emailui/inc/FreestyleEmailUiSearchListVisualiser.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:39:21 +0200
changeset 0 8466d47a6819
child 1 12c456ceeff2
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  FreestyleEmailUi search result list visualisation
*
*/
    
#ifndef __FREESTYLEEMAILUI_SEARCHLISTVISUALISER_H__
#define __FREESTYLEEMAILUI_SEARCHLISTVISUALISER_H__

// SYSTEM INCLUDES
#include <e32base.h>

//<cmail>
#include "CFSMailCommon.h"
#include "MFSMailBoxSearchObserver.h"
#include "fstreevisualizerobserver.h"
#include "fstreelistobserver.h"
#include "fsccontactactionmenudefines.h"
//</cmail>

// INTERNAL INCLUDES
#include "FreestyleEmailUiViewBase.h"
#include "FreestyleEmailUiUtilities.h"
#include "FreestyleEmailUiContactHandlerObserver.h"


// FORWARD DECLARATIONS
class CAlfTextVisual;
class CAlfImageVisual;
class CAlfDeckLayout;
class CAlfAnchorLayout;
class CFSEmailUiMailListModelItem;
class CFSEmailUiMailListModel;
class CFreestyleEmailUiTextureManager;
class CFSMailFolder;
class CFSMailClient;
class CFSMailMessage;
class CFsTreeList;
class CFsTreeVisualizerBase;
class MFsTreeItemData;
class MFsTreeItemVisualizer;
class CFreestyleEmailUiTextureManager;
class CFreestyleEmailUiAppUi;
class CFsTreePlainOneLineNodeData;
class CFsTreePlainOneLineNodeVisualizer;
class CPbkxContactActionMenu;
class CFreestyleEmailUiSearchListControl;
class CFSMailFolder;
class CFSMailBox;
class CAsyncCallBack;
class CESMRIcalViewer;
class CFsTreePlainTwoLineItemData;


struct SSearchListItem
	{
	TInt iSearchListItemId;
	MFsTreeItemData* iTreeItemData;
	MFsTreeItemVisualizer* iTreeItemVisualiser;
	};

class CFSEmailUiSearchListVisualiser : public CFsEmailUiViewBase, 
									   public MFSMailBoxSearchObserver, 
									   //<cmail> touch
									   public MFsTreeListObserver,
									   public MFsActionMenuPositionGiver,
									   //<cmail>
									   public MFSEmailUiGenericTimerCallback,
									   public MFSEmailUiContactHandlerObserver
	{
public:
	static CFSEmailUiSearchListVisualiser* NewL(CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi, CAlfControlGroup& aSeacrhListControlGroup);
	static CFSEmailUiSearchListVisualiser* NewLC(CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi, CAlfControlGroup& aSearchListControlGroup);
    virtual ~CFSEmailUiSearchListVisualiser();
    void PrepareForExit();  

public: // from CFsEmailUiViewBase
	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);

    // From view 
	TUid Id() const;			   
	// <cmail> Toolbar
	/*void DoActivateL(const TVwsViewId& aPrevViewId,
	                 TUid aCustomMessageId,
	                 const TDesC8& aCustomMessage);*/
    // </cmail> Toolbar
    void ChildDoDeactivate();                
    void HandleCommandL( TInt aCommand );

    /**
	 * @see CFsEmailUiViewBase::SetStatusBarLayout
	 */ 
    void SetStatusBarLayout();

    // Dynamic variant switch, called by appui
    void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType );
    void GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const;

    // Navigation functions, used mainly from viewer
    TBool IsNextMsgAvailable( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId, TFSMailMsgId& aFoundNextMsgFolder ) const;
    TBool IsPreviousMsgAvailable( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId, TFSMailMsgId& aFoundPrevMsgFolder ) const;
    TInt MoveToNextMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId );
    TInt MoveToPreviousMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId );

public: // from MFSMailBoxSearchObserver
    void MatchFoundL( CFSMailMessage* aMatchMessage );
    void SearchCompletedL();


public: // new methods
    // Refresh the whole list
	void RefreshL();

	// Mail list current model data
	CFSEmailUiMailListModel* Model();
	
	// Event handling forwarded from control
	TBool OfferEventL( const TAlfEvent& aEvent ); 

	// Used from callback
	TInt LaunchSearchDialogL();	

	// Used from appui to get the current index in search list
	TInt HighlightedIndex() const;

	// Start timer callback
	void TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer );

	// Helper functions to get highlighted message id and folder id
	TFSMailMsgId HighlightedMessageFolderId();
  	TFSMailMsgId HighlightedMessageId();

    void HandleMailBoxEventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox,
        TAny* aParam1, TAny* aParam2, TAny* aParam3 );
	void RemoveMsgItemsFromListIfFoundL( const RArray<TFSMailMsgId>& aEntryIds );

public: // From MFsTreeListObserver
    //<cmail> touch
    void TreeListEventL( const TFsTreeListEvent aEvent, const TFsTreeItemId aId );
    
    // From MFsActionMenuPositionGiver
    TPoint ActionMenuPosition();
	//</cmail>	
		
public: // From MFSEMailUiContactHandlerObserver

    void OperationCompleteL( TContactHandlerCmd aCmd,
        const RPointerArray<CFSEmailUiClsItem>& aContacts );
    void OperationErrorL( TContactHandlerCmd, TInt aError );

// <cmail> Toolbar    
private: // from
    
    /**
     * @see CFsEmailUiViewBase::ChildDoActivateL
     */
    void ChildDoActivateL( const TVwsViewId& aPrevViewId,
            TUid aCustomMessageId,
            const TDesC8& aCustomMessage );
   
// </cmail> Toolbar    

    // Called when flip state is changed
    void FlipStateChangedL( TBool aFlipOpen );

    /**
     * Handles the focus state changes
     * @param aShow Indicates if focus should become visible or removed
     */
    void HandleTimerFocusStateChange( TBool aShow );
    
private:
	CFSEmailUiSearchListVisualiser( CFreestyleEmailUiAppUi* aAppUi, CAlfEnv& aEnv, CAlfControlGroup& aSearchListControlGroup );
	void ConstructL();

  	void ReScaleUiL();
	void SetSearchListLayoutAnchors();
	void SetSearchListTopBarLayoutAnchors();
	
	void CreatePlainNodeL( const TDesC& aItemDataBuff,
                           CFsTreePlainOneLineNodeData* &aItemData,
                           CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const;
	void ExpandAllNodesL();
	void CollapseAllNodesL();

	// Helper functions to access model data
	TFSMailMsgId MsgIdFromIndex( TInt aItemIdx ) const;
	TFSMailMsgId MsgIdFromListId( TFsTreeItemId aListId ) const;
	CFSMailMessage& MsgPtrFromListId( TFsTreeItemId aListId );
	
	// Item data and visualiser helper functions 
	MFsTreeItemData* ItemDataFromItemId( TFsTreeItemId aItemId );										
	MFsTreeItemVisualizer* ItemVisualiserFromItemId( TFsTreeItemId aItemId );
	
	// Helpers to get the ordinal of a message in the iModel
	TInt ItemIndexFromMessageId( const TFSMailMsgId& aMessageId ) const;
	TInt NextMessageIndex( TInt aCurMsgIdx ) const;
	TInt PreviousMessageIndex( TInt aCurMsgIdx ) const;
		
	//<cmail> touch
	// Helper class for resolving touch events and actions	
	void DoHandleActionL();	
    //</cmail>
	
	// Open highlighted mail
	void OpenHighlightedMailL();

	// Compose, reply, reply all and forward
	void ReplyL( CFSMailMessage* aMsgPtr );
	void ReplyAllL( CFSMailMessage* aMsgPtr );
	void ForwardL( CFSMailMessage* aMsgPtr );
	void DoReplyForwardL( TEditorLaunchMode aMode, CFSMailMessage* aMsgPtr = NULL );

	void StartSearchL();
	void StopSearchL();

	// <cmail> fixed CS high cat. finding
    void ResetResultListL();
    
	void ChangeReadStatusOfHighlightedL( TInt aRead );

	void CheckAndUpdateFocusedMessageL();
	
	void RemoveFocusedFromListL();

	void UpdateMsgIconAndBoldingL( CFSMailMessage* aMsgPtr );
	void UpdateMsgIconAndBoldingL( TInt aListIndex );

	// Delete messages 
	void DeleteFocusedMessageL();
	
	void CallToSenderL();
	
	void UpdateMailListSettingsL();	

	void UpdatePreviewPaneTextForItemL( CFsTreePlainTwoLineItemData* aItemData, CFSMailMessage* aMsgPtr );
	void FilterPreviewPaneTextL( TDes& aText ) const;
	
	void SetMskL();
	
    void DoFirstStartL();
	
    void LaunchActionMenuL();
    
    void HandleActionMenuCommandL( TActionMenuCustomItemId itemId );
    
    void SetHeaderAttributesL();
    
private:
    // Pointer to Alf environment
	CAlfEnv* iEnv;

	// Data to be filled from custom message
	CFSMailBox* iMailBox;

	// Layouts
 	CAlfAnchorLayout* iScreenAnchorLayout;
 	CAlfAnchorLayout* iSearchTopBarComponentLayout;

  	// Top bar visuals and layout
 	CAlfDeckLayout* iSearchTopBarLayout;
	CAlfImageVisual* iBarBgVisual;
	//CAlfImageVisual* iBarFindImage; <cmail> not in cmail
	CAlfTextVisual* iBarTextVisual;

    	// Mail List control and layout
  	CFreestyleEmailUiSearchListControl* iSearchListControl;
 	CAlfDeckLayout* iSearchListLayout;
    CFSEmailUiMailListModel* iModel; 
  	CFsTreeList* iSearchList;
    CFsTreeVisualizerBase* iSearchTreeListVisualizer;
  	TInt iNumSlots;		

	RArray<SSearchListItem> iSearchListItemArray;   
   
	HBufC* iLatestSearchText;
	
	TBool iThisViewActive;

	TBool iSearchOngoing;

	CFSEmailUiGenericTimer* iStartupCallbackTimer;
	
	RPointerArray<TDesC> iSearchStrings;

	
	TBool iMsgDataCouldBeChanged;
	
	// Previous view uid 	
	TUid iPreviousViewUid;
  	
    TInt iListMode;    
    TInt iNodesInUse;
    
    TFSMailMsgId iLatestOpenedMrId;
    
    TInt iSearchCount;
    
	TAknUiZoom iCurrentZoomLevel;
  	
	TBool iFirstStartCompleted;
	
	TBool iListAddedToControlGroup;  //<cmail>
	TBool iPreparedForExit; //<cmail>

  	};

#endif