--- /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