emailuis/emailui/inc/ncsheadercontainer.h
changeset 0 8466d47a6819
child 2 5253a20d2a1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/ncsheadercontainer.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,462 @@
+/*
+* 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 email header
+*
+*/
+
+
+
+#ifndef __NCSEMAILHEADERUI_H__
+#define __NCSEMAILHEADERUI_H__
+
+//<cmail>
+#include <aknlongtapdetector.h>
+//</cmail>
+
+//<cmail>
+#include "cpbkxremotecontactlookupenv.h"
+#include "cpbkxremotecontactlookupserviceuicontext.h"
+//</cmail>
+
+#include "FreestyleEmailUi.hrh"
+#include "ncsaddressinputfield.h"
+#include "ncsfieldsizeobserver.h"
+#include "ncsconstants.h"
+
+
+class CFSMailBox;
+class CNcsAttachmentField;
+class CNcsEmailAddressObject;
+class CNcsPopupListBox;
+class CNcsSubjectField;
+
+/**
+*  CNcsHeaderContainer
+*/
+class CNcsHeaderContainer : public CCoeControl, public MNcsAddressPopupList
+    {
+
+public:
+
+    /** Initialisation flags. */
+    enum TInitFlags
+        {
+        ECcFieldVisible  = 0x01,
+        EBccFieldVisible = 0x02
+        };
+
+    /**
+     * Two-phased constructor.
+     * Create a CNcsHeaderContainer object, which will draw itself to aRect
+     * @param aRect The rectangle this view will be drawn to.
+     * @param aMailBox reference to current mailbox item
+     * @param aFlags Initialisation flags.
+     * @return a pointer to the created instance of CNcsHeaderContainer.
+     */
+    static CNcsHeaderContainer* NewL( CCoeControl& aParent,
+        CFSMailBox& aMailBox, TInt aFlags = NULL );
+
+    /**
+     * ~CNcsHeaderContainer
+     * Destructor
+     */
+    virtual ~CNcsHeaderContainer();
+
+private: // constructor/destructor
+
+    /**
+    * CNcsHeaderContainer
+    * C++ constructor.
+    * @param aParent Parent control.
+    * @param aMailBox reference to current mailbox item
+    */
+	CNcsHeaderContainer( CCoeControl& aParent, CFSMailBox& aMailBox );
+	
+	/**
+	* ConstructL
+	* 2nd phase constructor.
+	*/
+	void ConstructL( TInt aFlags );
+
+public: // function members
+	
+	/**
+	* GetToFieldAddressesL
+	* Get addresses in TO-field.
+	* @return Array of addresses.
+	*/
+	const RPointerArray<CNcsEmailAddressObject>& GetToFieldAddressesL( 
+        TBool aParseNow = ETrue );
+
+	/**
+	* GetCcFieldAddressesL
+	* Get addresses in CC-field.
+	* @return Array of addresses.
+	*/
+	const RPointerArray<CNcsEmailAddressObject>& GetCcFieldAddressesL( 
+        TBool aParseNow = ETrue );
+
+	/**
+	* GetBccFieldAddressesL
+	* Get addresses in BCC-field.
+	* @return Array of addresses.
+	*/
+	const RPointerArray<CNcsEmailAddressObject>& GetBccFieldAddressesL( 
+        TBool aParseNow = ETrue );
+
+	/**
+	* GetSubjectLC
+	* Get text in SUBJECT-field.
+	* @return Subject text.
+	*/
+	HBufC* GetSubjectLC() 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;
+
+	/**
+	* 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;
+
+    /**
+	* GetToFieldSelectionLength
+	* Get selected text length in TO-field.
+	* @return Text length.
+	*/
+	TInt GetToFieldSelectionLength() const;
+
+	/**
+	* GetCcFieldSelectionLength
+	* Get selected text length in CC-field.
+	* @return Text length.
+	*/
+	TInt GetCcFieldSelectionLength() const;
+
+	/**
+	* GetBccFieldSelectionLength
+	* Get selected text length in BCC-field.
+	* @return Text length.
+	*/
+	TInt GetBccFieldSelectionLength() const;
+
+	/**
+	* GetLookupTextLC
+	* Get lookup text in focused AIF.
+	* @return Lookup text.
+	*/
+	HBufC* GetLookupTextLC() const;
+	
+	/**
+	* SetToFieldAddressesL
+	* Set addresses in TO-field.
+	* @param aAddress Address array.
+	*/
+	void SetToFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+	/**
+	* SetCcFieldAddressesL
+	* Set addresses in CC-field.
+	* @param aAddress Address array.
+	*/
+	void SetCcFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+	void SetBccFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+	void AppendToFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+	
+	void AppendCcFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+	
+	void AppendBccFieldAddressesL( 
+        const RPointerArray<CNcsEmailAddressObject>& aAddress );
+	
+	void SetSubjectL( const TDesC& aSubject );
+	
+	void SetMenuBar( CEikButtonGroupContainer* aMenuBar );
+	
+	void SetAttachmentLabelTextL( const TDesC& aText );
+    void SetAttachmentLabelTextL( const TDesC& aAttachmentName, const TDesC& aAttachmentSizeDesc );
+
+    void ShowAttachmentLabelL();
+	void HideAttachmentLabel();
+
+	void SetCcFieldVisibleL( 
+        TBool aVisible, 
+        TDrawNow aDrawNow = EDrawNow, 
+        TBool aFocus = ETrue );
+
+	void SetBccFieldVisibleL( 
+        TBool aVisible, 
+        TDrawNow aDrawNow = EDrawNow, 
+        TBool aFocus = ETrue );
+	
+	void FixSemicolonInAddressFieldsL();
+
+	TBool IsBccFieldVisible() const;
+
+	TBool IsCcFieldVisible() const;
+
+// <cmail> Removed unneeded IsFocusAif
+// </cmail>
+
+	TBool IsFocusAttachments() const;
+
+	TBool IsFocusTo() const;
+
+	TBool IsFocusCc() const;
+
+	TBool IsFocusBcc() const;
+
+	void IncludeAddressL();
+
+	void IncludeAddressL( const CNcsEmailAddressObject& eml );
+
+	// Update the field positions arround the anchor
+    void UpdateFieldPosition( CCoeControl* aAnchor );
+
+	// Check if the AIF menu should be displayed
+	TBool NeedsAifMenu() const;
+
+	// Get the total number of scrollable lines to update the scroll bar
+	TInt ScrollableLines() const;
+
+	// Get the total line count of all the controls in this container.
+	TInt LineCount() const;
+	
+	// Get the current cursor position relative to the top of the container.
+	TInt CursorPosition() const;
+
+    // Get the cursor line number.
+    TInt CursorLineNumber() const;
+
+	void HandleControlArrayEventL(
+		CCoeControlArray::TEvent aEvent,
+		const CCoeControlArray *aArray,
+		CCoeControl *aControl,
+		TInt aControlId );
+
+	//Set Middlesoftkey
+	//void CNcsHeaderContainer::SetMsk();
+	void SetMskL();
+	
+	//<cmail>
+	void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+	
+	void OpenPhonebookL();
+	
+	void HandleLongTapL( const TPoint& aPenEventLocation );
+
+    TBool NeedsLongTapL( const TPoint& aPenEventLocation );
+	//</cmail>
+	
+	// Process a key event
+	TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+	// Delete the selected address from the current AIF
+	void DeleteSelectionL();
+	
+	TInt GetNumChars() const;
+
+	void SelectAllToFieldTextL();
+
+	void SelectAllCcFieldTextL();
+
+	void SelectAllBccFieldTextL();
+
+	void SelectAllSubjectFieldTextL();
+	
+	void FocusToField();
+
+	void FocusAttachmentField();
+
+    void SetPriority( TMsgPriority aPriority );
+
+    void SetFollowUp( TBool aFollowUp );
+    
+    TBool AreAddressFieldsEmpty() const;
+    
+    void DoPopupSelectL();
+    
+    TBool IsPopupActive() const;
+
+	void ClosePopupContactListL();
+	
+	void ShowPopupMenuBarL( TBool aShow );
+
+	TBool IsToFieldEmpty() const;
+
+	TBool IsCcFieldEmpty() const;
+
+	TBool IsBccFieldEmpty() const;
+
+    TBool IsSubjectFieldEmpty() const;
+
+    void HandleDynamicVariantSwitchL();
+
+    //<cmail>
+    // sets up iSwitchChangeMskOff falg 
+    void SwitchChangeMskOff(TBool aTag);
+    // </cmail>     
+    
+    // <cmail> Platform layout change    
+    virtual TInt LayoutLineCount() const;
+    // </cmail> Platform layout change    
+
+// <cmail>
+    TBool IsAddressInputField( const CCoeControl* aControl ) const;
+// </cmail>
+
+    TBool IsRemoteSearchInprogress() const;
+private: // Function members
+
+	void FocusChanged(TDrawNow aDrawNow);
+
+	void UpdatePopupContactListL( const TDesC& aMatchString, TBool aListAll );
+
+	CCoeControl* FindFocused() const;
+
+	void Draw( const TRect& aRect ) const;
+
+	void DrawAttachmentFocusNow();
+
+	TKeyResponse ChangeFocusL( const TKeyEvent& aKeyEvent );
+
+	void SizeChanged();
+
+	void PositionChanged();
+
+	TInt GetTotalHeight() const;
+
+	void ChangePositions();
+
+	TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+
+    TRect CalculatePopupRect();
+
+    void HandleAttachmentsOpenCommand();
+    
+    /**
+    * Execute Remote Lookup Search.
+    *
+    * @param aExitReason RCL exit reason.
+    * @param aSearchText Search text.
+    * @return Selected email address object.
+    */
+    CNcsEmailAddressObject* ExecuteRemoteSearchL(
+        CPbkxRemoteContactLookupServiceUiContext::TResult::TExitReason& aExitReason,
+        const TDesC& aSearchText );
+
+    void ChangeMskCommandL( TInt aLabelResourceId );
+
+    void CommitFieldL( CCoeControl* aField );
+
+//<cmail>
+private:  //From MAknLongTapDetectorCallBack
+    
+    void HandleLongTapEventL( const TPoint& aPenEventLocation, const TPoint& aPenEventScreenLocation );
+
+//</cmail>
+    
+private: // Data members
+
+    /*
+    * Parent window
+    * Not Own
+    */
+    CCoeControl& iParent;
+
+    // <cmail> Platform layout change
+    MNcsFieldSizeObserver& iFieldSizeObserver;
+    // </cmail> Platform layout change
+    
+	//<cmail>
+    CAknLongTapDetector*      iLongTapDetector;
+    //</cmail>
+	
+    CEikButtonGroupContainer* iMenuBar;
+    
+    CNcsAddressInputField* iToField;
+
+    CNcsAddressInputField* iCcField;
+
+    CNcsAddressInputField* iBccField;
+
+    CNcsSubjectField* iSubjectField;
+
+    CNcsAttachmentField* iAttachmentField;
+
+	// The attachments count
+    TInt iAttachmentCount;
+
+	// Address popup data members
+	CNcsPopupListBox* iAacListBox;
+
+	CFSMailBox& iMailBox;
+	
+    // <cmail>
+    //flag which disables changes of MSK label if any popup dialog is open
+    TBool iSwitchChangeMskOff;
+    // </cmail>
+	
+ 	// <cmail>
+    //CFbsBitmap* iBackgroundBitmap;
+    //CFbsBitmap* iBackgroundMask;
+    CAknsBasicBackgroundControlContext* iBgContext;
+	// </cmail>
+    
+    TBool iLongTapEventConsumed;
+    TBool iRALInProgress;
+    };
+
+
+#endif