emailuis/emailui/inc/ncscomposeviewcontainer.h
branchRCL_3
changeset 64 3533d4323edc
child 73 c8382f7b54ef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/ncscomposeviewcontainer.h	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,789 @@
+/*
+* 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:  Container class for compose view
+*
+*/
+
+
+#ifndef CNCSCOMPOSEVIEWCONTAINER_H
+#define CNCSCOMPOSEVIEWCONTAINER_H
+
+
+#include <AknDef.h>
+#include <AknsControlContext.h>
+#include <eikedwob.h>
+#include <aknphysicsobserveriface.h> // MAknPhysicsObserver
+
+#include "ncsfieldsizeobserver.h"
+#include "ncsconstants.h"
+#include "FreestyleEmailUiContactHandlerObserver.h"
+#include "FreestyleEmailUi.hrh"
+#include <aknlongtapdetector.h>
+#include "FSAsyncTextFormatter.h"
+
+class CAknPhysics;
+class CNcsEditor;
+class CNcsComposeView;
+class CNcsHeaderContainer;
+class CAknLongTapDetector;
+class CAknDoubleSpanScrollBar;
+class CFSMailBox;
+class CAknsLayeredBackgroundControlContext;
+class CFsAutoSaver;
+class CNcsEmailAddressObject;
+
+enum TAppendAddresses 
+	{
+	EAppendTo,
+	EAppendCc,
+	EAppendBcc
+	};
+
+
+/**
+*  CNcsComposeViewContainer container control class.
+*/
+class CNcsComposeViewContainer: public CCoeControl, public MNcsFieldSizeObserver,
+                                public MEikScrollBarObserver,
+                                public MFSEmailUiContactHandlerObserver,
+                                public MAknLongTapDetectorCallBack,
+                                public MEikEdwinObserver,
+                                public MEikEdwinSizeObserver,
+                                public MAknPhysicsObserver,
+                                public MAsyncTextFormatterObserver
+    {
+    
+public:
+ 
+    /** Initialisation flags. */
+    enum TInitFlags
+        {
+        ECcFieldVisible  = 0x1,
+        EBccFieldVisible = 0x2
+        };
+
+    /**
+    * Two-phased constructor.
+    * Create a CNcsComposeViewContainer object, that draws itself to aRect
+    * @param aView The parent view of this container.
+    * @param aRect The rectangle this view will be drawn to.
+    * @param aMailBox reference to current mailbox item.
+    * @param aFlags Initilisation flags defined in @c TInitFlag enumeration.
+    * @return a pointer to the created instance of CNcsComposeViewContainer.
+    */
+    static CNcsComposeViewContainer* NewL( CNcsComposeView& aView, 
+        const TRect& aRect, CFSMailBox& aMailBox, CFsAutoSaver& aAutoSaver,
+        TInt aFlags = NULL );
+
+    /**
+    * Destructor.
+    */
+    virtual ~CNcsComposeViewContainer();
+
+public: // new functions
+
+    /**
+    * UpdateScrollBar
+    * Updates scroll bar data.
+    */
+    void UpdateScrollBar();
+
+    /**
+    * GetToFieldAddressesL
+    * Get addresses in TO-field.
+    * @return Array of address objects.
+    */
+    const RPointerArray<CNcsEmailAddressObject>& 
+    GetToFieldAddressesL( TBool aParseNow=ETrue );
+
+    /**
+    * GetCcFieldAddressesL
+    * Get addresses in CC-field.
+    * @return Array of address objects.
+    */
+    const RPointerArray<CNcsEmailAddressObject>& 
+    GetCcFieldAddressesL( TBool aParseNow=ETrue );
+
+    /**
+    * GetBccFieldAddressesL
+    * Get addresses in BCC-field.
+    * @return Array of address objects.
+    */
+    const RPointerArray<CNcsEmailAddressObject>& 
+    GetBccFieldAddressesL( TBool aParseNow=ETrue );
+
+    /**
+    * GetSubjectLC
+    * Get text in subject field.
+    * @return Descriptor containing subject field text.
+    */
+    HBufC* GetSubjectLC() const;
+
+    /**
+    * GetToFieldSelectionLength
+    * Get the length of selected text in TO-field.
+    * @return Selection length.
+    */
+    TInt GetToFieldSelectionLength() const;
+
+    /**
+    * GetCcFieldSelectionLength
+    * Get the length of selected text in CC-field.
+    * @return Selection length.
+    */
+    TInt GetCcFieldSelectionLength() const;
+
+    /**
+    * GetBccFieldSelectionLength
+    * Get the length of selected text in BCC-field.
+    * @return Selection length.
+    */
+    TInt GetBccFieldSelectionLength() const;
+
+    /**
+    * GetToFieldLength
+    * Get TO-field text length.
+    * @return Text length.
+    */
+    TInt GetToFieldLength() const;
+
+    /**
+    * GetCcFieldLength
+    * Get CC-field text length.
+    * @return Text length.
+    */
+    TInt GetCcFieldLength() const;
+
+    /**
+    * GetBccFieldLength
+    * Get BCC-field text length.
+    * @return Text length.
+    */
+    TInt GetBccFieldLength() const;
+        
+    /**
+    * GetSubjectFieldLength
+    * Get SUBJECT-field text length.
+    * @return Text length.
+    */
+    TInt GetSubjectFieldLength() const;
+
+    /**
+    * GetMessageFieldLength
+    * Get MESSAGE-field text length.
+    * @return Text length.
+    */
+    TInt GetMessageFieldLength() const;
+
+    /**
+    * GetAttachmentCount
+    * Get number of attachments.
+    * @return Attachment count.
+    */
+    TInt GetAttachmentCount() const;
+
+    /**
+    * HasRemoteAttachments
+    * Tells if the message has one or more remote attachments
+    * @return ETrue if the message has at least one remote attachment.
+    */
+    TBool HasRemoteAttachments() const;
+
+    /**
+    * GetLookupTextLC
+    * Get the text to match for fast addressing or remote lookup.
+    * @return Match text.
+    */
+    HBufC* GetLookupTextLC() const;
+
+    /**
+    * SetToFieldAddressesL
+    * Set TO-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void SetToFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * SetCcFieldAddressesL
+    * Set CC-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void SetCcFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * SetBccFieldAddressesL
+    * Set BCC-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void SetBccFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * AppendToFieldAddressesL
+    * Append TO-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void AppendToFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * AppendCcFieldAddressesL
+    * Append CC-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void AppendCcFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * AppendBccFieldAddressesL
+    * Append BCC-field addresses.
+    * @param aAddress Array of address objects.
+    */
+    void AppendBccFieldAddressesL( 
+            RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    /**
+    * SetSubjectL
+    * Set SUBJECT-field text.
+    * @param aSubject Text.
+    */
+    void SetSubjectL( const TDesC& aSubject );
+
+    /**
+    * SetCcFieldVisibleL
+    * Set the visibility of CC-field.
+    * @param aVisible True if the field is to be visible.
+    * @param aFocus True if the field is to be focused.
+    */
+    void SetCcFieldVisibleL( TBool aVisible, TBool aFocus=ETrue );
+
+    /**
+    * SetBccFieldVisibleL
+    * Set the visibility of BCC-field.
+    * @param aVisible True if the field is to be visible.
+    * @param aFocus True if the field is to be focused.
+    */
+    void SetBccFieldVisibleL( TBool aVisible, TBool aFocus=ETrue );
+
+    /**
+    * SetMenuBar
+    * Set the menu bar.
+    * @param aMenuBar The menu bar.
+    */
+    void SetMenuBar( CEikButtonGroupContainer* aMenuBar );
+
+    /**
+     * SetAttachmentLabelTextsL
+     * Set attachment label informations from arrays of file name and
+     * size informations. Some decorations may be added. 
+     * The file name will be truncated autoamtically if needed.
+     * The method takes ownership of the passed arrays.
+     * @param  aAttachmentNames Descriptor array containing file names.
+     * @param  aAttachmentSizes Descriptor array containing file sizes.
+     */
+    void SetAttachmentLabelTextsLD( CDesCArray* aAttachmentNames, 
+                                    CDesCArray* aAttachmentSizes );
+
+    /**
+     * FocusedAttachmentLabelIndex
+     * Returns the index of the attachment label that is currently focused
+     * @return Index of the focused attachment label.
+     */
+    TInt FocusedAttachmentLabelIndex();
+    
+    /**
+     * FixSemicolonL
+     * Fixes possibly missing semicolon in message header address fields.
+     */
+    void FixSemicolonL();
+    
+    void HideAttachmentLabel();
+ 
+    /**
+    * IsCcFieldVisible
+    * Test if CC-field is visible.
+    * @return True if visible.
+    */
+    TBool IsCcFieldVisible() const;
+
+    /**
+    * IsBccFieldVisible
+    * Test if BCC-field is visible.
+    * @return True if visible.
+    */
+    TBool IsBccFieldVisible() const;
+
+    /**
+    * IsFocusTo
+    * Test if TO-field is focused.
+    * @return True if focused.
+    */
+    TBool IsFocusTo() const;
+
+    /**
+    * IsFocusCc
+    * Test if CC-field is focused.
+    * @return True if focused.
+    */
+    TBool IsFocusCc() const;
+
+    /**
+    * IsFocusBcc
+    * Test if BCC-field is focused.
+    * @return True if focused.
+    */
+    TBool IsFocusBcc() const;
+
+    /**
+    * IsFocusAttachments
+    * Test if ATTACHMENTS-field is focused.
+    * @return True if focused.
+    */
+    TBool IsFocusAttachments() const;
+        
+    /**
+    * IncludeAddressL
+    */
+    void IncludeAddressL();
+
+    /**
+    * IncludeAddressL
+    */
+    void IncludeAddressL(const CNcsEmailAddressObject& eml);
+        
+    /**
+    * ClosePopupContactListL
+    * Closes the popup listbox.
+    */
+    void ClosePopupContactListL();
+
+    /**
+    * DeleteSelectionL
+    * Deletes selected text in focused AIF
+    */
+    void DeleteSelectionL();
+
+    /**
+     * Set the contents of the message body.
+     * @param aMessage Contents of MESSAGE-field.
+     * @parem aReadOnlyQuote Contents of read-only quote field.
+     */
+    void SetBodyContentL( const TDesC& aMessage, const TDesC& aReadOnlyQuote );
+    
+    /**
+     * Set the contents of the message body in asnchronous way.
+     * @param aMessage Contents of MESSAGE-field.
+     * @param aReadOnlyQuote Contents of read-only quote field.
+     */
+    void SetBodyContentAsyncL( const TDesC& aMessage, const TDesC& aReadOnlyQuote );
+
+    /**
+     * Get the contents of message body. The message body consists of
+     * MESSAGE-field followed by optional read-only quote field.
+     * @return Message body.
+     */
+    HBufC* GetBodyContentLC();
+
+    /**
+     * BodyText
+     * Gets modifiable reference to the text in body text field.
+     */
+    CRichText& BodyText();
+
+    /**
+    * SetFocusToToField
+    * Focuses the TO-field.
+    */
+    void SetFocusToToField();
+
+    /**
+    * SetFocusToAttachmentField
+    * Focuses the ATTACHEMENT-field.
+    */
+    void SetFocusToAttachmentField();
+        
+    /**
+    * SetFocusToMessageFieldL
+    * Focuses the MESSAGE-field.
+    */
+    void SetFocusToMessageFieldL();
+
+    /**
+    * AddQuickTextL
+    * Inserts text in current cursor position.
+    * @param aText Text to insert.
+    */
+    void AddQuickTextL( const TDesC& aText );
+        
+    /**
+    * SelectAllToFieldTextL
+    * Selects all TO-field text.
+    */
+    void SelectAllToFieldTextL();
+
+    /**
+    * SelectAllCcFieldTextL
+    * Selects all CC-field text.
+    */
+    void SelectAllCcFieldTextL();
+
+    /**
+    * SelectAllBccFieldTextL
+    * Selects all BCC-field text.
+    */
+    void SelectAllBccFieldTextL();
+
+    /**
+    * SelectAllSubjectFieldTextL
+    * Selects all SUBJECT-field text.
+    */
+    void SelectAllSubjectFieldTextL();
+			
+    /**
+    * IsSubjectFieldEmpty
+    * Tells if SUBJECT-field is empty (has default text or is empty).
+    * @return True if user has not put anything to the field.
+    */
+    TBool IsSubjectFieldEmpty();
+		
+    /**
+    * AppendAddressesL
+    * Displays contacts dialog and appends selected addresses in 
+    * focused AIF.
+    *
+    * @return ETrue if addresses we tried to append, EFalse otherwise. 
+    */
+    TBool AppendAddressesL();
+		
+    /**
+    * HandleAttachmentsOpenCommand
+    * 
+    */
+    void HandleAttachmentsOpenCommandL();
+		
+    /**
+    * LaunchStylusPopupMenu
+    * 
+    */
+    void LaunchStylusPopupMenu( const TPoint& aPenEventScreenLocation );
+    
+    /**
+    * AreAddressFieldsEmpty
+    * 
+    */
+    TBool AreAddressFieldsEmpty();
+		
+    void DoPopupSelectL();
+		
+    void HandleLayoutChangeL();
+    
+    void HandleSkinChangeL();
+    
+    TInt ContentTotalHeight();
+    /**
+    * CommitL
+    * Commits changes to message
+    */
+    void CommitL( TFieldToCommit aFieldToCommit = EAllFields );
+
+    /**
+     * SwitchChangeMskOff
+     * Sets up iSwitchChangeMskOff falg, which disables changes of MSK label
+     * if any popup dialog is open
+     */
+    void SwitchChangeMskOff(TBool aTag);
+
+    /**
+     * Scroll
+     * @param aTargetPos Scrolls display to given position
+     */
+    void Scroll( TInt aTargetPos, TBool aDrawNow = ETrue );
+    
+    /**
+     * Stopping asynchronous text formatting of message body.
+     */
+    void StopAsyncTextFormatter();
+    
+public: // from MAsyncTextFormatterObserver
+    
+    /**
+     * Called when text formatting was cancelled.
+     */
+    void FormatAllTextCancelled();
+    
+    /**
+     * Called when text formatting is complete. 
+     */
+	void FormatAllTextComplete();
+	
+public: // from CoeControl
+
+    /**
+    * Draw
+    * Draw this CNcsComposeViewContainer to the screen.
+    * @param aRect the rectangle of this view that needs updating
+    */
+    void Draw( const TRect& aRect ) const;
+    
+    void SetMskL();
+    
+    /**
+    * Handle pointer event
+    * 
+    */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+	
+    /**
+    * OfferKeyEventL
+    * Key event handler.
+    * @param aKeyEvent The key event.
+    * @param aType The type of key event.
+    * @return Indicates whether the key event was used by this control.
+    */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+        
+    /**
+    * SizeChanged
+    * Responds to changes to the size and position of the contents of this control.
+    */
+    void SizeChanged();
+        
+    /**
+    * Responds to a change in focus.
+    * @param aDrawNow Contains the value that was passed to SetFocus.
+    */
+    void FocusChanged(TDrawNow aDrawNow);
+        
+    /**
+    * MopSupplyObject
+    * Retrieves an object of the same type as that encapsulated in aId.
+    * @param aId An encapsulated object type ID.
+    */
+    TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+    
+	/**
+    * Informs if Remotesearch is in progress
+    */
+    TBool IsRemoteSearchInprogress() const;
+    
+public: // from MEikScrollBarObserver
+    
+    /**
+    * HandleScrollEventL
+    */
+    void HandleScrollEventL( 
+            CEikScrollBar* aScrollBar, TEikScrollEvent aEventType );
+
+public: // from MFSEmailUiContactHandlerObserver
+
+    void OperationCompleteL( TContactHandlerCmd aCmd,
+        const RPointerArray<CFSEmailUiClsItem>& aContacts );
+    void OperationErrorL( TContactHandlerCmd aCmd, TInt aError );
+
+public: // from base class MEikEdwinObserver
+
+    void HandleEdwinEventL( CEikEdwin* aEdwin, TEdwinEvent aEventType );
+
+public: // from base class MEikEdwinSizeObserver
+    
+    TBool HandleEdwinSizeEventL( CEikEdwin* aEdwin, 
+            TEdwinSizeEvent aEventType, TSize aDesirableEdwinSize );
+    
+public:  // from MNcsFieldSizeObserver
+
+    TBool UpdateFieldSizeL( TBool aDoScroll );
+    void UpdateFieldPosition( CCoeControl* aAnchor );
+
+private:  //From MAknLongTapDetectorCallBack
+    void HandleLongTapEventL( const TPoint& aPenEventLocation, 
+            const TPoint& aPenEventScreenLocation );
+    
+private:
+    
+    /**
+    * Constructor
+    * @param aView The parent view
+    */
+    CNcsComposeViewContainer( CNcsComposeView& aView, CFsAutoSaver& aAutoSaver,
+        CFSMailBox& aMailBox );
+
+    /**
+    * ConstructL
+    * 2nd phase constructor
+    * @param aRect Rectangle where container is drawn to.
+    */
+    void ConstructL( const TRect& aRect, TInt aFlags );
+        
+    /**
+    * ChangeFocusL
+    * Changes focus according to key event and focused control.
+    * @param aKeyEvent The key event.
+    * @return Indicates whether the key event was used by this control.
+    */
+    TKeyResponse ChangeFocusL( const TKeyEvent& aKeyEvent );
+        
+    /**
+    * UpdateScreenPositionL
+    * @param aKeyCode Needed to recognize presses of the enter key
+    *                 in moving of display.
+    */
+    void UpdateScreenPositionL( const TUint& aKeyCode = EKeyNull );
+
+    /**
+     * CalculateSeparatorLineSecondaryColor
+     * @return Separator line secondary color
+     */
+    TRgb CalculateSeparatorLineSecondaryColor();
+    
+    void UpdatePhysicsL();
+
+private: // from MAknPhysicsObserver
+
+   /**
+    * @see MAknPhysicsObserver::ViewPositionChanged
+    */
+   virtual void ViewPositionChanged( const TPoint& aNewPosition, 
+           TBool aDrawNow, TUint aFlags );
+
+   /**
+    * @see MAknPhysicsObserver::PhysicEmulationEnded
+    */
+   virtual void PhysicEmulationEnded();
+
+   /**
+    * @see MAknPhysicsObserver::ViewPosition
+    */
+   virtual TPoint ViewPosition() const;
+
+private: // data
+
+    /**
+    * header container
+    */
+    CNcsHeaderContainer* iHeader;
+    
+    /**
+    * message body field
+    */
+    CNcsEditor* iMessageField;
+        
+    /**
+    * field for read-only quote used with some protocols on reply/forward
+    */
+    CNcsEditor* iReadOnlyQuoteField;
+        
+    /**
+    * currently focused control
+    */
+    CCoeControl* iFocused;
+    
+    /**
+     * Long tap detector.
+     * Owned.
+     */
+    CAknLongTapDetector* iLongTapDetector;
+    
+    /**
+    *
+    */
+    TPoint iContentBasePoint;
+        
+    /**
+    *
+    */
+    CAknDoubleSpanScrollBar* iScrollBar;
+        
+    /**
+    *
+    */
+    TAknDoubleSpanScrollBarModel iScrollBarModel;
+        
+    /**
+    *
+    */
+    TRect iApplicationRect;
+        
+    /**
+    *
+    */
+    HBufC* iLengthReference;
+        
+    /**
+    * owner view
+    */
+    CNcsComposeView& iView;
+        
+    TInt iAmountMesFieldMovedUp;
+        
+    CFsAutoSaver& iAutoSaver;
+
+    CAknsBasicBackgroundControlContext* iBgContext;
+
+    /** Reference to current mailbox */
+    CFSMailBox& iMailBox;
+		
+    TAppendAddresses iAppendAddresses;
+
+    TInt iSeparatorLineYPos;
+    
+    // panning related
+    CAknPhysics* iPhysics;
+    TPoint iPreviousPosition;
+    TPoint iOriginalPosition;
+    TBool iIsDragging;
+    TBool iIsFlicking;
+    TTime iStartTime;
+    
+    // for body editor row line drawing
+    TInt iPrevDesiredHeigth;
+    TInt iMessageEditorMinHeigth;
+
+    // not owned contact handler pointer
+    CFSEmailUiContactHandler* iContactHandler;
+
+    // Descriptor for read-only quote text. Own.
+    HBufC* iReadOnlyQuote;
+
+    TInt iTotalComposerHeight; 
+    TInt iVisibleAreaHeight;
+    TInt iTotalMoveY;
+    TInt iSeparatorHeight;
+    TInt iHeaderHeight;
+
+    /**
+     * Flag for switching off text formatting.
+     */
+    TBool iSwitchOffFormattingText;
+    
+    /**
+     * Currently processed field - needed by async text formatting.
+     */
+    CNcsEditor* iProcessedField;
+    
+    /**
+     * Async text formatter.
+     * Own.
+     */
+    CFSAsyncTextFormatter* iAsyncTextFormatter;
+    
+    /**
+     * Pane rect calculated during ChangeSize.
+     */
+    TRect iCmailPaneRect;
+    };
+
+
+#endif