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: Virtual Phonebook sort order that is needed in view creation. williamr@4: * williamr@4: */ williamr@4: williamr@4: williamr@4: #ifndef CVPBKSORTORDER_H williamr@4: #define CVPBKSORTORDER_H williamr@4: williamr@4: // INCLUDES williamr@4: #include williamr@4: #include williamr@4: williamr@4: // FORWARD DECLARATIONS williamr@4: class TResourceReader; williamr@4: williamr@4: /** williamr@4: * Virtual Phonebook sort order. williamr@4: * This class can be used to create a sort order, which is needed williamr@4: * when creating Virtual Phonebook views. The sort order determines williamr@4: * how the view is sorted by setting a field type priority list. williamr@4: */ williamr@4: class CVPbkSortOrder : williamr@4: public CBase, williamr@4: public MVPbkFieldTypeList williamr@4: { williamr@4: public: williamr@4: /** williamr@4: * Constructs new sort order from a williamr@4: * VPBK_FIELD_TYPE_MAPPING_LIST resource. williamr@4: * williamr@4: * @param aReader Resource reader pointing to a williamr@4: * VPBK_FIELD_TYPE_MAPPING_LIST resource. williamr@4: * @param aMasterFieldTypeList Master field type list types from williamr@4: * the resource are mapped against. williamr@4: * @exception KErrNotFound if a matching field type is not williamr@4: * found from aFieldTypeList. williamr@4: */ williamr@4: IMPORT_C static CVPbkSortOrder* NewL( williamr@4: TResourceReader& aReader, williamr@4: const MVPbkFieldTypeList& aMasterFieldTypeList); williamr@4: williamr@4: /** williamr@4: * Creates a new sort order from an existing one. williamr@4: * williamr@4: * @param aSortOrder The sort order to duplicate. williamr@4: */ williamr@4: IMPORT_C static CVPbkSortOrder* NewL( williamr@4: const MVPbkFieldTypeList& aSortOrder); williamr@4: williamr@4: /** williamr@4: * Destructor. williamr@4: */ williamr@4: ~CVPbkSortOrder(); williamr@4: williamr@4: public: // Interface williamr@4: /** williamr@4: * Reserves aSortOrderLength items for the sort order length. williamr@4: * This quarantees that following Set() call will not leave because of williamr@4: * memory allocation failure. If more than aSortOrderLength items are williamr@4: * provided in following Set() calls, rest of the field types are ignored. williamr@4: * williamr@4: * @param aSortOrderLength Number of field types to reserve space for. williamr@4: * @exception Panics if aSortOrderLength <= 0 williamr@4: */ williamr@4: IMPORT_C void SetReserveL(TInt aSortOrderLength); williamr@4: williamr@4: /** williamr@4: * Sets new fields types for this sort order from the list. williamr@4: * This will not leave because SetReserveL has to be called in advance to williamr@4: * reserve space for sort order field types. williamr@4: * williamr@4: * @param aSortOrder Priority ordered list of field types williamr@4: * used as the sort order. williamr@4: * @precond SetReserveL called with a proper sort order length. williamr@4: */ williamr@4: IMPORT_C void Set(const MVPbkFieldTypeList& aSortOrder); williamr@4: williamr@4: public: // From MVPbkFieldTypeList williamr@4: TInt FieldTypeCount() const; williamr@4: const MVPbkFieldType& FieldTypeAt(TInt aIndex) const; williamr@4: TBool ContainsSame(const MVPbkFieldType& aFieldType) const; williamr@4: TInt MaxMatchPriority() const; williamr@4: const MVPbkFieldType* FindMatch(const TVPbkFieldVersitProperty& aMatchProperty, williamr@4: TInt aMatchPriority) const; williamr@4: const MVPbkFieldType* FindMatch( williamr@4: TVPbkNonVersitFieldType aNonVersitType) const; williamr@4: const MVPbkFieldType* Find(TInt aFieldTypeResId) const; williamr@4: williamr@4: private: // Implementation williamr@4: CVPbkSortOrder(); williamr@4: void ConstructL(TResourceReader& aReader, williamr@4: const MVPbkFieldTypeList& aMasterFieldTypeList); williamr@4: void ConstructL(const MVPbkFieldTypeList& aSortOrder); williamr@4: williamr@4: private: williamr@4: ///Own: Maximum sort order length williamr@4: TInt iMaxSortOrderLength; williamr@4: ///Ref: Sort order array williamr@4: RPointerArray iSortOrder; williamr@4: ///Own: Max match priority williamr@4: TInt iMaxMatchPriority; williamr@4: }; williamr@4: williamr@4: #endif // CVPBKSORTORDER_H williamr@4: williamr@4: // End of file