diff -r ebe688cedc25 -r 7fdbb852d323 email/mail/PluginSrc/MailHtmlView/CMailHtmlBodyControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/mail/PluginSrc/MailHtmlView/CMailHtmlBodyControl.cpp Wed Sep 01 12:31:54 2010 +0100 @@ -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 +#include +#include +// Browser +#include +#include +#include +#include + +// 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 # + { + TRect base = iUICallBack.MsgViewRect(i); + LOG2("CMailHtmlBodyControl::SizeChanged-EB- W:%d H:%d", + base.Width(), base.Height() ); + } + TPoint move(10,10); // CSI: 47 # + 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 +