williamr@4: /* williamr@4: * Copyright (c) 2002-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: A filtered and sorted collection of contact fields. williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef CVPBKFIELDFILTER_H williamr@4: #define CVPBKFIELDFILTER_H williamr@4: williamr@4: // INCLUDES williamr@4: #include williamr@4: #include williamr@4: williamr@4: // FORWARD DECLARATIONS williamr@4: class MVPbkContactFieldSelector; williamr@4: class MVPbkContactFieldOrdering; williamr@4: williamr@4: williamr@4: /** williamr@4: * A filtered and sorted collection of Virtual Phonebook contact fields. williamr@4: */ williamr@4: class CVPbkFieldFilter : williamr@4: public CBase, williamr@4: public MVPbkStoreContactFieldCollection williamr@4: { williamr@4: public: // Types williamr@4: /** williamr@4: * CVPbkFieldFilter configuration. This configuration class is williamr@4: * used to configure the field filter. williamr@4: */ williamr@4: class TConfig williamr@4: { williamr@4: public: williamr@4: /** williamr@4: * Constructor. williamr@4: * williamr@4: * @param aBaseFields Mandatory base field set to filter. williamr@4: * @param aFieldSelector Optional field selector instance. williamr@4: * @param aFieldOrdering Optional field ordering instance. williamr@4: */ williamr@4: inline TConfig ( williamr@4: MVPbkStoreContactFieldCollection& aBaseFields, williamr@4: MVPbkContactFieldSelector* aFieldSelector = NULL, williamr@4: MVPbkContactFieldOrdering* aFieldOrdering = NULL); williamr@4: williamr@4: public: williamr@4: ///Ref: Base field collection that is filtered williamr@4: MVPbkStoreContactFieldCollection& iBaseFields; williamr@4: ///Ref: A field selector williamr@4: MVPbkContactFieldSelector* iFieldSelector; williamr@4: ///Ref: Field sorter williamr@4: MVPbkContactFieldOrdering* iFieldOrdering; williamr@4: ///Ref: Spare for future extension williamr@4: TAny* iSpare; williamr@4: }; williamr@4: williamr@4: public: // Constructor and Destructor williamr@4: /** williamr@4: * Creates and returns a new instance of this class. williamr@4: * williamr@4: * @param aConfig Field filtering configuration. williamr@4: */ williamr@4: IMPORT_C static CVPbkFieldFilter* NewL(const TConfig& aConfig); williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: ~CVPbkFieldFilter(); williamr@4: williamr@4: public: // Interface williamr@4: /** williamr@4: * Reset the contents of this filtered field collection according williamr@4: * to a new configuration. williamr@4: * williamr@4: * @param aConfig Filtering configuration to rest to. williamr@4: */ williamr@4: IMPORT_C void ResetL(const TConfig& aConfig); williamr@4: williamr@4: /** williamr@4: * Finds given field from the set of filtered fields williamr@4: * @param aContactField Field to search for. williamr@4: * @return Index of the given field, or KErrNotFound if field is not found. williamr@4: */ williamr@4: IMPORT_C TInt FindField(const MVPbkBaseContactField& aContactField) const; williamr@4: williamr@4: public: // from MVPbkStoreContactFieldCollection williamr@4: MVPbkBaseContact& ParentContact() const; williamr@4: TInt FieldCount() const; williamr@4: const MVPbkStoreContactField& FieldAt(TInt aIndex) const; williamr@4: MVPbkStoreContactField& FieldAt(TInt aIndex); williamr@4: MVPbkStoreContactField* FieldAtLC(TInt aIndex) const; williamr@4: MVPbkStoreContact& ParentStoreContact() const; williamr@4: MVPbkStoreContactField* RetrieveField( williamr@4: const MVPbkContactLink& aContactLink) const; williamr@4: williamr@4: private: // Implementation williamr@4: CVPbkFieldFilter(); williamr@4: williamr@4: private: // Data williamr@4: ///Ref: base fields williamr@4: MVPbkStoreContactFieldCollection* iBaseFields; williamr@4: ///Own: field mapping williamr@4: RArray iFieldMapping; williamr@4: }; williamr@4: williamr@4: williamr@4: // INLINE FUNCTIONS williamr@4: williamr@4: inline CVPbkFieldFilter::TConfig::TConfig williamr@4: (MVPbkStoreContactFieldCollection& aBaseFields, williamr@4: MVPbkContactFieldSelector* aFieldSelector /*= NULL*/, williamr@4: MVPbkContactFieldOrdering* aFieldOrdering /*= NULL*/) : williamr@4: iBaseFields(aBaseFields), williamr@4: iFieldSelector(aFieldSelector), williamr@4: iFieldOrdering(aFieldOrdering) williamr@4: { williamr@4: } williamr@4: williamr@4: #endif // CVPBKFIELDFILTER_H williamr@4: williamr@4: // End of file