mmappfw_plat/mpx_collection_utility_api/inc/mpxcollectionopenutility.h
changeset 0 a2952bb97e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_collection_utility_api/inc/mpxcollectionopenutility.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 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:  Incremental OpenL() utility
+*
+*/
+
+
+#ifndef C_CMPXCOLLECTIONOPENUTILITY_H
+#define C_CMPXCOLLECTIONOPENUTILITY_H
+
+#include <mpxcollectionobserver.h>
+#include <mpxcollectionframeworkdefs.h>
+#include <mpxcollectionopenlresultdef.h>
+
+// FORWARD DECLARTIONS
+class MMPXCollectionUtility;
+class CMPXCollectionPath;
+
+/**
+ *  CMPXCollectionOpenUtility
+ *
+ *  Incremental OpenL() utility to open data in chunks
+ *
+ *  @lib mpxcollectionutility.lib
+ */
+class CMPXCollectionOpenUtility  : public CBase, 
+                                   public MMPXCollectionObserver
+    {
+public:
+
+    /**
+     * Two phased constructor.
+     *
+     * @since S60 5.0
+     * @param aObs observer
+     * @param aMode mode of the utility 
+     */
+    IMPORT_C static CMPXCollectionOpenUtility* NewL( MMPXCollectionObserver* aObs, TUid aMode = KMcModeDefault );
+
+    /**
+     * virtual destructor.
+     *
+     * @since S60 5.0
+     */
+    virtual ~CMPXCollectionOpenUtility();
+
+public:  // Enumerations
+    /**
+     * Direction of the fetch
+     */
+    enum TDirection
+        {
+        EFetchNormal,
+        EFetchUp,
+        EFetchDown
+        };
+        
+public:  // Public functions
+    
+    /**
+     * Start the incremental read operation.
+     *
+     * @since S60 5.0
+     * @param aAttrs array of attributes
+     * @param aChunkSize size of each chunk to fetch
+     * @param aOffset offset to start fetching from
+     * @param aDirection fetching direction, normal, up or down
+     * @param aKeyAttribute key attribute to speed up open operation
+     */
+    IMPORT_C void StartL( TArray<TMPXAttribute> aAttrs,
+                          TInt aChunkSize,
+                          TInt aOffset = 0,
+                          TDirection aDirection = EFetchNormal,
+                          TMPXAttribute aKeyAttribute = KMPXMediaNullAttribute );
+    
+    /**
+     * Start the incremental read operation.
+     *
+     * @since S60 5.0
+     * @param aPath path to have to open to
+     * @param aAttrs array of attributes
+     * @param aChunkSize size of each chunk to fetch
+     * @param aOffset offset to start fetching from
+     * @param aDirection fetching direction, normal, up or down
+     * @param aKeyAttribute key attribute to speed up open operation
+     */
+    IMPORT_C void StartL( const CMPXCollectionPath& aPath,
+                          TArray<TMPXAttribute> aAttrs,
+                          TInt aChunkSize,
+                          TInt aOffset = 0,
+                          TDirection aDirection = EFetchNormal,
+                          TMPXAttribute aKeyAttribute = KMPXMediaNullAttribute );
+
+    /**
+     * Cancel the incremental reading procedure.
+     *
+     * @since S60 5.0
+     */
+    IMPORT_C void Stop();
+    
+    /**
+     * Set the fetching direction.
+     *
+     * @since S60 5.0
+     * @param aDirection a direction to start fetching from
+     */
+    IMPORT_C void SetDirection( TDirection aDirection );
+    
+    /**
+     * Set the fetching delay in between subsequent fetches.
+     *
+     * @since S60 5.0
+     * @param aDelay delay in microseconds, default is 0
+     */
+    IMPORT_C void SetDelay( TInt aDelay );
+    
+    /**
+     * Returns a copy of the collection path.
+     *
+     * @since S60 5.0
+     * @return CMPXCollectionpath* ownership transferred
+     */
+    IMPORT_C CMPXCollectionPath* PathL();
+
+protected: // From Base Class
+    
+    /**
+     * From MMPXCollectionObserver
+     *
+     * @since S60 5.0
+     */
+    void HandleCollectionMessage(CMPXMessage* aMsg, TInt aErr); 
+
+    /**
+     * From MMPXCollectionObserver
+     *
+     * @since S60 5.0
+     */
+    void HandleOpenL(const CMPXMedia& aEntries,
+                     TInt aIndex,TBool aComplete,TInt aError);
+    
+    /**
+     * From MMPXCollectionObserver
+     *
+     * @since S60 5.0
+     */
+    void HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError);
+    
+    /**
+     * From MMPXCollectionObserver
+     *
+     * @since S60 5.0
+     */
+    void HandleCommandComplete(CMPXCommand* aCommandResult, 
+                               TInt aError);
+    
+    /**
+     * From MMPXCollectionObserver
+     *
+     * @since S60 5.0
+     */
+    void HandleCollectionMediaL(const CMPXMedia& aMedia, 
+                                TInt aError);
+
+private:
+    /**
+     * Handle collection messages.
+     *
+     * @since S60 5.0
+     * @param aMsg CMPXMessage to handle 
+     */
+    void DoHandleCollectionMessageL( const CMPXMessage& aMsg );
+    
+    /**
+     * Handle command complete.
+     *
+     * @since S60 5.0
+     * @param aCommand result of the command
+     * @param aError any errors
+     */
+    void DoHandleCommandCompleteL(CMPXCommand& aCommandResult, 
+                                  TInt aError);
+    /**
+     * Fetch Count step.
+     *
+     * @since S60 5.0
+     */ 
+    void DoFetchCountL();
+    
+    /**
+     * Handle completion of count step.
+     *
+     * @since S60 5.0
+     * @param aMedia media returned from the collection
+     * @param aIndex item focus from the collection
+     * @param aError error of the operation
+     */
+    void DoHandleCountL(const CMPXMedia& aMedia, 
+                        TInt aIndex, 
+                        TInt aError);
+                        
+    /**
+     * Fetch items step.
+     *
+     * @since S60 5.0
+     */
+    void DoFetchItemsL();
+    
+    /**
+     * Handle completion of fetch item step.
+     *
+     * @since S60 5.0
+     * @param aMedia media returned from the collection
+     * @param aIndex item focus from the collection
+     * @param aError error of the operation 
+     * @leave IfNull
+     */
+    void DoHandleFetchItemsL( const CMPXMedia& aMedia,
+                              TInt aIndex, 
+                              TInt aError);
+    
+    /**
+     * Run the next step.
+     *
+     * @since S60 5.0
+     */    
+    void RunNext();
+
+    /**
+     * Callback function for the periodic timer.
+     *
+     * @since S60 5.0
+     */
+    static TInt Callback( TAny* aAny );
+    
+     /**
+      * Handle callback from the timer.
+      *
+      * @since S60 5.0
+      */
+    void HandleCallbackL();
+        
+    /**
+     * Setup the chunks.
+     *
+	 	 * @since S60 5.0
+     * @param aCount total number of items
+     */
+    void DoSetupChunksL( TInt aCount );
+    
+    /**
+     * Sort ascending.
+     *
+     * @since S60 5.0
+     * @param aSkipFirst do not order the first item
+     */
+    void DoSortAscend( TBool aSkipFirst = EFalse );
+    
+    /**
+     * Sort decending do not order the first item.
+     *
+     * @since S60 5.0
+     * @param aSkipFirst do not order the first item
+     */
+    void DoSortDescend( TBool aSkipFirst = EFalse );
+    
+    /**
+     * Sort normal.
+     *
+     * @since S60 5.0
+     * @param aSkipFirst do not order the first item
+     */
+    void DoSortNormalL( TBool aSkipFirst = EFalse );
+    
+    /**
+     * Compact the task list given partial results may have been fetched.
+     *
+     * @since S60 5.0
+     * @param aMedia media containing the fetched sections
+     */
+    void DoCompactTaskListL( const CMPXMedia& aMedia );
+    
+    /**
+     * Send a command to the collection to update selection index.
+     *
+     * @since S60 5.0
+     */
+    void DoSelectIndexL();
+    
+private:
+  
+    /**
+     * Constructor.
+     *
+     * @since S60 5.0
+     * @param aObs observer
+     * @param aMode mode of the utility
+     */
+    CMPXCollectionOpenUtility( MMPXCollectionObserver* aObs, TUid aMode );
+
+    /**
+     * 2nd phase constructor.
+     *
+     * @since S60 5.0
+     */
+    void ConstructL();
+
+private:
+
+    /**
+     * Enum fo rthe different states of this object
+     */
+    enum TFetchingStep
+        {
+        EFetchPath,
+        EFetchCount,
+        EFetchItems,
+        EFetchCommand,
+        EFetchNone
+        };
+
+private: // data
+    CPeriodic*             iTimer;
+    MMPXCollectionUtility* iCollection;
+
+    TDirection             iFetchDirection;
+    TMPXOpenDataBlock      iFetchInfo;
+    TMPXAttribute          iKeyAttribute;
+    TInt                   iFetchDelay; 
+    
+    TFetchingStep          iFetchStep;
+    MMPXCollectionObserver* iObs; 
+    RArray<TMPXOpenDataBlock> iIncrementalChunks;
+    
+    CMPXMedia*             iMedia;  // handle to the current data retrieved from handleopen
+    CMPXMediaArray*        iData;   // not owned, media array inside of iMedia
+    CMPXCollectionPath*    iPath;   // Current working path
+    
+    TUid                   iMode;
+    TBool                  iFirstOpen;
+    TBool                  iSelecting;
+    };
+
+#endif // C_CMPXCOLLECTIONOPENUTILITY_H