williamr@2: /*
williamr@2: * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
williamr@2: * All rights reserved.
williamr@2: * This component and the accompanying materials are made available
williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
williamr@2: * which accompanies this distribution, and is available
williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
williamr@2: *
williamr@2: * Initial Contributors:
williamr@2: * Nokia Corporation - initial contribution.
williamr@2: *
williamr@2: * Contributors:
williamr@2: *
williamr@2: * Description:  
williamr@2: *    Phonebook contact iterator
williamr@2: *
williamr@2: */
williamr@2: 
williamr@2: 
williamr@2: #ifndef __CPbkContactIter_H__
williamr@2: #define __CPbkContactIter_H__
williamr@2: 
williamr@2: //  INCLUDES
williamr@2: #include    <e32base.h>     // CBase
williamr@2: #include    <cntdb.h>       // TContactIter
williamr@2: 
williamr@2: // FORWARD DECLARATIONS
williamr@2: class CPbkContactEngine;
williamr@2: class CPbkContactItem;
williamr@2: class CContactItem;
williamr@2: 
williamr@2: // CLASS DECLARATION
williamr@2: 
williamr@2: /**
williamr@2:  * Phonebook contact iterator. Only iterates through recognised Phonebook
williamr@2:  * contact cards, not groups or templates. NextL jumps over any other contacts. 
williamr@2:  */
williamr@2: class CPbkContactIter : public CBase
williamr@2: 	{
williamr@2:     public:  // Constructors and destructor
williamr@2:         /**
williamr@2:          * Creates a new instace of this class.
williamr@2:          *
williamr@2:          * @param aEngine   Phonebook engine whose contacts to iterate.
williamr@2:          * @param aUseMinimalRead   Use ReadMinimalContactL instead of 
williamr@2:          *                          ReadContactL to read the contacts.
williamr@2:          * @return Contact iterator instance.
williamr@2:          */
williamr@2:         IMPORT_C static CPbkContactIter* NewL
williamr@2:             (CPbkContactEngine& aEngine, TBool aUseMinimalRead=EFalse);
williamr@2: 
williamr@2:         /**
williamr@2:          * Same as NewL but leaves the created object on the cleanup stack.
williamr@2:          * Creates a new instace of this class.
williamr@2:          *
williamr@2:          * @param aEngine   Phonebook engine whose contacts to iterate.
williamr@2:          * @param aUseMinimalRead   Use ReadMinimalContactL instead of 
williamr@2:          *                          ReadContactL to read the contacts.
williamr@2:          * @return Contact iterator instance.
williamr@2:          */
williamr@2:         IMPORT_C static CPbkContactIter* NewLC
williamr@2:             (CPbkContactEngine& aEngine, TBool aUseMinimalRead=EFalse);
williamr@2: 
williamr@2: 	    /**
williamr@2:          * Destructor.
williamr@2:          */
williamr@2:         ~CPbkContactIter();
williamr@2: 
williamr@2:     public:  // interface
williamr@2:         /**
williamr@2:          * Intializes the iterator to the first Phonebook contact.
williamr@2:          * @return Id of the first Phonebook contact, KNullContactId if none found.
williamr@2:          */
williamr@2: 	    IMPORT_C TContactItemId FirstL();
williamr@2: 
williamr@2:         /**
williamr@2:          * Advances the iterator to the next Phonebook contact.
williamr@2:          * @return Id of the next Phonebook contact, KNullContactId if none found.
williamr@2:          */
williamr@2: 	    IMPORT_C TContactItemId NextL();
williamr@2: 
williamr@2:         /**
williamr@2:          * Resets the iterator to null state.
williamr@2:          */
williamr@2: 	    IMPORT_C void Reset();
williamr@2: 
williamr@2:         /**
williamr@2:          * Returns the current Phonebook contact, NULL if none.
williamr@2:          * @return  The contact item the iterator is currently pointing at.
williamr@2:          */
williamr@2:         IMPORT_C CPbkContactItem* CurrentL() const;
williamr@2: 
williamr@2:         /**
williamr@2:          * Returns the current Phonebook contact, NULL if none.
williamr@2:          * Caller is responsible for deleting the contact, thus ownership of the
williamr@2:          * contact item is passed to the client.
williamr@2:          * @return  The contact item the iterator is currently pointing at.
williamr@2:          */
williamr@2:         IMPORT_C CPbkContactItem* GetCurrentL() const;
williamr@2: 
williamr@2:         __DECLARE_TEST;
williamr@2: 
williamr@2:     private:  // Implementation
williamr@2: 	    CPbkContactIter(CPbkContactEngine& aEngine, TBool aUseMinimalRead);
williamr@2:         CContactItem* ReadPhonebookContactL(TContactItemId aId);
williamr@2: 
williamr@2:     private:  // Data
williamr@2: 		/// Ref: phonebook engine
williamr@2:         CPbkContactEngine& iEngine;
williamr@2: 		/// Own: contact iterator
williamr@2:         TContactIter iCmIter;
williamr@2: 		/// Own: current item
williamr@2:         mutable CContactItem* iCurrentItem;
williamr@2: 		/// Own: current pbk-item
williamr@2:         mutable CPbkContactItem* iCurrentPbkItem;
williamr@2: 		/// Own: minimal read flag
williamr@2:         const TBool iUseMinimalRead;
williamr@2: 	};
williamr@2: 
williamr@2: 
williamr@2: #endif // __CPbkContactIter_H__
williamr@2: 
williamr@2: // End of File