meetingrequest/mrgui/src/cesmrcontactmenuattachmenthandler.cpp
changeset 0 8466d47a6819
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/src/cesmrcontactmenuattachmenthandler.cpp	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,448 @@
+/*
+* Copyright (c) 2007-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:  Creates and display action menu.
+*
+*/
+
+
+#include "cesmrcontactmenuattachmenthandler.h"
+#include "cesmrconfirmationquery.h"
+
+#include "cfsccontactactionmenu.h"
+#include "fsccontactactionmenuuids.hrh"
+#include "cfsccontactactionmenuitem.h" 
+#include "tfsccontactactionmenuconstructparameters.h"
+#include "mfsccontactactionmenumodel.h"
+#include "cesmrattachmentinfo.h"
+#include "esmrhelper.h"
+#include "cesmriconfield.h"
+#include "nmrbitmapmanager.h"
+#include "cfsccontactactionservice.h"
+#include "esmrcommands.h"
+#include <CVPbkContactManager.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <VPbkContactStoreUris.h>
+#include <MVPbkContactStoreList.h>
+#include <TVPbkContactStoreUriPtr.h>
+#include <esmrgui.rsg>
+#include <data_caging_path_literals.hrh>
+#include <AknsUtils.h>
+#include <eikmenup.h>
+#include <gulicon.h>
+// DEBUG
+#include "emailtrace.h"
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// MR contains one attachment
+const TInt KOneAttachment( 1 );
+
+// Attachment actions menu uids
+static const TUid KOpenAttachmentViewUid = { 1 };
+static const TUid KOpenAttachmentUid = { 2 };
+static const TUid KDownloadAttachmentUid = { 3 };
+static const TUid KDownloadAllAttachmentsUid = { 4 };
+static const TUid KSaveAttachmentUid = { 5 };
+static const TUid KSaveAllAttachmentsUid = { 6 };
+
+}  // namespace
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// C++ default constructor.
+// ---------------------------------------------------------------------------
+//
+CESMRContactMenuAttachmentHandler::CESMRContactMenuAttachmentHandler(
+        CFscContactActionMenu& aContactActionMenu ) :
+        iContactActionMenu( aContactActionMenu )
+    {
+    FUNC_LOG;
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian two phased constructor that does not leave a pointer to the cleanup
+// stack.
+// ---------------------------------------------------------------------------
+//
+CESMRContactMenuAttachmentHandler* CESMRContactMenuAttachmentHandler::NewL(
+        CFscContactActionMenu& aContactActionMenu )
+    {
+    FUNC_LOG;
+    CESMRContactMenuAttachmentHandler* self = 
+		new (ELeave) CESMRContactMenuAttachmentHandler( aContactActionMenu );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Symbian 2nd phase constructor.
+// Creates the action menu object.
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::ConstructL()
+    {
+    FUNC_LOG;
+    }
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CESMRContactMenuAttachmentHandler::~CESMRContactMenuAttachmentHandler()
+    {
+    FUNC_LOG;
+    iIconArray.ResetAndDestroy();
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::Reset( )
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::Reset( )
+    {
+    FUNC_LOG;
+    iOptionsMenuAvailable = EFalse;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::SetAttachmentInfo( )
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::SetAttachmentInfo( 
+        CESMRAttachmentInfo* aAttachmentInfo )
+    {
+    iAttachmentInfo = aAttachmentInfo;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::InitActionMenuL
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::InitActionMenuL( )
+    {
+    FUNC_LOG;
+
+    if ( iAttachmentInfo )
+        {
+        iOptionsMenuAvailable = ETrue;
+        
+        MFscContactActionMenuModel& actionMenuModel = iContactActionMenu.Model();
+
+        TInt attachmentCount( iAttachmentInfo->AttachmentCount() );
+        
+        if( attachmentCount > KOneAttachment )
+        	{
+        	CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_VIEW_LIST,
+                KOpenAttachmentViewUid );
+                
+            // go through the list to see if we need to download 
+            // some attachment
+            TBool needDownload(EFalse);
+            
+            for( TInt ii = attachmentCount-1; ii >= 0 && !needDownload; --ii )
+                {
+                const CESMRAttachment& attachment( 
+                    iAttachmentInfo->AttachmentL( ii ) );
+                    
+                needDownload = attachment.AttachmenState() != 
+                    CESMRAttachment::EAttachmentStateDownloaded;
+                }
+            
+            // download all command    
+            if( needDownload )
+                {
+                CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_DOWNLOAD_ALL,
+                    KDownloadAllAttachmentsUid );
+                }
+            
+            // save all command    
+            CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_SAVE_ALL,
+                KSaveAllAttachmentsUid );
+        	}
+       	else
+       		{
+            // There is one attachment
+            const CESMRAttachment& attachment(
+                    iAttachmentInfo->AttachmentL( 0 ) );
+       		
+       		// open or download command
+       		if( attachment.AttachmenState() == CESMRAttachment::EAttachmentStateDownloaded )
+       			{
+                CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_OPEN,
+                    KOpenAttachmentUid );
+       			}
+       		else
+       			{
+                CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_DOWNLOAD,
+                    KDownloadAttachmentUid );
+       			}
+       		
+       		// save command   		
+            CreateMenuItemL( R_QTN_MEET_REQ_VIEWER_ACTION_ATTACH_SAVE,
+                KSaveAttachmentUid );
+       		}       		
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::CreateMenuItemL
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::CreateMenuItemL( 
+		TInt aResourceId, 
+		TUid aCommandUid )
+    {
+    FUNC_LOG;
+    CGulIcon* itemIcon = CreateIconL(aCommandUid);
+    //ownership transferred
+    CleanupStack::PushL( itemIcon );
+    iIconArray.AppendL( itemIcon );
+    CleanupStack::Pop( itemIcon );
+
+    HBufC* text = CCoeEnv::Static()->AllocReadResourceLC( aResourceId );
+    CFscContactActionMenuItem* newItem = 
+		iContactActionMenu.Model().NewMenuItemL( *text,
+												 itemIcon,
+                                                 1,
+                                                 EFalse,
+                                                 aCommandUid );
+
+    CleanupStack::PopAndDestroy( text );
+    CleanupStack::PushL( newItem );
+    iContactActionMenu.Model().AddItemL( newItem );
+    CleanupStack::Pop( newItem );
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::CreateIconL
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CESMRContactMenuAttachmentHandler::CreateIconL(TUid aCommandUid)
+    {
+    FUNC_LOG;
+    // Define default icon object
+    CFbsBitmap* iconBitmap( NULL );
+    CFbsBitmap* iconMaskBitmap( NULL );
+    NMRBitmapManager::TMRBitmapId iconID( NMRBitmapManager::EMRBitmapNotSet );
+
+    //select correct icon for item
+    if( aCommandUid == KOpenAttachmentViewUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapOpenAttachmentView;
+        }
+    else if ( aCommandUid ==KOpenAttachmentUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapOpenAttachment;
+        }
+    else if( aCommandUid == KDownloadAttachmentUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapDownloadAttachment;
+        }
+    else if( aCommandUid == KDownloadAllAttachmentsUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapDownloadAllAttachments;
+        }
+    else if( aCommandUid == KSaveAttachmentUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapSaveAttachment;
+        }
+    else if( aCommandUid == KSaveAllAttachmentsUid )
+        {
+        iconID = NMRBitmapManager::EMRBitmapSaveAllAttachments;
+        }
+
+    User::LeaveIfError( 
+            NMRBitmapManager::GetSkinBasedBitmap( 
+                    iconID, iconBitmap, iconMaskBitmap, KIconSize ) );
+    
+    CGulIcon* icon = CGulIcon::NewL( iconBitmap, iconMaskBitmap );
+    return icon;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::OptionsMenuAvailable( )
+// ---------------------------------------------------------------------------
+//
+TBool CESMRContactMenuAttachmentHandler::OptionsMenuAvailable( )
+    {
+    FUNC_LOG;
+    return iOptionsMenuAvailable;
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::InitOptionsMenuL
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::InitOptionsMenuL( 
+		CEikMenuPane* aActionMenuPane )
+    {
+    FUNC_LOG;
+
+    if ( iAttachmentInfo )
+        {
+        iOptionsMenuAvailable = ETrue;
+
+        CEikMenuPaneItem::SData data;
+
+        TInt attachmentCount( iAttachmentInfo->AttachmentCount() );
+        
+        CCoeEnv* coeEnv = CCoeEnv::Static();
+        
+        if( attachmentCount > KOneAttachment )
+        	{
+        	// command to open download manager
+            data.iFlags = 0;
+            data.iCascadeId = 0;
+            data.iCommandId = EESMRCmdOpenAttachmentView;
+
+            TRAP_IGNORE( coeEnv->ReadResourceL( 
+                	data.iText, R_QTN_MEET_REQ_VIEWER_OPTIONS_ATTACH_VIEW_LIST ) );
+            aActionMenuPane->AddMenuItemL( data );
+            
+            // go through the list to see if we need to download 
+            // some attachment
+            TBool needDownload(EFalse);
+            
+            for( TInt ii = attachmentCount-1; ii >= 0 && !needDownload; --ii )
+                {
+                const CESMRAttachment& attachment( 
+                    iAttachmentInfo->AttachmentL( ii ) );
+                    
+                needDownload = attachment.AttachmenState() != 
+                    CESMRAttachment::EAttachmentStateDownloaded;
+                }
+            
+            // download all command    
+            if( needDownload )
+                {
+                data.iFlags = 0;
+                data.iCascadeId = 0;
+                data.iCommandId = EESMRCmdDownloadAllAttachments;
+
+                TRAP_IGNORE( coeEnv->ReadResourceL( 
+                    	data.iText, R_QTN_MEET_REQ_VIEWER_OPTIONS_ATTACH_DOWNLOAD_ALL ) );
+                aActionMenuPane->AddMenuItemL( data );    
+                }
+            
+            // save all command    
+            data.iFlags = 0;
+            data.iCascadeId = 0;
+            data.iCommandId = EESMRCmdSaveAllAttachments;
+
+            TRAP_IGNORE( coeEnv->ReadResourceL( 
+                	data.iText, R_QTN_MEET_REQ_VIEWER_OPTIONS_ATTACH_SAVE_ALL ) );
+            aActionMenuPane->AddMenuItemL( data );            
+        	}
+       	else
+       		{
+            // There is one attachment
+            const CESMRAttachment& attachment(
+                    iAttachmentInfo->AttachmentL( 0 ) );
+       		
+       		// open or download command
+       		if( attachment.AttachmenState() == CESMRAttachment::EAttachmentStateDownloaded )
+       			{
+                data.iFlags = 0;
+                data.iCascadeId = 0;
+                data.iCommandId = EESMRCmdOpenAttachment;
+
+                TRAP_IGNORE( coeEnv->ReadResourceL( 
+                		data.iText, R_QTN_OPTIONS_OPEN ) );
+                aActionMenuPane->AddMenuItemL( data );                
+       			}
+       		else
+       			{
+                data.iFlags = 0;
+                data.iCascadeId = 0;
+                data.iCommandId = EESMRCmdDownloadAttachment;
+
+                TRAP_IGNORE( coeEnv->ReadResourceL( 
+                    	data.iText, R_QTN_MEET_REQ_VIEWER_OPTIONS_ATTACH_DOWNLOAD ) );
+                aActionMenuPane->AddMenuItemL( data );    
+       			}
+       		
+       		// save command
+            data.iFlags = 0;
+            data.iCascadeId = 0;
+            data.iCommandId = EESMRCmdSaveAttachment;
+
+            TRAP_IGNORE( coeEnv->ReadResourceL( 
+                	data.iText, R_QTN_MEET_REQ_VIEWER_OPTIONS_ATTACH_SAVE ) );
+            aActionMenuPane->AddMenuItemL( data );    
+       		}
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::ShowActionMenuL( )
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::ShowActionMenuL( )
+    {
+    FUNC_LOG;
+    TFscActionMenuResult menuResult = iContactActionMenu.ExecuteL();
+
+    if ( menuResult == EFscCustomItemSelected )
+        {
+        TUid uid = iContactActionMenu.FocusedItem().ImplementationUid();
+        if ( uid == KOpenAttachmentViewUid )
+            {
+            //OpenAttachmentViewL();
+            iCommandObserver->ProcessCommandL( EESMRCmdOpenAttachmentView );
+            }
+        else
+        if( uid == KOpenAttachmentUid )
+            {
+            iCommandObserver->ProcessCommandL( EESMRCmdOpenAttachment );
+            }
+        else
+        if( uid == KDownloadAllAttachmentsUid )
+            {
+            iCommandObserver->ProcessCommandL( EESMRCmdDownloadAllAttachments );
+            }
+        else
+        if( uid == KDownloadAttachmentUid )
+            {
+            iCommandObserver->ProcessCommandL( EESMRCmdDownloadAttachment );
+            }
+        else
+        if( uid == KSaveAllAttachmentsUid )
+            {
+            iCommandObserver->ProcessCommandL( EESMRCmdSaveAllAttachments );
+            }
+        else
+        if( uid == KSaveAttachmentUid )
+            {
+            iCommandObserver->ProcessCommandL( EESMRCmdSaveAttachment );
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CESMRContactMenuAttachmentHandler::SetCommandObserver()
+// ---------------------------------------------------------------------------
+//
+void CESMRContactMenuAttachmentHandler::SetCommandObserver(
+            MEikCommandObserver* aCommandObserver )
+    {
+    FUNC_LOG;
+    iCommandObserver = aCommandObserver;
+    }
+// End of file
+