messagingappbase/msgeditor/viewinc/MsgAddressControlEditor.h
changeset 0 72b543305e3a
--- /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