emailuis/emailui/inc/ncscomposeviewcontainer.h
changeset 0 8466d47a6819
child 2 5253a20d2a1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/ncscomposeviewcontainer.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,727 @@
+/*
+* 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"
+
+//<cmail>
+#include <aknlongtapdetector.h>
+//</cmail>
+
+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:
+ 
+    /** Initialisation flags. */
+    enum TInitFlags
+        {
+        ECcFieldVisible  = 0x1,
+        EBccFieldVisible = 0x2
+        };
+
+    /**
+    * Two-phased constructor.
+    * Create a CNcsComposeViewContainer object, which will draw 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
+        
+    /**
+    * UpdateScrollBarL
+    * Updates scroll bar data.
+    */
+    void UpdateScrollBarL();
+
+    /**
+    * 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 );
+
+    /**
+    * SetAttachmentLabelTextL
+    * Set attachments label information.
+    * @param aText The text to be shown in the attachments label.
+    */
+    void SetAttachmentLabelTextL( const TDesC& aText );
+
+    /**
+    * SetAttachmentLabelTextL
+    * Set attachments label information from file name and size information.
+    * Some decorations may be added. The file name will be truncated autoamtically if needed.
+    * @param    aAttachmentName     The name of the attachment to be shown
+    * @param    aAttachmentSizeDesc Descriptor containing size information about the file
+    */
+    void SetAttachmentLabelTextL( const TDesC& aAttachmentName, const TDesC& aAttachmentSizeDesc );
+
+    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;
+
+// <cmail> Removed unneeded IsFocusAif
+// </cmail>
+
+    /**
+    * 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 );
+
+    /**
+     * 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();
+
+    /**
+    * SetApplicationRect
+    * Sets the container rectangle.
+    * @param aRect The rectangle.
+    */
+	// <cmail>
+    // void SetApplicationRect( TRect aRect );
+	// </cmail>
+
+    /**
+    * 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();
+		
+    /**
+    * LaunchAttachmentActionMenuL
+    * 
+    */
+    void LaunchAttachmentActionMenuL();
+    
+    /**
+    * AreAddressFieldsEmpty
+    * 
+    */
+    TBool AreAddressFieldsEmpty();
+		
+    void DoPopupSelectL();
+		
+    void HandleLayoutChangeL();
+    
+    void HandleSkinChangeL();
+    
+    TInt ContentTotalHeight();
+    /**
+    * CommitL
+    * Commits changes to message
+    */
+    void CommitL( TFieldToCommit aFieldToCommit = EAllFields );
+
+    //<cmail>
+    //sets up iSwitchChangeMskOff falg, which disables changes of MSK label if any popup dialog is open
+    void SwitchChangeMskOff(TBool aTag);
+    //</cmail>
+    
+    /**
+     * ScrollL
+     * @param aTargetPos Scrolls display to given position
+     */
+    void ScrollL( TInt aTargetPos );
+    
+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();
+    
+	//<cmail>
+    /**
+    * Handle pointer event
+    * 
+    */
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+    //</cmail>
+	
+    /**
+    * 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();
+    void UpdateFieldPosition( CCoeControl* aAnchor );
+
+    //<cmail>
+private:  //From MAknLongTapDetectorCallBack
+    void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation );
+    //</cmail>
+    
+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 );
+    //<cmail>
+    TRgb CalculateSeparatorLineSecondaryColor();
+    //</cmail>
+    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;
+    
+    //<cmail>
+    CAknLongTapDetector* iLongTapDetector;
+    //</cmail>
+    
+    /**
+    *
+    */
+    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;
+    //<cmail>
+    TInt iSeparatorLineYPos;
+    //</cmail>
+    
+    // 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;
+    };
+
+
+#endif