diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/inc/FreestyleEmailUiAttachmentsListModel.h --- /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 +// +#include "fstreelist.h" +// + +// 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& 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 iAttachments; + }; + +#endif //__FREESTYLEEMAILUI_MAILLISTMODEL_H__ +