phonebookengines/VirtualPhonebook/inc/CVPbkSimContactView.h
changeset 0 e686773b3f54
child 9 0d28c1c5b6dd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/inc/CVPbkSimContactView.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* 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:  The contact view
+*
+*/
+
+
+
+#ifndef CVPBKSIMCONTACTVIEW_H
+#define CVPBKSIMCONTACTVIEW_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <MVPbkSimCntView.h>
+#include <MVPbkSimStoreObserver.h>
+#include <RVPbkStreamedIntArray.h>
+#include <VPbkSimStoreCommon.h>
+
+// FORWARD DECLARATIONS
+class MVPbkSimViewObserver;
+class CVPbkSimContactBuf;
+class CVPbkSimFieldTypeFilter;
+class MVPbkSimViewFindObserver;
+class MDesCArray;
+class MVPbkSimContact;
+template <class MVPbkSimViewObserver> class CVPbkAsyncObjectOperation;
+
+// FORWARD DECLARATIONS
+namespace VPbkSimStoreImpl {
+class CSimCntSortUtil;
+}
+
+// CLASS DECLARATION
+
+/**
+ *  A class for a sorted view from a store. View can be optionally filtered
+ *  and it also can have name that identifies it.
+ */
+class CVPbkSimContactView :     
+        public CBase,
+        public MVPbkSimCntView,
+        private MVPbkSimStoreObserver
+    {
+    public:  // Constructors and destructor
+        /**
+         * Two-phased constructor.
+         *
+         * @param aSortOrder            The sort order for the view.
+         * @param aConstructionPolicy   Defines how the view is constructed.
+         * @param aParentStore          The parent store of the view.
+         * @param aViewName             The name of the view. Use KNullDesC
+         *                              for unnamed view.
+         * @param aFilter               Field type filter.
+         * @return  A new instance of this class.
+         */
+        IMPORT_C static CVPbkSimContactView* NewLC(
+                const RVPbkSimFieldTypeArray& aSortOrder,
+                TVPbkSimViewConstructionPolicy aConstructionPolicy,
+                MVPbkSimCntStore& aParentStore, 
+                const TDesC& aViewName,
+                CVPbkSimFieldTypeFilter* aFilter );
+        
+        /**
+         * Destructor.
+         */
+        virtual ~CVPbkSimContactView();
+            
+    public: // From MVPbkSimCntView
+        const TDesC& Name() const;
+        MVPbkSimCntStore& ParentStore() const;
+        void OpenL(
+                MVPbkSimViewObserver& aObserver );
+        void Close(
+                MVPbkSimViewObserver& aObserver );
+        TInt CountL() const;
+        MVPbkSimContact& ContactAtL(
+                TInt aIndex );
+        void ChangeSortOrderL(
+                const RVPbkSimFieldTypeArray& aSortOrder );
+        TInt MapSimIndexToViewIndexL(
+                TInt aSimIndex );
+        MVPbkSimStoreOperation* ContactMatchingPrefixL(
+                const MDesCArray& aFindStrings, 
+                MVPbkSimViewFindObserver& aObserver );
+        const RVPbkSimFieldTypeArray& SortOrderL() const;
+    
+    private: // From MVPbkSimStoreObserver
+        void StoreReady(
+                MVPbkSimCntStore& aStore );
+        void StoreError(
+                MVPbkSimCntStore& aStore, TInt aError );
+        void StoreNotAvailable(
+                MVPbkSimCntStore& aStore );
+        void StoreContactEvent(
+                TEvent aEvent, TInt aSimIndex );
+
+    private: // Types
+        /// A simple contact for the view.
+        /// The view is a list of sim indexes in certain order.
+        struct TViewContact
+            {
+            TViewContact( TInt aSimIndex ) : iSimIndex( aSimIndex ) {}
+            TInt iSimIndex;
+            };
+            
+    private: // Implementation
+        CVPbkSimContactView( MVPbkSimCntStore& aParentStore,
+                TVPbkSimViewConstructionPolicy aConstructionPolicy );
+        void ConstructL(
+                const RVPbkSimFieldTypeArray& aSortOrder, 
+                const TDesC& aViewName );
+        /// Calls SortL in TRAP
+        void Sort();
+        /// Does the view sorting
+        void SortL();
+        /// Handle SortL failure
+        TInt SortError( TInt aError );
+        TBool IsSorting() const;
+        /// Starts asynchronous sorting
+        void StartSorting();
+        /// A handler for StoreContactEvent
+        void HandleStoreContactEventL( TEvent aEvent, TInt aSimIndex );
+        void HandleContactAddedL( TInt aSimIndex );
+        void HandleContactRemoved( TInt aSimIndex );
+        void HandleContactChangedL( TInt aSimIndex );
+        /// Inserts a new view contact to the correct place in the array
+        TInt InsertViewContactL(
+                const MVPbkSimContact& aContact );
+        /// Finds the index for the new contact if the view is sorted
+        TInt SortedIndexL(
+                const MVPbkSimContact& aLeft );
+        /// Finds the index for the new contact if the view is not sorted
+        TInt UnsortedIndex(
+                const MVPbkSimContact& aLeft );
+        /// Removes the view contact to aSimIndex, Returns removed view index.
+        TInt RemoveViewContact(
+                TInt aSimIndex );
+        /// Resets the current sort order and copies types from the source
+        void ResetAndCopySortOrderL(
+                const RVPbkSimFieldTypeArray& aSource );
+        /// Resets the view
+        void Reset();
+        /// Inspects whether the contact passes the filtering criteria
+        TBool PassesFilter(
+                const MVPbkSimContact& aContact,
+                const CVPbkSimFieldTypeFilter* aFilter ) const;
+        // View state changes
+        void SetToReadyState();
+        void SetToNotReadyState();
+        void SetToUnavailableState();
+        TBool ViewStateReady() const;
+        TBool ViewStateUnavailable() const;
+        TBool ViewStateNotReady() const;
+        /// A function called by iAsyncOperation
+        void DoViewOpenCallbackL( MVPbkSimViewObserver& aObserver );
+        /// A function called by iAsyncOperation
+        void DoViewUnavailableCallbackL( MVPbkSimViewObserver& aObserver );
+        /// A function called by iAsyncOperation
+        void DoViewErrorCallback( MVPbkSimViewObserver& aObserver, 
+                TInt aError );
+        static TBool CompareViewContactSimIndex( const TViewContact& aLeft,
+                const TViewContact& aRight );
+        static TInt IdleSortCallback( TAny* aThis );
+        
+    private: // Data
+        /// Own: The name of view that is given by the client
+        HBufC* iViewName;
+        /// Ref: The parent store of the view
+        MVPbkSimCntStore& iParentStore;
+        /// Own: The sort order of this view
+        RVPbkSimFieldTypeArray iSortOrder;
+        /// Own: The observer of the view
+        RPointerArray<MVPbkSimViewObserver> iObservers;
+        /// Own: An array of view contacts
+        RArray<TViewContact> iViewContacts;
+        /// Own: The sorting utility
+        VPbkSimStoreImpl::CSimCntSortUtil* iSortUtil;
+        /// Own: The current sim contact read with ContactAtL
+        CVPbkSimContactBuf* iCurrentContact;
+        /// Own: Defines how the view is created
+        TVPbkSimViewConstructionPolicy iConstructionPolicy;
+        /// Own: State indicator
+        TInt iViewState;
+        /// Own: Async operations for the opening the view
+        CVPbkAsyncObjectOperation<MVPbkSimViewObserver>* iAsyncOperation;
+        /// Own: Field type filter
+        CVPbkSimFieldTypeFilter* iFilter;
+        /// Own: A contact that can be used
+        CVPbkSimContactBuf* iTempContactForSorting;
+        /// Own: An idle for starting async sorting.
+        CIdle* iIdleSort;
+    };
+
+#endif  // CVPBKSIMCONTACTVIEW_H
+
+// End of File