emailuis/emailui/inc/FreestyleEmailUiAttachmentsListModel.h
changeset 0 8466d47a6819
child 11 0396474f30f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/FreestyleEmailUiAttachmentsListModel.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,182 @@
+/*
+* 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 attachments list model and model item definition.
+*
+*/
+
+
+#ifndef __FREESTYLEEMAILUI_ATTACHMENTSLISTMODEL_H__
+#define __FREESTYLEEMAILUI_ATTACHMENTSLISTMODEL_H__
+
+// SYSTEM INCLUDES
+#include <e32base.h>
+//<cmail>
+#include "fstreelist.h"
+//</cmail>
+
+// INTERNAL INCLUDES
+#include "FreestyleEmailDownloadInformationMediator.h"
+
+// FORWARD DECLARATIONS
+class CFreestyleEmailUiAppUi;
+class CFSMailMessage;
+
+// CONSTANTS
+// Limit values of download progress
+const TInt KNone = 0;
+const TInt KComplete = 100;
+
+// data of one attachment
+struct TAttachmentData
+	{
+	// size of the attachment in bytes
+	TInt fileSize;
+	// download progress in %, 0-100
+	TInt downloadProgress;
+	// attachment file type
+	TFileType fileType;
+	// attachment file name
+	TFileName fileName;
+	// attachment tree entry id in attachment list
+	TFsTreeItemId treeId;
+	// attachment message part information
+	TPartData partData;
+	};
+
+// Observer interface used to inform view about updates in model
+class MFSEmailUiAttachmentsStatusObserver
+    {
+public:
+    /**
+    * Informs that the status of the given attachment has changed.
+    * @param    aIndex  The index of the changed object in the model. Note that
+    *                   it's possible that a new object has been added to the model.
+    *                   In that case, this index is greater than the previous last
+    *                   index of the model. KErrNotFound indicates that the list
+    *                   was completely updated and thus UI needs to refresh
+    *                   itself totally.
+    */
+    virtual void DownloadStatusChangedL( TInt aIndex ) = 0;
+    };
+
+
+//////////////////////////////////////////////////////////////////////////////
+// Base class contains common functionality for the Attachments list model and 
+// Download Manager model
+class CFSEmailUiAttachmentsModelBase : public CBase, public MFSEmailDownloadInformationObserver
+    {
+public: // methods
+    ~CFSEmailUiAttachmentsModelBase();
+
+	// starts download
+	TBool StartDownloadL( TFsTreeItemId aTreeId );
+    TBool StartDownloadL( const TAttachmentData& aAttachment );
+	// saves attachment
+    TBool SaveAttachmentL( TFsTreeItemId aTreeId, const TDesC& aFileName, TInt& aSavedCount );
+	TBool SaveAttachmentL( const TAttachmentData& aAttachment, const TDesC& aFileName, TInt& aSavedCount );
+	// cancels download operation
+    void CancelDownloadL( TFsTreeItemId aTreeId );
+	void CancelDownloadL( const TAttachmentData& aAttachment );
+	// removes the downloaded file contents
+    void RemoveContentL( TFsTreeItemId aTreeId );
+	void RemoveContentL( const TAttachmentData& aAttachment );
+	// is the message part currently being downloaded  
+	TBool IsDownloading( const TAttachmentData& aAttachment );
+    // is the message part completely downloaded
+    TBool IsCompletelyDownloadedL( const TAttachmentData& aAttachment );
+    // is the message part an embedded message object
+    TBool IsMessage( const TAttachmentData& aAttachment ) const;
+	// returns ETrue if there has been at least one download started after program start
+	TBool IsThereAnyCurrentDownloads();
+    // Creates and returns a size description matching the given size. Ownership is transferred to CleanupStack.
+    static HBufC* CreateSizeDescLC( TInt aSize );
+    // Get AppUi handle
+	CFreestyleEmailUiAppUi& AppUi();
+
+public: // pure virtual methods
+    // get attachment data from list using tree entry 
+    virtual TAttachmentData* GetItem( TFsTreeItemId aTreeId ) = 0;
+	// get attachment data from list using tree entry 
+	virtual TAttachmentData& GetItemL( TFsTreeItemId aTreeId ) = 0;
+	// get message object related to the given tree entry
+	virtual TPartData GetMessageL( TFsTreeItemId aTreeId ) = 0;
+	// downloads all attachments
+	virtual TBool DownloadAllAttachmentsL() = 0;
+	// saves all attachments
+	virtual TBool SaveAllAttachmentsL( const TDesC& aFileName ) = 0;
+	// cancels all downloads
+	virtual void CancelAllDownloadsL() = 0;
+	// check if model contains any attachment of message type
+	virtual TBool IsThereAnyMessageAttachments() const = 0;
+
+protected: // methods
+    CFSEmailUiAttachmentsModelBase( CFreestyleEmailUiAppUi& aAppUi );
+    void ConstructL();
+
+protected: // data
+    CFreestyleEmailUiAppUi& iAppUi;
+    };
+
+
+/////////////////////////////
+// The Attachments list model
+class CFSEmailUiAttachmentsListModel : public CFSEmailUiAttachmentsModelBase 
+    {
+public:
+	// download progress infromation callback, from MFSEmailDownloadInformationObserver
+	virtual void RequestResponseL( const TFSProgress& aEvent, const TPartData& aPart );
+	// two-phased constructor
+	static CFSEmailUiAttachmentsListModel* NewL( CFreestyleEmailUiAppUi& aAppUi, MFSEmailUiAttachmentsStatusObserver& aObserver );
+	// two-phased constructor
+	static CFSEmailUiAttachmentsListModel* NewLC(CFreestyleEmailUiAppUi& aAppUi, MFSEmailUiAttachmentsStatusObserver& aObserver );
+	// destructor
+	~CFSEmailUiAttachmentsListModel();
+	// returns the whole model
+	const RArray<TAttachmentData>& GetModel();
+    // adds node id to attachment data 
+    void SetNodeIdL( TInt aAttachmentIndex, TFsTreeItemId aTreeItemId );
+    // updates attachment list 
+    void UpdateListL( TPartData aMessage );
+    void UpdateListL( CFSMailMessage* aEmbeddedMessage );
+    // Creates and returns mail subject text. Ownership is transferred to CleanupStack.
+    HBufC* CreateMailSubjectTextLC() const;
+
+public: // from CFSEmailUiAttachmentsModelBase
+    // get attachment data from list using tree entry 
+    TAttachmentData* GetItem( TFsTreeItemId aTreeId );
+	// get attachment data from list using tree entry 
+	TAttachmentData& GetItemL( TFsTreeItemId aTreeId );
+	// get message object related to the given tree entry
+	TPartData GetMessageL( TFsTreeItemId aTreeId );
+	// downloads all attachments
+	TBool DownloadAllAttachmentsL();
+	// saves all attachments
+	TBool SaveAllAttachmentsL( const TDesC& aFileName );
+	// cancels all downloads
+	void CancelAllDownloadsL();
+    // check if model contains any attachment of message type
+    TBool IsThereAnyMessageAttachments() const;
+
+private:
+	CFSEmailUiAttachmentsListModel( CFreestyleEmailUiAppUi& aAppUi, MFSEmailUiAttachmentsStatusObserver& aObserver );
+	void ConstructL();
+
+private:
+	MFSEmailUiAttachmentsStatusObserver& iObserver;
+	TPartData iMessage;
+	RArray<TAttachmentData> iAttachments;
+    };
+
+#endif //__FREESTYLEEMAILUI_MAILLISTMODEL_H__
+