--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/cntsrv/inc/CViewSubSessions.h Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,207 @@
+/**
+* Copyright (c) 2005-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 CVIEWSUBSESSIONS_H
+#define CVIEWSUBSESSIONS_H
+
+
+#include <e32base.h>
+
+#include "persistencelayer.h"
+
+
+class CViewSubSessionBase;
+class CContactViewBase;
+class CViewContact;
+class RContactViewSortOrder;
+class CContactLocalView;
+class CContactNamedLocalView;
+class CPersistenceLayer;
+class CCntDbManager;
+class CContactDefaultViewDefinition;
+
+
+/**
+The CViewSubSessionQueue class is used to queue view events on the Server for
+later consumption by Client-side objects which make IPC calls to read events
+from the queue. An instance of this class is owned by each CViewSubSessionBase
+object.
+*/
+class CViewSubSessionQueue : public CBase
+ {
+public:
+ CViewSubSessionQueue();
+ ~CViewSubSessionQueue();
+ void QueueEvent(const TContactViewEvent& aEvent);
+ void RequestEvent(const RMessage2& aMessage);
+ void CancelEventRequest();
+
+private:
+ void SendEventL(const TContactViewEvent& aEvent);
+
+private:
+ RArray<TContactViewEvent> iEvents;
+ RMessage2 iMessage;
+ TBool iRequestPending;
+ TInt iQueueError;
+ };
+
+
+/**
+The CViewManager class is responsible for managing Server-side local view
+objects which are associated with Client-side remote view objects.
+
+Each CCntSession object creates a CViewManager instance.
+
+The CViewManager class constructs and manages one or more CContactLocalView or
+CContactNamedLocalView instances and supplies them to CViewSubSession.
+*/
+class CViewManager : public CBase
+ {
+public:
+ static CViewManager* NewL(MLplPersistenceLayerFactory& aFactory,CCntDbManager& aDbManager);
+ CContactLocalView& OpenViewL(const RContactViewSortOrder& aSortOrder,MContactViewObserver& aObserver,TContactViewPreferences aContactTypeToInclude, const TUid aSortPluginImplUid, const TDesC8& aSortPluginName);
+ CContactNamedLocalView& OpenNamedViewL(const TDesC& aName,const RContactViewSortOrder& aSortOrder,MContactViewObserver& aObserver,TContactViewPreferences aContactTypeToInclude, const TUid aSortPluginImplUid, const TDesC8& aSortPluginName);
+ void CloseView(const CContactLocalView& aView,MContactViewObserver& aObserver);
+ void CloseNamedView(const CContactNamedLocalView& aView,MContactViewObserver& aObserver);
+ ~CViewManager();
+ void GetDefinitionsOfExistingViewsL(RPointerArray<CContactDefaultViewDefinition>& aViewDefs);
+
+private:
+ CViewManager(MLplPersistenceLayerFactory& aFactory,CCntDbManager& aManager);
+ void ConstructL();
+
+private:
+ MLplPersistenceLayerFactory& iFactory;
+ CCntDbManager& iManager;
+ struct TViewHandle
+ {
+ CContactLocalView* iLocalView;
+ TUid iSortPluginImplUid;
+ };
+ RArray<TViewHandle> iLocalViews;
+ RPointerArray<CContactNamedLocalView> iNamedLocalViews;
+ };
+
+
+/**
+The CViewSubSessionBase class is a base class for anonymous view subsessions.
+Its main purpose is to provide methods for accessing CViewContact objects held
+in the local views managed by CViewManager.
+
+Instances of CViewSubSessionBase are constructed and managed by a CCntSession
+instance using the subsession object container mechanism. CCntSession calls the
+derived CViewSubSessionBase::ServiceL() method after extracting the
+CViewSubSessionBase handle from RMessage2 Int3()
+*/
+class CViewSubSessionBase : public CObject, public MContactViewObserver
+ {
+public:
+ virtual TInt ServiceL(const RMessage2& aMessage);
+
+protected:
+ ~CViewSubSessionBase();
+ CViewSubSessionBase(CViewManager& aParent);
+ void ConstructL();
+
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+ void CountL(const RMessage2& aMessage) const;
+ TInt AtL(const RMessage2& aMessage) const;
+ void ContactAtL(const RMessage2& aMessage) const;
+ TInt ContactAtLengthL(const RMessage2& aMessage);
+ void FindL(const RMessage2& aMessage) const;
+ TInt GetAllFieldsLengthL(const RMessage2& aMessage);
+ void GetAllFieldsTextL(const RMessage2& aMessage);
+ void ContactMatchingCriteriaExternalizedSizeL(const RMessage2& aMessage);
+ void GetContactMatchingCriteriaL(const RMessage2& aMessage);
+ void GetIncludedTypesL(const RMessage2& aMessage);
+ void DeleteFindContacts();
+ void RequestViewEvent(const RMessage2& aMessage);
+ void CancelRequestViewEvent();
+ void GetContactIdsL(const RMessage2& aMessage);
+ void SendPluginUidToServer(const RMessage2& aMessage);
+ void GetContactsMatchingFilterL(const RMessage2& aMessage);
+ void GetSortPluginUidFromServerL(const RMessage2& aMessage);
+
+protected:
+ CViewManager& iViewManager;
+ CContactViewBase* iView;
+ HBufC* iSortableText;
+ RPointerArray<CViewContact> iContacts;
+ CViewContact* iContact;
+ CViewSubSessionQueue* iQueue;
+ };
+
+
+/**
+The CViewSubSession class implements anonymous view subsessions.
+*/
+class CViewSubSession : public CViewSubSessionBase
+ {
+public:
+ static CViewSubSession* NewL(CViewManager& aParent,const RMessage2& aMessage);
+
+protected:
+ ~CViewSubSession();
+ CViewSubSession(CViewManager& aParent);
+ void UnpackageSortOrderL(const RMessage2& aMessage,RContactViewSortOrder& aSortOrder,TContactViewPreferences& aContactTypes) const;
+ HBufC8* UnpackageSortOrderAndPluginDetailsLC(const RMessage2& aMessage,RContactViewSortOrder& aSortOrder,TContactViewPreferences& aContactTypes,TUid& aSortPluginImplUid) const;
+
+protected:
+ // From CViewSubSessionBase.
+ TInt ServiceL(const RMessage2& aMessage);
+
+private:
+ void ConstructL(const RMessage2& aMessage);
+ inline CContactLocalView& View() const;
+ void ExternalizedSortOrderSizeL(const RMessage2& aMessage) const;
+ void GetSortOrderL(const RMessage2& aMessage) const;
+ };
+
+
+/**
+The CNamedViewSubSession class implements named view subsessions.
+*/
+class CNamedViewSubSession : public CViewSubSession
+ {
+public:
+ static CNamedViewSubSession* NewL(CViewManager& aParent,const RMessage2& aMessage);
+
+private:
+ // From CViewSubSessionBase.
+ TInt ServiceL(const RMessage2& aMessage);
+
+private:
+ ~CNamedViewSubSession();
+ CNamedViewSubSession(CViewManager& aParent);
+ void ConstructL(const RMessage2& aMessage);
+ void ChangeSortOrderL(const RMessage2& aMessage);
+ inline CContactNamedLocalView& View() const;
+ };
+
+
+#endif