mobilemessaging/postcard/postcardinc/PostcardContact.h
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/postcard/postcardinc/PostcardContact.h	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,231 @@
+/*
+* Copyright (c) 2006 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:  
+*     Postcard application's interface to contacts (Phonebook2 and
+*     virtual phonebook)
+*
+*/
+
+
+
+#ifndef __POSTCARDCONTACT_H__
+#define __POSTCARDCONTACT_H__
+
+#include <e32base.h>
+#include <AiwCommon.h>
+#include <MVPbkFieldType.h>
+
+#include "Postcard.hrh"
+#include "PostcardPanic.h"
+
+class CAiwServiceHandler;
+class CAiwGenericParamList;
+class CVPbkContactStoreUriArray;
+class CContactMatcher;
+class MVPbkStoreContact;
+
+/**
+ * Postcard contact
+ */
+class CPostcardContact : public CBase, 
+                         public MAiwNotifyCallback, 
+                         public MAknInputBlockCancelHandler
+    {
+    public:  // constants
+
+    enum TLocation // address location
+        {
+        ELocationPreferred,
+        ELocationHome,
+        ELocationWork
+        };
+    static const TInt KNumLocations = ELocationWork + 1;
+
+    enum TAddressField // address field
+        {
+        EAddressFieldStreet,
+        EAddressFieldExtendedAddress,
+        EAddressFieldPostalCode,
+        EAddressFieldLocality,
+        EAddressFieldRegion,
+        EAddressFieldCountry
+        };
+    static const TInt KNumAddressFields = EAddressFieldCountry + 1;
+
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        * @return pointer to created CPostcardContact
+        */
+        static CPostcardContact* NewL( RFs& aFs );
+
+        /**
+         * Destructor.
+         */
+        ~CPostcardContact();
+
+    public:
+
+        /**
+        * Checks if the contact refers to a valid contact (contact was found)
+        */
+        inline TBool IsValid() const;
+
+        /**
+        * Checks if the contact includes any of Extended Info, Street, City,
+        * Zip, Region or Country fields with location aLocation.
+        * @param aLocation Location Preferred/Home/Work to check
+        * @return ETrue if the contact has address information for the location
+        */
+	    TBool HasLocationL(TLocation aLocation) const;
+
+        /**
+        * Creates a contact string of aContactItem's address field with
+        * location aAddressLocation 
+        * (in practise "<street><extended><zip><city><region><country>")
+        * @param aBuffer Contains the contact string on return
+        * @param aAddressLocation Location Preferred/Home/Work to get
+        */
+        void GetContactStringL(TDes& aBuffer, TLocation aAddressLocation) const;
+
+        /**
+        * Get address field from a contact
+        * @param aLocation Location Preferred/Home/Work to get
+        * @param aAddressField Address field to get
+        * @return Address field text or "empty" descriptor
+        */
+        HBufC* GetAddressFieldLC(TLocation aLocation,
+            TAddressField aAddressField) const;
+
+        /**
+        * Get name from a contact. Uses Phonebook2 name formatter.
+        * @return Contact name text or "empty" descriptor
+        */
+        HBufC* GetNameLC() const;
+
+        /**
+        * Fetch contact from using Phonebook2 UI services
+        */
+        void FetchContactL();
+
+        /**
+        * Fetch contact from a contact link in a file
+        * @param aFile File containing a contact link packed into a descriptor
+        */
+        void FetchContactL(RFile& aFile);
+
+        /**
+        * Convert from TPostcardControls to TAddressField
+        * @param aControlId Control ID to convert
+        * @return Address field
+        */
+        static inline TAddressField ControlIdToAddrField(TInt aControlId);
+
+    public: // Functions from base classes
+
+        /**
+         * from MAiwNotifyCallback
+         * Handles notifications caused by an asynchronous AIW commands
+         */
+        TInt HandleNotifyL(TInt aCmdId, TInt aEventId,
+            CAiwGenericParamList& aEventParamList,
+            const CAiwGenericParamList& aInParamList);
+
+        /**
+        * from MAknInputBlockCancelHandler
+        * Handles cancellation of AIW call to phonebook.
+        */
+        void AknInputBlockCancel();
+
+    private:	// new functions
+
+        /**
+         * Handles asynchronous AIW command completed event notification
+         * @param aEventParamList Event parameters
+         */
+        void HandleAiwEventCompletedL(CAiwGenericParamList& aEventParamList);
+
+        /**
+        * Convert location to Virtual Phonebook field type parameter
+        * @param aLocation Location to convert
+        * @return Field type parameter
+        */
+        static inline TVPbkFieldTypeParameter LocToFieldTypeParam(
+            TLocation aLocation);
+
+        /**
+        * Convert address field to Virtual Phonebook subfield type
+        * @param aAddressField Address field to convert
+        * @return Subfield type
+        */
+        static inline TVPbkSubFieldType AddrFieldToSubFieldType(
+            TAddressField aAddressField);
+
+        /**
+        * Initializes AIW single item contact fetch parameter list
+        * @param aParamList Parameter list to initialize with parameters
+        */
+        void InitAiwContactFetchParamL(
+            CAiwGenericParamList& aParamList) const;
+
+        /**
+        * Read a field from a contact
+        * @param aFieldType Virtual Phonebook field type
+        * @param aSubFieldType Virtual Phonebook subfield type
+        * @param aFieldTypeParameter Virtual Phonebook field type parameter
+        * @return Contact field text or "empty" descriptor
+        */
+        HBufC* GetContactFieldLC( TVPbkFieldTypeName aFieldType,
+            TVPbkSubFieldType aSubFieldType,
+            TVPbkFieldTypeParameter aFieldTypeParameter) const;
+
+    private:  // constructors
+	    CPostcardContact( RFs& aFs );
+
+        /**
+        * EPOC constructor
+        */
+        void ConstructL();
+
+    private:    // data
+        // Table to convert from TLocation to virtual phonebook field
+        // type parameter
+        static const TVPbkFieldTypeParameter
+            iLocToFieldTypeParam[KNumLocations];
+
+        // Table to convert from TAddressField to virtual phonebook subfield
+        // type
+        static const TVPbkSubFieldType
+            iAddrFieldToSubFieldType[KNumAddressFields];
+
+        // Table to convert from TPostcardControls to TAddressField
+        static const TAddressField
+            iControlIdToAddrField[KNumAddressFields];
+
+        CAiwServiceHandler*         iAiwServiceHandler; // for contact fetch
+        CVPbkContactStoreUriArray*  iUriArray;          // opened contact stores
+        CContactMatcher*            iContactMatcher;    // contact matcher
+        MVPbkStoreContact*          iStoreContact;      // contact selected by user
+        CActiveSchedulerWait        iActSchedWait;      // to hide the asynchronity
+        TBool                       iShutdown;
+        
+        RFs&                        iFs;
+     };
+
+#include "PostcardContact.inl"
+
+#endif // __POSTCARDCONTACT_H__
+
+// End of File