diff -r 000000000000 -r 8466d47a6819 emailuis/emailui/inc/ncsaifeditor.h --- /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& aAddress ); + + void AppendAddressesL( const RPointerArray& aAddress ); + + const RPointerArray& 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& 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& aEntries, + TBool aDisplayList = ETrue ) const; + + HBufC* GetFormattedAddressListL( + RPointerArray& 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& aEntries ); + + // 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 iArray; + + RPointerArray 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