diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/inc/FreestyleEmailUiMailViewerRichText.h --- /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 +#include +// +#include +// + +// 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, + // + EViewerIconSeparatorLine + // + }; + + // 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(); + + // + HBufC* ClipHeaderInfoToFitLC( const TDesC& aText, TBool aIsDisplayName = EFalse ); + TInt HeaderIndentedTextAreaWidth( const TBool aAddExtra = ETrue ) const; + // + + // 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& aRecipientArray, SMailMsgHeaderInfo& aHeaderInfo, TViewerRecipientType aRecipientType ); + // separator line + void AppendSeparatorLineL(); + TInt SeparatorLineWidth() const; + // 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 + }; + + // + // 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; + // + + // For getting different font colors + TRgb SkinFontColorByType( TViewerFontType aFontType ); + + // + // For constructing different fonts. + const CAknLayoutFont* CurrentTitleFontL() const; + const CAknLayoutFont* CurrentTextFontL() const; + const CAknLayoutFont* CurrentSentTextFontL() const; + // + + // 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 ); + + // + // Applies formating information to the rich text. + void ApplyFontToTextL( const CAknLayoutFont* aFont, TInt aStartInx, + TInt aLength, TRgb& aColor, TFontUnderline aUnderline ); + // + + // 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 iViewerHeadingHotSpotData; + RArray 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 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__