phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CViewBase.h
changeset 0 e686773b3f54
child 18 591870b73212
child 26 0d28c1c5b6dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CViewBase.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,259 @@
+/*
+* 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:  Contacts Model store contact view implementation.
+*
+*/
+
+
+#ifndef VPBKCNTMODEL_CVIEWBASE_H
+#define VPBKCNTMODEL_CVIEWBASE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <cntviewbase.h>
+#include <MVPbkContactView.h>
+#include <MVPbkContactViewFiltering.h>
+#include <MVPbkContactStoreObserver.h>
+#include "CViewContact.h"
+#include "MCustomContactViewObserver.h"
+#include "MParentViewForFiltering.h"
+
+// FORWARD DECLARATIONS
+class MVPbkContactViewObserver;
+class CVPbkSortOrder;
+class CVPbkContactViewDefinition;
+template<class MVPbkContactViewObserver> class CVPbkAsyncObjectOperation;
+template<class MFilteredViewSupportObserver> class CVPbkAsyncObjectOperation;
+
+namespace VPbkCntModel {
+
+// FORWARD DECLARATIONS
+class CContactStore;
+class CContactLink;
+
+/**
+ * Contacts Model store contact view implementation
+ */
+NONSHARABLE_CLASS( CViewBase ): public CBase,
+                                public MParentViewForFiltering,
+                                public MVPbkContactViewFiltering,
+                                public MVPbkContactStoreObserver,
+                                protected MContactViewObserver,
+                                protected MCustomContactViewObserver
+    {
+    public: // Destructor
+
+        /**
+         * Destructor.
+         */
+        virtual ~CViewBase();
+
+    public: // Interface
+
+        /**
+         * Returns parent contact store.
+         *
+         * @return  Parent contact store.
+         */
+        CContactStore& Store() const;
+
+        /**
+         * Returns native view.
+         *
+         * @return  Native view.
+         */
+        CContactViewBase& NativeView() const;
+        
+        /**
+         * Return view's state
+         *
+         * @return ETrue is view is ready other EFalse
+         */
+        TBool State() const;
+        
+        /**
+         * Returns view definition
+         *
+         * @return View definition
+         */
+        CVPbkContactViewDefinition& ViewDefinition() const;
+        
+    protected: // Interface
+        /**
+         * Change sort order
+         * @param aSortOrder
+         */
+        void ChangeSortOrderL( RContactViewSortOrder& aSortOrder );
+
+    public: // From MVPbkContactViewBase
+        void ChangeSortOrderL(
+                const MVPbkFieldTypeList& aSortOrder );
+        const MVPbkFieldTypeList& SortOrder() const;
+        void RefreshL();
+        virtual TInt ContactCountL() const;
+        virtual const MVPbkViewContact& ContactAtL(
+                TInt aIndex ) const;
+        MVPbkContactLink* CreateLinkLC(
+                TInt aIndex ) const;
+        TInt IndexOfLinkL(
+                const MVPbkContactLink& aContactLink ) const;
+        void AddObserverL(
+                MVPbkContactViewObserver& aObserver );
+        void RemoveObserver(
+                MVPbkContactViewObserver& aObserver );
+        TBool MatchContactStore(
+                const TDesC& aContactStoreUri ) const;
+        TBool MatchContactStoreDomain(
+                const TDesC& aContactStoreDomain ) const;
+        MVPbkContactBookmark* CreateBookmarkLC(
+                TInt aIndex ) const;
+        TInt IndexOfBookmarkL(
+                const MVPbkContactBookmark& aContactBookmark ) const;
+        MVPbkContactViewFiltering* ViewFiltering();
+   
+   public: // From MParentViewForFiltering
+        void AddFilteringObserverL( MFilteredViewSupportObserver& aObserver );
+        void RemoveFilteringObserver( MFilteredViewSupportObserver& aObserver );
+        
+   public: // From MVPbkContactViewFiltering         
+        MVPbkContactViewBase* CreateFilteredViewLC( 
+                MVPbkContactViewObserver& aObserver,
+                const MDesCArray& aFindWords,
+                const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts );
+        void UpdateFilterL( 
+                const MDesCArray& aFindWords,
+                const MVPbkContactBookmarkCollection* aAlwaysIncludedContacts );
+
+    public: // From MVPbkObjectHierarchy
+        MVPbkObjectHierarchy& ParentObject() const;
+
+    public: // From MVPbkContactStoreObserver
+        void StoreReady(
+                MVPbkContactStore& aContactStore );
+        void StoreUnavailable(
+                MVPbkContactStore& aContactStore,
+                TInt aReason );
+        void HandleStoreEventL(
+                MVPbkContactStore& aContactStore, 
+                TVPbkContactStoreEvent aStoreEvent );
+
+    protected: // From MContactViewObserver
+        void HandleContactViewEvent(
+                const CContactViewBase& aView,
+                const TContactViewEvent& aEvent );
+
+    private: // From MCustomContactViewObserver
+        void HandleCustomContactViewEvent(
+                const CContactViewBase& aView,
+                const TContactViewEvent& aEvent );
+    
+    protected: // Implementation
+        CViewBase(
+                CContactStore& aParentStore );
+        void ConstructL(
+                const CVPbkContactViewDefinition& aViewDefinition,
+                MVPbkContactViewObserver& aObserver, 
+                const MVPbkFieldTypeList& aSortOrder );
+        void ConstructL(
+                const CVPbkContactViewDefinition& aViewDefinition,
+                const MVPbkFieldTypeList& aSortOrder );
+        void DoUpdateTypeListL();                
+    private: // Implementation
+        RContactViewSortOrder CreateSortOrderL(
+                const MVPbkFieldTypeList& aSortOrder );
+        void DoAddObserverL(
+                MVPbkContactViewObserver& aObserver );
+        void AddObserverError(
+                MVPbkContactViewObserver& aObserver, TInt aError );
+        void DoAddFilteringObserverL(
+                MFilteredViewSupportObserver& aObserver );
+        void DoAddFilteringObserverError(
+                MFilteredViewSupportObserver& aObserver, TInt aError );
+        void InitializeViewL(
+                const CVPbkContactViewDefinition& aViewDefinition,
+                const MVPbkFieldTypeList& aSortOrder );
+        void TeardownView();
+        void SendViewErrorEvent( TInt aError );
+        void SendViewStateEvent();
+        void PurgeAsyncOperations();
+        void LeaveIfIncorrectSortOrderL( 
+                const MVPbkFieldTypeList& aSortOrder );
+        
+        virtual void DoInitializeViewL(
+                const CVPbkContactViewDefinition& aViewDefinition,
+                RContactViewSortOrder& viewSortOrder ) = 0;
+        virtual void DoTeardownView() = 0;
+        virtual TBool DoChangeSortOrderL(
+                const CVPbkContactViewDefinition& aViewDefinition,
+                RContactViewSortOrder& aSortOrder ) = 0;
+
+    protected: // Data
+        /// Own: Contacts view
+        CContactViewBase* iView;
+        /// Own: Array of observers
+        RPointerArray<MVPbkContactViewObserver> iObservers;
+        /// Ref: an array of observers that filters this view.
+        RPointerArray<MFilteredViewSupportObserver> iFilteringObservers;
+        /// Own: View sort order
+        CVPbkSortOrder* iSortOrder;
+        
+    private: // Data
+        /// Ref: Parent contact store
+        CContactStore& iParentStore;
+        /// Own: The defintion of the view from client
+        CVPbkContactViewDefinition* iViewDefinition;
+        /// Own: Link to a contact associated with last event
+        CContactLink* iEventLink;
+        /// Own: View ready indicator
+        TBool iViewReady;
+        /// Own: an async operation for MVPbkContactViewObserver
+        CVPbkAsyncObjectOperation<MVPbkContactViewObserver>* iObserverOp;
+        /// Own: an async operation for MFilteredViewSupportObserver
+        CVPbkAsyncObjectOperation<MFilteredViewSupportObserver>* iFilterObsOp;
+        /// Own: A contact last queried
+        mutable CViewContact* iCurrentContact;
+    };
+
+
+// INLINE FUNCTIONS
+
+inline CContactStore& CViewBase::Store() const
+    {
+    return iParentStore;
+    }
+
+inline CContactViewBase& CViewBase::NativeView() const
+    {
+    return *iView;
+    }
+    
+inline TBool CViewBase::State() const
+    {
+    return iViewReady;
+    }
+    
+inline void CViewBase::ChangeSortOrderL( RContactViewSortOrder& aSortOrder )
+    {
+    DoChangeSortOrderL( *iViewDefinition, aSortOrder );
+    }
+
+inline CVPbkContactViewDefinition& CViewBase::ViewDefinition() const
+	{
+	return *iViewDefinition;
+	}
+} // namespace VPbkCntModel
+
+#endif // VPBKCNTMODEL_CVIEWBASE_H
+
+// End of File