diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/cntplsql/inc/cviewcontactmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/cntplsql/inc/cviewcontactmanager.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,130 @@ +/** +* Copyright (c) 2007-2009 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: +* +*/ + + + +/** + @file + @internalComponent + @released +*/ + + +#ifndef __CVIEWCONTACTMANAGER_H__ +#define __CVIEWCONTACTMANAGER_H__ + +#include "persistencelayer.h" +#include + +class MContactViewSortObserver + { + public: + enum TIccViewNotify + { + TIccViewNotify_IccOnlyLocked, + TIccViewNotify_IccUnlocked + }; + + public: + virtual TBool IdleSorterNotifyL(TInt aSortErr) =0; + virtual void IccViewNotifyL(TInt aIccViewReady) =0; + }; + + +/** +The CViewContactManager is an internal class responsible to sort contact view items, +according to sort plug-in, and provide CViewContact items for CContactLocalView. +And it's the only view class interact with persistence layer(CPplContactViewItemManager) +to retrieve contact view item from database. +@internalComponent +*/ +NONSHARABLE_CLASS(CViewContactManager) : public CBase, public MContactViewSortObserver + { +public: + static CViewContactManager* NewL(CContactLocalView& aLocalView, MLplPersistenceLayerFactory& aFactory, const CContactTextDef& aTextDef, TContactViewPreferences aViewPerference, CViewContactSortPlugin* aSortPlugin); + ~CViewContactManager(); + + TContactItemId AtL(TInt aIndex) const; + TInt Count() const; + TInt FindL(TContactItemId aContactId) const; + void SortL(); + void SortL(const CContactTextDef& aTextDef); + void StopSortL(); + TInt InsertL(const TContactItemId aContactId, TContactViewPreferences& aViewPreference); + TInt RemoveL(const TContactItemId aContactId); + HBufC* AllFieldsLC(TInt aIndex, const TDesC& aSeparator) const; + + const CViewContact& ContactAtL(TInt aIndex) const; + + TBool IsICCSynchronised() const; + + //Implementation for MContactSortObserver + TBool IdleSorterNotifyL(TInt aSortErr); + void IccViewNotifyL(TInt aIccViewReady); + +private: + /* To represent the state when retrieving data from database */ + enum TReadState + { + EReadFullChunk, // The read items reached the number of limitation per invocation + EReadFullForMerge, // The read items reached the number of limitation per merge + EReadCompleted // Read is completed, no more view contact item in database. + }; + +private: + CViewContactManager(CContactLocalView& aLocalView, MLplViewIteratorManager& aLplViewMgr, TContactViewPreferences aViewPerference, CViewContactSortPlugin* aSortPlugin); + void ConstructL(MLplPersistenceLayerFactory& aFactory, const CContactTextDef& aTextDef); + + TInt InsertViewContactL(const CViewContact* aNewContact, TBool aSortByIdOnly, TInt aStart); + void HeapSortL(RPointerArray& aViewContacts); + RPointerArray* MergeL(RPointerArray& aLeftContacts, RPointerArray& aRightContacts); + + TReadState ReadInViewContactsL(RPointerArray& aViewContacts); + CViewContact& ViewContactAtL(TInt aIndex) const; + + void ResetSort(); + + static TBool ContactCorrectType(TUid aType, TContactViewPreferences aTypeToInclude); + static void ResetAndDestroyRPointerArrayPointer(TAny *aArray); + + //These functions are copied from CContactViewBase classes + TBool IsContactSortable(const CViewContact& aContact, TContactViewPreferences& aViewPreferences) const; + TInt CompareContactsAndIdsL(const CViewContact& aFirst, const CViewContact& aSecond) const; + TInt TextCompareFieldsL(const CViewContact& aFirst, const CViewContact& aSecond) const; + HBufC* FieldsWithSeparatorLC(const CViewContact& aViewContact, const TDesC& aSeparator) const; + static TInt CompareFieldsWithCollationLevel(const CViewContact& aFirst, const CViewContact& aSecond, TInt aCollationLevel, const TCollationMethod* aCollateMethod); + +private: + CContactLocalView& iLocalView; + + CIdleContactSorter* iIdleSorter; + + TInt iViewSessionId; + + RPointerArray* iViewContacts; + RPointerArray* iUnsortedViewContacts; + RPointerArray* iViewContactsBuffer; + + CViewContactSortPlugin* iSortPluginImpl; //this is not owned by the class + + TContactViewPreferences iViewPreferences; + TCollationMethod iCollationMethod; + + MLplViewIteratorManager& iLplViewItemMgr; + }; + +#endif // __CVIEWCONTACTMANAGER_H__