upnpsharing/upnpcontentserver/inc/upnpcustomgrouper.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/upnpsharing/upnpcontentserver/inc/upnpcustomgrouper.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,115 @@
+/*
+* Copyright (c) 2006-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:      Custom grouper class definition
+*
+*/
+
+
+
+
+
+
+
+
+#ifndef __CUPNPAPPCUSTOMGROUPER_H__
+#define __CUPNPAPPCUSTOMGROUPER_H__
+
+// INCLUDES
+#include <e32base.h>
+#include <e32std.h>
+#include <MCLFCustomGrouper.h>
+#include <CLFContentListing.hrh>
+// this will be included when it back in SDK
+// #include <CLFContentListingExtended.hrh>
+
+#include "upnpcontentserverdefs.h"
+
+// FORWARD DECLARATIONS
+class MCLFItem;
+class MCLFModifiableItem;
+
+// CLASS DECLARATION
+
+/**
+*  CLF Custom Grouper.
+*  Example of Custom Grouper that can be used to group files in the
+*  list model. With Custom Groupers you can create grouping functionality that
+*  is not supported in Content Listing Framework by default. This Custom
+*  Grouper can group items of a list model by any field. In this example
+*  application, this Custom Grouper is used to group music items by artist
+*  name.
+*/
+class CUpnpCustomGrouper
+    : public CBase,
+      public MCLFCustomGrouper
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Creates and returns a new instance of this class.
+        * @param aGroupingCriteria Group items by this criteria
+        * @return Pointer to the CCECustomGrouper object
+        */
+
+        static CUpnpCustomGrouper* NewL(
+                        TCLFExtendedFieldId aGroupingCriteria );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CUpnpCustomGrouper();
+
+    private:    // Constructors
+        /**
+        * C++ default constructor.
+        * @param aGroupingCriteria Group list items by this criteria
+        */
+        CUpnpCustomGrouper( TCLFExtendedFieldId aGroupingCriteria );
+
+    protected:     // Functions from base classes
+
+        /**
+        * From MCLFCustomGrouper. Method for grouping Content Listing
+        * Framework items. Will get called when grouping operation is executed
+        * by calling refresh for the list model.
+        * @since S60 3.1
+        * @param aSourceList Source list
+        * @param aGroupedList Grouped/destination list
+        */
+        void GroupItemsL( const TArray<MCLFItem*>& aSourceList,
+                          RPointerArray<MCLFItem>& aGroupedList );
+
+    private:    // New functions
+
+        /**
+        * Checks if group has been added to the destination array already.
+        * @param aGroupName Name of the group to be checked
+        * @return ETrue If group has been added to the model, EFalse if not
+        */
+        TBool GroupAlreadyExists( const TDesC& aGroupName );
+
+    private:    // Data
+
+        // Array for keeping track, which items have been added to the
+        // model. Deletes items when they are no longer needed.
+        RPointerArray<MCLFModifiableItem> iModItems;
+
+        // Criteria for grouping
+        TCLFExtendedFieldId iGroupingCriteria;
+
+    };
+
+#endif // __CUPNPAPPCUSTOMGROUPER_H__
+
+// End of File