diff -r 000000000000 -r 72b543305e3a messagingappbase/msgeditor/viewinc/MsgAddressControlEditor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/msgeditor/viewinc/MsgAddressControlEditor.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,470 @@ +/* +* Copyright (c) 2002 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: MsgAddressControlEditor declaration +* +*/ + + + +#ifndef INC_MSGADDRESSCONTROLEDITOR_H +#define INC_MSGADDRESSCONTROLEDITOR_H + +// ========== INCLUDE FILES ================================ +#include +#include "MsgExpandableControlEditor.h" // for CMsgExpandableControlEditor +#include "MsgAddressControlEditorField.h" + +// ========== CONSTANTS ==================================== + +// ========== MACROS ======================================= +#define KMaxContactLength 102 //(first name (50) + last name(50) + spaces(2)) + +#define iRichText ( static_cast( iText ) ) + +// ========== DATA TYPES =================================== + +// ========== FUNCTION PROTOTYPES ========================== + +// ========== FORWARD DECLARATIONS ========================= + +class CMsgEditorKeyCatcher; +class MVPbkContactLink; + +// ========== CLASS DECLARATION ============================ + +/** + * Defines a rich text editor for CMsgAddressControl. + * + */ +class CMsgAddressControlEditor : public CMsgExpandableControlEditor + { + public: + + /** + * Constructor. + * @param aParent + * @param aFlags + * @param aBaseControlObserver + */ + CMsgAddressControlEditor( + const CCoeControl* aParent, + TUint32& aFlags, + MMsgBaseControlObserver* aBaseControlObserver); + + /** + * Destructor. + */ + virtual ~CMsgAddressControlEditor(); + + // Entry handling functions + + /** + * Extracts an entry according to aEntryNumber and returns it in + * aEntryString. + * @param aEntryString + * @param aEntryNumber + */ + void ExtractEntry(TDes& aEntryString, TInt aEntryNumber); + + /** + * Reads an entry aEntryNumber and returns pointer to it. If such an + * entry does not exist, returns null string. + * @param aEntryNumber + * @return + */ + TPtrC ReadEntry(TInt aEntryNumber) const; + + /** + * Returns number of entries. + * @return + */ + TInt EntryCount() const; + + /** + * Deletes an entry aEntryNumber. + * @param aEntryNumber + */ + void DeleteEntryL(TInt aEntryNumber); + + /** + * Clears a text of an entry aEntryNumber. + * @param aEntryNumber + * @param aUpdate + */ + void ClearEntryL(TInt aEntryNumber, TBool aUpdate = EFalse); + + /** + * Clears the content of the editor. + */ + void DeleteAllL(); + + /** + * Deletes characters from aStartPos to aEndPos at entry aEntryNumber. + * @param aEntryNumber + * @param aStartPos + * @param aEndPos + */ + void DeleteEntryCharsL(TInt aEntryNumber, TInt aStartPos, TInt aEndPos); + + /** + * Sets cursor position to aPos and cancels selection. + * @param aPos + */ + void SetCursorPosAndCancelSelectionL(TInt aPos); + + /** + * Inserts an entry to the location aEntryNumber with strings aName + * and aAddress. Makes the entry as verified if aVerified = ETrue. + */ + void InsertEntryL( + TInt aEntryNumber, + const TDesC& aName, + const TDesC& aAddress, + TBool aVerified, + TBool aValidated, + const MVPbkContactLink* aContactLink ); + + /** + * Inserts the paragraph delimiter at aPos on entry aEntryNumber. + * @param aEntryNumber + * @param aPos + */ + void InsertEntryBreakL(TInt aEntryNumber, TInt aPos); + + /** + * Returns entry number where cursor is currently on. + * @param aPos + * @return + */ + TInt EntryNumber(TInt aPos) const; + + /** + * Returns length of the entry aEntryNumber. + * @param aEntryNumber + * @return + */ + TInt EntryLength(TInt aEntryNumber) const; + + /** + * Returns first character position on the entry aEntryNumber. + * @param aEntryNumber + */ + TInt EntryStartPos(TInt aEntryNumber) const; + + /** + * Return start position of field under aCursorPos. + * @param aCursorPos + */ + TInt FirstFieldPos(TInt aCursorPos) const; + + /** + * Moves cursor at the end of the entry aEntryNumber. + * @param aEntryNumber + * @param aPos + */ + void MoveCursorToEntryPosL(TInt aEntryNumber, TInt aPos); + + /** + * Checks whether the cursor is at the beginning of the entry. + * @param aPos + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsPosAtEntryBeginning(TInt aPos) const; + + /** + * Checks whether an entry aEntryNumber is verified or not. + * @param aEntryNumber + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsEntryVerified(TInt aEntryNumber) const; + + /** + * Checks whether an entry aEntryNumber - 1 is verified. + * @param aEntryNumber + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsPriorEntryVerified(TInt aEntryNumber) const; + + /** + * Checks whether an entry aEntryNumber is validated or not. + * @param aEntryNumber + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsEntryValidated(TInt aEntryNumber) const; + + /** + * Checks if there is a text field on the left hand side of the cursor at + * position aPos. + * @param aPos + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsFieldOnLeft(TInt aPos) const; + + /** + * Checks if there is a text field on the right hand side of the cursor at + * position aPos. + * @param aPos + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsFieldOnRight(TInt aPos) const; + + /** + * Checks if there is a text field under the cursor at position aPos. + * @param aPos + * @return ETrue if it is, otherwise EFalse. + */ + TBool IsFieldOnPos(TInt aPos) const; + + /** + * Checks whether an entry aEntryNumber is empty. + * @param aEntryNumber + * @return + */ + TBool IsEntryEmpty(TInt aEntryNumber) const; + + /** + * Turns entry as highlighted if the cursor is on the top of the verified + * entry, otherwise turns highlighting off if there were any somewhere else. + * @param aCancelFep + */ + void CheckHighlightingL(TBool aCancelFep = ETrue); + + /** + * Turns highlighting off if such a highlighted text field is somewhere. + * @param aSelection + */ + void TurnHighlightingOffL(TCursorSelection aSelection); + + /** + * Turns highlighting off if such a highlighted text field is somewhere. + * @param aCancelFep + */ + void TurnHighlightingOffL(TBool aCancelFep = ETrue); + + /** + * Turns highlighting off from position aPos. + * @param aPos + */ + void TurnHighlightingOffFromPosL(TInt aPos); + + /** + * Creates a suitable text string for the text field using strings aName + * and aAddress and return pointer to it. If aUpdate == EFalse, this + * function does not format the string but takes only aAddress. + * @param aName + * @param aAddress + * @param aVerified + * @return + */ + HBufC* CreateEntryStringLC( + const TDesC& aName, + const TDesC& aAddress, + TBool aVerified = ETrue); + + /** + * Re-builds all the text strings. + */ + void ReBuildEntryStringsL(); + + /** + * Returns a field of the entry aEntryNumber. If there is no field on that + * entry, returns NULL. + * @param aEntryNumber + * @return + */ + const CMsgAddressControlEditorField* Field(TInt aEntryNumber) const; + + /** + * Returns character at position aPos. + * @param aPos + * @return + */ + TChar CharAtPos (TInt aPos) const; + + /** + * Prepares control for viewing. + */ + void PrepareForViewing(); + + /** + * Inserts ; and line feeds prior to inline edits + */ + void PreInsertEditorFormattingL( const TKeyEvent& aKeyEvent ); + + /** + * Inserts ; and line feeds prior to inline edits + */ + void PostInsertEditorFormattingL( TBool aDuplicateEvent ); + + /** + * Determine the overall text direction for the text for an entry + * + * @param aEntryNumber a valid entry number + * @return EFalse iff the text for the given entry is not right to left text + */ + TBool IsEntryRightToLeft(TInt aEntryNumber) const; + + /** + * Sets address highlighting for automatic find function on/off. + * + * @param aValidHighlightable ETrue for on / EFalse for off. + * @return none + */ + void SetAddressFieldAutoHighlight( TBool aValidHighlightable = EFalse ); + + /** + * Returns address highlighting value for automatic find function. + * + * @param + * @return aValidHighlightable ETrue for on / EFalse for off. + */ + inline TBool AddressFieldAutoHighlight(); + + public: // from CMsgExpandableControlEditor + + /** + * Checks and returns control's edit permissions. + * @return + */ + TUint32 CheckEditPermission() const; + + /** + * Creates this control from resource. + * @param aReader + */ + void ConstructFromResourceL(TResourceReader& aReader); + + /** + * Calculates and sets the size of the control and returns new size as + * reference aSize. + * @param aSize + */ + void SetAndGetSizeL(TSize& aSize); + + /** + * + */ + TBool IsHandleEditEvent() const { return iHandleEditEvent; } + + /** + * Called by the parent control to notify editor about + * read only state change. Includes address field and + * expandable control specific behaviours. + * Base class implementation should be called by the derived class. + * + * @param aReadOnly ETrue if read only editor. Otherwise EFalse. + */ + void PrepareForReadOnlyL( TBool aReadOnly ); + + /** + * returns the current cursor position + */ + TInt GetCursorpos() const; + public: // from CEikRichTextEditor + + /** + * Handles key events. + * @param aKeyEvent + * @param aType + * @return + */ + TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); + + /** + * From CCoeControl. See coecntrl.h + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + + /** + * From CCoeControl. See coecntrl.h + */ + void HandleResourceChange( TInt aType ); + + public: // from MEikCcpuEditor + + /** + * + */ + void CcpuPasteL(); + + private: + + /** + * Constructor (not available). + */ + CMsgAddressControlEditor(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Insert a semicolon at the specified position. + * + * @param aPos intertion point + */ + void InsertSemicolonL(TInt aPos); + + /** + * Insert a paragraph delimiter at the specified position. + * + * @param aPos intertion point + */ + void InsertParagraphL(TInt aPos); + + /** + * Check that contact underlining is correct. + */ + void CheckUnderliningL(); + + /** + * Returns field from given position. + */ + inline const CMsgAddressControlEditorField* FieldFromPos( TInt aPos ) const; + + private: + + TMsgAddressControlEditorFieldFactory* iAddressControlEditorFieldFactory; + + // this is used to indicate where higlighting starts. + TInt iHighLightedFieldPos; + + // Indicates current entry number if length of the text has been changed + // due to RebuildEntryString. + TInt iCurrentEntry; + + TBool iHandleEditEvent; + TBool iValidHighlightable; // for automatic highlight + + CMsgEditorKeyCatcher* iKeyCatcher; + TBool iHandlingPointerEvent; + + const CMsgAddressControlEditorField* iPreviousField; + TInt iCusPos; + }; + +inline TBool CMsgAddressControlEditor::AddressFieldAutoHighlight( ) + { + return iValidHighlightable; + } + +inline const CMsgAddressControlEditorField* CMsgAddressControlEditor::FieldFromPos( TInt aPos ) const + { + return static_cast( iRichText->TextField( aPos ) ); + } + +#endif + +// End of File