phonebookengines/contactsmodel/cntplsql/inc/cntpplviewmanager.h
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/cntplsql/inc/cntpplviewmanager.h	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,138 @@
+/**
+* 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 __CNTPPLVIEWMANAGER_H__
+#define __CNTPPLVIEWMANAGER_H__
+
+#include "cntsqlprovider.h"
+#include "persistencelayer.h" // For interface definitions.
+#include "persistencelayerimpl.h"
+#include <sqldb.h>
+
+class CViewContact;
+class CCntPplViewSession;
+class CCntSqlStatement;
+
+/**
+The CCntPplViewManager class provides the data source for the Contacts Model
+view framework.  The view item manager provides support for multiple
+iterators (used for view population) as well as the random access to the
+Contacts database (used for keeping the views synchronised with the changing
+database).
+*/
+class NONSHARED CCntPplViewManager : public CBase, public MLplViewIteratorManager
+	{
+public:
+	static CCntPplViewManager* NewL(CPplContactsFile& aContactsFile, const CLplContactProperties& aContactProperties);
+	~CCntPplViewManager();
+	
+	//Methods defined in MLplViewIteratorManager
+	TInt OpenViewL(const CContactTextDef& aTextDef, const TContactViewPreferences aViewPrefs);
+	void CloseView(TInt aViewId);
+	void ChangeSortOrderL(TInt aViewId, const CContactTextDef& aTextDef);
+	void BeginIterateL(TInt aViewId);
+	void EndIterateL(TInt aViewId);
+	CViewContact* NextItemL(TInt aViewId, TContactViewPreferences aViewPrefs);
+	CViewContact* ItemAtL(TContactItemId aContactId, TInt aViewId);
+	
+	TUid ReadContactTextDefL(TContactItemId aContactId, TDes &aResult,const CContactTextDef& aTextDef);
+    void TextFieldL(TInt aCntItemId,TFieldType aFieldType, TDes& aText);
+
+private:
+	void ConstructL();
+	CCntPplViewManager(CPplContactsFile& aContactsFile, const CLplContactProperties& aContactProperties);
+	
+	TInt FindViewSessionIndexById(TInt aViewId) const;
+	CCntPplViewSession* FindViewSessionByIdL(TInt aViewId) const;
+	
+private:
+	CPplContactsFile& iContactsFile;
+	const CLplContactProperties& iContactProperties;
+	
+	TInt  iNextViewId;
+	RPointerArray<CCntPplViewSession> iViewSessions;
+	
+	CCntSqlStatement* 		iSelectFullFieldsStmt;
+	};
+
+class NONSHARED CCntPplViewSession: public CTimer,
+    public MLplSqlDatabaseObserver
+	{
+public:	
+	static CCntPplViewSession* NewL(CPplContactsFile& aContactsFile, const CLplContactProperties& aContactProperties, CCntSqlStatement& aSelectAllFields, TInt aViewId, const CContactTextDef& aTextDef, TContactViewPreferences aViewPrefs);
+	~CCntPplViewSession();
+	
+	void ChangeSortOrderL(const CContactTextDef& aTextDef);
+	
+	void BeginIterateL();
+	void EndIterate();
+	CViewContact* NextItemL(TContactViewPreferences aViewPrefs);
+	CViewContact* ItemAtL(TContactItemId aContactId);
+	
+	TInt ViewId() const;
+	
+	static void  TextFieldL(RSqlStatement& aSqlStatement, const CCntSqlStatement& aCntSqlStmt, const CContactTemplate& aSystemTemplate, TFieldType aFieldType, TDes& aText);
+	
+	// From MLplSqlDatabaseObserver
+    void OnCloseL(); 
+	
+private:
+	void ConstructL(const CContactTextDef& aTextDef);
+	CCntPplViewSession(CPplContactsFile& aContactsFile, const CLplContactProperties& aContactProperties, CCntSqlStatement& aSelectAllFields, TInt aViewId, TContactViewPreferences aViewPrefs);
+	
+	CViewContact* CreateViewItemL(RSqlStatement& aSqlStmt, const CCntSqlStatement& aCntSqlStmt, const TContactViewPreferences& aViewPrefs);
+	void  FillViewItemL(CViewContact& aViewContact, RSqlStatement& aSqlStmt, const TContactViewPreferences& aViewPrefs);
+	
+	static CViewContact* InitialiseViewItemL(RSqlStatement& aSqlStmt, const CCntSqlStatement& aCntSqlStmt, const TContactViewPreferences& aViewPrefs);
+	static TBool HasTxtFieldInFastAccessFieldsL(RSqlStatement& aSelectStmt, const CCntSqlStatement& aCntSqlStmt, TDes& aText);
+	static TBool SpecificTxtFieldInFastAccessFieldsL(RSqlStatement& aSelectStmt, const CCntSqlStatement& aCntSqlStmt, const TFieldType aFieldType, TDes& aText);
+	static TUid  GetContactFieldMatchUid(const CViewContact& aViewContact, const TContactViewPreferences& aViewPreferences);
+	static void  AddFieldInViewContactL(CViewContact& aViewContact, TPtrC& aFieldPtrC, const TContactViewPreferences& aViewPreferences);
+    static TBool ContactCorrectType(TUid aContactTypeUid, TContactViewPreferences aTypeToInclude);	
+    
+    void RunL();  //interface for CTimer
+   
+    CViewContact* doItemAtL(TContactItemId aContactId);
+    void CleanupCachedPrepareStatement();
+private:
+	const TInt 				iViewId;
+	const CLplContactProperties& iContactProperties;
+	
+	CPplContactsFile& 		iContactsFile;
+	CCntSqlStatement&       iSqlSmtSelectAllFieldsById;
+	
+	TContactViewPreferences iViewPrefs;
+	
+	CContactTextDef*        iTextDef;
+    CCntSqlStatement*       iCntSqlStatement;
+    RSqlStatement           iRSqlStatement;
+    TBool                   iRSqlStatementReady;
+    RSqlStatement           iCachedSqlStatement;
+    TBool                   iCachedSqlStatementReady;
+    TBool                   iIsFastAccessFieldsOnly;
+	};
+	
+	
+#endif //__CNTPPLVIEWMANAGER_H__