phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CViewContact.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CViewContact.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2002-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:  A virtual phonebook view contact implementation
+*
+*/
+
+
+
+#ifndef VPBKSIMSTORE_CVIEWCONTACT_H
+#define VPBKSIMSTORE_CVIEWCONTACT_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <MVPbkViewContact.h>
+#include <MVPbkViewContactFieldCollection.h>
+#include <MVPbkViewContactField.h>
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactObserver.h>
+#include <MVPbkSimContactObserver.h>
+
+// FORWARD DECLARATIONS
+class MVPbkSimContact;
+class MVPbkSimStoreOperation;
+
+namespace VPbkEngUtils {
+class CVPbkAsyncOperation;    
+}
+
+namespace VPbkSimStore {
+
+// FORWARD DECLARATIONS
+class CViewContact;
+class CContactView;
+
+// CLASS DECLARATION
+
+/**
+* A simple field data class for the view contact
+*
+*/
+NONSHARABLE_CLASS( TViewContactFieldData ): 
+        public MVPbkContactFieldTextData
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ constructor
+        * @param aData the field data
+        */
+        TViewContactFieldData( const TDesC& aData );
+
+    public: // Functions from base classes
+
+        /**
+        * From MVPbkContactFieldData
+        */
+        TBool IsEmpty() const;
+
+        /**
+        * From MVPbkContactFieldData
+        */
+        void CopyL( const MVPbkContactFieldData& aFieldData );
+
+        /**
+        * From MVPbkContactFieldTextData
+        */
+        TPtrC Text() const;
+
+        /**
+        * From MVPbkContactFieldTextData
+        */
+        void SetTextL( const TDesC& aText );
+
+        /**
+        * From MVPbkContactFieldTextData
+        */
+        TInt MaxLength() const;
+
+    private:    // Data
+        /// The field data
+        TPtrC iData;
+    };
+
+/**
+* A simple view contact field class for the view contact
+*
+*/
+NONSHARABLE_CLASS( TViewContactField ): 
+        public MVPbkViewContactField
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ constructor
+        * @param aParentContact the parent view contact of this  field
+        * @param aFieldType the field type of this field
+        */
+        TViewContactField( CViewContact& aParentContact,
+            const MVPbkFieldType& aFieldType,
+            const TDesC& aData );
+
+    public: // New functions
+
+        /**
+        * Returns the field data
+        */
+        TViewContactFieldData& FieldData() { return iFieldData; }
+
+    public: // Functions from base classes
+
+        /**
+        * From MVPbkObjectHierarchy
+        */
+        MVPbkObjectHierarchy& ParentObject() const;
+
+        /**
+        * From MVPbkBaseContactField
+        */
+        MVPbkBaseContact& ParentContact() const;
+
+        /**
+        * From MVPbkBaseContactField
+        */
+        const MVPbkFieldType* MatchFieldType( TInt aMatchPriority ) const;
+        
+        /**
+        * From MVPbkBaseContactField
+        */
+        const MVPbkFieldType* BestMatchingFieldType() const;
+
+        /**
+        * From MVPbkBaseContactField
+        */
+        const MVPbkContactFieldData& FieldData() const;
+
+        /**
+        * From MVPbkBaseContactField
+        */
+        TBool IsSame(const MVPbkBaseContactField& aOther) const;
+
+    private:    // Data
+        /// The parent contact
+        CViewContact& iParentContact;
+        /// The field type of the field
+        const MVPbkFieldType& iFieldType;
+        /// The data of the field
+        TViewContactFieldData iFieldData;
+    };
+
+/**
+* A simple view contact field collection class for the view contact
+*
+*/
+NONSHARABLE_CLASS( CViewContactFieldCollection ): 
+        public CBase,
+        public MVPbkViewContactFieldCollection
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        virtual ~CViewContactFieldCollection();
+        
+    public: // New functions
+
+        /**
+        * Sets the parent contact
+        * @param aParentContact the contact that owns field collection
+        */
+        void SetParentContact( CViewContact& aParentContact );
+
+        /**
+        * Resets field collection
+        */
+        void ResetFields();
+
+        /**
+        * Appends a new field to the field collection
+        * @param aNewField the new view contact field
+        */
+        void AppendFieldL( TViewContactField& aNewField );
+
+    public: // Functions from base classes
+
+        /**
+        * From MVPbkViewContactFieldCollection
+        */
+        MVPbkBaseContact& ParentContact() const;
+
+        /**
+        * From MVPbkViewContactFieldCollection
+        */
+        TInt FieldCount() const;
+
+        /**
+        * From MVPbkViewContactFieldCollection
+        */
+        const MVPbkBaseContactField& FieldAt( TInt aIndex ) const;
+    private:    // Data
+        /// Ref: the parent contact of the collection
+        CViewContact* iParentContact;
+        /// An array of fields
+        RArray<TViewContactField> iFields;
+    };
+
+/**
+*  A virtual phonebook view contact implementation
+*
+*/
+NONSHARABLE_CLASS( CViewContact ): 
+        public CBase,
+        public MVPbkViewContact,
+        private MVPbkSimContactObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        * @param the parent view of the contact
+        * @param aSortOrder the sort order of the view
+        * @return a new instance of this class
+        */
+        static CViewContact* NewL( CContactView& aView,
+            const MVPbkFieldTypeList& aSortOrder );
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CViewContact();
+
+    public: // New functions
+        
+        /**
+        * Sets the sim contact for this view contact
+        * @param aSimContact the sim contact for the view contact
+        */
+        void SetSimContactL( MVPbkSimContact& aSimContact );
+
+        /**
+        * Returns the sim index of this contact
+        * @return the sim index of this contact
+        */
+        TInt SimIndex() const;
+
+        /**
+        * Set field sort order for the view contact
+        */
+        void SetSortOrder( const MVPbkFieldTypeList& aSortOrder );
+
+        /**
+         * Returns a reference to the native contact if set by
+         * SetSimContactL. Otherwise returns NULL
+         */
+        const MVPbkSimContact* NativeContact() const;
+        
+        /**
+         * Returns the view that this contact belongs.
+         */
+        CContactView& View() const;
+
+    public: // Functions from base classes
+            
+        /**
+        * From MVPbkBaseContact
+        */ 
+        const MVPbkBaseContactFieldCollection& Fields() const;
+
+        /**
+        * From MVPbkBaseContact
+        */ 
+        TBool IsSame( const MVPbkStoreContact& aOtherContact ) const;
+
+        /**
+        * From MVPbkBaseContact
+        */ 
+        TBool IsSame( const MVPbkViewContact& aOtherContact ) const;
+
+        /**
+        * From MVPbkBaseContact
+        */ 
+        MVPbkContactLink* CreateLinkLC() const;
+
+        /**
+        * From MVPbkBaseContact
+        */ 
+        void DeleteL(MVPbkContactObserver& aObserver) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        TBool MatchContactStore(const TDesC& aContactStoreUri) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        TBool MatchContactStoreDomain(const TDesC& aContactStoreDomain) const;
+        
+        /**
+        * From MVPbkBaseContact
+        */
+        MVPbkContactBookmark* CreateBookmarkLC() const;
+        
+        /**
+        * From MVPbkViewContact
+        */
+        MVPbkContactViewBase& ParentView() const;
+
+        /**
+        * From MVPbkViewContact
+        */
+        void ReadL(MVPbkContactObserver& aObserver) const;
+
+        /**
+        * From MVPbkViewContact
+        */
+        void ReadAndLockL(MVPbkContactObserver& aObserver) const;
+
+        /**
+        * From MVPbkViewContact
+        */
+        MVPbkExpandable* Expandable() const;
+
+        /**
+        * From MVPbkViewContact
+        */
+        TBool IsSame(const MVPbkViewContact& aOtherContact, 
+                     const MVPbkContactStore* aContactStore) const;
+
+        /**
+        * From MVPbkViewContact
+        */
+        TBool IsSame(const MVPbkStoreContact& aOtherContact, 
+                     const MVPbkContactStore* aContactStore) const;
+        
+    private: // Construction
+
+        /**
+        * C++ constructor.
+        */
+        CViewContact( CContactView& aView, 
+            const MVPbkFieldTypeList& aSortOrder );
+        
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+    
+    private:    // Functions from base classes
+        
+        /**
+        * From MVPbkViewContact
+        */
+        void ContactEventComplete( TEvent aEvent, 
+            CVPbkSimContact* aContact );
+
+        /**
+        * From MVPbkViewContact
+        */
+        void ContactEventError( TEvent aEvent, 
+            CVPbkSimContact* aContact, TInt aError );
+            
+    private:    // New functions
+        void CreateReadCallbackL( MVPbkContactObserver& aObserver,
+                MVPbkContactObserver::TContactOpResult& aOpResult ) const;
+    private:    // Data
+        /// The parent view of the contact
+        CContactView& iView;
+        /// Field collection
+        CViewContactFieldCollection iFieldCollection;
+        /// The view sort order
+        const MVPbkFieldTypeList* iSortOrder;
+        /// Not Own: the native sim contact set by SetSimContactL
+        MVPbkSimContact* iSimContact;
+        /// Own: an asynchronous call back that is needed if observer
+        /// must be notified e.g from ReadL
+        VPbkEngUtils::CVPbkAsyncOperation* iAsyncOp;
+        /// Ref: an observer of DeleteL
+        mutable MVPbkContactObserver* iObserver;
+        /// Own: an async operation handle.
+        mutable MVPbkSimStoreOperation* iStoreOperation;
+    };
+
+} // namespace VPbkSimStore
+#endif      // VPBKSIMSTORE_CVIEWCONTACT_H
+            
+// End of File