--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/ncsaifeditor.h Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,275 @@
+/*
+* 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 );
+
+ void ConstructL( const CCoeControl* aParent,
+ TInt aNumberOfLines,
+ TInt aTextLimit );
+
+ virtual ~CNcsAifEditor();
+
+public: // from CoeControl
+
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+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 );
+
+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;
+ };
+
+
+///////////////////////////////////////////////////////////////////////
+// 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