meetingrequest/mrgui/mrfieldbuildercommon/inc/cesmrrichtextviewer.h
branchRCL_3
changeset 25 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/mrfieldbuildercommon/inc/cesmrrichtextviewer.h	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,341 @@
+/*
+* Copyright (c) 2009 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 : CEikRichTextEditor based Rich Text viewer
+*  Version     : %version: e002sa32#19.1.1 %
+*
+*/
+
+#ifndef CESMRRICHTEXTVIEWER_H
+#define CESMRRICHTEXTVIEWER_H
+
+#include <eikrted.h>
+#include <cntitem.h>
+#include <eikcmobs.h>
+
+#include "resmrstatic.h"
+#include "mmrcontactmenuobserver.h"
+
+class CESMRRichTextLink;
+class MESMRFieldEventQueue;
+
+// SCROLLING_MOD: List observer forward declaraion
+class MESMRListObserver;
+class MMRFieldScrollObserver;
+
+/*
+ * Pure virtual link selection observer.
+ */
+class MESMRRichTextObserver
+    {
+public:
+    /*
+     * CESMRichTextViewer calls this function with selected link before
+     * showing Contact Action Menu. If observer handles link selection it
+     * should return ETrue, in which case CESMRRichTextViewer won't handle
+     * it.
+     */
+    virtual TBool
+            HandleRichTextLinkSelection(const CESMRRichTextLink* aLink ) = 0;
+    };
+
+/*
+ * CEikRichTextEditor based Rich Text viewer.
+ */
+NONSHARABLE_CLASS( CESMRRichTextViewer ) : public CEikRichTextEditor,
+                                           public MEikCommandObserver,
+                                           public MMRContactMenuObserver
+    {
+public:
+    /*
+     * Two-phase constructor.
+     * @param aParent if aParent is NULL,
+     * 				  CEikRichTextEditor is constucted as
+     * 				  window owning control.
+     * @return Created object
+     */
+    IMPORT_C static CESMRRichTextViewer* NewL(
+            const CCoeControl* aParent = NULL);
+
+    /*
+     * Destructor.
+     */
+    IMPORT_C ~CESMRRichTextViewer( );
+
+    // From CCoeControl
+    IMPORT_C void PositionChanged( );
+    IMPORT_C void FocusChanged( TDrawNow aDrawNow );
+    IMPORT_C TKeyResponse OfferKeyEventL(
+    		const TKeyEvent &aKeyEvent,
+    		TEventCode aType );
+    IMPORT_C void SetMargins( TInt sMargin );
+
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+    /*
+     * Sets the given font for the rich text component. Also
+     * sets the default main area color. Changes take effect
+     * after AppliyLayoutChanges is called.
+     *
+     * @param aFont, the font to be set for the rich text component.
+     */
+    IMPORT_C void SetFontL( const CFont* aFont );
+
+    /*
+     * Sets CEikRichTextEditor's text and searches text for emails,
+     * phone numbers and urls if aSearchLinks is set to ETrue.
+     *
+     * @param aText text to be set for CEikRichTextEditor
+     * @param aSearchLinks search emails, phone numbers and urls
+     */
+    IMPORT_C void SetTextL(const TDesC* aText, TBool aSearchLinks = EFalse );
+
+    /*
+     * Sets observer for link selections.
+     * @param aLinkObserver pointer to observer object
+     */
+    IMPORT_C void SetLinkObserver(MESMRRichTextObserver* aLinkObserver);
+
+    /*
+     * Adds link to text.
+     * @param aLink link to be added
+     */
+    IMPORT_C void AddLinkL(CESMRRichTextLink* aLink );
+
+    /**
+     * Inserts link to text.
+     * @param aLink link to be added
+     * @param aPosition position where link is added
+     */
+    IMPORT_C void InsertLinkL( CESMRRichTextLink* aLink, TInt aPosition );
+
+    /*
+     * Returns selected link, or NULL if none selected.
+     */
+    IMPORT_C const CESMRRichTextLink* GetSelectedLink( ) const;
+
+    /*
+     * Returns text for selected link from underlying CEikRichTextViewer.
+     *
+     * @param aLink link
+     */
+    IMPORT_C HBufC* GetLinkTextLC( const CESMRRichTextLink& aLink ) const;
+
+    /*
+     * Returns pointer to new CContactItem constructed from aLink.
+     * Function uses CESMRRichTextLink::Value to create contact
+     * with CESMRRichTextLink::Type information.
+     *
+     * @param aLink link
+     */
+    IMPORT_C CContactItem* CreateContactItemL( const CESMRRichTextLink& aLink );
+
+    /*
+    * Method for cesmrviewerdescriptionfield to set the list observer
+    *
+    * @param aObserver observer that should be notified
+    */
+    IMPORT_C void SetListObserver( MESMRListObserver* aObserver );
+
+    /**
+     * Returns height of one row.
+     *
+     * @return row's height
+     */
+    IMPORT_C TInt RowHeight();
+    /**
+     * Returns text line count.
+     *
+     * @return line count
+     */
+    IMPORT_C TInt LineCount();
+    /**
+     * Returns line number of currenly
+     * focused row starting from one.
+     *
+     * @return row's height
+     */
+    IMPORT_C TInt CurrentLineNumber();
+
+    /**
+     * Enables and disables action menu
+     * @param aStatus Enables or disables action menu
+     */
+    IMPORT_C void SetActionMenuStatus( TBool aStatus );
+
+    /**
+     * Copies currently selected richtext link associated with
+     * action menu to the clipboard
+     */
+    IMPORT_C void CopyCurrentLinkToClipBoardL() const;
+
+    /**
+     * convenience method to reset TLS static contactactionmenuhandler
+     * for classes that only have access to richtextviewer.
+     * Needed for richtextviewer fields when they lose focus.
+     */
+    IMPORT_C void ResetActionMenuL() const;
+
+    /**
+     * Sets event queue for field. Observer can be used
+     * for triggering commands and notifying events.
+     * @param aEventObserver the event observer
+     */
+    IMPORT_C void SetEventQueue( MESMRFieldEventQueue* aEventQueue );
+
+    /**
+     * Selects current link.
+     * @return ETrue if link selected
+     */
+    IMPORT_C TBool LinkSelectedL();
+
+    /**
+     * Handles long tap event in rich text viewer.
+     * @param aPosition position of long tap event.
+     */
+    IMPORT_C void HandleLongtapEventL( TPoint& aPosition );
+
+    /*
+     * Sets the given line spacing for the rich text component.
+     * Changes take effect after AppliyLayoutChanges is called.
+     *
+     * @param aLineSpacingInTwips, the line spacing to be used.
+     */
+    IMPORT_C void SetLineSpacingL( TInt aLineSpacingInTwips );
+
+    /*
+     * Applies the layout changes to the rich text component.
+     */
+    IMPORT_C void ApplyLayoutChangesL();
+
+    /*
+     * Set selected link according to the index in the array.
+     * @param aLinkIndex the index of link need to be selected.
+     */
+    IMPORT_C void SetFocusLink( TInt aLinkIndex );
+
+    /*
+     * Get the index of selected link in the array.
+     * @return The index of selected link in the array.
+     */
+    IMPORT_C TInt GetFocusLink( ) const;
+
+    /*
+     * Finds out if given pointer event occured on a link
+     * @param aPointerEvent, the event to which the possible link areas are compared to
+     * @return TBool, ETrue if pointer event occured on a link
+     */
+    IMPORT_C TBool PointerEventOccuresOnALinkL( const TPointerEvent &aPointerEvent );
+
+protected: // From MEikCommandObserver
+
+    /**
+     * Process commands from contact menu handler.
+     * Forwards commands to event observer.
+     */
+    void ProcessCommandL( TInt aCommandId );
+
+protected: // From CEikEdwin
+    /**
+     * Sets the control as ready to be drawn.
+     */
+    void ActivateL();
+
+protected: // From MMRContactMenuObserver
+
+    void ContactActionQueryComplete();
+
+private:
+    /*
+     * Private constuctor.
+     */
+    CESMRRichTextViewer( );
+
+    /*
+     * Two-phase constructor.
+     * @param aParent if aParent is NULL, CEikRichTextEditor
+     * 				  is constucted as window owning control.
+     */
+    void ConstructL(const CCoeControl* aParent );
+
+    /*
+     * Highlights link in CEikRichTextEditor.
+     *
+     * @param aLink link to be highlighted
+     */
+    void HighlightLinkL(const CESMRRichTextLink& aLink );
+
+    /*
+     * Private internal function which searches for emails,
+     * phone numbers and urls from given text using CFindItemEngine.
+     *
+     * @param aText text which is shown in CEikRichTextEditor
+     */
+    void SearchLinksL(const TDesC& aText );
+
+    TInt FindTextLinkBetweenNextScrollArea(
+    		TInt aStartRow,
+    		TInt aEndRow,
+    		TCursorPosition::TMovementType aDirection);
+
+    TInt ValidLinkForFocusing(	TInt aIndex,
+                                TCursorPosition::TMovementType aDirection,
+                                TInt aStartRow,
+                                TInt aEndRow);
+
+    void SetValueL( const CESMRRichTextLink& aLink );
+
+    void ShowContextMenuL();
+
+    void GetLinkAreaL( TRegion& aRegion,
+                       const CESMRRichTextLink& aLink ) const;
+
+    void ChangeMiddleSoftkeyL( const CESMRRichTextLink& aLink );
+
+    void UpdateViewL( const TKeyEvent &aKeyEvent );
+
+private: // Data
+
+	/// Own: Array of hyperlinks in viewer
+    RPointerArray<CESMRRichTextLink> iLinkList;
+    /// Ref:
+    MESMRRichTextObserver* iLinkObserver;
+    /// Own:
+    RESMRStatic iESMRStatic;
+    /// Ref:
+    MESMRListObserver* iObserver;
+    /// Own:
+    TInt iApproximatelyRowHeight;
+    /// Ref: pointer to font
+    const CFont* iFont;
+    /// Ref: Contact Menu handler
+    CESMRContactMenuHandler* iCntMenuHdlr;
+    /// Ref: Pointer to event queue
+    MESMRFieldEventQueue* iEventQueue;
+    /// Own: Rich text link format
+    TCharFormat iRichTextLinkFormat;
+    /// Own: Rich text link format mask
+    TCharFormatMask iRichTextLinkFormatMask;
+    /// Own:
+    TBool iOpenActionMenu;
+    // Own: Paragraph formatter
+    CParaFormat* iParaFormat;
+    // Own: Paragraph formatter mask
+    TParaFormatMask iParaFormatMask;
+    // Own: Character formatter
+    TCharFormat iCharFormat;
+    // Own: Character formatter mask
+    TCharFormatMask iCharFormatMask;
+    };
+
+#endif /*CESMRRICHTEXTVIEWER_H*/