photosgallery/viewframework/commandhandlers/commandhandlerupnp/src/glxcommandhandlershowviaupnp.cpp
changeset 0 4e91876724a2
child 20 d1bdfdf534bd
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/commandhandlers/commandhandlerupnp/src/glxcommandhandlershowviaupnp.cpp	Thu Dec 17 08:45:44 2009 +0200
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2008-2009 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:    Upnp Command Handlers.
+*
+*/
+
+
+
+
+#include "glxcommandhandlershowviaupnp.h"
+
+//Includes
+#include <eikmenup.h>
+#include <glxcommandhandlers.hrh>
+#include <glxtracer.h>
+#include <glxlog.h>
+
+#include "glxupnprenderer.h"     
+#include "glxupnprendererdefs.h"
+
+//-----------------------------------------------------------------------------------------
+// Two phased Constructor
+//-----------------------------------------------------------------------------------------
+EXPORT_C CGlxCommandHandlerShowViaUpnp* CGlxCommandHandlerShowViaUpnp::
+    NewL(MGlxMediaListProvider* aMediaListProvider, TBool aUseHomeNetworkCascadeMenu)
+    {  
+    TRACER( "CGlxCommandHandlerShowViaUpnp::NewL");
+    CGlxCommandHandlerShowViaUpnp* self =new(ELeave) 
+              CGlxCommandHandlerShowViaUpnp(aMediaListProvider, aUseHomeNetworkCascadeMenu);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+  
+//-----------------------------------------------------------------------------------------
+//  First Phase Constructor
+//-----------------------------------------------------------------------------------------  
+CGlxCommandHandlerShowViaUpnp::CGlxCommandHandlerShowViaUpnp
+    (MGlxMediaListProvider* aMediaListProvider, TBool aUseHomeNetworkCascadeMenu)
+: CGlxMediaListCommandHandler(aMediaListProvider), iUseHomeNetworkCascadeMenu(aUseHomeNetworkCascadeMenu)
+    {
+    TRACER(" CGlxCommandHandlerShowViaUpnp::CGlxCommandHandlerShowViaUpnp");
+    }
+  
+//-----------------------------------------------------------------------------------------
+// Destructor
+//-----------------------------------------------------------------------------------------
+CGlxCommandHandlerShowViaUpnp::~CGlxCommandHandlerShowViaUpnp()
+    {
+    //Do Nothing  
+    }  
+  
+//-----------------------------------------------------------------------------------------
+// ConstructL
+//-----------------------------------------------------------------------------------------  
+  
+void CGlxCommandHandlerShowViaUpnp::ConstructL()  
+    {
+    TRACER(" CGlxCommandHandlerShowViaUpnp::ConstructL");
+    AddUpnpCommandL();   
+    }
+
+//-----------------------------------------------------------------------------------------
+// Add the UPnP commands to the CommandInfo
+//-----------------------------------------------------------------------------------------  
+void CGlxCommandHandlerShowViaUpnp::AddUpnpCommandL()
+    {
+    // Add the Show on Home Network Command        
+    TCommandInfo infoStartShowing(EGlxShowViaUpnp);                          
+    infoStartShowing.iMinSelectionLength = 1;    
+    infoStartShowing.iMaxSelectionLength = 1;
+    // Fix for ABAI-7C3J5K, the menu item should be enabled for DRM items
+    infoStartShowing.iDisallowDRM = EFalse;    
+    AddCommandL(infoStartShowing) ;
+
+    // We need two versions of the start and stop showing command if iUseHomeNetworkCascadeMenu is true
+    if (iUseHomeNetworkCascadeMenu)
+        {
+        //Add the home network cascaded menu (sub-menu)
+        TCommandInfo infoHomeNetworkSubmenu(EGlxHomeNetworkSubmenu);
+        infoHomeNetworkSubmenu.iMinSelectionLength = 1;
+        infoHomeNetworkSubmenu.iMaxSelectionLength = KMaxTInt;
+        // Show in Grid View
+        infoHomeNetworkSubmenu.iViewingState = TCommandInfo::EViewingStateBrowse;
+        AddCommandL(infoHomeNetworkSubmenu);
+       
+        // Add the Show on Home Network Command (submenu version)
+        TCommandInfo infoStartShowingSubmenuVersion(EGlxShowViaUpnpSubmenuVersion);                          
+        infoStartShowingSubmenuVersion.iMinSelectionLength = 1;    
+        infoStartShowingSubmenuVersion.iMaxSelectionLength = 1;
+        infoStartShowingSubmenuVersion.iDisallowDRM = ETrue;
+        AddCommandL(infoStartShowingSubmenuVersion);
+           
+        //Add the Stop Showing Command (submenu version)
+        TCommandInfo infoStopShowingSubmenuVersion(EGlxStopShowingSubmenuVersion); 
+        AddCommandL(infoStopShowingSubmenuVersion);   
+        }
+    
+    //Add the Stop Showing Command
+    TCommandInfo infoStopShowing(EGlxStopShowing);
+    //By default the MinSelectionLength and MaxSelectionLength will be
+    //set to zero and KMaxTInt respectively    
+    AddCommandL(infoStopShowing);
+ 
+    // Get notified when we switch to 'browsing'
+    TCommandInfo browseInfo(EGlxCmdStateBrowse);
+    browseInfo.iMinSelectionLength = 0;
+    browseInfo.iMaxSelectionLength = KMaxTInt;
+    // Filter out static items
+    AddCommandL(browseInfo);
+    
+    // Get notified when we switch to 'viewing' (fullscreen)
+    TCommandInfo viewInfo(EGlxCmdStateView);
+    viewInfo.iMinSelectionLength = 0;
+    viewInfo.iMaxSelectionLength = KMaxTInt;
+    // Filter out static items
+    AddCommandL(viewInfo);
+    
+    //Add the Play command here as we need to add some filters    
+    TCommandInfo infoplay(EGlxCmdPlay);              
+    // filter out everything except videos
+    infoplay.iCategoryFilter = EMPXVideo;
+    infoplay.iCategoryRule = TCommandInfo::ERequireAll;                    
+    infoplay.iMinSelectionLength = 1;
+    infoplay.iMaxSelectionLength = 1;    
+    AddCommandL(infoplay);       
+    }
+
+//-----------------------------------------------------------------------------------------
+// Executing the command handler
+//-----------------------------------------------------------------------------------------
+  
+TBool CGlxCommandHandlerShowViaUpnp::DoExecuteL(TInt aCommandId, MGlxMediaList& /*aList*/)
+    {
+    TRACER( "CGlxCommandHandlerShowViaUpnp::DoExecuteL");
+
+    TBool consumed = ETrue;    
+      
+    switch(aCommandId)
+        {
+        case EGlxShowViaUpnpSubmenuVersion: // fallthrough
+        case EGlxShowViaUpnp:
+            {    
+            GLX_LOG_INFO("DoExecuteL -ShowViaUPNP");  
+            
+            GlxUpnpRenderer:: StartShowingL();              
+            } 
+            break;
+        case EGlxStopShowingSubmenuVersion: // fallthrough
+        case EGlxStopShowing:
+            {
+            GLX_LOG_INFO("DoExecuteL -StopShowing");                      
+            GlxUpnpRenderer::ShowStopL();
+            GlxUpnpRenderer::StopShowingL();                  
+            }
+            break;
+            
+        case EGlxCmdPlay:
+            {            
+            GLX_LOG_INFO("DoExecuteL -UPnpPlay");  
+			//@ Fix for EVTY-7M87LF
+            if ( NGlxUpnpRenderer::EActive == GlxUpnpRenderer::Status() )
+	            {
+                GlxUpnpRenderer::ShowVideoL();
+	            }
+            else
+	            {
+        		consumed = EFalse;
+	            }
+            }
+            break;           
+        case EGlxCmdStateBrowse:
+        case EGlxCmdStateView:
+            {
+            GLX_LOG_INFO("DoExecuteL -CmdStateBrowse / CmdStateView");  
+            iFullScreen = (aCommandId == EGlxCmdStateView);
+            consumed = EFalse;
+            }
+            break;
+        default:
+            {
+            consumed = EFalse;  //Command is not Executed                        
+            }
+            break;
+         }
+     return consumed;     
+     }
+
+//-----------------------------------------------------------------------------------------
+// Disable the command handler
+//-----------------------------------------------------------------------------------------
+TBool CGlxCommandHandlerShowViaUpnp::DoIsDisabled(TInt aCommandId, MGlxMediaList& /*aList*/) const
+    {
+    TRACER("CGlxCommandHandlerShowViaUpnp::DoIsDisabled");    
+
+    TBool disabled = ETrue;
+    NGlxUpnpRenderer::TStatus rendererStatus = GlxUpnpRenderer::Status();
+    
+    switch(aCommandId)
+        {
+        case EGlxShowViaUpnpSubmenuVersion:
+            {
+            GLX_LOG_INFO("DoIsDisabled -ShowViaUpnpSubmenuVersion");
+          
+            disabled = !(rendererStatus == NGlxUpnpRenderer::EAvailableNotActive && iUseHomeNetworkCascadeMenu);
+            }
+        break;
+        case EGlxShowViaUpnp:
+            {    
+            GLX_LOG_INFO("DoIsDisabled -ShowViaUpnp");
+                                       
+            //If the access point is set and renderer is not active and we are in full screen or we are not using the cascaded menu
+            disabled = !(rendererStatus == NGlxUpnpRenderer::EAvailableNotActive && (iFullScreen || !iUseHomeNetworkCascadeMenu));                             
+            }                     
+        break;
+        case EGlxStopShowingSubmenuVersion:
+            {
+            GLX_LOG_INFO("DoIsDisabled - StopShowingSubmenuVersion");
+            //If the renderer device is showing the image/video 
+            disabled = !(rendererStatus == NGlxUpnpRenderer::EActive);   
+            }
+        break;
+        case EGlxStopShowing:
+            {
+            GLX_LOG_INFO("DoIsDisabled -StopShowing");
+            
+            disabled = !(rendererStatus == NGlxUpnpRenderer::EActive && 
+                    (!iUseHomeNetworkCascadeMenu || iFullScreen || (!iFullScreen && SelectionLength() == 0)));
+            }
+        break;  
+        case EGlxCmdPlay:
+            {
+            GLX_LOG_INFO("DoIsDisabled -UPNPPlay");
+			//@ Fix for EVTY-7M87LF
+            // If the focussed item is video file,
+			// Play command should be visible to play either in device or renderer if active.
+            disabled = EFalse;
+            }
+        break;
+        case EGlxHomeNetworkSubmenu:
+            {
+            GLX_LOG_INFO("DoIsDisabled - HomeNetworkSubmenu");
+            
+            disabled = (rendererStatus == NGlxUpnpRenderer::ENotAvailable && !iFullScreen);
+            }
+        break;
+        case EGlxCmdStateBrowse:
+        case EGlxCmdStateView:
+            {
+            GLX_LOG_INFO("DoIsDisabled - CmdStateBrowse / CmdStateView");
+            disabled = EFalse;
+            }
+        default: 
+            {            
+            GLX_LOG_WARNING("DoIsDisabled -UnknownCommandHandler");
+            }
+        break;
+        }
+    return disabled;
+    }