diff -r 000000000000 -r 4e91876724a2 photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdetails.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/photosgallery/viewframework/commandhandlers/commoncommandhandlers/src/glxcommandhandlerdetails.cpp Thu Dec 17 08:45:44 2009 +0200 @@ -0,0 +1,323 @@ +/* +* 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: Details commmand handler +* +*/ + + + + +#include "glxcommandhandlerdetails.h" + +#include +#include + +#include + +#include //for gallery related constatns +#include //for command id + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include // for TMPXAttribute +#include // for CGlxAttributeRetriever +#include // for CGlxDefaultAttributeContext +#include // for CGlxResourceUtilities +#include // for TGlxFetchContextRemover + +#include //for view plugin implmentation id +#include +#include +#include //for metadata dialog +#include +#include +#include +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CGlxCommandHandlerDetails* + CGlxCommandHandlerDetails::NewL( + MGlxMediaListProvider* aMediaListProvider ) + { + CGlxCommandHandlerDetails* self = new (ELeave) CGlxCommandHandlerDetails(aMediaListProvider); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// --------------------------------------------------------------------------- +// +CGlxCommandHandlerDetails::CGlxCommandHandlerDetails(MGlxMediaListProvider* aMediaListProvider ) + :CGlxMediaListCommandHandler(aMediaListProvider) + { + //Do nothing + } + +// --------------------------------------------------------------------------- +// Symbian 2nd phase constructor can leave. +// --------------------------------------------------------------------------- +// +void CGlxCommandHandlerDetails::ConstructL() + { + // Load resource file + GLX_FUNC("GLX_Property::ConstructL"); + + // register property command in command handler + TParse parse; + parse.Set(KGlxUiUtilitiesResource, &KDC_APP_RESOURCE_DIR, NULL); + TFileName resourceFile; + resourceFile.Append(parse.FullName()); + + CGlxResourceUtilities::GetResourceFilenameL(resourceFile); + iResourceOffset = CCoeEnv::Static()->AddResourceFileL(resourceFile); + + // register property command in command handler + TCommandInfo infoProp(EGlxCmdDetails); + // Filter out static items and only allows one item to select + infoProp.iMinSelectionLength = 1; + infoProp.iMaxSelectionLength = 1; + //Allow DRM + infoProp.iDisallowDRM = EFalse; + //Allow system items + infoProp.iDisallowSystemItems= EFalse; + //Allow animation + infoProp.iStopAnimationForExecution = EFalse; + //no category filter + infoProp.iCategoryFilter = EMPXNoCategory; + AddCommandL(infoProp); + + TCommandInfo infoSubMenu(EGlxCmdDetailsOption); + infoSubMenu.iViewingState = TCommandInfo::EViewingStateBrowse; + //AddCommandL(infoSubMenu); + + // register for the reset view command so that we can + // dismiss the dialog if it is being shown when we are activated + // from SpaceUI + TCommandInfo resetViewCmd( EGlxCmdResetView ); + AddCommandL( resetViewCmd ); + + // get pointer to HUI utility + iUiUtility = CGlxUiUtility::UtilityL(); + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CGlxCommandHandlerDetails::~CGlxCommandHandlerDetails() + { + TRACER("GLX_Property::~CGlxCommandHandlerDetails"); + if ( iResourceOffset ) + { + CCoeEnv::Static()->DeleteResourceFile(iResourceOffset); + } + + if ( iUiUtility ) + { + iUiUtility->Close(); + } + } + +// ----------------------------------------------------------------------------- +// DoExecuteL +// ----------------------------------------------------------------------------- +// +TBool CGlxCommandHandlerDetails::DoExecuteL( TInt aCommandId, MGlxMediaList& aList ) + { + TBool consume(EFalse); + TRACER("GLX_Property::DoExecuteL"); + GLX_LOG_INFO1("GLX_Property::DoExecuteL::DoExecuteL %d",aCommandId); + switch(aCommandId) + { + case EGlxCmdDetails: + { + GLX_LOG_INFO("GLX_Property::DoExecuteL::Launch UMP"); + + CGlxDefaultAttributeContext* attrContext = CGlxDefaultAttributeContext::NewL(); + CleanupStack::PushL(attrContext); + + attrContext->AddAttributeL(KMPXMediaGeneralUri); + + aList.AddContextL(attrContext, KGlxFetchContextPriorityBlocking); + + // TGlxContextRemover will remove the context when it goes out of scope + // Used here to avoid a trap and still have safe cleanup + TGlxFetchContextRemover contextRemover (attrContext, aList); + + CleanupClosePushL( contextRemover); + + TInt err = GlxAttributeRetriever::RetrieveL(*attrContext,aList,ETrue); + + // context off the list + CleanupStack::PopAndDestroy( &contextRemover ); + + if ( err == KErrNone ) + { + TInt focusIndex = aList.FocusIndex(); + TGlxMedia item = aList.Item(focusIndex); + const CGlxMedia* media = item.Properties(); + + TBool isDrm = aList.Item(focusIndex).IsDrmProtected(); + TBool isVideo = EFalse; + + TMPXGeneralCategory type = MediaList().Item( focusIndex ).Category(); + if(type == EMPXVideo) + { + isVideo = ETrue; + } + + + //check media support uri attribute + if(media && media->IsSupported(KMPXMediaGeneralUri)) + { + const TDesC& uri = media->ValueText(KMPXMediaGeneralUri); + + HBufC* uriBuf = HBufC::NewLC(uri.Length()+2); + + TPtr uriPtr (uriBuf->Des()); + uriPtr = uri; + uriPtr.Append( isDrm ); + uriPtr.Append( isVideo ); + + GLX_DEBUG2("GLX_Property::DoExecuteL::URI:%S:",&uri); + + iUiUtility->SetViewNavigationDirection(EGlxNavigationForwards); + if (aList.Collection().UidL().iUid == KGlxCollectionPluginImageViewerImplementationUid) + { + CGlxImgVwrMetadataDialog* dialog = CGlxImgVwrMetadataDialog::NewL( uri); + dialog->ExecuteLD(); + } + else + { + CGlxMetadataDialog* dialog = CGlxMetadataDialog::NewL( uri ); + dialog->ExecuteLD(); + } + + + CleanupStack::PopAndDestroy(uriBuf); + } + } + CleanupStack::PopAndDestroy( attrContext ); + consume = ETrue; + break; + }// contextRemover goes out of scope and removes the context from media list + default: + { + break; + } + } + + return consume; + } +// ----------------------------------------------------------------------------- +// LaunchViewL +// ----------------------------------------------------------------------------- +// +void CGlxCommandHandlerDetails::LaunchViewL(TUid aViewPluginId,const TDesC& aURI) + { + TRACER("GLX_UMP::CGlxCommandHandlerDetails:LaunchViewL"); + + MMPXViewUtility* viewUtility = MMPXViewUtility::UtilityL(); + CleanupClosePushL(*viewUtility); + + if( aURI.Length() > 0 ) + { + //following is to preserve unicode format of filename + //Convert aURI 16 bit descriptor to 8 bit descriptor + TPtrC8 ptr8((TUint8*)aURI.Ptr(),aURI.Length()); + GLX_LOG_INFO1("GLX_UMP::CGlxCommandHandlerDetails:ActivateViewL::ptr8:%S:",&ptr8); + + //convert back to 16 bit descriptor + TPtrC16 ptr16((TUint16*)ptr8.Ptr(),ptr8.Length()); + GLX_LOG_INFO1("GLX_UMP::CGlxCommandHandlerDetails:ActivateViewL::ptr16:%S:",&ptr16); + + viewUtility->ActivateViewL(aViewPluginId,&ptr16); + } + else + { + viewUtility->ActivateViewL(aViewPluginId,&KNullDesC); + } + + CleanupStack::PopAndDestroy(viewUtility); + } +// ----------------------------------------------------------------------------- +// DoActivateL +// ----------------------------------------------------------------------------- +// +void CGlxCommandHandlerDetails::DoActivateL( TInt /*aViewId*/ ) + { + + } + +// ----------------------------------------------------------------------------- +// DoIsDisabled +// ----------------------------------------------------------------------------- +// +TBool CGlxCommandHandlerDetails::DoIsDisabled(TInt aCommandId, + MGlxMediaList& aList) const + { + 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.so details will be available + fullscreenViewingMode = ETrue; + } + else + { + //it means we are in grid view.so details will be not beavailable + fullscreenViewingMode = EFalse; + } + } + else + { + //it means we are in Fullscreen.so details will be available + fullscreenViewingMode = ETrue; + } + } + CleanupStack::PopAndDestroy( naviState ); + aNavigationalState->Close(); + + if(EGlxCmdDetails==aCommandId && (0 == aList.Count() || 1 != aList.SelectionCount())&& !fullscreenViewingMode ) + { + return ETrue; + } + return EFalse; + } + + +//End of file