diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/inc/cntviewprivate.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/inc/cntviewprivate.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,151 @@ +// Copyright (c) 2001-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: +// + +#ifndef __CNTVIEWPRIVATE_H__ +#define __CNTVIEWPRIVATE_H__ + +#include +#include "CNTPHBKSYNCWATCHER.H" + +/** + * This class adds the ability to change sort orders to the functionality + * provided by CContactLocalView. If the sort order is changed, a notification + * will be sent to all observers. This class is only intended for use by the + * contact server. Clients should use CContactNamedRemoteView. + */ +class CContactNamedLocalView : public CContactLocalView + { +public: + IMPORT_C static CContactNamedLocalView* NewL(MContactViewObserver& aObserver,const TDesC& aName,const CContactDatabase& aDb,const RContactViewSortOrder& aSortOrder,TContactViewPreferences aContactTypeToInclude); + IMPORT_C static CContactNamedLocalView* NewL(MContactViewObserver& aObserver,const TDesC& aName,const CContactDatabase& aDb,const RContactViewSortOrder& aSortOrder,TContactViewPreferences aContactTypeToInclude, const TDesC8& aSortPluginName); + IMPORT_C static CContactNamedLocalView* NewL(MContactViewObserver& aObserver,const TDesC& aName,const CContactDatabase& aDb,const RContactViewSortOrder& aSortOrder,TContactViewPreferences aContactTypeToInclude, MLplPersistenceLayerFactory* aFactory, const TDesC8& aSortPluginName); + IMPORT_C const TDesC& Name(); + IMPORT_C void ChangeSortOrderL(RContactViewSortOrder& aSortOrder); +private: + ~CContactNamedLocalView(); + CContactNamedLocalView(const CContactDatabase& aDb,TContactViewPreferences aContactTypes,MLplPersistenceLayerFactory* aFactory); + CContactNamedLocalView(const CContactDatabase& aDb,TContactViewPreferences aContactTypeToInclude); + void ConstructL(MContactViewObserver& aObserver,const TDesC& aName,const RContactViewSortOrder& aSortOrder, + TBool aUseNamedPlugin, const TDesC8& aSortPluginName); +private: + HBufC* iName; + }; + +/** + * This class is owned by CContactRemoteViewBase and is used to + * receive view events + */ +NONSHARABLE_CLASS (CContactRemoteViewNotifier) : public CActive + { +public: + CContactRemoteViewNotifier(RContactRemoteView& aView,TCallBack aCallBack); + ~CContactRemoteViewNotifier(); + void Start(); + const TContactViewEvent& Event() const; +private: // From CActive. + void RunL(); + void DoCancel(); +private: + RContactRemoteView& iView; + TPckgBuf iEvent; + TCallBack iCallBack; + }; + + +class MContactViewSortObserver; + +/** + * This class extends CAsyncOneShot to allow an initial notification request + * to be made to the phonebook synchroniser plug-in for ICC views. + * + * This allows delaying the construction of the view until the ICC + * is synchronised and the phonebook synchroniser is in a cache-valid + * state. + */ +NONSHARABLE_CLASS (CIdleContactSorter) : public CAsyncOneShot, public MContactPhbkSyncObserver + { +private: + enum TSorterState + { + EInsertSortFinal, + EInsertContactsOnlyIccLocked, + EWaitingForInitialICCReady, + EContactsReadyWaitICCUnlock, + ESortAllDone + }; + +public: + static CIdleContactSorter* NewL(MContactViewSortObserver& aObserver, MLplPersistenceLayerFactory& aFactory, TContactViewPreferences aRequestedViewPrefs); + ~CIdleContactSorter(); + TBool IsICCSynchronised() const; + TContactViewPreferences SortViewPreferences() const; + TBool InsertViewPreferences(TContactViewPreferences &aInsertView) const; + void Start(); + void Stop(); + +private: // From CAsyncOneShot + CIdleContactSorter(MContactViewSortObserver& aObserver, TContactViewPreferences aRequestedViewPrefs); + void ConstructL(MLplPersistenceLayerFactory& aFactory); + + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + void ChangeSortState(TSorterState aNewSortState); + + // From MContactPhbkSyncObserver + void ContactPhbkSyncEventHandler(TPhonebookState aPhbkState); + +private: + MContactViewSortObserver& iSortObserver; + + // requested view + TContactViewPreferences iRequestedView; + // non-NULL if ICC contacts are included in view, & therefore a sync is expected + CContactPhbkSyncWatcher* iPhbkSyncWatcher; + + // subset of view we are actually insert sorting now + TContactViewPreferences iSortView; + TSorterState iSortState; + }; + + +/** + * Template classes to call ResetAndDestroy on array classes + * automatically, when ::PopAndDestroy'ing from the cleanup stack. + */ +template +class CleanupResetAndDestroy + { +public: + inline static void PushL(T& aRef); +private: + static void ResetAndDestroy(TAny *aPtr); + }; +template +inline void CleanupResetAndDestroyL(T& aRef); + +// Template class CleanupClose +template +inline void CleanupResetAndDestroy::PushL(T& aRef) + {CleanupStack::PushL(TCleanupItem(&ResetAndDestroy, &aRef));} +template +void CleanupResetAndDestroy::ResetAndDestroy(TAny *aPtr) + {static_cast(aPtr)->ResetAndDestroy();} +template +inline void CleanupResetAndDestroyPushL(T& aRef) + {CleanupResetAndDestroy::PushL(aRef);} + +#endif //__CNTVIEWPRIVATE_H__