diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/cntsrv/inc/CViewSubSessions.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/cntsrv/inc/CViewSubSessions.h Tue Feb 02 10:12:17 2010 +0200 @@ -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 + +#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 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& aViewDefs); + +private: + CViewManager(MLplPersistenceLayerFactory& aFactory,CCntDbManager& aManager); + void ConstructL(); + +private: + MLplPersistenceLayerFactory& iFactory; + CCntDbManager& iManager; + struct TViewHandle + { + CContactLocalView* iLocalView; + TUid iSortPluginImplUid; + }; + RArray iLocalViews; + RPointerArray 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 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