--- /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 <txtrich.h>
+#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<CRichText*>( 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<const CMsgAddressControlEditorField*>( iRichText->TextField( aPos ) );
+ }
+
+#endif
+
+// End of File