diff -r 000000000000 -r 094583676ce7 wvuing/wvuiave/AppSrc/CCARichTextContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiave/AppSrc/CCARichTextContainer.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,529 @@ +/* +* Copyright (c) 2002-2005 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: Rich text container +* +*/ + + + +#ifndef CCARICHTEXTCONTAINER_H +#define CCARICHTEXTCONTAINER_H + +// INCLUDES +#include "MCAMessageContainer.h" +#include "mcalayoutchangeobserver.h" +#include "MCASettings.h" +#include +#include +#include // TCursorSelection + + +// FORWARD DECLARATIONS +class CCAMessageWrapper; +class CParaFormatLayer; +class CCharFormatLayer; +class CRichText; +class MLayDoc; +class MCATextView; +class CCAMessageExtensionsHandler; +class CGulIcon; +class MCAMessageUtils; +class MCAAppUi; +class MCASettingsPC; +class MCAMsgAddedToRichTxtCtrlObserver; + +// CLASS DECLARATION + +/** +* Rich text container +* +* @lib chat.app +* @since Series 60 3.0 +*/ +class CCARichTextContainer : public CBase, + public MCAMessageContainer, + public MCALayoutChangeObserver + { + public: // enumerations + enum THighlightMovement + { + ENext = 0, + EPrevious + }; + + public: // Constructors and destructor + + /** + * Two-phased constructor. + * @param aTextView Viewer of the text + * @param aExtensionsHandler Message extensions handler + * @param aFromMe "From me" icon. + * @param aToMe "To me" icon. + * @param aMap Graphics device map for converting pixels to twips + * @param aScrollOver Should we scroll over the top and bottom, + * i.e. disabling highlight when pressing up at top. + * @param aAddMsgObserver - observer + */ + static CCARichTextContainer* NewL( MCAAppUi& aAppUi, + MCASettingsPC& aSettingsPC, + MCATextView& aTextView, + CCAMessageExtensionsHandler& aExtensionsHandler, + CGulIcon*& aFromMe, + CGulIcon*& aToMe, + CGulIcon*& aUnsupported, + CGulIcon*& aCorrupted, + MGraphicsDeviceMap& aMap, + TBool aScrollOver = ETrue, + MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver = NULL ); + + /** + * Destructor. + */ + virtual ~CCARichTextContainer(); + + public: // New functions + + /** + * @return Selected message or NULL if nothing selected + */ + MCAConversationMessage* SelectedMessage(); + + /** + * @return Buffer containing the currently selected text + * (or empty buffer if nothing selected) + */ + HBufC* SelectedItemL(); + + /** + * @return Type of selected item + */ + TInt SelectedItemType(); + + /** + * @return Text layout interface for displaying the text + */ + MLayDoc* TextLayout(); + + /** + * Moves current highlight selection + * @return KErrNotFound If there are no items to highlight. + * KErrNone otherwise. + */ + TInt MoveHighlightL( THighlightMovement aDirection ); + + /** + * Set all highlighting off + */ + void DisableHighlightL(); + + /** + * Sets item highlight on or off + * @param aItemHighlight ETrue if the items inside messages + * should be highlighted + */ + void SetItemHighlight( TBool aItemHighlight ); + + /** + * @return ETrue if some item is highlighted + */ + TBool Highlighted(); + + /** + * Highlights whole message or item at given position. + * @param aPos Highlights the message or item which has + * the craracter at aPos + * @return KErrNone - if highlighted a new item + * KErrAlreadyExists - if item is already highlighted + * KErrNotFound - if can't find message or item at aPos + */ + TInt HighlightItemAtPosL( TInt aPos ); + + public: // From MCALayoutChangeObserver + + /** + * From MCALayoutChangeObserver + */ + void LayoutChangedL( TInt aType ); + + public: // Functions from MCAMessageContainer + + /** + * Check if chat container is deleted. + * Use this to check if the messages still exists + * @return ETrue: chat is deleted, + * EFalse: chat is not deleted + */ + TBool IsDeleted() const; + + protected: // Functions from MCAMessageContainer + + /** + * Add new message to container + * @param aMessage Message + */ + void AddMessageL( MCAConversationMessage& aMessage ); + + /** + * Inform about changed message + * @param aIndex Index of changed message + */ + void MessageChangedL( TInt aIndex ); + + /** + * Remove message from container + * @param aIndex Index of message to be removed + */ + void RemoveMessage( TInt aIndex ); + + /** + * Marks message container as deleted. + */ + void MarkDeleted(); + + /** + * @see MCAMessageContainer + */ + void InsertMessageL( MCAConversationMessage& aMessage ); + + protected: // New functions + + /** + * Updates all wrappers after (and including) aFirstIndex + * Adds aChange to wrapper positions (in rich text) + * @param aFirstIndex Index of first modified wrapper + * @param aChange Removed or added number of characters in rich + * text before wrapper at aFirstIndex + */ + void UpdateWrappers( TInt aFirstIndex, TInt aChange ); + + /** + * @return Union of two selections + */ + TCursorSelection Union( const TCursorSelection& aSel1, + const TCursorSelection& aSel2 ); + + /** + * @return Currently highlighted selection, or last + * message if highlighting is disabled + */ + TCursorSelection CurrentSelection() const; + + /** + * Sets the background color of selected text + */ + void TextBackColorL( const TCursorSelection& aSel, const TRgb& aColor ); + + /** + * Sets the color of selected text + */ + void TextColorL( const TCursorSelection& aSel, const TRgb& aColor ); + + /** + * Sets the background color of selected paragraph + */ + void BackColorL( const TCursorSelection& aSel, const TRgb& aColor ); + + /** + * Format the highlight item + */ + void HighLightItemL( const TCursorSelection& aSel ); + + /** + * Sets the selection bold + */ + void BoldL( const TCursorSelection& aSel ); + + /** + * Parses text for highlight items (phone numbers, urls) and places + * the positions to messagewrapper. + * @param aText Text to be parsed + * @param aStartPos Start position of aText in rich text + * @param aRelativePos Relative position of aText inside one message + * @param aMessageWrapper Message wrapper where positions are stored + */ + void ParseTextL( const TDesC& aText, TInt aStartPos, TInt aRelativePos, + CCAMessageWrapper& aMessageWrapper ); + + /** + * Add UserIdentity of a message to rich text + * @param aMessageWrapper Message wrapper + * @return Selection for UserIdentity + */ + TCursorSelection AddUserIdentityL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Add nickname of a message to rich text + * @param aMessageWrapper Message wrapper + * @return Selection for nickname (for coloring) + */ + TCursorSelection AddNickL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Add timestamp of a message to rich text + * @param aMessageWrapper Message wrapper + * @return Selection of timestamp + */ + TCursorSelection AddTimeStampL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Add content of a message to rich text + * @param aMsgStart Start position of this message in rich text + * @param aMessageWrapper Message wrapper + */ + void AddContentL( TInt aMsgStart, CCAMessageWrapper& aMessageWrapper ); + + /** + * Add thumbnail of a picture message to rich text + * @param aPos Position in rich text + * @param aMessageWrapper Message wrapper + */ + void AddThumbL( TInt aPos, CCAMessageWrapper& aMessageWrapper ); + + /** + * Updates the color of messages according to current skin. + * Only the theme colored part of messages are updated. + * This method should be called when the skin is changed. + * @return None + */ + void UpdateSkinnedTextColourL(); + + /** + * Helper method to determine which part of the message really is + * colored by the active skin. + * @param aMessageWrapper Message to inspect + * @param aUseDefaultColors Variation for default colours + * @param aCustomDefinedColor Has user customized the message colour + * @return Selection of the text which follows the skin color + */ + TCursorSelection SkinColoredSelection( + CCAMessageWrapper& aMessageWrapper, + TBool aUseDefaultColors, + TBool aCustomDefinedColor ); + + /** + * Helper method for replacing all paragraph delimiters + * inside message content with line breaks, needed for + * keeping text alignment consistent inside one message. + * Used in AddContentL. + * @since S60 v3.1 + * @param aSource Source descriptor. + * @param aTarget Target descriptor. Caller is responsible + * to provide a large enough descriptor, + * aTarget size must not be less than + * size of aSource. + */ + void ReplaceParaDelimsWithLineBreaks( + const TPtrC& aSource, + TPtr& aTarget ) const; + + /** + * Helper method to update selection inside rich text. + * This will remove the highlight from previously selected item + * and add highlight to newly selected item. + * @since S60 v3.1 + */ + void UpdateSelectionL(); + + /** + * Insert nickname of a message to rich text start. + * @param aMessageWrapper Message wrapper. + * @return Selection for nickname. + */ + TCursorSelection InsertNickL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Insert timestamp of a message to rich text. + * @param aMessageWrapper Message wrapper. + * @return Selection of timestamp. + */ + TCursorSelection InsertTimeStampL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Insert User Identity of a message to rich text. + * @param aMessageWrapper Message wrapper. + * @return Selection of User Identity. + */ + TCursorSelection InsertUserIdentityL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Insert content of a message to rich text. + * @param aMessageWrapper Message wrapper. + * @return Length of content added. + */ + TInt InsertContentL( CCAMessageWrapper& aMessageWrapper ); + + /** + * Reads integer resource value from resources + * @param aResourceId resource id which is read + * @return value of wanted integer resource flag + */ + TInt IntResourceValueL( TInt aResourceId ); + + public: + /** + * @returns the total messages in the view + */ + TInt GetMessageCount(); + + /** + * Changes the HighlightColor + */ + void ChangeHighlightColorL(); + + //when user navigate among tab. + /** + * unregisters the observer added to listen to + * message added in rich text container + * @Param - None + * @return - None + */ + void UnRegisterRichTxtCtrlObserver(); + + private: + + /** + * C++ default constructor. + */ + CCARichTextContainer( MCAAppUi& aAppUi, + MCASettingsPC& aSettingsPC, + MCATextView& aTextView, + CCAMessageExtensionsHandler& aExtensionsHandler, + CGulIcon*& aFromMe, + CGulIcon*& aToMe, + CGulIcon*& aUnsupported, + CGulIcon*& aCorrupted, + MGraphicsDeviceMap& aMap, + TBool aScrollOver, + MCAMsgAddedToRichTxtCtrlObserver* aAddMsgObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void ConstructL(); + + private: // enums + + enum THighlightState + { + ENoHighlight = 0, + EItemSelected, + EMessageTop, + EMessageBottom + }; + + private: // Data + + // doesn't own, interface to AppUi -class + MCAAppUi& iAppUi; + + // doesn't own, interface to application settings + MCASettingsPC& iSettings; + + // doesn't own, interface to text viewer + MCATextView& iTextView; + + // Owns. Paragraph formatter + CParaFormatLayer* iParaFormatLayer; + + // Owns. Character formatter + CCharFormatLayer* iCharFormatLayer; + + // Owns. rich text document + CRichText* iRichText; + + // Owns. message wrappers + RPointerArray iMessages; + + // "From me" icon. Not owned. + // Reference to a pointer because this can change + CGulIcon*& iFromMe; + + // "To me" icon. Not owned. + // Reference to a pointer because this can change + CGulIcon*& iToMe; + + // "Unsupported" icon. Not owned. + // Reference to a pointer because this can change + CGulIcon*& iUnsupported; + + // "Corrupted" icon. Not owned. + // Reference to a pointer because this can change + CGulIcon*& iCorrupted; + + // item highlight + TBool iItemHighlight; + + // selected message + TInt iSelected; + + // selected item in message + TInt iSelectedItem; + + // current highlight state + THighlightState iHighlightState; + + // previous selection + TCursorSelection iPrevious; + + // message extensions handler + CCAMessageExtensionsHandler& iExtensionsHandler; + + // interface to graphics device for converting pixels to twips + MGraphicsDeviceMap& iMap; + + // Should we scroll over the top and bottom, + // i.e. disabling highlight when pressing up at top. + TBool iScrollOver; + + // should whole message be colored + TBool iColorWholeMessage; + // alternative colors + TBool iOwnMsgColorInUse; + TRgb iOwnMsgColor; + TBool iMsgColorInUse; + TRgb iMsgColor; + + TRgb iDefaultMsgColor; + + // Show timestamp setting value + TBool iShowTimeStamps; + + // icon in front of own messages + TBool iOwnMsgIcon; + // icon in front of other messages + TBool iMsgIcon; + + TSize iThumbSize; + + // doesn't own + const CFont* iPrimaryFont; + const CFont* iSecondaryFont; + + // are messages deleted + TBool iMessagesDeleted; + + // is RichTextContainer container recovering from OOM situation + TBool iRecoveringFromOOM; + + //used to notify of message was added to the rich text control. + MCAMsgAddedToRichTxtCtrlObserver* iAddMsgObserver; + + //Used only for recorded chats + TInt iMsgAddedToContentProcessor; + + }; + +#endif // CCARICHTEXTCONTAINER_H + +// End of File