/*
* Copyright (c) 2004-2007 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Data types for the view definition
*
*/


#ifndef VPBKCONTACTVIEW_HRH
#define VPBKCONTACTVIEW_HRH

/**
 * Default view id value for view definition.
 */
#define KVPbkDefaultViewId -1

/**
 * Sort policy types for the contact view definition.
 */
enum TVPbkContactViewSortPolicy
    {
    /// Use this together with EVPbkCompositeView if the subviews must
    /// be showed in order i.e. show all contacts from subView1 and after
    /// that all contacts from subView2
    EVPbkOrderedContactView = 0,
    /// Leaf views are usually always sorted. If this is used together
    /// with EVPbkCompositeView then the composite merges contacts from
    /// sorted subviews.
    EVPbkSortedContactView,
    /// Used to create an unsorted view which means that contacts are
    /// showed in the order they have been saved in the store. Not all stores
    /// support this type. You can never use this in EVPbkCompositeView type
    /// of view. You can not use this in a subview of the composite view whose
    /// policy is EVPbkSortedContactView.
    EVPbkUnsortedContactView
    };

/**
 * Contact view types for the contact view definition.
 */
enum TVPbkContactViewType
    {
    /// Type for the contact leaf view. There is zero subviews.
    EVPbkContactsView,
    /// Type for the group leaf view. There is zero subviews.
    EVPbkGroupsView,
    /// Type for the folding view. Folding view definition
    /// should usually have one subview definition that is used
    /// to create a view when folding view is expanded.
    EVPbkFoldingView,
    /// Use this type if the view can have several subviews. If
    /// there is no subviews then it's interpreted as a placeholder.
    EVPbkCompositeView
    };

/**
 * Defines the sharing of the contact view. 
 *
 * A store can have a server that shares the same view for multiple clients
 * for saving resources. On the other hand the view can be created only
 * for one client's purpose e.g using a special sort order and in this case
 * the view is a local view.
 */
enum TVPbkContactViewSharing
    {
    /// Default value for VPBK_CONTACT_VIEW definition viewSharing.
    /// Don't set this for CVPbkContactViewDefinition.
    EVPbkViewSharingUndefined,
    /// Inform store that is should create a handle to shared view
    /// that can be used by multiple clients.
    EVPbkSharedView,
    /// Inform store that it should create a local view that
    /// is only used by single client.
    EVPbkLocalView
    };
    
/**
 * Contact view flags for the contact view definition. 
 */
enum TVPbkContactViewFlag
    {
    /// No flags
    EVPbkContactViewFlagsNone   = 0x00000000,
    EVPbkExcludeEmptyGroups     = 0x00000001
    };

/**
 * In the following filter list the supported contact view filters
 * are defined.
 *
 * Some stores support native and fast filtering for certain filters but
 * part of the filters can cause performance problems with large contact
 * number.
 * E.g. Contacts Model store has optimized filters for:
 * -EVPbkContactViewFilterEmail
 * -EVPbkContactViewFilterPhoneNumber
 * -EVPbkContactViewFilterMobileNumber
 * -EVPbkContactViewFilterFaxNumber
 * -EVPbkContactViewFilterRingingTone
 *
 * The filters can be combined by using the VPbkContactViewFilterBuilder
 * services. The combined filter ORs the filters; the returned contacts
 * match to at least one of the filters.
 *
 * @see VPbkContactViewFilterBuilder
 */
enum TVPbkContactViewFilter
    {
    /// The view is unfiltered; it includes all the contacts
    EVPbkContactViewFilterNone = 0,
    /// The filter includes items that have an email address
    EVPbkContactViewFilterEmail = 1,
    /// The filter includes items that have a phone number
    /// (the definition of phone number includes general/mobile/etc. number)
    EVPbkContactViewFilterPhoneNumber,
    /// The filter includes items that have a mobile phone number
    EVPbkContactViewFilterMobileNumber,
    /// The filter includes items that have a fax number
    EVPbkContactViewFilterFaxNumber,
    /// The filter includes items that have a ringing tone defined
    EVPbkContactViewFilterRingingTone,
    /// The filter includes items that have a video number
    EVPbkContactViewFilterVideoNumber       = 1000,
    /// The filter includes items that have a pager number
    EVPbkContactViewFilterPagerNumber,
    /// The filter includes items that have a DTMF field
    EVPbkContactViewFilterDTMF,
    /// The filter includes items that have a VoIP number
    EVPbkContactViewFilterVoIP,
    /// The filter includes items that are TopContact
    EVPbkContactViewFilterTopContact
    };

/**
 * The version of the contact view definition version structure
 */
enum TVPbkContactViewVersion
    {
    EVPbkContactViewV1 = 1,
    EVPbkContactViewV2,
    EVPbkContactViewV3
    };
    
#endif // VPBKCONTACTVIEW_HRH

// End of File
