mds_pub/content_listing_framework_api/inc/MCLFItemListModel.h
changeset 0 c53acadfccc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mds_pub/content_listing_framework_api/inc/MCLFItemListModel.h	Mon Jan 18 20:34:07 2010 +0200
@@ -0,0 +1,270 @@
+/*
+* Copyright (c) 2002-2009 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: 
+*
+*/
+
+
+#ifndef MCLFITEMLISTMODEL_H
+#define MCLFITEMLISTMODEL_H
+
+//  INCLUDES
+#include <CLFContentListing.hrh>
+#include <bamdesca.h>
+
+// DATA TYPES
+/**
+*  Content Listing Framework list model refresh type.
+*/
+enum TCLFRefreshTypeFlags
+    {
+    /// Post filter is refreshed
+    ECLFRefreshPostFilter   = 0x1,
+    /// Grouping is refreshed
+    ECLFRefreshGrouping     = 0x2,
+    /// Sorting is refreshed
+    ECLFRefreshSorting      = 0x4,
+    /// All filters are used
+    ECLFRefreshAll          = 0xFFFFFFFF
+    };
+
+// FORWARD DECLARATIONS
+class MCLFItemListModelExt;
+class MCLFItem;
+class MCLFPostFilter;
+class MCLFCustomGrouper;
+class MCLFPostFilter;
+class MCLFSortingStyle;
+class MCLFCustomSorter;
+class TResourceReader;
+
+// CLASS DECLARATION
+
+/**
+*  List Model for Content Listing Framework.
+*  This model is used to list Content Listing items. These items provide
+*  infomation of media files on the device and one item represents one media
+*  file. The model can be manipulated by sorters, post filters and groupers.
+*  List Model is created by using Content Listing Engine.<br><br>
+*  Usage:
+*  @code
+*  // Create a new List Model instance
+*  MCLFItemListModel* listModel = iEngine->CreateListModelLC( *myObserver );
+*
+*  // Append music-type to wanted types array to exclude
+*  // all other files than music files from the list model
+*  RArray<TCLFMediaType> myMediaTypes;
+*  CleanupClosePushL( myMediaTypes );
+*  myMediaTypes.AppendL( ECLFMediaTypeMusic );
+*
+*  // Set wanted types with SetWantedMimeTypesL or/and SetWantedMediaTypesL.
+*  // You can add both if you want.
+*  listModel->SetWantedMediaTypesL( myMediaTypes.Array() );
+*  CleanupStack::PopAndDestroy( &myMediaTypes );
+*
+*  // Set sorting style (if you want to sort items)
+*  listModel->SetSortingStyle( mySortingStyle );
+*
+*  // You can also add post filter, custom sorter and custom grouper to model.
+*
+*  // Refresh the List Model.
+*  // The model will fetch items from server and use post filter to filter items,
+*  // grouping style or custom grouper to group items and finally sort items
+*  // with sorting style or custom sorter.
+*  listModel->RefreshL();
+*
+*  // You can also refresh the post filter and sorting only. This call does not
+*  // fetch items from the server. The model is only filtered and sorted.
+*  listModel->RefreshL( ECLFRefreshPostFilter | ECLFRefreshSorting );
+*  @endcode
+*
+*  @lib ContentListingFramework.lib
+*  @since S60 3.1
+*/
+class MCLFItemListModel
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Destructor.
+        */
+        virtual ~MCLFItemListModel() {}
+
+    public: // New functions
+
+        /**
+        * Get Content Listing Framework item from the List Model.
+        * @since S60 3.1
+        * @pre aIndex >= 0 && aIndex < ItemCount()
+        * @param aIndex Index of the item
+        * @return Content Listing Framework item
+        */
+        virtual const MCLFItem& Item( TInt aIndex ) const = 0;
+
+        /**
+        * Get number of items that are in the model.
+        * @since S60 3.1
+        * @return Count of items
+        */
+        virtual TInt ItemCount() const = 0;
+
+        /**
+        * Activate or remove Sorting style.
+        * Setting a new sorting style will remove all old secondary sorters.
+        * Removing the sorting will also remove all secondary sorters too.
+        * @since S60 3.1
+        * @param aSortingStyle Sorting style to activate,
+        *        if the pointer is NULL then sorting styles are removed
+        */
+        virtual void SetSortingStyle( MCLFSortingStyle* aSortingStyle ) = 0;
+
+        /**
+        * Append a secondary sorting style to the list model.
+        * If an item doesn't have the field defined by primary or
+        * any previous secondary sorting style, the items are sorted using
+        * the next secondary sorting style. When a sorting style is
+        * appended using this method, it becomes the least significant
+        * sorting style until a new one is added after it.
+        * Items with undefined fields are placed before or after items
+        * with defined fields, depending on the undefined field position
+        * setting in MCLFSortingStyle.
+        * @since S60 3.1
+        * @param aSortingStyle Secondary sorting style to add.
+        */
+        virtual void AppendSecondarySortingStyleL(
+                                    MCLFSortingStyle& aSortingStyle ) = 0;
+
+        /**
+        * Activate or remove custom sorter.
+        * Custom sorter will overwrite sorting style (if there is a sorting
+        * style activated). See MCLFCustomSorter for an example implementation
+        * of a custom sorter.
+        * @since S60 3.1
+        * @param aCustomSorter Custom sorter to activate.
+        *        If the pointer is NULL, sorting style is used (if there is one
+        *        activated)
+        */
+        virtual void SetCustomSorter( MCLFCustomSorter* aCustomSorter ) = 0;
+
+        /**
+        * Activate a grouping style for the List Model. Use ECLFNoGrouping as
+        * the grouping style if you want to remove grouping.
+        * Default grouping style is ECLFNoGrouping.
+        * @since S60 3.1
+        * @param aGrouping Grouping style to activate
+        */
+        virtual void SetGroupingStyle( TCLFGrouping aGrouping ) = 0;
+
+        /**
+        * Activate or remove custom grouper. See MCLFCustomGrouper for an example
+        * implementation of a custom grouper.
+        * Custom grouper will overwrite grouping style.
+        * @since S60 3.1
+        * @param aCustomGrouper Custom grouper to activate,
+        *        if pointer is NULL then then grouping style is used
+        */
+        virtual void SetCustomGrouper( MCLFCustomGrouper* aCustomGrouper ) = 0;
+
+        /**
+        * Activate or remove post filter. Post filter removes items from the
+        * List Model. See MCLFPostFilter for an example implementation of a
+        * post filter.
+        * @since S60 3.1
+        * @param aPostFilter Post filter to activate,
+        *        if pointer is NULL then active post filter will be removed.
+        */
+        virtual void SetPostFilter( MCLFPostFilter* aPostFilter ) = 0;
+
+        /**
+        * Wanted mime types of media files that will be requested to the model.
+        * Overwrites old mime types if they were set.
+        * @since S60 3.1
+        * @param aMimeTypes List of wanted mime types. Mime types can contain
+        *                   wildcard characters "*" and "?", where "*" matches
+        *                   zero or more consecutive occurrences of any character
+        *                   and "?" matches a single occurrence of any character
+        */
+        virtual void SetWantedMimeTypesL( const MDesCArray& aMimeTypes ) = 0;
+
+        /**
+        * Wanted mime types of media files that will be requested to the model.
+        * Overwrites old mime types if they were set.
+        * @since S60 3.1
+        * @param aResource Resource reader to mime type list resource.
+        *                  Use resource struct CLF_MIME_TYPE_ARRAY.
+        */
+        virtual void SetWantedMimeTypesL( TResourceReader& aResource ) = 0;
+
+        /**
+        * Wanted media types of media files that will be requested to the model.
+        * Overwrites old media types if they were set.
+        * @since S60 3.1
+        * @param aMediaTypes List of wanted media types
+        */
+        virtual void SetWantedMediaTypesL(
+                            const TArray<TInt>& aMediaTypes ) = 0;
+
+
+        /**
+        * Wanted media types of media files that will be requested to the model.
+        * Overwrites old media types if they were set.
+        * @since S60 3.1
+        * @param aResource Resource reader to media type list resource.
+        *                  Use resource struct CLF_MEDIA_TYPE_ARRAY
+        */
+        virtual void SetWantedMediaTypesL( TResourceReader& aResource ) = 0;
+
+        /**
+        * Refresh the model. This function is asynchronous (non-blocking) and
+        * MCLFOperationObserver is called when the refresh operation is
+        * completed. <br>
+        * <br>
+        * Operations in refresh are executed in the following order:<br>
+        * 1. Model gets wanted items from server.
+        *    Use SetWantedMediaTypesL and/or SetWantedMimeTypesL to define
+        *    wanted items.<br>
+        * 2. Model uses post filter to filter items.<br>
+        * 3. Model groups items if grouping is selected.<br>
+        * 4. Model sorting items.<br>
+        * @since S60 3.1
+        */
+        virtual void RefreshL() = 0;
+
+        /**
+        * Refresh the model. This function is synchronous (blocking). Use
+        * parameter(s) to define the type of refresh. See TCLFRefreshTypeFlags
+        * for refresh flags.
+        * @since S60 3.1
+        * @param aRefreshType Flag(s) to use for refreshing.
+        */
+        virtual void RefreshL( TInt32 aRefreshType ) = 0;
+
+        /**
+        * Cancel asynchronous refresh operation.
+        * @since S60 3.1
+        */
+        virtual void CancelRefresh() = 0;
+
+    private: // Extension interface
+
+        /**
+        * This member is internal and not intended for use.
+        */
+        virtual MCLFItemListModelExt* Extension() { return NULL; }
+
+    };
+
+#endif      // MCLFITEMLISTMODEL_H
+
+// End of File