email/mail/PluginSrc/MailHtmlView/CMailMessageHtmlView.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/PluginSrc/MailHtmlView/CMailMessageHtmlView.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2002 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 message HTML view
+*
+*/
+
+
+// INCLUDE FILES
+#include 	"MailLog.h"
+#include    "CMailMessageHtmlView.h"
+#include 	"msgmailviewer.hrh"
+#include    "CMailHtmlBodyControl.h"
+#include    "CHtmlMailLoadStateMachine.h"
+#include 	"mailmessageutils.h"
+#include    <MMailAppUiInterface.h>
+#include 	<CMailMessage.h>
+#include    <MsgEditorView.h>  // CMsgEditorView
+#include 	<MsgMailViewer.rsg>
+#include 	<FindItem.hrh>
+#include    <FindItemMenu.rsg>
+#include 	<centralrepository.h>
+#include	<CommonUiInternalCRKeys.h>
+#include 	<MMSVATTACHMENTMANAGER.H>
+#include    <ImumInternalApi.h>
+#include    <ImumInSettingsKeys.h>
+#include    <ImumInSettingsData.h>
+
+
+// Messaging
+#include    <SenduiMtmUids.h>
+#include    <MIUTSET.h>
+#include    <MsgEditor.hrh> // Control types
+
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::CMailMessageHtmlView
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMailMessageHtmlView::CMailMessageHtmlView()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMailMessageHtmlView* CMailMessageHtmlView::NewL()
+	{
+	return new(ELeave) CMailMessageHtmlView ();
+	}
+
+// Destructor
+CMailMessageHtmlView::~CMailMessageHtmlView()
+    {
+    delete iHtmlBodyControl;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::DynInitOptionsMenuL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CMailMessageHtmlView::DynInitMenuPaneL(
+    TInt aResourceId,CEikMenuPane* aMenuPane)
+    {
+    if ( aResourceId == R_MSGMAILVIEWER_OPTIONS_MENU2 || 
+    	aResourceId == R_FINDITEMMENU_MENU )
+    	{
+    	TInt index(0);
+/*    	TInt value(0);
+	    // Create the session
+	    CRepository* crSession = CRepository::NewLC( KCRUidCommonUi );
+        // Get the value of AutomaticHighlight key
+        crSession->Get( KCuiAutomaticHighlight, value );
+        
+        if (value)
+        	{
+        	aMenuPane->SetItemDimmed(EFindItemCmdDisableAutoFind, ETrue);
+        	}
+        else
+        	{
+        	aMenuPane->SetItemDimmed(EFindItemCmdEnableAutoFind, ETrue);
+        	}
+        	
+   		aMenuPane->SetItemDimmed(EMsgMailViewerCmdCreateContact, 
+   			iHtmlBodyControl->BrowserControl().IsFocused());
+*/
+    	 // + 1 -> next to delete
+    	iHtmlBodyControl->BrowserControl().AddOptionMenuItemsL(
+    		*aMenuPane, aResourceId, index);	
+    	}
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::HandleCommandL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CMailMessageHtmlView::HandleCommandL(TInt aCommand)
+    {
+    TBool consumed(EFalse);
+    LOG1("CMailMessageHtmlView::HandleCommandL aCommand:%d", 
+	    aCommand);
+    iHtmlBodyControl->BrowserControl().HandleCommandL(aCommand);
+    return consumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::HandleKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CMailMessageHtmlView::HandleKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+    {
+    TKeyResponse consumed( EKeyWasNotConsumed );
+    LOG2("CMailMessageHtmlView::HandleKeyEventL aKeyEvent:%d  aType:%d", 
+	    aKeyEvent.iCode, aType); 
+    if ( aKeyEvent.iCode == EKeyLeftArrow && 
+        iAppUI->IsNextMessageAvailableL(EFalse) )
+        {
+        iAppUI->NextMessageL(EFalse);
+        consumed = EKeyWasConsumed;
+        }
+    else if ( aKeyEvent.iCode == EKeyRightArrow && 
+        iAppUI->IsNextMessageAvailableL(ETrue))
+        {
+        iAppUI->NextMessageL(ETrue);
+        consumed = EKeyWasConsumed;
+        }        
+    else
+        {
+        consumed = iHtmlBodyControl->BrowserControl().OfferKeyEventL(
+    	    aKeyEvent, aType );        
+        }      
+
+    return consumed;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::MessageLoadL
+// -----------------------------------------------------------------------------
+//
+void CMailMessageHtmlView::MessageLoadL(TInt aState, CMailMessage& aMessage)
+	{
+	if (aState == CMailMessage::EHeaderReady)
+		{
+		if( !HtmlSettingValueL( aMessage ) )
+			{
+			User::Leave(KErrNotSupported);
+			}
+		}
+	}
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::ViewMessageL
+// -----------------------------------------------------------------------------
+//
+void CMailMessageHtmlView::ViewMessageL(
+    CMailMessage& aMessage,
+    MMailAppUiInterface& aUICallBack,
+    TUint& aParams)
+    {
+    iAppUI = &aUICallBack;
+    iMessage = &aMessage;
+    
+    // Set data
+    CImHeader* header = aMessage.MessageHeader();
+    SetHeaderControlTextL(aMessage, *header);
+    CreateBrControlL();
+	
+	iLoadStateMachine = CHtmlLoadStateMachine::NewL( 
+			iAppUI, 
+			aMessage,
+			*iHtmlBodyControl );
+	iLoadStateMachine->StartL();		
+    aParams |= EMailUseDefaultNaviPane;     
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::CreateBrControlL
+// -----------------------------------------------------------------------------
+//
+void CMailMessageHtmlView::CreateBrControlL()
+    {
+	CMailHtmlBodyControl* htmlBodyControl = 
+		CMailHtmlBodyControl::NewLC( *iMessage, *iAppUI );
+    iAppUI->AddControlL(*htmlBodyControl);
+    iHtmlBodyControl = htmlBodyControl;
+    CleanupStack::Pop(); // htmlBodyControl
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::SetHeaderControlTextL
+// -----------------------------------------------------------------------------
+//
+void CMailMessageHtmlView::SetHeaderControlTextL(
+    CMailMessage& aMessage, CImHeader& aHeader)
+    {
+    if ( MailMessageUtils::IsOutgoingL( aMessage ) )
+        {
+	    CDesCArray& toRecipients = aHeader.ToRecipients();
+	    if (toRecipients.Count())
+	    	{
+	    	iAppUI->AddControlL(EMsgComponentIdTo);
+	    	iAppUI->SetAddressFieldTextL(
+            	EMsgComponentIdTo, 
+            	toRecipients);
+	    	}        
+        }
+    else
+        {
+        HBufC* from = aHeader.From().AllocLC();
+    	if ( from->Length()	)
+    		{
+    		iAppUI->AddControlL(EMsgComponentIdFrom);
+    		iAppUI->SetAddressFieldTextL(
+            	EMsgComponentIdFrom, 
+            	*from);
+    		}    	
+    	CleanupStack::PopAndDestroy(); // from
+        }
+        
+    CDesCArray& ccRecipients = aHeader.CcRecipients();
+    if (ccRecipients.Count())
+    	{
+    	iAppUI->AddControlL(EMsgComponentIdCc);
+    	iAppUI->SetAddressFieldTextL(
+            EMsgComponentIdCc, 
+            ccRecipients);
+    	}
+
+    CDesCArray& bccRecipients = aHeader.BccRecipients();
+    if (bccRecipients.Count())
+    	{
+    	iAppUI->AddControlL(EMsgComponentIdBcc);
+    	iAppUI->SetAddressFieldTextL(
+            EMsgComponentIdBcc, 
+            bccRecipients);
+    	}
+
+    iAppUI->AddControlL(EMsgComponentIdSubject);
+    iAppUI->SetSubjectL(aHeader.Subject());  
+    }
+
+// -----------------------------------------------------------------------------
+// CMailMessageHtmlView::HtmlSettingValueL
+// -----------------------------------------------------------------------------
+//
+TBool CMailMessageHtmlView::HtmlSettingValueL( CMailMessage& aMessage )
+    {
+    TBool retValue( EFalse );
+    // Use OpenHtml mail setting value in HTML plugin
+    TMsvEmailEntry message = aMessage.MessageEntry();    
+    if ( message.MHTMLEmail() )
+        {
+        CImumInternalApi* api = CreateEmailApiLC( aMessage.Session() );
+        CImumInSettingsData* settings = 
+            api->MailboxServicesL().LoadMailboxSettingsL( 
+                message.iServiceId );
+        CleanupStack::PushL( settings );    
+        
+        settings->GetAttr( TImumInSettings::EKeyOpenHtmlMail, retValue );
+        
+        CleanupStack::PopAndDestroy( settings );
+        settings = NULL;
+        CleanupStack::PopAndDestroy( api );
+        api = NULL;
+        }
+        
+    return retValue;
+    }
+  
+//  End of File