photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowmap.cpp
branchRCL_3
changeset 26 5b3385a43d68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandleraiwshowmap.cpp	Wed Sep 01 12:33:26 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* 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:    Show on map command handler
+*
+*/
+
+
+
+
+#include "glxcommandhandleraiwshowmap.h"
+
+#include <e32math.h>
+#include <glxattributecontext.h>
+#include <glxcommandhandlers.hrh>
+#include <glxmedia.h>
+#include <glxuiutilities.rsg>
+#include <glxmediageneraldefs.h>
+#include <glxtracer.h>
+#include <mglxmedialist.h>
+#include <glxnavigationalstate.h>
+#include <mpxcollectionpath.h>
+#include <glxcollectionpluginimageviewer.hrh>
+
+
+// For LocationFW
+#include <EPos_CPosLandmark.h>
+#include <epos_poslandmarkserialization.h>
+#include <lbsposition.h>
+
+#include "glxaiwservicehandler.h"
+
+const TInt KGlxAiwShowMapCommandSpace = 0x00000400;
+
+// -----------------------------------------------------------------------------
+// NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CGlxCommandHandlerAiwShowMap* CGlxCommandHandlerAiwShowMap::NewL(
+		MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource,
+		const TDesC& aFileName)
+	{
+	TRACER("CGlxCommandHandlerAiwShowMap::NewL");
+	CGlxCommandHandlerAiwShowMap* self =
+			new (ELeave) CGlxCommandHandlerAiwShowMap(aMediaListProvider,
+					aMenuResource);
+	CleanupStack::PushL(self);
+	self->ConstructL(aFileName);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CGlxCommandHandlerAiwShowMap::~CGlxCommandHandlerAiwShowMap()
+    {
+    iBufferArray.ResetAndDestroy();
+    }
+
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CGlxCommandHandlerAiwShowMap::CGlxCommandHandlerAiwShowMap(
+    MGlxMediaListProvider* aMediaListProvider, TInt aMenuResource )
+        : CGlxCommandHandlerAiwBase( aMediaListProvider, aMenuResource )
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CGlxCommandHandlerAiwShowMap::DoGetRequiredAttributesL
+// -----------------------------------------------------------------------------
+//
+void CGlxCommandHandlerAiwShowMap::DoGetRequiredAttributesL
+                    (RArray<TMPXAttribute>& aAttributes, TBool aFilterUsingSelection) const
+    {
+	if (!aFilterUsingSelection || SelectionLength() <= MaxSelectedItems())
+		{
+		aAttributes.AppendL(KGlxMediaGeneralLocation);
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// AiwDoDynInitMenuPaneL
+// -----------------------------------------------------------------------------
+//
+void CGlxCommandHandlerAiwShowMap::AiwDoDynInitMenuPaneL(TInt /*aResourceId*/,
+        CEikMenuPane* aMenuPane)
+    {
+	TInt num_items = aMenuPane->NumberOfItemsInPane();
+
+	// Iterate through menu pane
+	TInt i = 0;
+	while (i < num_items)
+		{
+		CEikMenuPaneItem::SData& item = aMenuPane->ItemDataByIndexL(i);
+
+        // "Show on map" cannot be dimmed as AIW resets the flags to not dimmed
+        // Have to delete the menu item in this case.
+        if (EGlxCmdAiwShowMap == item.iCommandId)
+            {
+            //Check visibility of the menu item
+            //Fix for  ESLM-7XFF9L:Must always be disabled in all cases.
+            TBool isDisabled = ETrue;
+
+            // Should it be disabled
+            if ( (isDisabled) ||
+                 (MediaList().SelectionCount() != 1 &&
+                 !IsInFullScreenViewingModeL()) )
+                {
+                // if so delete it.
+                aMenuPane->DeleteMenuItem(EGlxCmdAiwShowMap);
+                }
+            break;
+            }
+        ++i;
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CommandId
+// -----------------------------------------------------------------------------
+//
+TInt CGlxCommandHandlerAiwShowMap::CommandId() const
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::CommandId");
+    return EGlxCmdAiwShowMap;
+    }
+
+// -----------------------------------------------------------------------------
+// AiwCommandId
+// -----------------------------------------------------------------------------
+//
+TInt CGlxCommandHandlerAiwShowMap::AiwCommandId() const
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::AiwCommandId");
+    return KAiwCmdMnShowMap;
+    }
+
+// -----------------------------------------------------------------------------
+// AiwInterestResource
+// -----------------------------------------------------------------------------
+//
+TInt CGlxCommandHandlerAiwShowMap::AiwInterestResource() const
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::AiwInterestResource");
+    return R_GLX_AIW_SHOWMAP_INTEREST;
+    }
+
+// -----------------------------------------------------------------------------
+// AppendAiwParameterL
+// -----------------------------------------------------------------------------
+//
+TBool CGlxCommandHandlerAiwShowMap::AppendAiwParameterL(const TGlxMedia& aItem,
+                                     CGlxAiwServiceHandler& aAiwServiceHandler)
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::AppendAiwParameterL");
+    TBool success = EFalse;
+
+    // Cleanup before execution
+    iBufferArray.ResetAndDestroy();
+
+    TCoordinate coordinate;
+    if (aItem.GetCoordinate(coordinate))
+        {
+        // Create a landmark from the coordinate
+        CPosLandmark* landmark = CPosLandmark::NewLC();
+        TRealX noNumber;
+        noNumber.SetNaN();   // Not a Number
+
+        TLocality locality( coordinate, noNumber );
+
+        // locality must have valid (ie not NaN) values
+        landmark->SetPositionL( locality );
+
+        // Serialize buffer to landmark and append it to AIW parameter
+        const HBufC8* landmarkBuf =
+            PosLandmarkSerialization::PackL( *landmark );
+        // we have ownership of landmarkBuf so add to array
+        // for cleanup on our destruction
+        iBufferArray.AppendL( landmarkBuf );
+
+         // Append location parameter to the AIW param list
+        TAiwVariant landmarkVariant( *landmarkBuf );
+        TAiwGenericParam landmarkParam( EGenericParamLandmark, landmarkVariant );
+        aAiwServiceHandler.AddParamL(aItem.Id(), landmarkParam );
+
+        success = ETrue;
+        CleanupStack::PopAndDestroy( landmark );
+        }
+
+    return success;
+    }
+
+// -----------------------------------------------------------------------------
+// CommandSpace
+// -----------------------------------------------------------------------------
+//
+TInt CGlxCommandHandlerAiwShowMap::CommandSpace() const
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::CommandSpace");
+    return KGlxAiwShowMapCommandSpace;
+    }
+
+// -----------------------------------------------------------------------------
+// DoIsDisabled
+// -----------------------------------------------------------------------------
+//
+//
+TBool CGlxCommandHandlerAiwShowMap::IsItemWithLocationInfoSelected(MGlxMediaList& aList )
+    {
+    TRACER("CGlxCommandHandlerAiwShowMap::DoIsDisabled");
+    // Disable the "Show on map" menu item if the selection (marked list,
+    // or focused item if none marked) does not contain any items
+    // that have location data
+    TBool isSupported = EFalse;
+
+    // Check through all, if any, selected items, otherwise the focused item
+    TGlxSelectionIterator iterator;
+    iterator.SetToFirst( &aList );
+
+    // Loop until a supported item is found or until there are no
+    // more indexes to process
+    TInt index = KErrNotFound;
+    while ( KErrNotFound != (index = iterator++ ) && !isSupported )
+        {
+        // get the media item
+        const TGlxMedia& media = aList.Item( index );
+
+        // Test to see if the coordinate is present
+        TCoordinate coordinate;
+        isSupported = media.GetCoordinate(coordinate);
+        }
+
+    // Don't disable the menu item if the property's supported
+    return !isSupported;
+    }
+
+// -----------------------------------------------------------------------------
+// PreDynInitMenuPaneL
+// -----------------------------------------------------------------------------
+//
+void CGlxCommandHandlerAiwShowMap::PreDynInitMenuPaneL(TInt aResourceId)
+	{
+	CGlxCommandHandlerAiwBase::PreDynInitMenuPaneL(aResourceId);
+	}
+
+// -----------------------------------------------------------------------------
+// IsInFullScreenViewingModeL
+// -----------------------------------------------------------------------------
+//
+TBool CGlxCommandHandlerAiwShowMap::IsInFullScreenViewingModeL()
+    {
+    TBool fullscreenViewingMode = EFalse;
+    CGlxNavigationalState* aNavigationalState = CGlxNavigationalState::InstanceL();
+    CMPXCollectionPath* naviState = aNavigationalState->StateLC();
+
+    if ( naviState->Levels() >= 1)
+        {
+        if (aNavigationalState->ViewingMode() == NGlxNavigationalState::EBrowse)
+            {
+            // For image viewer collection, goto view mode
+            if (naviState->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid))
+                {
+                //it means we are in img viewer
+                fullscreenViewingMode = ETrue;
+                }
+            }
+        else
+            {
+            //it means we are in Fullscreen
+            fullscreenViewingMode = ETrue;
+            }
+        }
+    CleanupStack::PopAndDestroy( naviState );
+    aNavigationalState->Close();
+    return fullscreenViewingMode;
+    }