--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/ViewerSrc/cmsgmailviewercontactcaller.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,215 @@
+/*
+* Copyright (c) 2006 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: Mail viewer contact caller.
+*
+*/
+
+#include "cmsgmailviewercontactcaller.h"
+#include "cmsgmailviewercontactmatcher.h"
+#include "MailLog.h"
+#include "MailUtils.h"
+#include "msgmailviewer.hrh"
+#include <MsgMailViewer.rsg>
+#include <AiwServiceHandler.h>
+#include <eikmenup.h>
+#include <aiwdialdataext.h>
+
+// Constants
+
+// ---------------------------------------------------------------------------
+// CMsgMailViewerContactCaller
+// ---------------------------------------------------------------------------
+//
+CMsgMailViewerContactCaller::CMsgMailViewerContactCaller(
+ CAiwServiceHandler& aServiceHandler,
+ CMsgMailViewerContactMatcher& aContactMatcher )
+ : iServiceHandler( aServiceHandler ),
+ iContactMatcher( aContactMatcher )
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// ConstructL
+// ---------------------------------------------------------------------------
+//
+inline void CMsgMailViewerContactCaller::ConstructL()
+ {
+ iServiceHandler.AttachMenuL ( R_MSGMAILVIEWER_CALL_MENU,
+ R_MSGMAILVIEWER_CALL_INTEREST );
+
+ // Attach also base interest
+ iServiceHandler.AttachL( R_MSGMAILVIEWER_CALL_INTEREST );
+ }
+
+// ---------------------------------------------------------------------------
+// NewL
+// ---------------------------------------------------------------------------
+//
+CMsgMailViewerContactCaller* CMsgMailViewerContactCaller::NewL(
+ CAiwServiceHandler& aServiceHandler,
+ CMsgMailViewerContactMatcher& aContactMatcher )
+ {
+ CMsgMailViewerContactCaller* self =
+ new( ELeave ) CMsgMailViewerContactCaller( aServiceHandler,
+ aContactMatcher );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// ~CMsgMailViewerContactCaller
+// ---------------------------------------------------------------------------
+//
+CMsgMailViewerContactCaller::~CMsgMailViewerContactCaller()
+ {
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerContactCaller::DynInitMenuPaneL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerContactCaller::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane,
+ TBool aShowCallOption )
+ {
+ if ( iServiceHandler.HandleSubmenuL( *aMenuPane ) )
+ {
+ return;
+ }
+ if ( aResourceId == R_MSGMAILVIEWER_CALL_MENU )
+ {
+ if ( aShowCallOption )
+ {
+ iServiceHandler.InitializeMenuPaneL(
+ *aMenuPane,
+ R_MSGMAILVIEWER_CALL_MENU,
+ EMsgMailViewerCmdAIWRangeStart,
+ iServiceHandler.InParamListL() );
+ }
+ else
+ {
+ aMenuPane->SetItemDimmed( KAiwCmdCall, ETrue );
+ }
+ }
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerContactCaller::CanHandleCommand()
+// ------------------------------------------------------------------------------
+//
+TBool CMsgMailViewerContactCaller::CanHandleCommand( TInt aCommand ) const
+ {
+ TBool retVal( EFalse );
+
+ if(aCommand == EMsgMailViewerCmdCall)
+ {
+ retVal = ETrue;
+ }
+ else
+ {
+ TInt aiwCommand = iServiceHandler.ServiceCmdByMenuCmd( aCommand );
+ LOG1("iServiceHandler.ServiceCmdByMenuCmd:%d", aiwCommand );
+ retVal = ( aiwCommand == KAiwCmdCall );
+ }
+
+ return retVal;
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerContactCaller::CallToContactL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerContactCaller::CallToContactL(
+ TInt aCommand,
+ const TDesC& aEmailAddress )
+ {
+ ASSERT( CanHandleCommand( aCommand ) );
+ iCommand = aCommand;
+ iContactMatcher.FindContactL( aEmailAddress,
+ CMsgMailViewerContactMatcher::ECallToContact,
+ TCallBack( MatchDoneL, this ) );
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerContactCaller::MatchDoneL()
+// ------------------------------------------------------------------------------
+//
+TInt CMsgMailViewerContactCaller::MatchDoneL( TAny* aCaller ) // CSI: 40 # We must return
+ // the integer value although this
+ // is a leaving method.
+ {
+ CMsgMailViewerContactCaller* caller =
+ static_cast<CMsgMailViewerContactCaller*>( aCaller );
+ caller->DoCallToContactL();
+ return 0;
+ }
+
+// ------------------------------------------------------------------------------
+// CMsgMailViewerContactCaller::DoCallToContactL()
+// ------------------------------------------------------------------------------
+//
+void CMsgMailViewerContactCaller::DoCallToContactL()
+ {
+ HBufC* number = iContactMatcher.GetDataL();
+ if ( number )
+ {
+ CleanupStack::PushL( number );
+ CAiwGenericParamList& paramList = iServiceHandler.InParamListL();
+
+ CAiwDialDataExt* dialData = CAiwDialDataExt::NewLC();
+
+ dialData->SetPhoneNumberL( *number );
+ HBufC* name = iContactMatcher.GetNameL();
+ if ( name )
+ {
+ CleanupStack::PushL( name );
+
+ dialData->SetNameL( name->Left( AIWDialDataExt::KMaximumNameLength ) );
+ CleanupStack::PopAndDestroy( name );
+ }
+
+ dialData->SetWindowGroup( CCoeEnv::Static()->RootWin().Identifier() );
+ dialData->FillInParamListL( paramList );
+
+ //Internal command which comes when user has pressed send key.
+ if ( iCommand == EMsgMailViewerCmdCall )
+ {
+ iServiceHandler.ExecuteServiceCmdL( KAiwCmdCall,
+ paramList,
+ iServiceHandler.OutParamListL() );
+
+ }
+ //Aiw command from menu
+ else
+ {
+ iServiceHandler.ExecuteMenuCmdL( iCommand,
+ paramList,
+ iServiceHandler.OutParamListL() );
+ }
+
+ CleanupStack::PopAndDestroy(2); // CSI: 47 # number, dial
+ }
+ else
+ {
+ MailUtils::InformationNoteL( R_MSGMAILVIEWER_NO_MATCHES_NOTE );
+ }
+
+ }
+
+// End of File
+