photosgallery/viewframework/dataprovider/src/glxdetailsboundcommand.cpp
branchRCL_3
changeset 60 5b3385a43d68
child 75 01504893d9cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/photosgallery/viewframework/dataprovider/src/glxdetailsboundcommand.cpp	Wed Sep 01 12:33:26 2010 +0100
@@ -0,0 +1,1387 @@
+/*
+* 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:    Implementation of Command Binding Class's
+*
+*/
+
+
+
+#include    "glxdetailsboundcommand.hrh"
+#include    "glxdetailsboundcommand.h"                  // Handles user commands
+#include    "glxuiutility.h"
+/** Error Id EMPY-7MKDHP **/ 
+#include    "mglxmetadatadialogobserver.h"              //for call back to dailog
+
+#include    <e32base.h>                                 // Base class for all classes to be instantiated on the heap
+#include    <ExifModify.h>                              //For CExifModify
+#include    <glxmetadatadialog.rsg>
+#include    <glxuiutilities.rsg>
+#include    <glxuiutilities.rsg>
+#include    <glxcommandhandleraddtocontainer.h>	        // For CGlxCommandHandlerAddToContainer
+#include    <glxcommandhandlers.hrh> 			        // for command handler id
+#include    <glxdrmutility.h>	                        //For launching DRM details pane
+#include    <glxmedialist.h>                            // Interface for reading lists of media items
+#include    <glxcommandfactory.h>			            //for command factory
+#include    <mpxcommandgeneraldefs.h>                   // Content ID identifying general category of content provided
+#include    <glxtextentrypopup.h>                       //for testing
+#include    <glxgeneraluiutilities.h>                   // General utilties class definition
+#include    <StringLoader.h>                            // Class provides methods to load and format resource strings
+#include    <glxlog.h>                                  // Logging
+#include    <glxtracer.h>
+#include    <glxviewbase.rsg>
+#include    <glxscreenfurniture.h>
+#include    <glxresourceutilities.h>                    // for CGlxResourceUtilities
+#include    <glxmediageneraldefs.h>                     // for KMaxMediaPopupTextLength
+
+
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxTitleBoundCommand* CGlxTitleBoundCommand::NewL()
+	{
+	TRACER("CGlxTitleBoundCommand::NewL");
+	CGlxTitleBoundCommand* self = CGlxTitleBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxTitleBoundCommand* CGlxTitleBoundCommand::NewLC()
+	{
+	TRACER("CGlxTitleBoundCommand::NewLC");
+	CGlxTitleBoundCommand* self = new ( ELeave ) CGlxTitleBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxTitleBoundCommand::~CGlxTitleBoundCommand()
+    {
+    
+    }
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxTitleBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist )
+	{
+	TRACER("CGlxTitleBoundCommand::OfferCommandL");
+	TBool consumed = EFalse;
+	iMedialist = &aMedialist;
+	const CGlxMedia* media = iMedialist->Item(0).Properties();
+	if( media )
+	    {
+	    if ( aCommandId == KGlxEditBoundMenuCommandId  && media->IsSupported( KMPXMediaGeneralTitle))
+	        {
+	        ///@todo - remove popup when editable template is avaliable
+	        //Popup for testing
+	        HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTextLength );
+	        (textBuf->Des()).Copy((media->ValueText(KMPXMediaGeneralTitle)));
+	        TPtr textPtr = textBuf->Des();
+	        /// bug fix - EMPY-7MCKD6 
+	        TBuf<KMaxMediaPopupTextLength> titleText(*textBuf);
+	        /// bug fix - EMPY-7MCKD6
+	        ///@todo - remove literal for popup title when resource string is avaliable
+			HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_TITLE_NSERIES);
+	        CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL( *buf, textPtr );
+			CleanupStack::PopAndDestroy(buf);
+            if ( popup->ExecuteLD() == EEikBidOk )
+                {
+                // Text entry was successful
+                /// bug fix - EMPY-7MCKD6
+                //Compare if there is any change in the entry
+                if(0 != (titleText.Compare(*textBuf)))
+                /// bug fix - EMPY-7MCKD6
+                 ModifyTitleL( *textBuf );
+                }
+	        CleanupStack::PopAndDestroy( textBuf ); 
+	        consumed = ETrue;
+	        }
+	    }
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxTitleBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxTitleBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( KGlxEditBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_EDIT );
+	aMenu.SetItemDimmed( KGlxEditBoundMenuCommandId, EFalse );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxTitleBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxTitleBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+
+// -----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::ModifyTitleL
+// -----------------------------------------------------------------------------
+//  
+void CGlxTitleBoundCommand::ModifyTitleL(const TDesC& aData )
+    {    
+    TRACER("CGlxTitleBoundCommand::ModifyTitleL");
+    
+    if( iMedialist->Count() > 0 )
+        {
+        iMedialist->SetFocusL(NGlxListDefs::EAbsolute,0);//set focus to first item
+        CMPXCollectionPath* path = iMedialist->PathLC();
+        CMPXCommand* command = TGlxCommandFactory::RenameCommandLC(aData,*path);
+        
+        command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId, static_cast<TAny*>(this));
+        
+        iMedialist->CommandL(*command);
+         
+        CleanupStack::PopAndDestroy(command);
+        CleanupStack::PopAndDestroy(path);
+        }
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxTitleBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxTitleBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxTitleBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeySelect,R_GLX_METADATA_MSK_EDIT);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxTitleBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxTitleBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxTagsBoundCommand* CGlxTagsBoundCommand::NewL()
+	{
+	TRACER("CGlxTagsBoundCommand::NewL");
+	CGlxTagsBoundCommand* self = CGlxTagsBoundCommand::NewLC();
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxTagsBoundCommand* CGlxTagsBoundCommand::NewLC()
+	{
+	TRACER("CGlxTagsBoundCommand::NewLC");
+	CGlxTagsBoundCommand* self = new ( ELeave ) CGlxTagsBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+	
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::ConstructL()
+	{
+	TRACER("CGlxTagsBoundCommand::ConstructL");
+	TFileName uiutilitiesrscfile;
+	uiutilitiesrscfile.Append(
+			CGlxResourceUtilities::GetUiUtilitiesResourceFilenameL());
+	//create command handler
+	iAddToTag = CGlxCommandHandlerAddToContainer::NewL(this, EGlxCmdAddTag,
+			EFalse, uiutilitiesrscfile);
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::~CGlxTagsBoundCommand
+// ----------------------------------------------------------------------------
+//
+CGlxTagsBoundCommand::~CGlxTagsBoundCommand()
+    {
+    if(iAddToTag)
+        {
+        delete iAddToTag;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxTagsBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist)
+	{
+	TRACER("CGlxTagsBoundCommand::OfferCommandL");
+	SetMediaList(&aMedialist);
+	TBool consumed = EFalse;
+	if ( aCommandId == KGlxEditBoundMenuCommandId )
+		{
+		iAddToTag->ExecuteL(EGlxCmdAddTag);
+		consumed = ETrue;
+		}
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxTagsBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( KGlxEditBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_EDIT ); 
+	aMenu.SetItemDimmed( KGlxEditBoundMenuCommandId, EFalse );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxTagsBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxTagsBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+                EAknSoftkeySelect,R_GLX_METADATA_MSK_ADD);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::SetMediaList
+// ----------------------------------------------------------------------------
+//
+void CGlxTagsBoundCommand::SetMediaList(MGlxMediaList* aMedialist)
+	{
+	TRACER("CGlxTagsBoundCommand::SetMediaList");
+	iMedialist = aMedialist;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxTagsBoundCommand::MediaList
+// ----------------------------------------------------------------------------
+//
+ MGlxMediaList& CGlxTagsBoundCommand::MediaList()
+	 {
+	 TRACER("CGlxTagsBoundCommand::MediaList");
+	 return *iMedialist;
+	 }
+
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxDescriptionBoundCommand* CGlxDescriptionBoundCommand::NewL()
+	{
+	TRACER("CGlxDescriptionBoundCommand::NewL");
+	CGlxDescriptionBoundCommand* self = CGlxDescriptionBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxDescriptionBoundCommand* CGlxDescriptionBoundCommand::NewLC()
+	{
+	TRACER("CGlxDescriptionBoundCommand::NewLC");
+	CGlxDescriptionBoundCommand* self = new ( ELeave ) CGlxDescriptionBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxDescriptionBoundCommand::~CGlxDescriptionBoundCommand()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxDescriptionBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist )
+	{
+	TRACER("CGlxDescriptionBoundCommand::OfferCommandL");
+	TBool consumed = EFalse;
+	iMedialist = &aMedialist;
+	const CGlxMedia* media = iMedialist->Item(0).Properties();
+	if ( aCommandId == KGlxEditBoundMenuCommandId )
+		{
+		///@todo - remove popup when editable template is avaliable
+		//Popup for testing
+		HBufC* textBuf = HBufC::NewLC( KMaxMediaPopupTextLength );
+		(textBuf->Des()).Copy((media->ValueText(KMPXMediaGeneralComment)));
+		TPtr textPtr = textBuf->Des();
+		/// bug fix - EMPY-7MCKD6
+		TBuf<KMaxMediaPopupTextLength> descText(*textBuf);
+		/// bug fix - EMPY-7MCKD6
+		///@todo - remove literal for popup title when resource string is avaliable
+		
+		HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_VIEW_DESCRIPTION_NSERIES);
+	    CGlxTextEntryPopup* popup = CGlxTextEntryPopup::NewL( *buf, textPtr );
+		CleanupStack::PopAndDestroy(buf);
+		
+		
+	    if ( popup->ExecuteLD() == EEikBidOk )
+    		{
+    		// Text entry was successful
+    		/// bug fix - EMPY-7MCKD6
+    		//Compare if there is any change in the entry
+    		if(0 != (descText.Compare(*textBuf)))
+    		/// bug fix - EMPY-7MCKD6
+    		ModifyDescriptionL( *textBuf );
+    	    }
+		CleanupStack::PopAndDestroy( textBuf );
+		consumed = ETrue;
+		}
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxDescriptionBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxDescriptionBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( KGlxEditBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_EDIT ); 
+	aMenu.SetItemDimmed( KGlxEditBoundMenuCommandId, EFalse );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxDescriptionBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxDescriptionBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxDescriptionBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxDescriptionBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxDescriptionBoundCommand::ChangeMskL");
+    
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeySelect,R_GLX_METADATA_MSK_EDIT);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxDescriptionBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+
+// -----------------------------------------------------------------------------
+// CGlxDescriptionBoundCommand::ModifyDescriptionL
+// -----------------------------------------------------------------------------
+//	
+void CGlxDescriptionBoundCommand::ModifyDescriptionL(const TDesC& aData )
+	{	 
+	TRACER("CGlxDescriptionBoundCommand::ModifyDescriptionL");
+	if( iMedialist->Count() > 0 )
+        { 
+        iMedialist->SetFocusL(NGlxListDefs::EAbsolute,0);//set focus to first item
+    	CMPXCollectionPath* path =  iMedialist->PathLC();
+    	CMPXCommand* command = TGlxCommandFactory::SetDescriptionCommandLC(aData,*path);
+    	command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId, static_cast<TAny*>(this));
+    	
+    	iMedialist->CommandL(*command);
+     	CleanupStack::PopAndDestroy(command);
+        CleanupStack::PopAndDestroy(path);
+        }
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxLocationBoundCommand* CGlxLocationBoundCommand::NewL()
+	{
+	TRACER("CGlxLocationBoundCommand::NewL");
+	CGlxLocationBoundCommand* self = CGlxLocationBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxLocationBoundCommand* CGlxLocationBoundCommand::NewLC()
+	{
+	TRACER("CGlxLocationBoundCommand::NewLC");
+	CGlxLocationBoundCommand* self = new ( ELeave ) CGlxLocationBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxLocationBoundCommand::~CGlxLocationBoundCommand()
+    {
+    iDialogObserver = NULL ;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxLocationBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist )
+	{
+	TRACER("CGlxLocationBoundCommand::OfferCommandL");
+	iMedialist = &aMedialist;
+	TBool consumed = EFalse;
+	if ( aCommandId == KGlxEditBoundMenuCommandId )
+		{
+		iOnNaviKeySelect = ETrue;
+		//get the media item
+		const TGlxMedia& media = iMedialist->Item( 0 );
+		// Test to see if the coordinate is present
+		TCoordinate coordinate;
+		TBool isSupported = media.GetCoordinate(coordinate);
+		if(!isSupported)
+			{
+			HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
+	        GlxGeneralUiUtilities::ShowInfoNoteL(*buf,ETrue);
+	        CleanupStack::PopAndDestroy(buf);
+	        consumed = ETrue;
+			}
+		else
+			{
+			/** Show menu pane options **/
+			if(iDialogObserver)
+				{
+				TRAP_IGNORE(iDialogObserver->OnLocationEditL());
+				}
+			}
+		}
+	else
+	    {
+        iOnNaviKeySelect = EFalse;	    
+	    }
+	if ( aCommandId == KGlxDeleteBoundMenuCommandId )
+		{
+		RemoveLocationL();
+		consumed = ETrue;
+		}
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxLocationBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxLocationBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( EGlxCmdAiwShowMap, R_GLX_METADATA_SHOW_ON_MAP_OPTIONS_VIEW ); 
+	aMenu.SetItemDimmed( EGlxCmdAiwShowMap, EFalse );
+	aMenu.SetItemTextL( KGlxDeleteBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_DELETE ); 
+	aMenu.SetItemDimmed( KGlxDeleteBoundMenuCommandId, EFalse );
+	if( iOnNaviKeySelect )
+	    {
+	    aMenu.SetItemDimmed( EAknCmdHelp, ETrue );
+	    }
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxLocationBoundCommand::HideLocationMenuItem(CEikMenuPane& /*aMenu*/) const
+    {
+    TRACER("CGlxLocationBoundCommand::HideLocationMenuItem");
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxLocationBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxLocationBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxLocationBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeySelect,R_GLX_METADATA_MSK_BLANK);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::RemoveLocationL
+// -----------------------------------------------------------------------------
+//	
+void CGlxLocationBoundCommand::RemoveLocationL()	
+	{
+	TRACER("CGlxLocationBoundCommand::RemoveLocationL");
+	
+       // get the media item
+    const TGlxMedia& media = iMedialist->Item( 0 );
+    
+    // Test to see if the coordinate is present
+    TCoordinate coordinate;
+    TBool isSupported = media.GetCoordinate(coordinate);
+    
+    if( !isSupported )
+        {
+        HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_INFO_NO_LOCATION);
+        GlxGeneralUiUtilities::ShowInfoNoteL(*buf,ETrue);
+        CleanupStack::PopAndDestroy(buf);
+        }
+    else
+        {
+        HBufC *buf = StringLoader::LoadLC(R_GLX_METADATA_NOTE_DELETE_LOCATION);
+        TBool response = GlxGeneralUiUtilities::ConfirmQueryL(R_GLX_QUERY_YES_NO,*buf);
+        CleanupStack::PopAndDestroy(buf);
+   
+        if( response )
+            {
+            //user selected yes, so delete location     
+            //send command for delete location after successfull removal of command remove this pane
+            if( iMedialist->Count() > 0 )
+                {       
+                iMedialist->SetFocusL(NGlxListDefs::EAbsolute,0);//set focus to first item
+                
+                // Deleting location information from image file
+
+                RFs rFs;
+                User::LeaveIfError( rFs.Connect() );
+                CleanupClosePushL( rFs );
+                RFile rFile;
+                
+                User::LeaveIfError( rFile.Open(rFs,iMedialist->Item(0).Uri(),EFileWrite ));
+                CleanupClosePushL( rFile );
+                
+                TInt imageFileSize = 0; // Image File Size
+                User::LeaveIfError( rFile.Size( imageFileSize ) );
+                HBufC8* imageData = HBufC8::NewL( imageFileSize );  //Actual Image Data
+                CleanupStack::PushL( imageData );
+                
+                TPtr8 myImagePtr = imageData->Des();
+                TInt readError = rFile.Read( myImagePtr );
+                if ( readError != KErrNone )
+                    {
+                    User::Leave( KErrGeneral );
+                    }
+                    
+                //CExifModify Interface class for modifying existing Exif v2.2 (or prior) 
+                //file format or creating Exif v2.2 file format using valid Jpeg image     
+                CExifModify* exifWriter = CExifModify::NewL( imageData->Des(), CExifModify::EModify, CExifModify::ENoJpegParsing );
+                CleanupStack::PushL( exifWriter );
+                //Removes the specified IFD structure and all its tags from the Exif data
+                exifWriter->DeleteIfd  ( EIfdGps  );
+                
+                HBufC8* modifiedExif = exifWriter->WriteDataL( imageData->Des() );  //Modified Image Data
+                CleanupStack::PushL( modifiedExif );
+                
+                const TUint32 fileSize = modifiedExif->Des().Length();  //Size of Modified File
+                TInt oldSize;
+                rFile.Size( oldSize );
+                // set position to begin of file & write the Modified data (Without Location Information)
+                TInt pos = 0;
+                User::LeaveIfError( rFile.Seek( ESeekStart, pos ) );
+                User::LeaveIfError( rFile.Write( modifiedExif->Des(), fileSize ) );
+
+                TTime lastModified;
+                lastModified.UniversalTime();   
+
+                User::LeaveIfError( rFile.SetModified( lastModified ) );    //Change the Modified Time
+
+                CleanupStack::PopAndDestroy( modifiedExif);
+                CleanupStack::PopAndDestroy( exifWriter);
+                CleanupStack::PopAndDestroy( imageData );
+                CleanupStack::PopAndDestroy( &rFile );
+                CleanupStack::PopAndDestroy( &rFs );
+
+                // Deleting location information from MDS database
+
+                CMPXCollectionPath* path =  iMedialist->PathLC();
+                CMPXCommand* command = TGlxCommandFactory::DeleteLocationCommandLC(*path);
+            
+                command->SetTObjectValueL<TAny*>(KMPXCommandGeneralSessionId, static_cast<TAny*>(this));
+            
+                iMedialist->CommandL(*command);
+            
+                CleanupStack::PopAndDestroy(command);
+                CleanupStack::PopAndDestroy(path);
+                }
+            }       
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CGlxLocationBoundCommand::SetDetailsDailogObserver
+// -----------------------------------------------------------------------------
+//
+void CGlxLocationBoundCommand::SetDetailsDailogObserver(MGlxMetadataDialogObserver& aObserver)
+	{
+	/** Error Id EMPY-7MKDHP **/
+	iDialogObserver = &aObserver ;
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxAlbumsBoundCommand* CGlxAlbumsBoundCommand::NewL()
+	{
+	TRACER("CGlxAlbumsBoundCommand::NewL");
+	CGlxAlbumsBoundCommand* self = CGlxAlbumsBoundCommand::NewLC();
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxAlbumsBoundCommand* CGlxAlbumsBoundCommand::NewLC()
+	{
+	TRACER("CGlxAlbumsBoundCommand::NewLC");
+	CGlxAlbumsBoundCommand* self = new ( ELeave ) CGlxAlbumsBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+	
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::ConstructL
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::ConstructL()
+	{
+	TRACER("CGlxAlbumsBoundCommand::ConstructL");
+	TFileName uiutilitiesrscfile;
+	uiutilitiesrscfile.Append(
+			CGlxResourceUtilities::GetUiUtilitiesResourceFilenameL());
+	//create command handler
+	iAddToAlbum = CGlxCommandHandlerAddToContainer::NewL(this,
+			EGlxCmdAddToAlbum, EFalse, uiutilitiesrscfile);
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::~CGlxAlbumsBoundCommand
+// ----------------------------------------------------------------------------
+//
+CGlxAlbumsBoundCommand::~CGlxAlbumsBoundCommand()
+    {
+    if(iAddToAlbum)
+        {
+        delete iAddToAlbum;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxAlbumsBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist)
+	{
+	TRACER("CGlxAlbumsBoundCommand::OfferCommandL");
+	SetMediaList(&aMedialist);
+	TBool consumed = EFalse;
+	if ( aCommandId == KGlxEditBoundMenuCommandId )
+		{
+		iAddToAlbum->ExecuteL(EGlxCmdAddToAlbum);
+		consumed = ETrue;
+		}
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxAlbumsBoundCommand::InitMenuL");
+	aMenu.SetItemTextL( KGlxEditBoundMenuCommandId, R_GLX_METADATA_VIEW_OPTIONS_EDIT ); 
+	aMenu.SetItemDimmed( KGlxEditBoundMenuCommandId, EFalse );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxAlbumsBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxAlbumsBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeySelect,R_GLX_METADATA_MSK_ADD);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::SetMediaList
+// ----------------------------------------------------------------------------
+//
+void CGlxAlbumsBoundCommand::SetMediaList(MGlxMediaList* aMedialist)
+	{
+	TRACER("CGlxAlbumsBoundCommand::SetMediaList");
+	iMedialist = aMedialist;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxAlbumsBoundCommand::MediaList
+// ----------------------------------------------------------------------------
+//
+ MGlxMediaList& CGlxAlbumsBoundCommand::MediaList()
+	 {
+	 TRACER("CGlxAlbumsBoundCommand::MediaList");
+	 return *iMedialist;
+	 }
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxResolutionBoundCommand* CGlxResolutionBoundCommand::NewL()
+	{
+	TRACER("CGlxResolutionBoundCommand::NewL");
+	CGlxResolutionBoundCommand* self = CGlxResolutionBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxResolutionBoundCommand* CGlxResolutionBoundCommand::NewLC()
+	{
+	TRACER("CGlxResolutionBoundCommand::NewLC");
+	CGlxResolutionBoundCommand* self = new ( ELeave ) CGlxResolutionBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxResolutionBoundCommand::~CGlxResolutionBoundCommand()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxResolutionBoundCommand::OfferCommandL( TInt /*aCommandId*/ , MGlxMediaList& /*aMedialist*/ )
+	{
+	TRACER("CGlxResolutionBoundCommand::OfferCommandL");
+	return ETrue;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxResolutionBoundCommand::InitMenuL( CEikMenuPane& /*aMenu*/ ) const
+	{
+	// no implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxResolutionBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxResolutionBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxResolutionBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxResolutionBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxResolutionBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEmpty,R_GLX_METADATA_MSK_BLANK);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxResolutionBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxResolutionBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::NewL(
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxUsageRightsBoundCommand* CGlxUsageRightsBoundCommand::NewL()
+	{
+	TRACER("CGlxUsageRightsBoundCommand::NewL");
+	CGlxUsageRightsBoundCommand* self = CGlxUsageRightsBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxUsageRightsBoundCommand* CGlxUsageRightsBoundCommand::NewLC()
+	{
+	TRACER("CGlxUsageRightsBoundCommand::NewLC");
+	CGlxUsageRightsBoundCommand* self = new ( ELeave ) CGlxUsageRightsBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxUsageRightsBoundCommand::~CGlxUsageRightsBoundCommand()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxUsageRightsBoundCommand::OfferCommandL( TInt aCommandId , MGlxMediaList& aMedialist)
+	{
+	TRACER("CGlxUsageRightsBoundCommand::OfferCommandL");
+	SetMediaList(&aMedialist);
+	TBool consumed = EFalse;
+	if ( aCommandId == KGlxViewBoundMenuCommandId || aCommandId == KGlxEditBoundMenuCommandId )
+		{
+		LaunchDRMViewL();
+		consumed = ETrue;
+		}
+	return consumed;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::InitMenuL( CEikMenuPane& aMenu ) const
+	{
+	TRACER("CGlxUsageRightsBoundCommand::InitMenuL");
+	aMenu.SetItemDimmed( KGlxViewBoundMenuCommandId, EFalse );
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxUsageRightsBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::Close()
+    {
+    delete this;
+    }	
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxUsageRightsBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeySelect,R_GLX_METADATA_MSK_BLANK);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::SetMediaList
+// ----------------------------------------------------------------------------
+//
+void CGlxUsageRightsBoundCommand::SetMediaList(MGlxMediaList* aMedialist)
+	{
+	TRACER("CGlxUsageRightsBoundCommand::SetMediaList");
+	iMedialist = aMedialist;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxUsageRightsBoundCommand::MediaList
+// ----------------------------------------------------------------------------
+//
+ MGlxMediaList& CGlxUsageRightsBoundCommand::MediaList()
+	 {
+	 return *iMedialist;
+	 }
+	 
+// -----------------------------------------------------------------------------
+// LaunchDRMViewL
+// -----------------------------------------------------------------------------
+//		
+void CGlxUsageRightsBoundCommand::LaunchDRMViewL()	
+	{
+	TRACER("CGlxUsageRightsBoundCommand::LaunchDRMViewL");
+	CGlxDRMUtility* drmUtility = CGlxDRMUtility::InstanceL();
+    CleanupClosePushL(*drmUtility);
+    TInt count = MediaList().Count();
+    if( count > 0)
+    	{
+    	const CGlxMedia* media = MediaList().Item(0).Properties();
+    	const TDesC& uri = media->ValueText(KMPXMediaGeneralUri);
+    	drmUtility->ShowDRMDetailsPaneL(uri);
+    	}  
+    CleanupStack::PopAndDestroy(drmUtility);  
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxDurationBoundCommand* CGlxDurationBoundCommand::NewL()
+	{
+	TRACER("CGlxDurationBoundCommand::NewL");
+	CGlxDurationBoundCommand* self = CGlxDurationBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxDurationBoundCommand* CGlxDurationBoundCommand::NewLC()
+	{
+	TRACER("CGlxDurationBoundCommand::NewLC");
+	CGlxDurationBoundCommand* self = new ( ELeave ) CGlxDurationBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxDurationBoundCommand::~CGlxDurationBoundCommand()
+    {
+    
+    }
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxDurationBoundCommand::OfferCommandL( TInt /*aCommandId*/ , MGlxMediaList& /*aMedialist*/ )
+	{
+	TRACER("CGlxDurationBoundCommand::OfferCommandL");
+	return ETrue;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxDurationBoundCommand::InitMenuL( CEikMenuPane& /*aMenu*/ ) const
+	{
+	// no implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxDurationBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxDurationBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxDurationBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxDurationBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxDurationBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEmpty,R_GLX_METADATA_MSK_BLANK);
+
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDurationBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxDurationBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxDateAndTimeBoundCommand* CGlxDateAndTimeBoundCommand::NewL()
+	{
+	TRACER("CGlxDateAndTimeBoundCommand::NewL");
+	CGlxDateAndTimeBoundCommand* self = CGlxDateAndTimeBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxDateAndTimeBoundCommand* CGlxDateAndTimeBoundCommand::NewLC()
+	{
+	TRACER("CGlxDateAndTimeBoundCommand::NewLC");
+	CGlxDateAndTimeBoundCommand* self = new ( ELeave ) CGlxDateAndTimeBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxDateAndTimeBoundCommand::~CGlxDateAndTimeBoundCommand()
+    {
+    
+    }
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxDateAndTimeBoundCommand::OfferCommandL( TInt /*aCommandId*/ , MGlxMediaList& /*aMedialist*/ )
+	{
+	TRACER("CGlxDateAndTimeBoundCommand::OfferCommandL");
+	return ETrue;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxDateAndTimeBoundCommand::InitMenuL( CEikMenuPane& /*aMenu*/ ) const
+	{
+	// no implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxDateAndTimeBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxDateAndTimeBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxDateAndTimeBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxDateAndTimeBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxDateAndTimeBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEmpty,R_GLX_METADATA_MSK_BLANK);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxDateAndTimeBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxDateAndTimeBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::NewL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CGlxFileSizeBoundCommand* CGlxFileSizeBoundCommand::NewL()
+	{
+	TRACER("CGlxFileSizeBoundCommand::NewL");
+	CGlxFileSizeBoundCommand* self = CGlxFileSizeBoundCommand::NewLC();
+	CleanupStack::Pop( self );
+	return self;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::NewLC
+// ----------------------------------------------------------------------------
+//
+CGlxFileSizeBoundCommand* CGlxFileSizeBoundCommand::NewLC()
+	{
+	TRACER("CGlxFileSizeBoundCommand::NewLC");
+	CGlxFileSizeBoundCommand* self = new ( ELeave ) CGlxFileSizeBoundCommand;
+	CleanupStack::PushL( self );
+	return self;
+	}
+
+CGlxFileSizeBoundCommand::~CGlxFileSizeBoundCommand()
+    {
+    
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::OfferCommandL
+// ----------------------------------------------------------------------------
+//
+TBool CGlxFileSizeBoundCommand::OfferCommandL( TInt /*aCommandId*/ , MGlxMediaList& /*aMedialist*/ )
+	{
+	TRACER("CGlxFileSizeBoundCommand::OfferCommandL");
+	return ETrue;
+	}
+	
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::InitMenuL
+// ----------------------------------------------------------------------------
+//
+void CGlxFileSizeBoundCommand::InitMenuL( CEikMenuPane& /*aMenu*/ ) const
+	{
+	// no implementation
+	}
+
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::HideLocationMenuItem
+// ----------------------------------------------------------------------------
+//
+void CGlxFileSizeBoundCommand::HideLocationMenuItem( CEikMenuPane& aMenu ) const
+    {
+    TRACER("CGlxFileSizeBoundCommand::HideLocationMenuItem");
+    aMenu.SetItemDimmed( EGlxCmdAiwBase, ETrue );
+    }
+	
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::Close
+// ----------------------------------------------------------------------------
+//
+void CGlxFileSizeBoundCommand::Close()
+    {
+    delete this;
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::ChangeMskL
+// ----------------------------------------------------------------------------
+//
+void CGlxFileSizeBoundCommand::ChangeMskL()
+    {
+    TRACER("CGlxFileSizeBoundCommand::ChangeMskL");
+
+    CGlxUiUtility* uiUtility = CGlxUiUtility::UtilityL();
+    uiUtility->ScreenFurniture()->ModifySoftkeyIdL(CEikButtonGroupContainer::EMiddleSoftkeyPosition,
+            EAknSoftkeyEmpty,R_GLX_METADATA_MSK_BLANK);
+    if ( uiUtility )
+        {
+        uiUtility->Close();
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CGlxFileSizeBoundCommand::SetDetailsDailogObserver
+// ----------------------------------------------------------------------------
+//
+void CGlxFileSizeBoundCommand::SetDetailsDailogObserver( MGlxMetadataDialogObserver& /*aObserver*/ )
+	{
+
+	}
+