phonebookengines/contactsmodel/inc/cntviewprivate.h
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /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 <cntviewbase.h>
+#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<TContactViewEvent> 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 T>
+class CleanupResetAndDestroy
+	{
+public:
+	inline static void PushL(T& aRef);
+private:
+	static void ResetAndDestroy(TAny *aPtr);
+	};
+template <class T>
+inline void CleanupResetAndDestroyL(T& aRef);
+
+// Template class CleanupClose
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy, &aRef));}
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+	{static_cast<T*>(aPtr)->ResetAndDestroy();}
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+	{CleanupResetAndDestroy<T>::PushL(aRef);}
+
+#endif //__CNTVIEWPRIVATE_H__