diff -r 000000000000 -r 8466d47a6819 meetingrequest/mrgui/src/cesmrcontactmenuattachmenthandler.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +// 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 +