--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackpluginhandler.h Thu Dec 17 08:55:47 2009 +0200
@@ -0,0 +1,300 @@
+/*
+* 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: Plugin handler
+*
+*/
+
+
+
+#ifndef CMPXPLAYBACKPLUGINHANDLER_H
+#define CMPXPLAYBACKPLUGINHANDLER_H
+
+#include <mpxplaybackframeworkdefs.h>
+#include <mpxpluginhandlerbase.h>
+
+class CMPXPluginMonitor;
+class CMPXPlaybackPlugin;
+class MMPXPlaybackPluginObserver;
+
+
+/**
+* Processes plug-ins
+*/
+class CMPXPlaybackPluginHandler : public CMPXPluginHandlerBase
+ {
+public:
+ /**
+ * Two-phased constructor.
+ *
+ * @param aPluginMonitor plugin monitor
+ * @param aPluginObserver Observer
+ * @param aObserver plugin handler observer
+ * @return Constructed object
+ */
+ static CMPXPlaybackPluginHandler* NewL(CMPXPluginMonitor& aPluginMonitor,
+ MMPXPlaybackPluginObserver& aPluginObserver,
+ MMPXPluginHandlerObserver& aObserver);
+
+ /**
+ * Destructor
+ */
+ ~CMPXPlaybackPluginHandler();
+
+public:
+ /**
+ * Set a new observer
+ *
+ * @param aObs observer
+ */
+ inline void SetObserver(MMPXPlaybackPluginObserver& aObs);
+
+ /**
+ * Returns currently loaded plug-in, or NULL if none
+ *
+ * @return plugin object interface
+ */
+ inline CMPXPlaybackPlugin* Plugin();
+
+ /**
+ * Returns currently loaded plug-in UID, or KNullUId if none loaded
+ *
+ * @return UID of the plugin
+ */
+ inline TUid PluginUid() const;
+
+ /**
+ * Returns currently loaded plug-in type
+ *
+ * @return plugin type
+ */
+ inline TMPXPlaybackPlayerType PluginType() const;
+
+ /**
+ * Returns display name for custom type for current plug-in; standard types
+ * should be recognized by client and localized - calling this method would
+ * then not be required. See MMPXPlayerManager
+ *
+ * @return player name
+ */
+ inline const TDesC& PlayerName() const;
+
+ /**
+ * Is a plug-in currently loaded
+ *
+ * @return ETrue if a play-in is loaded
+ */
+ inline TBool PlayerFound() const;
+
+ /**
+ * Currently selected sub player. or KErrNotFound if none
+ *
+ * @return index of subplayer
+ */
+ inline TInt SubPlayer() const;
+
+ /**
+ * Returns plug-in with UID aUid, or leaves with KErrNotFound if not there.
+ * Plug-in loaded until Unload called
+ *
+ * @param UID of the plugin
+ * @return plugin object interface
+ */
+ CMPXPlaybackPlugin* CreatePlayerPluginL(const TUid& aUid);
+
+ /**
+ * @see CMPXPluginHandlerBase
+ */
+ TBool IsPluginLoaded(const TUid& aPluginUid);
+
+ /**
+ * @see CMPXPluginHandlerBase
+ */
+ void LoadPluginL(const TUid& aPluginUid);
+
+ /**
+ * @see CMPXPluginHandlerBase
+ */
+ void UnloadPlugin(const TUid& aPluginUid);
+
+ /**
+ * Returns display name for custom types; standard types should be
+ * recognized by client and localized - calling this method would then not
+ * be required. See MMPXPlayerManager
+ *
+ * @param aType player type
+ * @return player name
+ */
+ IMPORT_C const TDesC& PlayerName(TMPXPlaybackPlayerType aType) const;
+
+
+ /**
+ * All the UIDs of the plug-ins in the system of a specific type.
+ * See MMPXPlayerManager
+ *
+ * @param aPlayers array of UIDs of all players of type aType
+ * @param aType player type
+ */
+ IMPORT_C void GetPlayerListL(RArray<TUid>& aPlayers,
+ TMPXPlaybackPlayerType aType);
+
+ /**
+ * Only plug-ins of a specific type will be considered for selection.
+ * See MMPXPlayerManager
+ *
+ * @param aType player type
+ */
+ IMPORT_C void SelectPlayersL(TMPXPlaybackPlayerType aType);
+
+ /**
+ * selects plug-in appropriate for a Uri; may already be loaded or not
+ * @param aUri URI of the song
+ * @param aDataType data type
+ */
+ void SelectPlayerL(const TDesC& aUri,const TDesC8& aDataType);
+
+ /**
+ * selects plug-in appropriate for a file; may already be loaded or not
+ *
+ * @param aFile file handle
+ */
+ void SelectPlayerL(RFile& aFile);
+
+ /**
+ * Only this plug-in will be used, if possible. See MMPXPlayerManager
+ *
+ * @param aPlayerUid UID of players
+ */
+ IMPORT_C void SelectPlayerL(TUid aPlayerUid);
+
+ /**
+ * Only this plug-in will be used, and only this sub player, if possible.
+ * See MMPXPlayerManager
+ *
+ * @param aPlayerUid UID of players
+ * @param aSubPlayerIndex index to the subplayer
+ */
+ IMPORT_C void SelectSubPlayerL(TUid aPlayerUid,TInt aSubPlayerIndex);
+
+ /**
+ * Back to default slection criteria, i.e. type=EPbLocal, no sub player
+ * selected
+ */
+ IMPORT_C void ClearSelectPlayersL();
+
+ /**
+ * Retreives the current selection: KNullUid and KErrNotFound are possible
+ * return values for aPlayer and aSubPlayerIndex respectively if none are
+ * explicitly selected
+ *
+ * @param aType player type
+ * @param aPlayer UID
+ * @param aSubPlayerIndex index of sub player
+ * @param aSubPlayerName Friendly name of the sub player
+ */
+ IMPORT_C void GetSelection(TMPXPlaybackPlayerType& aType,
+ TUid& aPlayer,
+ TInt& aSubPlayerIndex,
+ TPtrC& aSubPlayerName);
+
+ /**
+ * Return a list of interfaces supported by plugins.
+ *
+ * @return an array of interfaces. Client is responsible
+ * for the memory management of this array and its
+ * items.
+ */
+ IMPORT_C CDesCArray* SupportedInterfacesL();
+
+ /**
+ * Return a list of interfaces supported by a plugin.
+ *
+ * @param aUid plugin id
+ * @return an array of interfaces. Client is responsible
+ * for the memory management of this array and its
+ * items.
+ */
+ IMPORT_C CDesCArray* SupportedInterfacesL(const TUid& aUid);
+
+#ifdef SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+ /**
+ * selects plug-in appropriate for a file; may already be loaded or not
+ *
+ * @param aFile file handle
+ */
+ void SelectPlayer64L(RFile64& aFile);
+#endif // SYMBIAN_ENABLE_64_BIT_FILE_SERVER_API
+
+protected:
+
+ /**
+ * From Base CMPXPluginHandlerBase
+ * Constructs the collection plugin info
+ */
+ CMPXPluginInfo* ConstructPluginInfoLC( const CImplementationInformation& aData );
+
+private:
+
+ /**
+ * 2nd phase contructor
+ */
+ void ConstructL();
+
+ /**
+ * C++ constructor
+ *
+ * @param aPluginMonitor plugin monitor
+ * @param aPluginObserver plugin observer
+ * @param aObserver handler observer
+ */
+ CMPXPlaybackPluginHandler(CMPXPluginMonitor& aPluginMonitor,
+ MMPXPlaybackPluginObserver& aPluginObserver,
+ MMPXPluginHandlerObserver& aObserver);
+
+private:
+
+ /**
+ * From Base CMPXPluginHandlerBase
+ * Resolves a plugin
+ */
+ void ResolvePluginL();
+
+ /**
+ * Unloads the plugin at a specified index.
+ * @param aIndex index of the plugin in iLoadedPlugins
+ */
+ void UnloadPlugin(TInt aIndex);
+
+private:
+ MMPXPlaybackPluginObserver* iPluginObserver; // Not owned.
+ //
+ // Loaded. The index must correspond in these arrays
+ //
+ RPointerArray<CMPXPlaybackPlugin> iLoadedPlugins;
+ RArray<TUid> iLoadedPluginsUids;
+
+ // Chosen
+ //
+ CMPXPlaybackPlugin* iPlugin;
+ TUid iPluginUid;
+ TMPXPlaybackPlayerType iPluginType;
+ HBufC* iDisplayName;
+ //
+ // Desired
+ //
+ TInt iSelectedSubPlayerIndex;
+ };
+
+#include "mpxplaybackpluginhandler.inl"
+
+#endif // CMPXPLAYBACKPLUGINHANDLER_H