calendarui/controller/inc/calenattachmentui.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 10:12:19 +0200
changeset 0 f979ecb2b13e
child 28 96907930389d
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* 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:
*
*/

#ifndef CALENATTACHMENTUI_H
#define CALENATTACHMENTUI_H

#include <e32base.h>
#include <MMGFetchVerifier.h>
#include <MAknFileSelectionObserver.h>
#include <AknWaitNoteWrapper.h>
#include <ConeResLoader.h>
#include <calencommandhandler.h>
#include <calencommands.hrh>
#include <calennotificationhandler.h>

#include "calenattachmentutils.h"
#include "calenattachmentmodel.h"

class CCalenController;
class MCalenCommandHandler;
class CCalenViewAttachmentsDialog;
class TContentProtection;

#include <AknServerApp.h>
/**
 * Handles attachment related commands
 */
class CCalenAttachmentUi : public CBase,
                           public MCalenCommandHandler,
                           public MCalenNotificationHandler,
                           public MMGFetchVerifier,
                           public MAknFileSelectionObserver,
                           public MCalenAttachmentModelObserver,
                           public MProgressDialogCallback
    {
    public:
        
        /**
         * First phase constructor
         * 
         * @param aController A reference to calencontroller
         * @return pointer to CCalenAttachmentUi
         */
        static CCalenAttachmentUi* NewL( CCalenController& aController );
        
        /**
         * Virtual destructor
         */
        virtual ~CCalenAttachmentUi();

    private:
        
        /**
         * C++ constructor, non-leaving
         * 
         * @param aController A reference to the calencontroller
         */
        CCalenAttachmentUi(CCalenController& aController);
        
        /**
         * 2nd phase constructor
         */
        void ConstructL();
        
        void CheckDRMStatus(const TDesC& aFileName,TBool& aProtection);
        
    public:
        
        /**
         * From MCalenCommandHandler
         * Handles the attachement commands
         * 
         * @param aCommand Command to be handled
         * @return returns whether command is successfully handled or not
         */
        TBool HandleCommandL(const TCalenCommand& aCommand);
        
        /**
         * From MCalenCommandHandler.
         * Allows extending this API without breaking BC.
         * 
         * @param aExtensionUid specifies
         * @return extension of the requested type
         */
        TAny* CalenCommandHandlerExtensionL( TUid aExtensionUid );
        
        /** 
         * From MCalenNotificationHandler
         * Handle notifications
         * 
         * @param aNotification Nofication to be handled
         */
        void HandleNotification(const TCalenNotification aNotification );
        
        /**
         * From MMGFetchVerifier
         * Interface for verifying fetch file selection
         * 
         * @param aSelectedFiles Holds the list of selected files
         * @return TBool returns whether file is selected or not
         */
        TBool VerifySelectionL(const MDesCArray* aSelectedFiles);
        
        /**
         * From MAknFileSelectionObserver
         * Get's called when user selects an file.
         * 
         * @param aDriveAndPath Drive and full path of the file.
         * @param aEntry An entry containing all information of selected item.
         * @return Returns ETrue if it is ok to exit from dialog.
         */
        TBool OkToExitL( const TDesC& aDriveAndPath, const TEntry& aEntry );
        
        /**
         * From MCalenAttachmentModelObserver
         * This function that is called when attachment model adds or removes
         * attachments from its list.
         *
         * @param aCommand TCalenAttachmentCommand whether attachment is added
         *                 or removed 
         * @param attachmentIndex index of the attachment info
        */
        void NotifyChanges( TCalenAttachmentCommand aCommand ,
                          TInt aAttachmentIndex );
        
        /**
         * From MCalenAttachmentModelObserver
         * This function that is called when attachment model needs to
         * get access to an attachment file
         * 
         * @param aIndex index of the attachment file
         * @return returns the file handle
         */
        RFile GetAttachmentFileL(TInt aIndex);
        
        /**
         * From MProgressDialogCallback
         * 
         * called when dialog is dismissed
         */
        void DialogDismissedL( TInt aButtonId );

    private:
        
        /**
         * Used to fetch the attachment
         *
         * @param aFetchType, EImage,ENote,EAudio,EVideo
         * @return TBool returns ETrue if file is fetched successfully
         * otherwise returns EFalse
         */
        TBool FetchFileL( 
                CCalenAttachmentUtils::TCalenAttachmentFileType aFetchType);
        
        /**
         * Handles ECalenAddAttachment command 
         */
        void HandleAddAttachmentL();
        
        /**
         * Check for esisting attachments from the calentry     
         */
        void CheckForExistingAttachmentsL();
        
        /**
         * Copy fetched files from gallery/notes in to temporary folder
         * 
         * @param aTempPath 
         * @param aSourceFilePath
         */
        void CopyFetchedFilesL( TFileName& aTempPath, const TDesC& aSourceFilePath);
       
        /**
         * Add an attachment based on the file path
         * 
         * @param aSourcepath path of the file being attached
         */
        void AddAttachmentL(const TDesC& aSourceFilePath);
        
        /**
         * Remove the attachment from the calendar entry

         * @param aAttachmentIndex index of the attachment to be rmeoved 
         */
        void RemoveAttachmentFromEntryL(TInt aAttachmentIndex);
        
        /**
         * Add attachments to the calendar entry
         */
        void AddAttachmentsToEntryL();
        
        /** 
         * Handle notifications
         * 
         * @param aNotification Nofication to be handled
         */
        void DoHandleNotificationL(const TCalenNotification aNotification );
        
        /**
         * Handles ECalenViewAttachmentList command 
         */
        void DoAttachmentL();
        
        /**
         * Show wait note
         */
        void ShowWaitNoteL( TBool aCanCancel );
        
        /**
         * Compares the names of attachment being alredy added to editor, and 
         * the other one which user is trying to add now.
         */
        TBool IsDuplicateNameL(const TDesC& aSelectedFile);
        
        /**
         * Compares the binary data for the text files.
         */
        TBool CompareContentOfTextFiles(const TDesC& aSelectedFile,const TDesC& aAlreadyAttachedFile);
        
        /**
         * Remove the temporary file after attaching the attachtment to tht entry.
         */
        void RemoveTemporaryFiles();
        
    private:
        
        // reference to the calencontroller
        CCalenController& iController;
        CCalenAttachmentModel* iAttachmentModel;
        //own: attachment dilalog title
        HBufC* iTitle;
        //Not owned
        CCalenViewAttachmentsDialog* iAttachmentdlg;
        
        // Internal Flag
        TBool iAttachmentLoadingOn;
        
        // Own: Wait dialog
        CAknWaitDialog* iWaitDialog;
        
        TInt iSelectedCommand;         //command used to differntiate between the type of attachment user is trying to add. 
        TBool iAddAttachmentFromViewer;//shows attachment got added from attachment list view.
        TBool iShowToolbar;            //To update the toolbar visiblity.
        TBool iViewerActive;           //To avoid the problem of status pane change.
        TBool iSFound;                 //To check wether name is duplicated or not.
        TBool iAttachmentAlreadyExists;
        TBool iAttachmentInfoIntialized;
    };

#endif // CALENATTACHMENTUI_H