williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.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: // williamr@2: williamr@2: #ifndef __CNTFILT_H__ williamr@2: #define __CNTFILT_H__ williamr@2: williamr@2: #include williamr@2: williamr@4: #if !( defined __SYMBIAN_CNTMODEL_HIDE_DBMS__ ) williamr@2: #include williamr@2: #endif williamr@2: williamr@2: #include williamr@2: williamr@2: class CCntFilter : public CBase williamr@2: /** A contact database filter. williamr@2: williamr@2: This is used to get a subset of the items in a contact database. williamr@2: There are three criteria used when filtering a database: williamr@2: williamr@2: - the contact item's state williamr@2: williamr@2: - the date/time the contact item was created/last modified/deleted williamr@2: williamr@2: - the contact item's type williamr@2: williamr@2: The state can be one of: deleted, modified or created (since williamr@2: a specified date/time). The filter can be set to include contact items of williamr@2: only one state, or it can be set to include contact items of all states, using williamr@2: the TInclude enumeration. williamr@2: williamr@2: The date/time value is used in combination with the contact item's state. williamr@2: williamr@2: The contact item's type is one of contact card, contact card group, contact williamr@2: card template, or own card. Any combination of contact types may be specified williamr@2: in the filter, in addition to the contact item's state. williamr@2: williamr@2: After the filter has been set up, it should be passed to the function williamr@2: CContactDatabase::FilterDatabaseL(). williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: friend class CPackagerTests; //Comparison test williamr@2: public: williamr@2: /** Flags to identify which contact items should be included in the filter. williamr@2: williamr@2: Only one of the following values can be set in the filter at a time. However williamr@2: the client may select to filter contacts in all states using EIncludeAllContacts. */ williamr@2: enum TInclude williamr@2: { williamr@2: /** Contact items in all states should be included. */ williamr@2: EIncludeAllContacts, williamr@2: /** Only contact items which have been added since the date/time should be included. */ williamr@2: EIncludeNewContacts, williamr@2: /** Only contact items which have been modified since the date/time should be included. */ williamr@2: EIncludeModifiedContacts, williamr@2: /** Only contact items which have been deleted since the date/time should be included. */ williamr@2: EIncludeDeletedContacts williamr@2: }; williamr@2: /** Contact item types.*/ williamr@2: enum TContactType williamr@2: { williamr@2: /** All contact item types should be included. */ williamr@2: EIncludeAllTypes = 0x01, williamr@2: /** Contact cards should be included in the filter. */ williamr@2: EContactCards = 0x02, williamr@2: /** Contact card groups should be included in the filter. */ williamr@2: EContactGroups = 0x04, williamr@2: /** Contact card templates should be included in the filter. */ williamr@2: EContactTemplates = 0x08, williamr@2: /** Own cards should be included in the filter. */ williamr@2: EContactOwnCard = 0x10 williamr@2: }; williamr@2: williamr@2: IMPORT_C static CCntFilter* NewL(); williamr@2: IMPORT_C static CCntFilter* NewLC(); williamr@2: IMPORT_C static CCntFilter* NewL(const CCntFilter* aFilter); williamr@2: IMPORT_C static CCntFilter* NewLC(const CCntFilter* aFilter); williamr@2: static CCntFilter* NewLC(RReadStream& aStream); williamr@2: IMPORT_C ~CCntFilter(); williamr@2: public: williamr@2: /** A pointer to an array which stores the filtered list of contact IDs. */ williamr@2: CContactIdArray* iIds; williamr@2: // williamr@2: IMPORT_C void SetIncludeModifiedContacts(TBool aIncludeModified); williamr@2: IMPORT_C void SetIncludeNewContacts(TBool aIncludeNew); williamr@2: IMPORT_C void SetIncludeDeletedContacts(TBool aIncludeDeleted); williamr@2: // williamr@2: IMPORT_C TBool TestContactFilterType(TUid aTypeUid); williamr@2: IMPORT_C void SetContactFilterTypeALL(TBool aFilterAllContacts); williamr@2: IMPORT_C void SetContactFilterTypeCard(TBool aFilterCards); williamr@2: IMPORT_C void SetContactFilterTypeGroup(TBool aFilterGroups); williamr@2: IMPORT_C void SetContactFilterTypeTemplate(TBool aFilterTemplates); williamr@2: IMPORT_C void SetContactFilterTypeOwnCard(TBool aFilterOwnCard); williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: // williamr@2: inline TBool ContactFilterTypeALL() const; williamr@2: inline TBool ContactFilterTypeCard() const; williamr@2: inline TBool ContactFilterTypeGroup() const; williamr@2: inline TBool ContactFilterTypeOwnCard() const; williamr@2: inline TBool ContactFilterTypeTemplate() const; williamr@2: // williamr@2: inline TBool IncludeModifiedContacts(); williamr@2: inline TBool IncludeNewContacts(); williamr@2: inline TBool IncludeDeletedContacts(); williamr@2: // williamr@2: inline TTime GetFilterDateTime(); williamr@2: inline void SetFilterDateTime(TTime aTime); williamr@2: // williamr@2: IMPORT_C void Reset(); williamr@2: // williamr@2: /** williamr@2: Intended usage: Reserved to preserve future BC */ williamr@2: IMPORT_C void Reserved1(); williamr@2: /** williamr@2: Intended usage: Reserved to preserve future BC */ williamr@2: IMPORT_C void Reserved2(); williamr@2: williamr@2: private: williamr@2: TTime iSinceDateTime; williamr@2: TInclude iInclude; williamr@2: TInt32 iContactType; williamr@2: TAny* iReserved1; williamr@2: TAny* iReserved2; williamr@2: CCntFilter(); williamr@2: CCntFilter(const CCntFilter* aFilter); williamr@2: }; williamr@2: williamr@2: williamr@2: inline TBool CCntFilter::IncludeModifiedContacts() williamr@2: /** Tests whether the filter includes only contacts modified since the filter's williamr@2: date/time. williamr@2: williamr@2: @return ETrue if the filter only includes modified contacts. EFalse if not. */ williamr@2: {return iInclude == EIncludeModifiedContacts;}; williamr@2: williamr@2: inline TBool CCntFilter::IncludeNewContacts() williamr@2: /** Tests whether the filter includes only contacts created since the filter's williamr@2: date/time. williamr@2: williamr@2: @return ETrue if the filter only includes new contacts. EFalse if not. */ williamr@2: {return iInclude == EIncludeNewContacts;}; williamr@2: williamr@2: inline TBool CCntFilter::IncludeDeletedContacts() williamr@2: /** Tests whether the filter includes only contacts deleted since the filter's williamr@2: date/time. williamr@2: williamr@2: @return ETrue if the filter only includes deleted contacts. EFalse if not. */ williamr@2: {return iInclude == EIncludeDeletedContacts;}; williamr@2: williamr@2: inline TTime CCntFilter::GetFilterDateTime() williamr@2: /** Gets the date and time used by the filter, as set by SetFilterDateTime(). williamr@2: williamr@2: @return The filter's date and time value. */ williamr@2: {return iSinceDateTime;}; williamr@2: williamr@2: inline void CCntFilter::SetFilterDateTime(TTime aTime) williamr@2: /** Sets the date and time used by the filter in combination with the TInclude williamr@2: value to test contact items against. williamr@2: williamr@2: @param aTime The new date and time value. */ williamr@2: {iSinceDateTime = aTime;}; williamr@2: williamr@2: // CONTACT TYPE williamr@2: inline TBool CCntFilter::ContactFilterTypeALL() const williamr@2: /** Tests whether all contact item types are included in the filter, as set by williamr@2: SetContactFilterTypeALL(). williamr@2: williamr@2: @return ETrue if all contact item types are included in the filter, EFalse williamr@2: if not. */ williamr@2: {return iContactType & EIncludeAllTypes;} williamr@2: williamr@2: inline TBool CCntFilter::ContactFilterTypeCard() const williamr@2: /** Tests whether contact cards are included in the filter, as set by SetContactFilterTypeCard(). williamr@2: williamr@2: @return ETrue if contact cards are included in the filter, EFalse if not. */ williamr@2: {return iContactType & EContactCards;} williamr@2: williamr@2: inline TBool CCntFilter::ContactFilterTypeGroup() const williamr@2: /** Tests whether contact card groups are included in the filter, as set by SetContactFilterTypeGroup(). williamr@2: williamr@2: @return ETrue if contact card groups are included in the filter, EFalse if williamr@2: not. */ williamr@2: {return iContactType & EContactGroups;} williamr@2: williamr@2: inline TBool CCntFilter::ContactFilterTypeOwnCard() const williamr@2: /** Tests whether own cards are included in the filter, as set by SetContactFilterTypeOwnCard(). williamr@2: williamr@2: @return ETrue if own cards are included in the filter, EFalse if not. */ williamr@2: {return iContactType & EContactOwnCard;} williamr@2: williamr@2: inline TBool CCntFilter::ContactFilterTypeTemplate() const williamr@2: /** Tests whether contact card templates are included in the filter, as set by williamr@2: SetContactFilterTypeTemplate(). williamr@2: williamr@2: @return ETrue if contact card templates are included in the filter, EFalse williamr@2: if not. */ williamr@2: {return iContactType & EContactTemplates;} williamr@2: williamr@2: #endif