--- /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