email/mail/PluginSrc/MailHtmlView/CMailHtmlBodyControl.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/PluginSrc/MailHtmlView/CMailHtmlBodyControl.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,425 @@
+/*
+* Copyright (c) 2002-2004 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:  HTML body control
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "CMailHtmlBodyControl.h"
+#include 	"MailLog.h"
+#include 	<MsgBaseControl.h>
+#include	<MsgEditor.hrh>
+#include 	<CMailMessage.h>
+// Browser
+#include 	<BrCtlInterface.h>
+#include 	<BrCtlDefs.h>
+#include    <TXTRICH.H> 
+#include    <MMailAppUiInterface.h>
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::CMailHtmlBodyControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMailHtmlBodyControl::CMailHtmlBodyControl( 
+	CMailMessage& aMessage,
+	MMailAppUiInterface& aUICallBack ): 
+	iMessage( aMessage ), iUICallBack( aUICallBack )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::ConstructL()
+    {   
+    CCoeControl& appui = iUICallBack.ParentControl();
+    TRect base = iUICallBack.MsgViewRect(0);
+	LOG2("CMailHtmlBodyControl::ConstructL W:%d H:%d", 
+	base.Width(), base.Height() );
+
+
+    TUint capabilities(TBrCtlDefs::ECapabilityClientResolveEmbeddedURL);
+    capabilities |= TBrCtlDefs::ECapabilityFindItem;
+    capabilities |= TBrCtlDefs::ECapabilityDisableInputAndPlugins;
+    
+    iBrControl = CreateBrowserControlL(
+    	&appui, 
+    	base, capabilities, 
+    	TBrCtlDefs::ECommandIdBase, 
+    	NULL, this, NULL, NULL, NULL, NULL);
+    iBrControl->SetBrowserSettingL(TBrCtlDefs::ESettingsSmallScreen, ETrue);
+    iBrControl->SetBrowserSettingL(TBrCtlDefs::ESettingsEmbedded, ETrue);
+    
+/*
+    iBrControl->SetBrowserSettingL(TBrCtlDefs::ESettingsSmallScreen, 1);
+    //iBrControl->SetBrowserSettingL(TBrCtlDefs::ESettingSecurityWarnings, 1);
+    iBrControl->SetBrowserSettingL(TBrCtlDefs::ESettingsAutoLoadImages, 1);
+    //iBrControl->SetContainerWindowL(appui.Window());
+    iBrControl = CreateBrowserControlL(CCoeControl* aParent, TRect aRect,
+    TUint aBrCtlCapabilities, TUint aCommandIdBase = TBrCtlDefs::ECommandIdBase,
+    MBrCtlSoftkeysObserver* aBrCtlSoftkeysObserver = NULL,
+    MBrCtlLinkResolver* aBrCtlLinkResolver = NULL,
+    MBrCtlSpecialLoadObserver* aBrCtlSpecialLoadObserver = NULL,
+    MBrCtlLayoutObserver* aBrCtlLayoutObserver = NULL,
+    MBrCtlDialogsProvider* aBrCtlDialogsProvider = NULL);    */    
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMailHtmlBodyControl* CMailHtmlBodyControl::NewLC( 
+	CMailMessage& aMessage ,MMailAppUiInterface& aUICallBack )
+    {
+    CMailHtmlBodyControl* self = new( ELeave ) CMailHtmlBodyControl( 
+    	aMessage, aUICallBack );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+    
+// Destructor
+CMailHtmlBodyControl::~CMailHtmlBodyControl()
+    {
+    delete iBrControl;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::BrowserControl
+// -----------------------------------------------------------------------------
+//
+CBrCtlInterface& CMailHtmlBodyControl::BrowserControl()
+    {
+    return *iBrControl;
+    }
+    
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::MessageLoadingL
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::MessageLoadingL(TInt aStatus, CMailMessage& aMessage)
+    {
+	if( aStatus == CMailMessage::ELinkedFileReady ) 
+		{
+        LOG1( "CMailHtmlBodyControl::ELinkedFileReady 0x%08x", 
+	        aMessage.LinkedHtmlId());		
+		RFile linkedHtml = aMessage.LinkedHtmlContent();
+		if ( linkedHtml.SubSessionHandle() != 0 )
+			{			
+			CleanupClosePushL( linkedHtml );
+			TInt fileSize(0);
+			linkedHtml.Size( fileSize );
+			HBufC8* data = HBufC8::NewLC( fileSize );
+			TPtr8 ptr( data->Des() );
+			User::LeaveIfError( linkedHtml.Read( ptr ) );
+			_LIT(KContent, "image/gif");
+			iEmbeddedLinkContent->HandleResolveComplete(
+			    KContent,
+                KNullDesC(),
+                data );
+	        CleanupStack::PopAndDestroy(2);		// CSI: 47 # data, linkedHtml
+			}
+		else
+		    {		    
+		    iEmbeddedLinkContent->HandleResolveError( KErrCorrupt );
+		    }
+		}		    
+    }
+    
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::CurrentLineRect
+// -----------------------------------------------------------------------------
+//
+TRect CMailHtmlBodyControl::CurrentLineRect()
+	{
+	TRect rect = iBrControl->Rect();
+	LOG2("CMailHtmlBodyControl::CurrentLineRect W:%d H:%d", 
+		rect.Width(), rect.Height() );	
+
+	return rect;
+	}
+	
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::SetAndGetSizeL
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::SetAndGetSizeL( TSize& aSize )
+	{
+	TSize htmlSize = iBrControl->ContentSize();
+	TSize brc = iBrControl->Size();
+	iBrControl->SetSize( aSize );
+	htmlSize = iBrControl->ContentSize();	
+	}
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::ClipboardL
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::ClipboardL( TMsgClipboardFunc aFunc )
+	{
+	LOG1("CMailHtmlBodyControl::ClipboardL %d", aFunc );
+	}
+	
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::EditL
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::EditL( TMsgEditFunc aFunc )
+	{
+	LOG1("CMailHtmlBodyControl::EditL %d", aFunc );	
+	}
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::IsFocusChangePossible
+// -----------------------------------------------------------------------------
+//
+TBool CMailHtmlBodyControl::IsFocusChangePossible( 
+	TMsgFocusDirection aDirection )  const
+	{
+	LOG1("CMailHtmlBodyControl::IsFocusChangePossible %d", aDirection );
+	return aDirection == EMsgFocusDown ? EFalse : ETrue;
+	}
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::IsCursorLocation
+// -----------------------------------------------------------------------------
+//
+TBool CMailHtmlBodyControl::IsCursorLocation( 
+	TMsgCursorLocation aLocation ) const
+	{
+	LOG1("CMailHtmlBodyControl::IsCursorLocation %d", aLocation );
+	return EFalse;
+	}
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::EditPermission
+// -----------------------------------------------------------------------------
+//
+TUint32 CMailHtmlBodyControl::EditPermission() const
+	{
+	return 0;
+	}
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PrepareForReadOnly
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::PrepareForReadOnly( TBool /*aReadOnly*/ )
+	{
+	
+	}
+
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::VirtualHeight
+// Returns approximate height of the control.
+// -----------------------------------------------------------------------------
+//
+TInt CMailHtmlBodyControl::VirtualHeight()
+    {
+	LOG1("CMailHtmlBodyControl::VirtualHeight H:%d", 
+	    iBrControl->Size().iHeight);
+    TSize htmlSize = iBrControl->ContentSize();
+	LOG1("CMailHtmlBodyControl::VirtualHeight brContent h:%d", 
+	    htmlSize.iHeight);    
+    return htmlSize.iHeight;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::VirtualVisibleTop
+// Returns a topmost visible text position.
+// -----------------------------------------------------------------------------
+//
+TInt CMailHtmlBodyControl::VirtualVisibleTop()
+    {
+    LOG("CMailHtmlBodyControl::VirtualVisibleTop");   
+    return iBrControl->Rect().iTl.iY; // left corner
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::HandleBrowserLoadEventL
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::HandleBrowserLoadEventL(
+        	TBrCtlDefs::TBrCtlLoadEvent aLoadEvent, 
+        	TUint /*aSize*/, 
+        	TUint16 /*aTransactionId*/)
+	{
+	if (aLoadEvent == TBrCtlDefs::EEventNewUrlContentArrived)
+		{
+		//
+		}
+	}
+	
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::ResolveEmbeddedLinkL
+// -----------------------------------------------------------------------------
+//	
+TBool CMailHtmlBodyControl::ResolveEmbeddedLinkL(const TDesC& aEmbeddedUrl,
+    const TDesC& aCurrentUrl,
+    TBrCtlLoadContentType aLoadContentType, 
+    MBrCtlLinkContent& aEmbeddedLinkContent)
+	{
+	TBool resolve(EFalse);
+	LOG2("CMailHtmlBodyControl::ResolveEmbeddedLinkL eURL:%S, cURL:%S",
+		&aEmbeddedUrl , &aCurrentUrl);
+	// Resolve local image link
+	if (aLoadContentType==ELoadContentTypeImage)
+		{
+		iEmbeddedLinkContent = &aEmbeddedLinkContent;
+		iMessage.LoadLinkedHtmlContentL(aCurrentUrl, aEmbeddedUrl, *this);
+		resolve = ETrue;
+		}
+    return resolve;
+	}
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::ResolveLinkL
+// -----------------------------------------------------------------------------
+//        	
+TBool CMailHtmlBodyControl::ResolveLinkL(const TDesC& aUrl, 
+    const TDesC& aCurrentUrl,
+    MBrCtlLinkContent& /*aBrCtlLinkContent*/)
+	{
+	LOG2("CMailHtmlBodyControl::ResolveLinkL aURL:%S, cURL:%S",
+		&aUrl , &aCurrentUrl);
+	return EFalse;
+	}
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::CancelAll
+// -----------------------------------------------------------------------------
+//            
+void CMailHtmlBodyControl::CancelAll()
+	{
+	// Cancel content loadin
+	LOG("CMailHtmlBodyControl::CancelAll");	
+	iMessage.Cancel();
+	}
+	
+	
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::CountPluginComponentControls
+// -----------------------------------------------------------------------------
+//
+TInt CMailHtmlBodyControl::CountPluginComponentControls() const
+    {
+    return iBrControl ? 1 : 0; // iBrControl
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PluginComponentControl
+// -----------------------------------------------------------------------------
+//
+CCoeControl* CMailHtmlBodyControl::PluginComponentControl(TInt /*aIndex*/) const
+    {
+    return iBrControl;
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PluginSizeChanged
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::PluginSizeChanged()
+    {
+    LOG("CMailHtmlBodyControl::PluginSizeChanged");
+    
+   for (TInt i=0; i<4; ++i)								// CSI: 47 # <insert a comment here>
+    	{
+	    TRect base = iUICallBack.MsgViewRect(i);
+		LOG2("CMailHtmlBodyControl::SizeChanged-EB- W:%d H:%d", 
+			base.Width(), base.Height() );
+    	}
+    TPoint move(10,10);									// CSI: 47 # <insert a comment here>
+    iBrControl->SetPosition( move );
+/*	LOG2("CMailHtmlBodyControl::SizeChanged W:%d H:%d", 
+		Size().iWidth, Size().iHeight);
+	iBrControl->SetSize( Size() );
+	
+	LOG2("CMailHtmlBodyControl::SizeChanged - Position X:%d Y:%d", 
+		Position().iX, Position().iY);
+	iBrControl->SetSize( Size() );	
+	
+	LOG2("CMailHtmlBodyControl::SizeChanged - BRC Position X:%d Y:%d", 
+		iBrControl->Position().iX, iBrControl->Position().iY);
+	iBrControl->SetPosition( Position() );		
+
+    for (TInt i=0; i<4; ++i)
+    	{
+	    TRect base = iUICallBack.MsgViewRect(i);
+		LOG2("CMailHtmlBodyControl::SizeChanged-EB- W:%d H:%d", 
+			base.Width(), base.Height() );
+    	}*/
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PluginFocusChanged
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::PluginFocusChanged( TDrawNow /*aDrawNow*/ )
+    {
+    LOG("CMailHtmlBodyControl::PluginFocusChanged");
+	//iBrControl->SetFocus( IsFocused(), aDrawNow );
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PluginHandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::PluginHandleResourceChange(TInt aType)
+    {
+    LOG("CMailHtmlBodyControl::PluginHandleResourceChange");
+    iBrControl->HandleResourceChange( aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::PluginOfferKeyEventL
+// -----------------------------------------------------------------------------
+//    
+TKeyResponse CMailHtmlBodyControl::PluginOfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType)
+    {
+    LOG("CMailHtmlBodyControl::PluginOfferKeyEventL");
+    return iBrControl->OfferKeyEventL( aKeyEvent, aType );
+    }
+
+// -----------------------------------------------------------------------------
+// CMailHtmlBodyControl::SetPluginExtent
+// -----------------------------------------------------------------------------
+//
+void CMailHtmlBodyControl::SetPluginExtent(
+    const TPoint& aPosition,const TSize& aSize)
+	{
+	LOG2("CMailHtmlBodyControl::SetPosition X:%d Y:%d", 
+		aPosition.iX, aPosition.iY);
+	iBrControl->SetExtent( aPosition, aSize );		
+	}
+
+//  End of File  
+