mmappfw_plat/mpx_collection_utility_api/inc/mpxcollectionplaylist.h
changeset 0 a2952bb97e68
child 16 7338708f87ae
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmappfw_plat/mpx_collection_utility_api/inc/mpxcollectionplaylist.h	Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,548 @@
+/*
+* Copyright (c) 2006 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:  Encapsulates a 'playlist' from a collection
+*
+*/
+
+ 
+
+#ifndef CMPXCOLLECTIONPLAYLIST_H
+#define CMPXCOLLECTIONPLAYLIST_H
+
+#include <s32strm.h>
+#include <mpxattribute.h>
+#include <mpxcollectionobserver.h>
+
+class CMPXCollectionPath;
+class MMPXCollectionUtility;
+class RReadStream;
+class MMPXCollectionPlaylistObserver;
+class CMPXCollectionOpenUtility;
+/**
+ *  Encapsulates a playlist
+ *
+ *  @lib mpxcollectionutility.lib
+ */
+class CMPXCollectionPlaylist : public CBase, public MMPXCollectionObserver
+    {
+public: // Data type    
+    enum TRepeatMode
+        {
+        ERepeatOff, // No repeat
+        ERepeatOne, // Play one track over and over again
+        ERepeatAll  // Repeat the whole play list
+        };
+public:
+
+   /**
+    *  Two-phase constructor.
+    *
+    *  @since S60 3.2.3
+    */
+    IMPORT_C static CMPXCollectionPlaylist* NewL();
+
+   /**
+    *  Two-phase constructor.
+    *
+    *  @since S60 3.2.3
+    *  @param aPlaylist reference to an existing playlist
+    *  @param aPlObs playlist observer
+    *  @return object created
+    */
+    IMPORT_C static CMPXCollectionPlaylist* NewL(
+                                const CMPXCollectionPlaylist& aPlaylist,
+                                MMPXCollectionPlaylistObserver* aPlObs = NULL);
+
+    /**
+     *  Two-phase constructor.
+     *
+     *  @since S60 3.2.3
+     *  @param aPath reference to a collection path
+     *  @param aPlObs playlist observer
+     *  @return object created
+     */
+    IMPORT_C static CMPXCollectionPlaylist* NewL(
+                                const CMPXCollectionPath& aPath,
+                                MMPXCollectionPlaylistObserver* aPlObs = NULL);
+
+    /**
+     *  Two-phase constructor.
+     *
+     *  @since S60 3.2.3
+     *  @param aStream reference to a collection path
+     *  @param aPlObs playlist observer
+     *  @return object created
+     */
+    IMPORT_C static CMPXCollectionPlaylist* NewL(
+                                  RReadStream& aStream,
+                                  MMPXCollectionPlaylistObserver* aPlObs = NULL);
+
+    /**
+     *  Destructor.
+     *
+     *  @since S60 3.2.3
+     */
+    IMPORT_C virtual ~CMPXCollectionPlaylist();
+    
+public: //Iterate through the playlist
+
+    /**
+     *  Copy content from other playlist.
+     *
+     *  @since S60 3.2.3
+     *  @param aPlaylist reference to an existing playlist
+     */
+    IMPORT_C void CopyContentL(const CMPXCollectionPlaylist& aPlaylist);
+    
+    /**
+     *  Next item.
+     *
+     *  @since S60 3.2.3
+     *  @param aIgnoreRepeat ETrue to ignore repeat setting
+     *  @return ETrue if exists
+     */
+    IMPORT_C TBool Next( TBool aIgnoreRepeat=EFalse );
+
+    /**
+     *  Gets the next index to play.  This method should not change
+     *  any of the internal index values (const method).
+     *
+     *  @since S60 3.2.3
+     *  @param aIgnoreRepeat ETrue to ignore repeat setting
+     *  @param aPlaylistIndex Out Parameter - The next index. KErrNotFound if no valid index.
+     *                                - This is the index in the playlist order.
+     *  @return ETrue if exists
+     */
+    IMPORT_C TBool NextIndex( 
+        TBool aIgnoreRepeat, 
+        TInt& aPlaylistIndex ) const;
+
+    /**
+     *  Gets the path index of the item given it's position in the playlist.
+     *
+     *  @since S60 3.2.3
+     *  @param aPlaylistIndex Index of item in the playlist
+     *  @return The index of the item in the path
+     */
+    IMPORT_C TInt PathIndex( TInt aPlaylistIndex ) const;
+
+    /**
+     *  Previous item.
+     *
+     *  @since S60 3.2.3
+     *  @param aIgnoreRepeat ETrue to ignore repeat setting
+     *  @return ETrue if exists    
+     */
+    IMPORT_C TBool Previous( TBool aIgnoreRepeat=EFalse );
+    
+    /**
+     *  Go to the first item.
+     *
+     *  @since S60 3.2.3
+     */
+    IMPORT_C void SetToFirst();
+
+    /**
+     *  Go to the last item.
+     *
+     *  @since S60 3.2.3
+     */
+    IMPORT_C void SetToLast();
+    
+    /**
+     * Go to a particular item.
+     *
+     * @since S60 3.2.3
+     * @param aIndex index to goto
+     *               The index can be -1 for no selection and must be
+     *               Smaller than the number of items in the playlist
+     */
+    IMPORT_C void CMPXCollectionPlaylist::SetToIndex( TInt aIndex );
+    
+public: // State information   
+    /**
+     * Number of items.
+     *
+     * @since S60 3.2.3
+     * @return the number of items
+     */
+    IMPORT_C TInt Count() const;
+    
+    /**
+     * Depth of the playlist.
+     *
+     * @since S60 3.2.3
+     * @return the depth
+     */
+    IMPORT_C TInt Levels() const;
+    
+    /**
+     * Index to current item in the playlist.
+     *
+     * @since S60 3.2.3
+     * @return the index
+     */
+    IMPORT_C TInt Index() const;
+
+    /**
+     * Remote playlist.
+     *
+     * @since S60 3.2.3
+     * @return ETrue remote, EFalse local
+     */
+    IMPORT_C TBool Remote() const;
+
+    /**
+     * Repeat mode.
+     *
+     * @since S60 3.2.3
+     * @return the repeat mode
+     */
+    IMPORT_C TRepeatMode RepeatMode() const;
+
+    /**
+     * Shuffle mode.
+     *
+     * @since S60 3.2.3
+     * @return ETrue shuffle on, EFalse shuffle off
+     */
+    IMPORT_C TBool Shuffle() const; 
+
+    /**
+     * Get collection path.
+     *
+     * @since S60 3.2.3
+     * @return collection path
+     */
+    IMPORT_C const CMPXCollectionPath& Path() const;
+    
+    /**
+     * Get extended media of current item.
+     *
+     * @since S60 3.2.3
+     * @param aAttrs attributes requested
+     * @param aMediaObs properties observer
+     */    
+    IMPORT_C void MediaL(const TArray<TMPXAttribute>& aAttrs,
+                         MMPXCollectionMediaObserver& aMediaObs);
+    
+    /**
+     * Set repeat mode.
+     *
+     * @since S60 3.2.3
+     * @param aMode the repeat mode
+     */
+    IMPORT_C void SetRepeatMode(TRepeatMode aMode); 
+
+    /**
+     * Set repeat enabled.
+     *
+     * @since S60 3.2.3
+     * @param aEnable To enable repeat mode or not
+     */
+    IMPORT_C void SetRepeatEnabled( TBool aEnable ); 
+
+    /**
+     * Turn shuffle mode on/off.
+     *
+     * @since S60 3.2.3
+     * @param aShuffle new shuffle mode
+     * @param aCurrentToTop move current item to the top
+     */
+    IMPORT_C void SetShuffleL(TBool aShuffle, TBool aCurrentToTop);
+    
+    /**
+     * Set shuffle enabled.
+     *
+     * @since S60 3.2.3
+     * @param aEnable To enable shuffle mode or not
+     */
+    IMPORT_C void SetShuffleEnabledL( TBool aEnable );
+    
+    /**
+     * Externalize an object of this class to stream.
+     *
+     * @since S60 3.2.3
+     * @param aStream write stream
+     */
+    IMPORT_C void ExternalizeL(RWriteStream& aStream) const;
+    
+    /**
+     * Internalize an object of this class from stream.
+     *
+     * @since S60 3.2.3
+     * @param aStream read stream
+     */
+    IMPORT_C void InternalizeL(RReadStream& aStream);
+    
+    /**
+     * Set a new observer for current request.
+     * Used when handling pre-initializing.
+     *
+     * @since S60 3.2.3
+     * @param aMediaObs properties observer
+     * @param aPlObs playlist observer
+     * @param aCollectionObs collection observer
+     */    
+    IMPORT_C void SetObserver(MMPXCollectionMediaObserver& aMediaObs,
+                              MMPXCollectionPlaylistObserver* aPlObs = NULL,
+                              MMPXCollectionObserver* aCollectionObs = NULL);
+    
+    /**
+     * Is this playlist launched from embedded mode.
+     *
+     * @since S60 3.2.3
+     * @return ETrue if embedded mode
+     */
+    IMPORT_C TBool EmbeddedPlaylist() const;
+    
+    /**
+     * Set or clear the embedded playlist flag.
+     *
+     * @since S60 3.2.3
+     * @param aEmbedded is this playlist embedded?
+     */
+    IMPORT_C void SetEmbeddedPlaylist( TBool aEmbedded );
+    
+    /**
+     *  Sets/updates the media for the item provided.
+     *
+     *  @since S60 3.2.3
+     *  @param aMedia new value
+     *  Callback via EMediaChanged message if currently opened
+     */
+    IMPORT_C void SetL( const CMPXMedia& aMedia );
+    
+    /**
+     *  Stops any async operations that are currently under way.
+     *
+     *  @since S60 3.2.3
+     */
+    IMPORT_C void CancelRequest(); 
+    
+    /**
+     *  Invalidate the playlist.
+     *  
+     */
+    IMPORT_C void Invalidate();
+    
+    /**
+     * AutoPlay
+     *  
+     * @since S60 TB9.2
+     * @return the auto play value
+     */
+    IMPORT_C TBool AutoPlay() const;
+    
+    /**
+     * Set auto play.
+     * 
+     * @since S60 TB9.2
+     * @param aAutoPlay new value
+     */
+    IMPORT_C void SetAutoPlay(TBool aAutoPlay);
+    
+    
+     /**
+     * Single item playlist.
+     *
+     * @since S60 TB9.2
+     * @return ETrue for single item, EFalse if not
+     */
+     IMPORT_C TBool IsSingleItemPlaylist();
+    
+    
+    /**
+     * Set single item playlist.
+     *
+     * @since S60 TB9.2
+     */
+     IMPORT_C void SetSingleItemPlaylist();
+     
+     /**
+     * Pre-initialize next plugin.
+     *
+     * @since S60 TB9.2
+     * @return ETrue for pre-init, EFalse if not
+     */
+     IMPORT_C TBool PreInitPlugin() const;
+
+     /**
+      * Set pre-initialize next plugin.
+      *
+      * @since S60 TB9.2
+      * @param aPreInit new value
+      */
+      IMPORT_C void SetPreInitPlugin(TBool aPreInitPlugin);
+      
+private:  // From base class
+    /**
+     *  Handle media.
+     *  From MMPXCollectionObserver / MMPXCollectionMediaObserver.
+     *
+     *  @since S60 3.2.3
+     *  @param aMedia media properties
+     *  @param aError error code
+     */
+    void HandleCollectionMediaL(const CMPXMedia& aMedia, TInt aError);
+                                   
+    /**
+     *  Handle collection message.
+     *  From MMPXCollectionObserver
+     *
+     *  @since S60 3.2.3
+     *  @param aMessage collection message
+     *  @param aErr system error code.
+     */
+    void HandleCollectionMessage(CMPXMessage* aMessage, TInt aErr);
+
+    /**
+     *  Handles the collection entries being opened. Typically called
+     *  when client has Open()'d a folder.
+     *  From MMPXCollectionObserver    
+     *
+     *  @since S60 3.2.3
+     *  @param aEntries collection entries opened
+     *  @param aIndex focused entry
+     *  @param aComplete ETrue no more entries. EFalse more entries
+     *                   expected
+     *  @param aError error code   
+     */
+    void HandleOpenL(const CMPXMedia& aEntries,
+                     TInt aIndex,TBool aComplete,TInt aError);
+    
+    /**
+     *  Handles the item being opened. 
+     *  Typically called when client has Open()'d an item. Client typically 
+     *  responds by 'playing' the item via the playlist
+     *  From MMPXCollectionObserver    
+     *
+     *  @since S60 3.2.3
+     *  @param aPlaylist collection playlist
+     *  @param aError error code   
+     */                         
+    void HandleOpenL(const CMPXCollectionPlaylist& aPlaylist,TInt aError);
+
+private:
+
+    /**
+     *  Restore ordinal after changes.
+     *  
+     *  @since S60 3.2.3
+     *  @param aEntries collection entries opened
+     *  @param aIndex index of current item 
+     *  @leave IfNull 
+     */
+    void RestoreOrdinalL(const CMPXMedia& aEntries, TInt aIndex);
+    
+    /**
+     *  Handle collection message.
+     *
+     *  @since S60 3.2.3
+     *  @param aMessage collection message
+     *  @param aErr system error code.
+     *  @leave IfNull
+     */
+    void DoHandleCollectionMessageL(CMPXMessage* aMessage, TInt aErr);
+
+    /**
+     * Handle a CMPXCollection message with a change event.
+     *
+     * @since S60 3.2.3
+     * @param aMessage single collection message to handle
+     * @return ETrue if a re-open is needed, EFalse otherwise
+     */
+    TBool DoHandleCollectionChangeMessageL(CMPXMessage& aMessage);
+    
+    /**
+     * Handle starting of fetch for incremental algorithm.
+     *
+     * @since S60 3.2.3
+     */
+    void DoIncrementalOpenL();
+    
+    /**
+     * Do Restore Ordinal for incremental opens.
+     *
+     * @since S60 3.2.3
+     * @param aMedia media returned from collection
+     * @param aComplete OpenL Completed or not
+     */
+    void DoHandleIncompleteOpenL( const CMPXMedia& aMedia, TBool aComplete);
+        
+private:
+    
+    /**
+     *  C++ default constructor.
+     *  content not constructed yet, it may be internalized from buffer
+     *
+     *  @since S60 3.2.3
+     *  @param aPlObs playlist observer
+     */
+    CMPXCollectionPlaylist(MMPXCollectionPlaylistObserver* aPlObs);
+    
+    /**
+     * 2nd phase constructor.
+     *
+     * @since S60 3.2.3
+     * @param aPath collection path
+     */
+    void ConstructL(const CMPXCollectionPath& aPath);
+                                   
+    /**
+     * 2nd phase constructor.
+     *
+     * @since S60 3.2.3
+     * @param aPlaylist playlist
+     */
+    void ConstructL(const CMPXCollectionPlaylist& aPlaylist);
+    
+    /**
+     * 2nd phase contructor.
+     *
+     * @since S60 3.2.3
+     * @param aStream stream
+     */
+    void ConstructL(RReadStream& aStream);
+
+    /**
+     * 2nd phase contructor.
+     *
+     *  @since S60 3.2.3
+     */
+    void ConstructL();
+    
+private:
+    TRepeatMode iRepeatMode;
+    TBool iShuffle;
+    TBool iRemote;
+    CMPXCollectionPath* iPath;
+    RArray<TInt> iItemIndexes; // Indexes which define playlist items
+    TInt iItemIndex; // current index to iItemIndexes array
+    MMPXCollectionUtility* iColUtil;
+    MMPXCollectionMediaObserver* iMediaObs;
+    MMPXCollectionObserver* iCollectionObs;
+    TBool iEmbedded;
+    MMPXCollectionPlaylistObserver* iPlObs; 
+    TBool iRepeatEnabled;
+    TBool iShuffleEnabled;
+    CMPXCollectionOpenUtility* iIncOpenUtil;
+    TBool iReopenForChange;
+    TBool iAutoPlaylist;
+    TBool iAutoPlay; // Automatically play next item in playlist if in playing state. Default to TRUE for Music Player.
+    TBool iSingleItemPlaylist;
+    TBool iPreInitPlugin;
+    };
+
+#endif // CMPXCOLLECTIONPLAYLIST_H