williamr@4: /* williamr@4: * Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). williamr@4: * All rights reserved. williamr@4: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@4: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: * williamr@4: * Initial Contributors: williamr@4: * Nokia Corporation - initial contribution. williamr@4: * williamr@4: * Contributors: williamr@4: * williamr@4: * Description: Virtual Phonebook contact field iterator interface. williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef CVPBKCONTACTFIELDITERATOR_H williamr@4: #define CVPBKCONTACTFIELDITERATOR_H williamr@4: williamr@4: // INCLUDES williamr@4: #include williamr@4: #include williamr@4: williamr@4: // FORWARD DECLARATIONS williamr@4: class MVPbkStoreContactFieldCollection; williamr@4: class MVPbkBaseContactFieldCollection; williamr@4: class MVPbkFieldType; williamr@4: class MVPbkFieldTypeList; williamr@4: class MVPbkStoreContactField; williamr@4: class CStoreFieldByTypeIterator; williamr@4: class CBaseFieldByTypeIterator; williamr@4: class CBaseFieldByTypeListIterator; williamr@4: class MVPbkBaseContactField; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook contact field iterator interface. williamr@4: */ williamr@4: class MVPbkBaseContactFieldIterator williamr@4: { williamr@4: public: // Construction williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: virtual ~MVPbkBaseContactFieldIterator() { } williamr@4: williamr@4: public: // Interface williamr@4: /** williamr@4: * Returns the next field, otherwise NULL. williamr@4: * williamr@4: * @return The next field, otherwise NULL. williamr@4: */ williamr@4: virtual const MVPbkBaseContactField* Next() const =0; williamr@4: williamr@4: /** williamr@4: * Returns ETrue if there exists a next field, else EFalse. williamr@4: */ williamr@4: virtual TBool HasNext() const =0; williamr@4: williamr@4: }; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook contact field iterator interface. williamr@4: */ williamr@4: class MVPbkContactFieldIterator : public MVPbkBaseContactFieldIterator williamr@4: { williamr@4: public: // Construction williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: virtual ~MVPbkContactFieldIterator() { } williamr@4: williamr@4: public: // Interface williamr@4: // From MVPbkBaseContactFieldIterator (covariant return types)) williamr@4: const MVPbkStoreContactField* Next() const =0; williamr@4: williamr@4: /** williamr@4: * Returns the next field, otherwise NULL. williamr@4: * williamr@4: * @return The next field, otherwise NULL. Ownership doesn't change. williamr@4: */ williamr@4: virtual MVPbkStoreContactField* Next() =0; williamr@4: }; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook contact field type iterator. williamr@4: * Iterates the contact fields according to the field type specified. williamr@4: */ williamr@4: class CVPbkBaseContactFieldTypeIterator : williamr@4: public CBase, williamr@4: public MVPbkBaseContactFieldIterator williamr@4: { williamr@4: public: // Construction williamr@4: /** williamr@4: * Constructor for iterating store contact fields. williamr@4: *. williamr@4: * @param aFieldType Field type which is iterated. williamr@4: * @param aFields Contact fields to iterate. williamr@4: * @return A new instance of this class williamr@4: */ williamr@4: IMPORT_C static CVPbkBaseContactFieldTypeIterator* NewLC( williamr@4: const MVPbkFieldType& aFieldType, williamr@4: const MVPbkBaseContactFieldCollection& aFields); williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: ~CVPbkBaseContactFieldTypeIterator(); williamr@4: williamr@4: public: // from MVPbkContactFieldIterator williamr@4: const MVPbkBaseContactField* Next() const; williamr@4: TBool HasNext() const; williamr@4: williamr@4: private: // implementation williamr@4: void ConstructL( williamr@4: const MVPbkFieldType& aFieldType, williamr@4: const MVPbkBaseContactFieldCollection& aFields ); williamr@4: williamr@4: private: // Data williamr@4: /// Own: the iterator implementation williamr@4: CBaseFieldByTypeIterator* iIterator; williamr@4: }; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook contact field type list iterator. williamr@4: * Iterates the contact fields according to the field types specified. williamr@4: */ williamr@4: class CVPbkBaseContactFieldTypeListIterator : williamr@4: public CBase, williamr@4: public MVPbkBaseContactFieldIterator williamr@4: { williamr@4: public: // Construction williamr@4: /** williamr@4: * Constructor for iterating store contact fields. williamr@4: *. williamr@4: * @param aFieldTypeList Field type list which is iterated. williamr@4: * @param aFields Contact fields to iterate. williamr@4: * @return A new instance of this class williamr@4: */ williamr@4: IMPORT_C static CVPbkBaseContactFieldTypeListIterator* NewLC( williamr@4: const MVPbkFieldTypeList& aFieldTypeList, williamr@4: const MVPbkBaseContactFieldCollection& aFields); williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: ~CVPbkBaseContactFieldTypeListIterator(); williamr@4: williamr@4: public: // from MVPbkContactFieldIterator williamr@4: const MVPbkBaseContactField* Next() const; williamr@4: TBool HasNext() const; williamr@4: williamr@4: private: // implementation williamr@4: void ConstructL( williamr@4: const MVPbkFieldTypeList& aFieldTypeList, williamr@4: const MVPbkBaseContactFieldCollection& aFields ); williamr@4: williamr@4: private: // Data williamr@4: /// Own: the iterator implementation williamr@4: CBaseFieldByTypeListIterator* iIterator; williamr@4: }; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook contact field type iterator. williamr@4: * Iterates the store contact fields according to the williamr@4: * field type specified. williamr@4: */ williamr@4: class CVPbkContactFieldTypeIterator : williamr@4: public CBase, williamr@4: public MVPbkContactFieldIterator williamr@4: { williamr@4: public: // Construction williamr@4: /** williamr@4: * Constructor for iterating store contact fields. williamr@4: *. williamr@4: * @param aFieldType Field type which is iterated. williamr@4: * @param aFields Contact fields to iterate. williamr@4: * @return A new instance of this class williamr@4: */ williamr@4: IMPORT_C static CVPbkContactFieldTypeIterator* NewLC( williamr@4: const MVPbkFieldType& aFieldType, williamr@4: MVPbkStoreContactFieldCollection& aFields); williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: ~CVPbkContactFieldTypeIterator(); williamr@4: williamr@4: public: // from MVPbkContactFieldIterator williamr@4: const MVPbkStoreContactField* Next() const; williamr@4: TBool HasNext() const; williamr@4: MVPbkStoreContactField* Next(); williamr@4: williamr@4: private: // implementation williamr@4: void ConstructL( williamr@4: const MVPbkFieldType& aFieldType, williamr@4: MVPbkStoreContactFieldCollection& aStoreFields ); williamr@4: williamr@4: private: // Data williamr@4: /// Own: the iterator implementation williamr@4: CStoreFieldByTypeIterator* iIterator; williamr@4: }; williamr@4: williamr@4: #endif // CVPBKCONTACTFIELDITERATOR_H williamr@4: williamr@4: // End of file