calendarui/commonutils/inc/calenattachmentmodel.h
author Stefan Karlsson <stefan.karlsson@nokia.com>
Mon, 29 Mar 2010 20:02:13 +0100
branchCompilerCompatibility
changeset 16 7bb9df301388
parent 0 f979ecb2b13e
child 12 38571fd2a704
permissions -rw-r--r--
Fixed another "extra qualification" error.

/*
* Copyright (c) 2009 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 : class declaration of CCalenAttachmentModel 
 *
*/

#ifndef CALENATTACHMENTMODEL_H
#define CALENATTACHMENTMODEL_H

#include <apgcli.h>
#include <calentry.h>
#include "calenattachmentinfo.h"

class CGulIcon;
class CCalenAttachmentInfo;
class CFbsBitmap;

/**
 * Attachment model observer.
 */
class MCalenAttachmentModelObserver
    {
    public:
    
        enum TCalenAttachmentCommand
            {
            ECalenAttachmentAdded = 0,
            ECalenAttachmentRemoved
            };

    public:

        /**
        * This function that is called when attachment model adds or removes
        * attachments from its list.
        *
        * @param aCommand 
        */
        virtual void NotifyChanges( TCalenAttachmentCommand aCommand ,
                                    TInt aAttachmentIndex) = 0;
        
        /**
        * This function that is called when attachment model needs to
        * get access to an attachment file
        * 
        * @param aIndex Index of the attachment for which file handle is requested
        * @return (read-only) file handle
        */
        virtual RFile GetAttachmentFileL(TInt aIndex) = 0;
    };

/**
 * Attachment model.
 */
class CCalenAttachmentModel : public CBase
    {
    public:

        /**
         * First phase constructor
         * 
         * @return returns pointer to CCalenAttachmentModel
         */
        IMPORT_C static CCalenAttachmentModel* NewL();

        /**
         * Destructor.
         */
        ~CCalenAttachmentModel();
        
    private:

        /**
         * Default Constructor.
         */
        CCalenAttachmentModel();

        /**
         * 2nd phase constructor.
         */
        void ConstructL();        

    public:
        
        /**
         * Sets attachment model observer.
         * 
         * @param aObserver pointer to the MCalenAttachmentModelObserver
         */
        IMPORT_C void SetObserver(MCalenAttachmentModelObserver* aObserver);
        
        /**
         * Returns number of attachments in the internal array of attachments.
         * 
         * @return TInt number of attachments
         */
        IMPORT_C TInt NumberOfItems() const;

        /**
         * Returns reference to attachment info at given index.
         * 
         * @param aIndex index for which attachment info is needed
         * @return return attachment info
         */
        IMPORT_C CCalenAttachmentInfo& AttachmentInfoAt(TInt aIndex) const;

        /**
         * Adds attachment to the internal array. Notifies attachment model
         * observer with ECalenAttachmentAdded parameter.
         * 
         * @param aFullName file name of the attachment to be added
         */
        IMPORT_C void AddAttachmentL(const TDesC& aFullName, const TDesC& aSystemFileName);

        /**
         * Adds attachment to the internal array. Notifies attachment model
         * observer with ECalenAttachmentAdded parameter.
         * 
         * @param aFullName file name of the attachment to be added
         * @param aSize size of the attachment file
         * @param aFetched fetched or not
         * @param aDataType mime type of the attachment
         */
        IMPORT_C void AddAttachmentL( const TDesC& aFullName, const TDesC& aSystemFileName, TInt aSize,
                   TBool aFetched, const TDataType& aDataType );
        
        /**
         * Deletes attachment from internal array. Notifies attachment model
         * observer with ECalenAttachmentRemoved parameter.
         * 
         * @param aIndex index for which attachment to be deleted
         */
        IMPORT_C TBool DeleteAttachment(TInt aIndex);

        /**
         * Reset the attachment model (empties the internal array).
         */
        IMPORT_C void Reset();

        /**
         * Loads resources, i.e. bitmaps & layouts
         */
        IMPORT_C void LoadResourcesL();

        /*
         * Get file handle from "model observer"
         * 
         * @param aIndex index of the attachment info
         * @return RFile returns the file handle
         */
        IMPORT_C RFile GetAttachmentFileL( TInt aIndex );
        
        /**
         * Get the attachment lists
         * 
         * @param aAttachmentList fills the attachment list
         */
        IMPORT_C void GetAttachmentListL(
                    RPointerArray<CCalenAttachmentInfo> &aAttachmentList);
        
        /**
         * Returns pointer to bitmap of the application that handles given file.
         * 
         * @param aAttaInfo reference to the attachment info
         * @return returns CGulIcon
         */
        IMPORT_C CGulIcon* BitmapForFileL(CCalenAttachmentInfo& aAttaInfo);
        
        /**
         * Updates attachment mode with the attahcments of entr if it has any
         * 
         * @param   None
         * @return  None
         */
        IMPORT_C void CheckForExistingAttachmentsL(CCalEntry* entry);
        
    private:

        /**
         * Returns pointer to bitmap of given application.
         * 
         * @param aAppUid UID of the application for which bitmap is requested
         * @return
         */
        CGulIcon* BitmapForAppL( const TUid &aAppUid );

        /**
         * Creates new attachment info object.
         * 
         * @param aFileName filename of the attachment
         * @param aSize size of the attachment
         * @param aFetched attacment fetched or not
         * @param aDataType mime type of the attachment
         * @return
         */
        CCalenAttachmentInfo* CreateNewInfoL( const TDesC& aFileName,
                                              const TDesC& aSystemFileName,
                                              TInt aSize,
                                              TBool aFetched,
                                              const TDataType& aDataType,
        const CCalenAttachmentInfo::TCalenAttachmentStoreType aStoreType);
        
        /**
         * Deletes attachment from given index.
         *
         * @param aIndex Index of the deleted attachment.
         */
        TBool DoDeleteAttachmentL( TInt aIndex );
        /**
         * @brief Checks if the total attachment size plus the new file size exceeds 1MB .
         *
         * @param aNewFileSize Size of the selected attachment.
         */
        TBool CheckFileSizeLimitL( TInt aNewFileSize );
        
    private:
        RPointerArray<CCalenAttachmentInfo> iAttachInfoArray;
        MCalenAttachmentModelObserver* iAttachmentModelObserver;
        RApaLsSession iAppList;
        TSize iIconSize;
        TBool isAttachmentModelCleared; // Flag to tell if attachment model is reset. If yes, then only it will be populated again
    };

#endif // CALENATTACHMENTMODEL_H

// End of File