--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/FreestyleEmailUiMailViewerRichText.h Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,360 @@
+/*
+* Copyright (c) 2007 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: FreestyleEmailUi mail viewer rich text definition
+*
+*/
+
+
+
+#ifndef __FREESTYLEEMAILUI_MAILVIEWERRICHTEXT_H__
+#define __FREESTYLEEMAILUI_MAILVIEWERRICHTEXT_H__
+
+// SYSTEM INCLUDE FILES
+#include <e32base.h>
+#include <finditemengine.h>
+//<cmail>
+#include <alf/alfanchorlayout.h>
+//</cmail>
+
+// Forward declarations
+class CAknLayoutFont;
+class CFSMailMessage;
+class CFSMailBox;
+class CFsTextViewer;
+class CFsRichText;
+class CFreestyleEmailUiAppUi;
+class CAlfTextVisual;
+
+// Header data
+struct SMailMsgHeaderInfo
+ {
+ TInt iHeaderLineCount;
+ TInt iToLineCount;
+ TInt iCcLineCount;
+ TInt iSubjectLineCount;
+ TBool iFlagIconOnHtmlLine;
+ };
+
+// Different hotspot types
+enum TViewerHeadingHotspotType
+ {
+ ETypeFromAddressDisplayName = 0,
+ ETypeToAddressDisplayName,
+ ETypeCcAddressDisplayName,
+ ETypeBccAddressDisplayName,
+ ETypeEmailAddress,
+ ETypeToNMoreRecipients,
+ ETypeCcNMoreRecipients,
+ ETypeBccNMoreRecipients,
+ ETypeAttachment,
+ ETypeAttachments,
+ ETypeHtml
+ };
+
+// Different recipient types
+enum TViewerRecipientType
+ {
+ EViewerRecipientTypeTo = 0,
+ EViewerRecipientTypeCc,
+ EViewerRecipientTypeBcc
+ };
+
+
+// Struct for one header hotspot data
+struct SViewerHeadingHotSpotData
+ {
+ TViewerHeadingHotspotType iType;
+ TInt iStart;
+ TInt iEnd;
+ TInt iDisplayNameArrayIndex;
+ TInt iHotspotLine;
+ };
+
+// Body and header hotspots are different
+enum THotspotType
+ {
+ ENoHotspot,
+ EHeaderHotspot,
+ EBodyHotspot
+ };
+
+
+/**
+* CFSEmailUiMailViewerRichText is a rich text for the mail viewer visualiser
+*
+*/
+class CFSEmailUiMailViewerRichText : public CBase
+ {
+public:
+ static CFSEmailUiMailViewerRichText* NewL( CFreestyleEmailUiAppUi& aFsTextureManager );
+ static CFSEmailUiMailViewerRichText* NewLC( CFreestyleEmailUiAppUi& aFsTextureManager );
+
+ virtual ~CFSEmailUiMailViewerRichText();
+
+ void RefreshRichTextL( CFsTextViewer& aTextViewer, CFSMailMessage& aMessage, CFSMailBox& aMailBox );
+ void Reset();
+
+ // Provides handle to richtext
+ CFsRichText& RichText();
+
+ // Getters for text lines
+ TInt SentTextLine() const;
+ TInt SubjectTextLine() const;
+ TInt AttachmentTextLine() const;
+ TInt ViewHtmlTextLine() const;
+ TInt HeaderLengthInCharacters() const;
+
+ // Getters for hotspot indicies
+ TInt AttachmentHotSpotIndex() const;
+ TInt ViewHtmlHotSpotIndex() const;
+
+ // Icon updating
+
+ // Different icon types presented in message viewer.
+ enum TViewerIconType
+ {
+ // status icon
+ EViewerEmailStatus,
+ // follow up
+ EViewerIconFollowUp,
+ EViewerIconFollowUpComplete,
+ EViewerIconFollowUpNone,
+ // attachment icon
+ EViewerAttachment,
+ // used for layouting
+ EViewerIconIndentation,
+ EViewerIconSpacing,
+ // <cmail>
+ EViewerIconSeparatorLine
+ // </cmail>
+ };
+
+ // Append given icon type to rich text
+ void UpdateIconL( TViewerIconType aViewerIconType );
+
+ // Helpers to get possible current hotpots asked
+ TBool FindCurrentHeaderHotSpotL( SViewerHeadingHotSpotData& aHotSpot ) const;
+ TBool FindCurrentBodyHotSpotL( CFindItemEngine::SFoundItem& aHotSpot ) const;
+
+ THotspotType FindCurrentHotSpotL( SViewerHeadingHotSpotData& aHeaderHotspot,
+ CFindItemEngine::SFoundItem& aBodyHotspot ) const;
+
+ // Getters for current hotspot texts
+ HBufC* GetHotspotTextLC( const SViewerHeadingHotSpotData& aCurrentHotSpot ) const;
+ HBufC* GetHotspotTextLC( const CFindItemEngine::SFoundItem& aCurrentHotSpot ) const;
+ HBufC* GetEmailAddressLC( const SViewerHeadingHotSpotData& aCurrentHotSpot ) const;
+
+ HBufC* GetHeaderHotspotEmailAddressLC( const SViewerHeadingHotSpotData& aCurrentHeaderHotSpotData ) const;
+
+ // Appending newly fetched text to the end of the body
+ void AppendFetchedBodytextLinesL( CFSMailMessage& aMessagePtr );
+
+ // Status layout to show "Fetching More - - -"
+ void CreateStatusLayoutL( TBool aSetEmptyContents = ETrue );
+
+ // For fetching updating "Fetching more" -text
+ void AppendFetchingMoreTextL();
+ void SetEmptyStatusLayoutTextL();
+
+ void SetHotspotHighlightedColorL( TInt aStartIndx, TInt aLenght, TBool aHighlight );
+
+ TInt CurrentHotspotIndexL();
+
+ void SetHotspotByIndexL( TInt aIndex );
+
+ TInt EmailStatusIconLine();
+ TInt FollowupIconLine();
+
+private:
+
+ // Helper function for getting hotspot text from rich text data
+ HBufC* GetHotspotTextLC( TInt aStartPos, TInt aLength ) const;
+
+private: // Methods for constructing the view's rich text
+
+ // Helper functions for constructing the rich text from the message
+ void AppendRecipientIndetationL();
+ void AppendNewLineL();
+ void AppendSpaceL();
+ void AppendMessageIconL();
+ TBool AppendFollowUpIconL( CFSMailMessage& aMessagePtr );
+ void AppendAttachmentIconL();
+
+ //<cmail>
+ HBufC* ClipHeaderInfoToFitLC( const TDesC& aText, TBool aIsDisplayName = EFalse );
+ TInt HeaderIndentedTextAreaWidth( const TBool aAddExtra = ETrue ) const;
+ //</cmail>
+
+ // These functions read actual data from the message and appends it in the
+ // correct format to the rich text
+ void AppendFromLineL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo );
+
+ void AppendRecipientLinesL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo,
+ TViewerRecipientType aRecipientType );
+
+ void AppendSentLineL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo );
+ void AppendSubjectLinesL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo );
+ void AppendAttachmentLinesL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo );
+ void AppendInitialBodytextLinesL( CFSMailMessage& aMessagePtr );
+ void AppendHtmlTextLineL( CFSMailMessage& aMessagePtr, SMailMsgHeaderInfo& aHeaderInfo );
+ void AppendRecipientsL( const RPointerArray<CFSMailAddress>& aRecipientArray, SMailMsgHeaderInfo& aHeaderInfo, TViewerRecipientType aRecipientType );
+ // <cmail> separator line
+ void AppendSeparatorLineL();
+ TInt SeparatorLineWidth() const;
+ // </cmail> separator line
+
+ void FindBodyTextHotSpotsL( const TDesC& aBodyContent );
+
+private: // Methods for handling font and layout spesific things.
+
+ // Different fonts types
+ enum TViewerFontType
+ {
+ EViewerFontTitle = 0,
+ EViewerFontText,
+ EViewerFontBody,
+ EViewerFontHotspotNormal,
+ EViewerFontHotspotHighLighted,
+ EViewerFontSent,
+ EViewerFontIndentation
+ };
+
+ //<cmail>
+ // Constructs all used fonts in on array for current text size.
+ //void ReConstructFontArrayL();
+
+ // For getting spesific font
+ //CAknLayoutFont& FontFromFontArray( TViewerFontType aFontType );
+ const CAknLayoutFont* GetCorrectFontL( TViewerFontType aFontType ) const;
+ //</cmail>
+
+ // For getting different font colors
+ TRgb SkinFontColorByType( TViewerFontType aFontType );
+
+ //<cmail>
+ // For constructing different fonts.
+ const CAknLayoutFont* CurrentTitleFontL() const;
+ const CAknLayoutFont* CurrentTextFontL() const;
+ const CAknLayoutFont* CurrentSentTextFontL() const;
+ //</cmail>
+
+ // Transparent icons are used for layouting purpose.
+ // Only way for setting spesific size of indentations or spaces between
+ // lines in pixels
+ // See LAF documents for more information and for exact sizes.
+
+ // Different transparent icon types used for layout.
+ enum TViewerSpacingIconType
+ {
+ ETopMostSpace = 0, // top most space in the view before any text
+ ERecipientSpace, // space that is after header info text and actual recipient text
+ EHeaderInfoSpace, // space that is always after recipient text and before next header info text.
+ EBottomMostSpace, // bottom most space in the header after all text
+ ESpaceBetweenIconAndSubject
+ };
+
+ // Returns the needed height for the given spacing icon type
+ TInt CurrentSpacingHeight( TViewerSpacingIconType aSpacingIconType ) const;
+
+ // Appends the given spacig icon type to the rich text
+ void InsertTransparentSpacingIconL( TViewerSpacingIconType aSpacingIconType );
+
+ // Append certain size spacing icon after the email status or follow up icon.
+ void InsertSpaceAfterIconL();
+
+ // Appends given text with the hotspot font type formating to the rich text as a hotspot
+ void InsertHotspotTextAndFontL( const TDesC& aText );
+
+ // Appends given text with the given font type formatting to the rich text
+ void AppendFormattedTextL( const TDesC& aText, TViewerFontType aFontType );
+
+ // Inserts given text with the given font type formatting to the given
+ // position in the rich text
+ void InsertFormattedTextL( const TDesC& aText, TViewerFontType aFontType,
+ TInt aPosition );
+
+ //<cmail>
+ // Applies formating information to the rich text.
+ void ApplyFontToTextL( const CAknLayoutFont* aFont, TInt aStartInx,
+ TInt aLength, TRgb& aColor, TFontUnderline aUnderline );
+ //</cmail>
+
+ // Appends hotspot formating to given body hotspot
+ void AddBodyHotsSpotWithTextFormatingL( const CFindItemEngine::SFoundItem& aBodyHotSpotData );
+
+private: // Construction
+
+ CFSEmailUiMailViewerRichText( CFreestyleEmailUiAppUi& aFsTextureManager );
+
+ void ConstructL();
+
+private:
+
+ // Text Viewer component's rich text
+ CFsRichText* iViewerRichText;
+
+ // App Ui handle for getting the texture manager
+ CFreestyleEmailUiAppUi& iAppUi;
+
+ // Mail message pointer, changes always in do activate
+ CFsTextViewer* iTextViewer; // not owned
+ // Used to display Fetching more Text
+ CAlfTextVisual* iStatusVisual; // not owned
+
+ // Used to display Fetching more Text
+ CAlfAnchorLayout* iStatusLayout; // not owned
+
+ CFSMailMessage* iMessage; // not owned
+ CFSMailBox* iMailBox; // not owned
+
+ // Header data storage
+ SMailMsgHeaderInfo iHeaderLineInfo;
+
+ // Header and body hotspot arrays
+ RArray<SViewerHeadingHotSpotData> iViewerHeadingHotSpotData;
+ RArray<CFindItemEngine::SFoundItem> iBodyTextHotSpotData;
+
+ // Total length of the header text after the text has been constructed
+ TInt iHeaderLength;
+
+ // Helper variable to store current document lenght while constructing rich text
+ TInt iRichTextDocumentLength;
+
+ // Amount of characters currently shown from the body part
+ TInt iBodyLength;
+
+ // Autofetch animation ellipsis count
+ TInt iCurrentEllipsisCount;
+
+ // Array fonts
+ RPointerArray<CAknLayoutFont> iFontsArray;
+
+ // Size of the next spacing icon to be drawn.
+ TSize iCurrentSpacingIconSize;
+
+ // Icon places
+ TInt iEmailStatusIconPlace;
+ TInt iEmailStatusIconLine;
+ TInt iFollowupIconPlace;
+ TInt iFollowupIconLine;
+ TInt iAttachmentIconPlace;
+
+ // Lines and hotsopt indicies for initial scrolling position handling
+ TInt iSentTextLine;
+ TInt iSubjectTextLine;
+ TInt iAttachmentHotSpotIndex;
+ TInt iViewHtmlHotSpotIndex;
+ };
+
+#endif //__FREESTYLEEMAILUI_MAILVIEWERRICHTEXT_H__