--- /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
+