/*
* Copyright (c) 2007-2008 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 message details visualiser definition
*
*/
#ifndef __FREESTYLEEMAILUI_MSGDETAILSVISUALISER_H__
#define __FREESTYLEEMAILUI_MSGDETAILSVISUALISER_H__
#include <e32base.h>
//<cmail>
#include "fstreelistconstants.h"
#include "fstreelistobserver.h"
#include "fsccontactactionmenudefines.h"
//</cmail>
#include "FreestyleEmailUiViewBase.h"
#include "FreestyleEmailUiConstants.h"
#include "FreestyleEmailUiContactHandlerObserver.h"
#include "mfsmailrequestobserver.h"
#include <AknProgressDialog.h>
// forward declarations
class CFSEmailUiMsgDetailsControl;
class CFSEmailUiMsgDetailsModel;
class CFreestyleEmailUiAppUi;
class CFreestyleEmailUiTextureManager;
class CFSMailMessage;
class CFSMailAddress;
class MFsTreeItemVisualizer;
class CFsTreeVisualizerBase;
class CFsTreeList;
class CFsTreePlainOneLineNodeData;
class CFsTreePlainOneLineItemData;
class CFsTreePlainTwoLineItemData;
class CFsTreePlainOneLineNodeVisualizer;
class CFsTreePlainOneLineItemVisualizer;
class CFsTreePlainTwoLineItemVisualizer;
class MFSMailRequestObserver; //<cmail>
class MProgressDialogCallback; //<cmail>
class CAknWaitDialog; //<cmail>
// <cmail> Touch
class CFSEmailUiMsgDetailsVisualiser : public CFsEmailUiViewBase,
public MFSEmailUiContactHandlerObserver,
public MFsTreeListObserver,
public MFsActionMenuPositionGiver,
public MFSMailRequestObserver,
public MProgressDialogCallback
// </cmail>
{
public: // Construction and destruction
/**
* Destructor
*/
~CFSEmailUiMsgDetailsVisualiser();
void PrepareForExit();
/**
* Two phase constructors
*
* @param aEnv Alfred environmet
* @param aControlGroup control group
* @param aAppUi Application main UI class
* @return Pointer to newly created object
*/
static CFSEmailUiMsgDetailsVisualiser* NewL( CAlfEnv& aEnv,
CAlfControlGroup& aControlGroup,
CFreestyleEmailUiAppUi& aAppUi );
static CFSEmailUiMsgDetailsVisualiser* NewLC( CAlfEnv& aEnv,
CAlfControlGroup& aControlGroup,
CFreestyleEmailUiAppUi& aAppUi );
public: // From base class CAknView
void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
void HandleCommandL( TInt aCommand );
TUid Id() const;
public: // Own public member functions
/**
* Dynamic switch handling
*/
void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType );
void SetMskL();
/**
* Event handling forwarded from control
*
* @param aEvent Event forwarded from control
* @return ETrue if event was consumed, otherwise EFalse
*/
TBool OfferEventL( const TAlfEvent& aEvent );
public: // From MFSEmailUiContactHandlerObserver
void OperationCompleteL( TContactHandlerCmd aCmd,
const RPointerArray<CFSEmailUiClsItem>& aContacts );
void OperationErrorL( TContactHandlerCmd, TInt aError );
// <cmail> Touch
public: // From MFsTreeListObserver
void TreeListEventL( const TFsTreeListEvent aEvent,
const TFsTreeItemId aId,
const TPoint& aPoint );
// From MFsActionMenuPositionGiver
TPoint ActionMenuPosition();
// </cmail>
// <cmail>
public:
/**
* MFSMailRequestObserver interface implementation
*/
void RequestResponseL( TFSProgress aEvent, TInt aRequestId );
/**
* MProgressDialogCallback interface implementation
*/
void DialogDismissedL( TInt aButtonId);
private:
/// data related to fetching message structure
TInt iCurrentStructureFetchRequestId;
TBool iFetchingMessageStructure;
TBool iAsyncProcessComplete;
TInt iWaitNoteId;
/// Wait note stuff
CAknWaitDialog* iWaitDialog;
TBool iDialogNotDismissed;
/**
* Update our message pointer and saves its status
*/
void UpdateMessagePtrL( TFSMailMsgId aNewMailboxId,
TFSMailMsgId aNewFolderId,
TFSMailMsgId aNewMessageId );
/**
* Fetching the Message Structure. It is necessary for POP protocol in order to read recipients
*/
void StartFetchingMessageStructureL( CFSMailMessage* aMsg );
/**
* Cancel fetching of the message structureCancel fetching of the message structure
*/
void CancelFetching();
// </cmail>
// <cmail> Toolbar
private: // from
/**
* @see CFsEmailUiViewBase::ChildDoActivateL
*/
void ChildDoActivateL( const TVwsViewId& aPrevViewId,
TUid aCustomMessageId,
const TDesC8& aCustomMessage );
// </cmail> Toolbar
void ChildDoDeactivate();
void GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const;
private:
/**
* Constructors
*/
CFSEmailUiMsgDetailsVisualiser( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aControlGroup );
void ConstructL();
/**
* Sets title pane text
*
* @param aViewStarted ETrue when starting view (title set to "Message/Meeting details")
* EFalse when closing view (title set back to previous)
*/
void ChangeTitleBarTextL( TBool aViewStarted );
/**
* Delete contents from list and model
*/
void ClearMsgDetailsModelL();
/**
* Update contents to list and model
*/
void UpdateMsgDetailsModelL();
/**
* Updates variables that specify the list size
*/
void UpdateListSizeAttributes();
/**
* Append specified email fields to list
*/
void AppendFromLinesL();
void AppendSubjectLinesL();
void AppendToLinesL();
void AppendCcLinesL();
void AppendBccLinesL();
void AppendSizeLinesL();
void AppendSentLinesL();
void AppendPriorityLinesL();
void AppendMessageTypeLinesL();
/**
* Actual creation of the list items and nodes
*
* @param aItemDataBuff List item data
* @param aItemData Pointer to item data object
* @param aItemVisualizer/aNodeVisualizer Pointer to item/node visualizer
*/
void CreateOneLinePlainItemLC2( const TDesC& aItemDataBuff,
CFsTreePlainOneLineItemData* &aItemData,
CFsTreePlainOneLineItemVisualizer* &aItemVisualizer );
void CreateTwoLinePlainItemLC2( const TDesC& aPrimaryDataBuff,
const TDesC& aSecondaryDataBuff,
CFsTreePlainTwoLineItemData* &aItemData,
CFsTreePlainTwoLineItemVisualizer* &aItemVisualizer );
void SetItemVisualizerCommonProperties( MFsTreeItemVisualizer& aItemVisualizer );
void CreatePlainNodeLC2( const TDesC& aItemDataBuff,
CFsTreePlainOneLineNodeData* &aItemData,
CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer );
void SetNodeVisualizerProperties( MFsTreeItemVisualizer& aItemVisualizer );
void SetChildVisualizersProperties( TFsTreeItemId aNodeId );
/**
* Append heading line to list as a node
*
* @param aResourceId Resource id for the heading text
* @return List item id of the created node
*/
TFsTreeItemId AppendHeadingToListL( TInt aResourceId );
/**
* Append item to list under the specified node
*
* @param aItemData/aPrimaryDataBuff/aSecondaryDataBuff List item data
* @param aParentNode Parent node in list
* @return List item id of the created item
*/
TFsTreeItemId AppendOneLineItemToListL( const TDesC& aItemData,
TFsTreeItemId aParentNode );
TFsTreeItemId AppendTwoLineItemToListL( const TDesC& aPrimaryDataBuff,
const TDesC& aSecondaryDataBuff,
TFsTreeItemId aParentNode,
TBool aItemHasActionMenu = EFalse );
TFsTreeItemId AppendDateTimeItemToListL( const TDesC& aPrimaryDataBuff,
const TDesC& aSecondaryDataBuff,
const TDesC& aDateTimeDataBuff,
TFsTreeItemId aParentNode );
/**
* Get display name and email address information from the address data
*
* @param aAddressData Mail address data where the information is got
* @param aDisplayName On return holds the display name
* @param aEmailAddress On return holds the email address
* @return EFalse if both display name and email address are empty, otherwise ETrue
*/
TBool GetDisplayNameAndEmailAddressL( CFSMailAddress* aAddressData,
TDesC* &aDisplayName,
TDesC* &aEmailAddress );
/**
* Collapse all nodes except the specified one
*
* @param aExcludedNode Node that is not collapsed
*/
void CollapseNodesExceptL( TFsTreeItemId aExcludedNode );
// Action menu handling
void LaunchActionMenuL();
void HandleActionMenuCommandL( TActionMenuCustomItemId itemId );
// Action menu action handling, use UI utility class
TBool SendEmailToFocusedItemL() const; // Return value tells wheter operation succeeded or not
void CallToFocusedItemL();
void CreateMessageToFocusedItemL() const;
void LaunchRemoteLookupForFocusedItemL() const;
void AddFocusedItemToContactsL() const;
void ShowContactDetailsForFocusedItemL() const;
void CopyFocusedItemToClipboardL() const;
// Shortuct handling of collpase/expand all toggle and go to first/last
void ShortcutCollapseExpandAllToggleL();
void GoToTopL();
void GoToBottomL();
// Tells wheter the action menu should be shown for the currently focused list item
TBool HasFocusedItemActionMenu() const;
/**
* Get email of address of the focused list item
*
* @return Pointer to email address if found, NULL if not found
*/
CFSMailAddress* GetEmailAddressForFocusedItem() const;
TDesC* GetEmailAddressForFocusedItemAsTDes() const;
// Recursive function to get item's root level parent
TFsTreeItemId GetRootParent( const TFsTreeItemId aItemId ) const;
// Tell wheter all nodes are currently collpased/expanded
TBool AllNodesCollapsed() const;
TBool AllNodesExpanded( TFsTreeItemId aParentNodeId = KFsTreeRootID ) const;
// First start function.
void DoFirstStartL();
private:
enum TExpandCollapseMode
{
EExpandAll = 0,
ECollapseAllExceptTo,
ECollapseAllExceptCc,
ECollapseAllExceptBcc
};
private:
// Pointers to ALF related objects
CAlfEnv& iEnv;
CAlfLayout* iParentLayout;
// Pointers to mail framework related objects
CFSMailMessage* iViewedMsg;
// Pointers to own control and model objects
CFSEmailUiMsgDetailsControl* iControl; // Not owned, owned by ALF env
CFSEmailUiMsgDetailsModel* iModel; // Owned
// Lists screen rect and node heights
TRect iScreenRect;
TInt iListNodeHeight;
// Nodes that can be focused at startup
TFsTreeItemId iToNodeId;
TFsTreeItemId iCcNodeId;
TFsTreeItemId iBccNodeId;
// All nodes
RArray<TFsTreeItemId> iNodeIds;
// Pointer to the tree list component visualizer.
CFsTreeVisualizerBase* iTreeVisualizer;
// Pointer to the tree list component, owned.
CFsTreeList* iTreeList;
// Previous view uid
TUid iPreviousViewUid;
// Previous title bar text, restored when returning from this view
HBufC* iPreviousTitleText;
// Pointers to "error texts" shown in list
TDesC* iNoDisplayNameAvailableText;
TDesC* iNoEmailAddressAvailableText;
TBool iFirstViewActivation;
TBool iFirstStartCompleted;
// When this flag is set, list (scroll bar) refresh is allowed when
// inserting new items to list
TBool iAllowListRefreshInInsert;
// Flags for expand/collapse mode and when to expand + highlight next node
TExpandCollapseMode iExpandCollapseMode;
TBool iExpandAndHighlightNextNode;
TBool iRCLSupported;
// <cmail> video call
// Flag for making video call
TBool iVideoCall;
// </cmail>
};
#endif //__FREESTYLEEMAILUI_MSGDETAILSVISUALISER_H__