dlnasrv_plat/upnp_plugin_api/inc/upnpplugininterface.h
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dlnasrv_plat/upnp_plugin_api/inc/upnpplugininterface.h	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,256 @@
+/** @file
+* 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:  Interface for ECom plugins
+*
+*/
+
+
+
+#ifndef C_UPNPPLUGININTERFACE_H
+#define C_UPNPPLUGININTERFACE_H
+
+// INCLUDE FILES
+#include <e32base.h>
+
+
+// FORWARD DECLARATIONS
+class CGulIcon;
+
+// CONSTANT DEFINITIONS
+const TUid interfaceUid = { 0x200075DD };
+
+
+
+/**
+ * This event is sent from plugins to the MUPnPPluginObserver
+ *
+ * @since S60 3.2
+ */
+enum TExtensionEvent
+    {
+    // the extension is enabled by default - no need to call explicitly
+    EExtensionEnabled = 0x0001,
+    // when called, disables the item in the list, cannot execute
+    EExtensionDisabled = 0x0002,
+    // will call GetIcon again, and redraw
+    EExtensionIconChanged = 0x0010,
+    // will call GetTitle again, and redraw
+    EExtensionTitleChanged = 0x0020,
+    // will call GetSubTitle again, and redraw
+    EExtensionSecondaryTextChanged = 0x0040,
+    // extension which was ExecuteL'd, has been closed.
+    EExtensionClosed = 0x0100
+    };
+
+
+/**
+ * Implemented by CUPnPPluginLoader
+ *
+ * @since S60 3.2
+ */
+class MUPnPPluginObserver
+    {
+public:
+
+    /**
+     * Called by plugins when it needs updating.
+     *
+     * @since S60 3.2
+     * @param aEvent event type sent from plugin
+     */
+    virtual void ExtensionEvent(const TExtensionEvent& aEvent)=0;
+    
+    /**
+     * Virtual destructor 
+     *
+     * @since S60 3.2
+     */
+     virtual ~MUPnPPluginObserver() {}
+
+    };
+
+
+/**
+ * ECom interface class which all home connect plugins have to implement.
+ *
+ * IMPORTANT!!!
+ * 
+ * Following methdods and attribute have to be implemented in the implementing
+ * class as well so that observer argument can be passed correctly.
+ * Example is given from all methods.
+ *
+ * private:
+ *    // attribute
+ *    MUPnPPluginObserver* iPluginObserver;
+ *    
+ *    // constructor
+ *    // constructor has to be inherited from the interface constructor
+ *    // the following way
+ *    CUPnPPluginImplementation(TAny* aEcomArguments)
+ *         : CUPnPPluginInterface( aEcomArguments ) {}
+ *
+ *    // ConstructL
+ *    // ConstructL has to set its argument to the attribute
+ *    void ConstructL(MUPnPPluginObserver* aPluginObserver) 
+ *      {
+ *      iPluginObserver = aPluginObserver;
+ *      }
+ *
+ * public:
+ *    // NewL
+ *    // This has to give its argument to the constructor and pass it to
+ *    // ConstructL as well
+ *    static CUPnPPluginImplementation* NewL(MUPnPPluginObserver* 
+ *                                             aPluginObserver)
+ *      {
+ *      CUPnPPluginImplementation* self = new(ELeave) 
+ *                       CUPnPPluginImplementation( aPluginObserver );
+ *      CleanupStack::PushL( self );
+ *      self->ConstructL( aPluginObserver );
+ *      CleanupStack::Pop( self );
+ *      return self;
+ *      }
+ *
+ *
+ */
+class CUPnPPluginInterface : public CBase
+    {
+public:
+        
+    /**
+     * Creates instance of ECom plugin implementation which corresponds
+     * the parameter aUid.
+     *
+     * @since S60 3.2
+     * @param aUid - Uid of the plugin implementation
+     * @param aPluginObserver - Call back to CUPnPPluginLoader
+     * @return Instance of CUPnPPluginInterface
+     */
+    static CUPnPPluginInterface* NewL(TUid aUid,
+                                    MUPnPPluginObserver& aPluginObserver);
+
+    /**
+     * Informs to ECom that it has been destroyed.
+     *
+     * @since S60 3.2
+     */
+    virtual ~CUPnPPluginInterface();
+
+    //-------------------------------------------------------------------
+    // ECom interface methods
+    //-------------------------------------------------------------------
+    /**
+     * Returns reference to the icon of the plugin
+     *
+     * @since S60 3.2
+     * @return Reference to the icon of the plugin
+     */
+    virtual const CGulIcon& GetIcon()=0;
+
+    /**
+     * Returns const reference to the icon of the plugin
+     *
+     * @since S60 3.2
+     * @return const reference to the title of the plugin
+     */
+    virtual const TDesC& GetTitle()=0;
+
+    /**
+     * Returns const reference to the scondary text of the plugin
+     *
+     * @since S60 3.2
+     * @return const reference to the secondary text of the plugin
+     */
+    virtual const TDesC& GetSecondaryText()=0;
+
+    /**
+     * Executes the plugin
+     *
+     * @since S60 3.2
+     */
+    virtual void ExecuteL()=0;
+
+    /**
+     * Checks if the plugin needs upnp configuration (set IAP)
+     *
+     * @since S60 3.2
+     * @return Information whether plugin needs upnp configuration
+     */
+    virtual TBool RequiresUpnpConfiguration()=0;
+
+protected:
+    /**
+     * Constructor. Sets plugin observer.
+     *
+     * @since S60 3.2
+     * @param aPluginObserver - reference to CUPnPPluginObserver
+     */
+    CUPnPPluginInterface(TAny* aEcomArguments);
+
+private:
+
+    /**
+     * Uid of the plugin
+     */
+    TUid iDtor_ID_Key;
+
+    /**
+     * Pointer to the plugin observer which handles the events plugin sends
+     *
+     * Not owned.
+     */
+    MUPnPPluginObserver& iPluginObserver;
+    };
+
+
+// inline methods
+
+// ----------------------------------------------------------------------------
+// CUPnPPluginInterface::NewL
+// Constructor
+// ----------------------------------------------------------------------------
+inline CUPnPPluginInterface* CUPnPPluginInterface::NewL(TUid aUid,
+                                  MUPnPPluginObserver& aPluginObserver)
+    {
+    TAny* arg = reinterpret_cast<TAny*>(&aPluginObserver);
+    TAny* interface = REComSession::CreateImplementationL(aUid,
+                           _FOFF(CUPnPPluginInterface,iDtor_ID_Key),arg);
+    CUPnPPluginInterface* retval =
+                   REINTERPRET_CAST(CUPnPPluginInterface*,interface);
+    return retval;
+    }
+
+// ----------------------------------------------------------------------------
+// CUPnPPluginInterface::~CUPnPPluginInterface
+// Destructor
+// ----------------------------------------------------------------------------
+inline CUPnPPluginInterface::~CUPnPPluginInterface()
+    {
+    REComSession::DestroyedImplementation( iDtor_ID_Key );
+    }
+
+// ----------------------------------------------------------------------------
+// CUPnPPluginInterface::CUPnPPluginInterface
+// Constructor
+// ----------------------------------------------------------------------------
+inline CUPnPPluginInterface::CUPnPPluginInterface(TAny* aEcomArguments)
+    : iPluginObserver(*(reinterpret_cast<MUPnPPluginObserver*>
+                                        (aEcomArguments)))
+    {
+    }
+
+
+#endif // C_UPNPPLUGININTERFACE_H
+
+// end of file