creator/inc/creator_virtualphonebook.h
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/inc/creator_virtualphonebook.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2008 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 __CREATORVIRTUALPHONEBOOK_H__
+#define __CREATORVIRTUALPHONEBOOK_H__
+
+#include "creator_model.h"
+#include "creator_phonebookbase.h"
+#include "creator_randomdatafield.h"
+
+#include <e32base.h>
+#include <cntdef.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include <cntview.h>
+#include <CVPbkContactManager.h>
+#include <PbkFields.hrh>
+#include <CPbk2ImageManager.h>
+#include <MVPbkContactStoreListObserver.h>
+#include <MVPbkBatchOperationObserver.h>
+#include <MVPbkContactFindObserver.h>
+#include <MVPbkContactObserver.h>
+#include <MPbk2ImageOperationObservers.h>
+#include <VPbkEng.rsg>
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactViewObserver.h>
+
+class CCreatorEngine;
+class CCreatorModuleBaseParameters;
+
+class MVPbkStoreContact;
+class MVPbkContactStore;
+class CAsyncWaiter;
+class CContactDatabase;
+class MVPbkContactLinkArray;
+class CVirtualPhonebookParameters;
+
+
+class CCreatorVirtualPhonebook : public CCreatorPhonebookBase,  
+	public MVPbkContactStoreListObserver, public MVPbkBatchOperationObserver,
+	public MVPbkContactFindObserver, public MVPbkContactObserver, public MPbk2ImageSetObserver,
+	public MVPbkSingleContactOperationObserver, public MVPbkContactViewObserver
+    {
+public: 
+    static CCreatorVirtualPhonebook* NewL(CCreatorEngine* aEngine);
+    static CCreatorVirtualPhonebook* NewLC(CCreatorEngine* aEngine);
+    ~CCreatorVirtualPhonebook();
+
+private:
+    CCreatorVirtualPhonebook();
+    void ConstructL(CCreatorEngine* aEngine); // from MCreatorModuleBase
+
+public:  
+    virtual TBool AskDataFromUserL(TInt aCommand, TInt& aNumberOfEntries);
+    TInt CreateContactEntryL(CCreatorModuleBaseParameters *aParameters);    
+    TInt CreateGroupEntryL(CCreatorModuleBaseParameters *aParameters);
+    TInt CreateSubscribedContactEntryL(CCreatorModuleBaseParameters *aParameters); 
+
+    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TDesC& aFieldText);
+    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TDesC8& aFieldText);
+    void AddFieldToContactItemL(MVPbkStoreContact& aItem, TPbkFieldId aFieldId, const TTime& aFieldText);
+    
+    void AddImageToContactL(MVPbkStoreContact& aContact, TInt aFieldResId, const TDesC& aFileName);
+    TBool IsActive();
+    void CancelOperation();
+    void DeleteAllL();
+    void DeleteAllCreatedByCreatorL();
+    void DeleteAllGroupsL();
+    void DeleteAllGroupsCreatedByCreatorL();
+    
+private:
+    void CompactPbkDatabaseL(TBool aCompressImmediately=EFalse);    
+    void AddFieldToParamsL(TInt aFieldType, const TDesC& aData);
+    void AddFieldToParamsL(TInt aFieldType, const TDesC8& aData);
+    void AddFieldToParamsL(TInt aFieldType, const TTime& aData);    
+    void InitializeContactParamsL(/*CCreatorModuleBaseParameters* aParameters*/);
+    TBool IsContactGroupL(const MVPbkContactLink& aLink);
+    void StoreLinksForDeleteL( MVPbkContactLinkArray& aLinks, TUid aStoreUid );
+    void DeleteContactsL( MVPbkContactLinkArray* aContacts, TBool aGroup );
+    void DeleteItemsCreatedWithCreatorL( TUid aStoreUid );
+    void DoDeleteItemsCreatedWithCreatorL( TUid aStoreUid, CDictionaryFileStore* aStore );
+    TBool HasOtherThanGroupsL( MVPbkContactLinkArray* aContacts );
+
+public: // MVPbkSingleContactOperationObserver
+    
+    void VPbkSingleContactOperationComplete(
+                    MVPbkContactOperationBase& aOperation,
+                    MVPbkStoreContact* aContact );
+    void VPbkSingleContactOperationFailed(
+                    MVPbkContactOperationBase& aOperation, 
+                    TInt aError );
+
+private: // MVPbkContactViewObserver
+    
+    void ContactViewReady( MVPbkContactViewBase& aView );
+    void ContactViewUnavailable(
+            MVPbkContactViewBase& aView );
+    void ContactAddedToView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+    void ContactRemovedFromView(
+            MVPbkContactViewBase& aView, 
+            TInt aIndex, 
+            const MVPbkContactLink& aContactLink );
+    void ContactViewError(
+            MVPbkContactViewBase& aView, 
+            TInt aError, 
+            TBool aErrorNotified );
+
+private:
+	CVPbkContactManager* iContactManager;
+    TInt iOpCounter;
+
+    CVirtualPhonebookParameters* iParameters;
+    
+    static TInt iPhoneNumberFields[];
+    static TInt iUrlFields[];
+    static TInt iEmailFields[];
+    TBool iAddAllFields;
+    CVPbkContactLinkArray* iContactLinkArray;
+    CVPbkContactLinkArray* iContactsToDelete;
+    CVPbkContactLinkArray* iContactGroupsToDelete;
+    RPointerArray<MVPbkContactLinkArray> iPreviousDeleteLinks;   
+    
+private:
+	//new variables
+	/// Ref: the target of the copy
+	MVPbkContactStore* iStore;
+    
+    CAsyncWaiter* iWaiter;	
+    
+    /// Own: Contact database for this store
+    CContactDatabase* iContactDb;    
+    
+    //Contacts found in contacts db.
+    MVPbkContactLinkArray* iContactResults;
+    // Contact groups that are found in the store. These are used in filtering
+    // the groups from the find results.
+    MVPbkContactLinkArray* iContactGroupsInStore;
+    
+    // Phonebook asynchronous operation
+    MVPbkContactOperationBase* iOperation;
+    
+    // Flag to indicate whether it is required to notify
+    // iEngine after operation is complete. This happens
+    // when user has cancelled the operation during 
+    // iOperation exists.
+    TBool iCancelCbRequested;
+    
+    TInt iLastError;
+
+public:
+	//Observer implentation from MVPbkContactStoreListObserver
+	void OpenComplete();
+
+	//observer implentation from MVPbkContactStoreObserver
+
+	void StoreReady(MVPbkContactStore& aContactStore);
+
+	void StoreUnavailable(MVPbkContactStore& aContactStore, 
+	        TInt aReason);
+
+	void HandleStoreEventL(
+	        MVPbkContactStore& aContactStore, 
+	        TVPbkContactStoreEvent aStoreEvent);
+
+	 TAny* ContactStoreObserverExtension(TUid aExtensionUid); 
+	        	
+	
+
+    
+    
+public:
+	//Observer implementation for MVPbkBatchOperationObserver
+
+	void StepComplete( 
+	        MVPbkContactOperationBase& aOperation,
+	        TInt aStepSize );
+	
+	TBool StepFailed(
+	        MVPbkContactOperationBase& aOperation,
+	        TInt aStepSize, TInt aError );
+	
+	void OperationComplete( 
+	        MVPbkContactOperationBase& aOperation );
+	
+	TAny* BatchOperationObserverExtension( 
+	        TUid aExtensionUid ) ;
+
+	
+	//--------------------------------------------
+	//Observer implementation for MVPbkContactFindObserver
+	public: // Interface
+
+	        void FindCompleteL( MVPbkContactLinkArray* aResults );
+
+	        void FindFailed( TInt aError );
+
+	        TAny* ContactFindObserverExtension( 
+	                TUid aExtensionUid );	
+	
+	
+	
+   	//--------------------------------------------
+   	//Observer implementation for MVPbkContactObserver
+
+	public:
+		void ContactOperationCompleted(TContactOpResult aResult);
+	
+		void ContactOperationFailed
+			(TContactOp aOpCode, TInt aErrorCode, TBool aErrorNotified);
+	
+	    TAny* ContactObserverExtension(TUid aExtensionUid) ;
+	     //~MVPbkContactObserver();	        
+	        
+	//--------------------------------------------
+	// Implementation of MPbk2ImageSetObserver:
+	public:
+	    void Pbk2ImageSetComplete(MPbk2ImageOperation& aOperation);
+	    void Pbk2ImageSetFailed(MPbk2ImageOperation& aOperation, TInt aError );	        
+    };
+
+class CCreatorContactFieldImpl;
+class CCreatorContactField : public CBase, public MCreatorRandomDataField
+    {
+public:    
+    static CCreatorContactField* NewL(TInt aFieldType, const TDesC& aData);
+    static CCreatorContactField* NewL(TInt aFieldType, const TDesC8& aData);
+    static CCreatorContactField* NewL(TInt aFieldType, const TTime& aData);
+    
+    static CCreatorContactField* NewL(TInt aFieldType, TRandomLengthType aRandomLenType, TInt aRandomLen);
+    
+    ~CCreatorContactField();    
+    TInt FieldType();
+    virtual void AddToContactL(CCreatorEngine* aEngine, MVPbkStoreContact& aContact, CCreatorVirtualPhonebook* aVPbk);
+    virtual void SetRandomParametersL(  MCreatorRandomDataField::TRandomLengthType aRandomLenType = MCreatorRandomDataField::ERandomLengthDefault, 
+                                TInt aRandomLen = 0 );
+    virtual void ParseL(CCommandParser* parser);
+    
+private:    
+    CCreatorContactField();
+    void ConstructL(TInt aFieldType, const TDesC& aData);
+    void ConstructL(TInt aFieldType, const TDesC8& aData);
+    void ConstructL(TInt aFieldType, const TTime& aData);
+    CCreatorContactFieldImpl* pImpl;    
+    };
+    
+    
+/**
+ * Virtual phonebook parameters
+ */
+    
+
+class CVirtualPhonebookParameters : public CCreatorModuleBaseParameters
+    {
+public:
+	void ParseL(CCommandParser* parser, TParseParams /*aCase = 0*/);
+	
+	TInt CVirtualPhonebookParameters::ScriptLinkId() const;
+	void CVirtualPhonebookParameters::SetScriptLinkId(TInt aLinkId);
+	RPointerArray<CCreatorContactField> iContactFields;
+
+    HBufC*  iGroupName;
+    TInt    iContactsInGroup;
+    TInt iNumberOfPhoneNumberFields;
+    TInt iNumberOfURLFields;
+    TInt iNumberOfEmailAddressFields;
+    TInt iContactSetPtr;
+    RArray<TLinkIdParam> iLinkIds; // For contactgroup. Stores the linked contact ids.
+    
+public:
+    CVirtualPhonebookParameters();
+    ~CVirtualPhonebookParameters();
+    
+private:
+    TInt iLinkId; // For contact. Stores the contact id
+    };
+
+
+
+#endif // __CREATORVIRTUALPHONEBOOK_H__