emailuis/emailui/inc/ncsaifeditor.h
branchRCL_3
changeset 25 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/ncsaifeditor.h	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,279 @@
+/*
+* 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: This file defines class CNcsAifEntry.
+*
+*/
+
+
+
+#ifndef CNCSAIFEDITOR_H
+#define CNCSAIFEDITOR_H
+
+
+#include "ncseditor.h"
+
+
+class CNcsEmailAddressObject;
+class MNcsAddressPopupList;
+class CNcsAifEntry;
+
+
+/**
+*  CNcsAifEditor class.
+*/
+class CNcsAifEditor: public CNcsEditor, public MEikEdwinObserver
+    {
+public: // constructors/destructor
+    
+    CNcsAifEditor( MNcsFieldSizeObserver* aSizeObserver, const TDesC& aCaptionText );
+    	
+    void ConstructL( const CCoeControl* aParent,
+                     TInt aNumberOfLines,
+                     TInt aTextLimit );    
+
+    virtual ~CNcsAifEditor();
+    
+public: // from CoeControl
+    
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+    void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+public: // from MEikEdwinObserver
+    
+    void HandleEdwinEventL(CEikEdwin* aEdwin, TEdwinEvent aEventType);
+
+public: // new functions
+    
+    virtual TInt LineCount() const;
+        
+    virtual TInt CursorLineNumber() const;
+        
+    void UpdateAddressListAllL();
+
+    void CopyToStoreL(
+        CStreamStore& aStore, 
+        CStreamDictionary& aDict );
+        
+    void CheckAddressWhenFocusLostL();
+
+    void ParseNewAddressL();
+    
+    TKeyResponse HandleContactDeletionL(const TKeyEvent& aKeyEvent, TEventCode aType);
+    
+    const CNcsEmailAddressObject* EmailAddressObjectBySelection() const;
+
+    /**
+    * Get the text to match in either the local address book
+    * or the remote directory server
+    */
+    HBufC* GetLookupTextLC() const;
+
+    void AddAddressL(
+        const TDesC& aDN, 
+        const TDesC& aEmail,
+        TBool aDisplayFull = EFalse,
+        TBool aUpdateEditorText = ETrue );
+		
+    void AddAddressL( const CNcsEmailAddressObject& aAddress, TBool aUpdateEditorText = ETrue );
+
+    void SetAddressesL( const RPointerArray<CNcsEmailAddressObject>& aAddress );
+
+    void AppendAddressesL( const RPointerArray<CNcsEmailAddressObject>& aAddress );
+		
+    const RPointerArray<CNcsEmailAddressObject>& GetAddressesL();
+		
+    void RecalculateEntryPositions();
+
+    inline void SetPopupList(MNcsAddressPopupList* aPopupList);
+    
+private: // new functions
+
+    enum TEntryDirection
+        {
+        EDirectionNone,
+        EDirectionRight,
+        EDirectionLeft
+        };
+
+    void UpdateAddressAutoCompletionL();
+    void UpdateAddressAutoCompletionL( const TCursorSelection& aSelection );
+
+    void DoCharChangeL();
+
+    TChar CharAtPos( TInt aPos ) const;
+
+    void AddAddressL( CNcsAifEntry* aEntry, TBool aUpdateEditorText );
+
+    TKeyResponse SetEditorSelectionL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+    TInt CalculateAddressListLength(
+        RPointerArray<CNcsAifEntry>& aEntries,
+        TBool aDisplayList = ETrue ) const;
+
+    /**
+    * Creates formatted address list of given entries.
+    *
+    * @param aEntries Entries from which list is constructed.
+    * @param aDisplayList If ETrue, constructs list of display names
+    *                     of the addresses. If EFalse, constructs list
+    *                     of email addresses.
+    */
+    HBufC* GetFormattedAddressListLC( 
+        RPointerArray<CNcsAifEntry>& aEntries,
+        TBool aDisplayList = ETrue ) const;
+
+    HBufC* GetFormattedAddressListL(
+        RPointerArray<CNcsAifEntry>& aEntries,
+        TBool aDisplayList = ETrue ) const;
+
+    void RepositionEntriesL( const CNcsAifEntry* aEntry );
+
+    void CheckAndRemoveInvalidEntriesL();
+    
+    CNcsAifEntry* GetEntryAt( 
+        TInt aPos, 
+        TEntryDirection aDirection = EDirectionNone ) const;
+    
+    /** Browse backwards from given position and return the first found entry */
+    CNcsAifEntry* GetPreviousEntryFrom( TInt aPos ) const;
+    
+    HBufC* GetNonEntryTextLC() const;
+
+    TKeyResponse CopyEntriesToClipboardL(
+        const TKeyEvent& aKeyEvent, 
+        TEventCode aType );
+
+    void FindSelectedEntriesL( RPointerArray<CNcsAifEntry>& aEntries );
+
+	// <cmail> fixed CS high cat. finding
+    void UpdateDuplicateEntryMarkingsL();
+
+    void HandleTextUpdateDeferred();
+    static TInt DoHandleTextUpdate( TAny* aSelf );
+    
+    void HandleTextUpdateL();
+    /** 
+     * Handle addition of complete address. May result in complete redraw of the field.
+     * @return  ETrue   if terminated recipient entry was found and added to array. 
+     */
+    TBool HandleTextUpdateL( const TCursorSelection& aSelection );
+    void HandleNavigationEventL();
+    TCursorSelection NonEntryTextAtPos( TUint aPosition ) const;
+    TCursorSelection NonEntryTextBeforePos( TUint aPosition ) const;
+    TBool IsSentinel( TChar aCharacter ) const;
+    TBool IsWhitespace( TChar aCharacter ) const;
+    TBool IsNavigationKey( const TKeyEvent& aKeyEvent ) const;
+    TBool IsCharacterKey( const TKeyEvent& aKeyEvent ) const;
+    void GetMatchingEntryCountsL( 
+            const CNcsAifEntry* aEntry,
+            TInt& aNrOfMatchesInText,
+            TInt& aNrOfMatchesInEntryArray );
+    void CompleteEntryL();
+
+private: // data
+
+    RPointerArray<CNcsAifEntry> iArray;
+
+    RPointerArray<CNcsEmailAddressObject> iAddressArray;
+		
+    MNcsAddressPopupList* iAddressPopupList;
+	
+    CAsyncCallBack* iAsyncCallBack;
+
+    TInt iLastTimeCursorPos;
+    
+    // Flag indicating whether add the leftover text to the end of the field
+    TBool iAddLeftover;
+    TCursorSelection  iTextSelection;
+    TBool             iPartialRemove;
+	};
+
+
+///////////////////////////////////////////////////////////////////////
+// CNcsAifEntry
+// This class represents a full entry in the AIF field.
+// It is derived from TCursorSelection which helps in atomizing the
+// items when the cursor moves over them.
+// NOTES:
+//		iAnchorPosition is non-inclusive.  This position represents
+//		the anchor of a selection and is not included in the selection
+//		count.  So the selection would be iCursorPosition to iAnchorPosition
+//		- 1.  The SetSelection function will highlight anything left of the
+//		anchor up to and including the cursor.
+//		The idea is that if you were to use shift-cursor to select text,
+//		The anchor would be the cursor you started to hold down the shift.
+//		Since this location is not included in the selection, but rather
+//		the first position left or right of this poistion, the anchor is
+//		never included in the selection.
+class CNcsAifEntry : public CBase, public TCursorSelection
+    {
+public:
+
+    static CNcsAifEntry* CNcsAifEntry::NewL( const CNcsEmailAddressObject& aAddr );
+	
+	static CNcsAifEntry* CNcsAifEntry::NewL(
+        const TDesC& aDn, 
+        const TDesC& aEml,
+        TBool aDisplayFull );
+		
+	CNcsAifEntry::~CNcsAifEntry();
+	
+private:
+
+	CNcsAifEntry();
+		
+	void ConstructL( const TDesC& aDn, const TDesC& aEml, TBool aDisplayFull );
+		
+	void ConstructL( const CNcsEmailAddressObject& aAddress );
+		
+	void ConstructL() ;
+		
+	void SetDisplayStringL(); 
+		
+public:
+
+	inline TInt DisplayLength() const;
+		
+	inline const TDesC& DisplayString() const;
+		
+	inline TInt SetPos(TInt aPos);
+	
+	inline TBool Includes(TInt aPos) const;
+	
+	inline TInt Start() const;
+		
+	inline TInt End() const;
+		
+	inline const CNcsEmailAddressObject& Address() const;
+		
+	inline TBool IsDup() const; 
+	
+	void SetDupL( TBool aDup = ETrue );
+		
+    TBool IsSameDN(const CNcsAifEntry& aEntry) const;
+		
+private:
+
+	CNcsEmailAddressObject* iAddress;
+	HBufC* iDisplayString;
+	
+    TBool iIsDup;
+    };
+
+#include "ncsaifeditor.inl"
+
+#endif // CNCSSUBJECTFIELD_H
+
+
+// End of File