diff -r b023a8d2866a -r ea65f74e6de4 photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp --- a/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp Thu Jul 15 18:39:01 2010 +0300 +++ b/photosgallery/viewframework/commandhandlers/commandhandlerbase/src/glxmpxcommandcommandhandler.cpp Thu Aug 19 09:55:03 2010 +0300 @@ -43,9 +43,12 @@ #include #include #include // for CGlxResourceUtilities +#include +#include +#include +#include +#include -/// @todo Move elsewhere -const TInt KGlxMaxNoteLength = 256; // ----------------------------------------------------------------------------- // ConstructL @@ -120,40 +123,85 @@ if ( consume ) { - // get a command object from the deriving class. - // Allow deriving class modify the consume value, even without - // creating a commmand (in case it wants to filter out a command) - CMPXCommand* command = CreateCommandL(aCommandId, aList, consume); - - if (command) + CGlxNavigationalState* navState = CGlxNavigationalState::InstanceL(); + CleanupClosePushL(*navState); + CMPXCollectionPath* path = navState->StateLC(); + CreateImageViewerInstanceL(); + TBool privatePath = iImageViewerInstance->IsPrivate(); + TBool viewerPathId = (path->Id() == TMPXItemId(KGlxCollectionPluginImageViewerImplementationUid)) ? ETrue : EFalse; + iImageViewerInstance->CloseImageDecoder(); + DeleteImageViewerInstance(); + CleanupStack::PopAndDestroy(path); + CleanupStack::PopAndDestroy(navState); + + if (viewerPathId && !privatePath) { - CleanupStack::PushL(command); - - if ( CommandInfo(aCommandId).iStopAnimationForExecution ) + RFs fs; + CleanupClosePushL(fs); + User::LeaveIfError(fs.Connect()); + ContentAccess::CManager *manager = ContentAccess::CManager::NewL(); + CleanupStack::PushL(manager); + fs.SetAtt(focusedMedia.Uri(), 0, KEntryAttReadOnly); + TInt ret = manager->DeleteFile(focusedMedia.Uri()); + if(ret != KErrNone) { - // Stop GIF animation - iAppUi->ProcessCommandL(EGlxCmdDisableAnimations); - iAnimationStopped = ETrue; + CreateImageViewerInstanceL(); + iImageViewerInstance->CreateImageDecoderL(); + DeleteImageViewerInstance(); + HBufC* noteText = StringLoader::LoadL(R_GLX_DELETION_FAILURE_NOTE); + CleanupStack::PushL(noteText); + const TDesC& itemName = focusedMedia.Uri(); + TParsePtrC parse(focusedMedia.Uri()); + TBuf text; + StringLoader::Format(text, *noteText, -1, parse.Name()); + GlxGeneralUiUtilities::ShowErrorNoteL(text, ETrue); + CleanupStack::PopAndDestroy(noteText); + } + CleanupStack::PopAndDestroy(manager); + CleanupStack::PopAndDestroy(&fs); + if(ret == KErrNone) + { + iAppUi->ProcessCommandL(EAknSoftkeyExit); } - - // Add the pointer of this command handler as session id into the message - // This can be used to ensure that this object is the intended recipient - // of a message - command->SetTObjectValueL(KMPXCommandGeneralSessionId, - static_cast(this)); + } + else + { + // get a command object from the deriving class. + // Allow deriving class modify the consume value, even without + // creating a commmand (in case it wants to filter out a command) + CMPXCommand* command = CreateCommandL(aCommandId, aList, consume); + + if (command) + { + CleanupStack::PushL(command); + + if (CommandInfo(aCommandId).iStopAnimationForExecution) + { + // Stop GIF animation + iAppUi->ProcessCommandL(EGlxCmdDisableAnimations); + iAnimationStopped = ETrue; + } - aList.AddMediaListObserverL(this); - - aList.CommandL(*command); - - // raise progress note. Note will be closed when complete message received - // For EGlxCmdAddMedia we dont need to show dialog as EGlxCmdAddToAlbum or - // EGlxCmdAddTag will show processing dialog. - if (aCommandId != EGlxCmdAddMedia) - { - ProgressNoteL(aCommandId); + // Add the pointer of this command handler as session id into the message + // This can be used to ensure that this object is the intended recipient + // of a message + command->SetTObjectValueL ( + KMPXCommandGeneralSessionId, + static_cast (this)); + + aList.AddMediaListObserverL(this); + + aList.CommandL(*command); + + // raise progress note. Note will be closed when complete message received + // For EGlxCmdAddMedia we dont need to show dialog as EGlxCmdAddToAlbum or + // EGlxCmdAddTag will show processing dialog. + if (aCommandId != EGlxCmdAddMedia) + { + ProgressNoteL(aCommandId); + } + CleanupStack::PopAndDestroy(command); } - CleanupStack::PopAndDestroy(command); } } @@ -381,7 +429,7 @@ // noteText has a place for a title string in it const TDesC& itemName = media->ValueText(KMPXMediaGeneralTitle); - TBuf text; + TBuf text; StringLoader::Format(text, *noteText, -1, itemName); // show popup @@ -416,7 +464,7 @@ // item count TInt count = aMediaList.SelectionCount(); - TBuf text; + TBuf text; GlxGeneralUiUtilities::FormatString(text, *noteText, -1, count, ETrue); // show popup @@ -699,3 +747,27 @@ TRAP_IGNORE(DismissProgressNoteL()); } } + +// ----------------------------------------------------------------------------- +// CreateImageViewerInstanceL +// ----------------------------------------------------------------------------- +// +void CGlxMpxCommandCommandHandler::CreateImageViewerInstanceL() + { + TRACER("CGlxMpxCommandCommandHandler::CreateImageViewerInstanceL"); + iImageViewerInstance = CGlxImageViewerManager::InstanceL(); + __ASSERT_ALWAYS(iImageViewerInstance, Panic(EGlxPanicNullPointer)); + } + +// ----------------------------------------------------------------------------- +// DeleteImageViewerInstance +// ----------------------------------------------------------------------------- +// +void CGlxMpxCommandCommandHandler::DeleteImageViewerInstance() + { + TRACER("CGlxMpxCommandCommandHandler::DeleteImageViewerInstance"); + if ( iImageViewerInstance ) + { + iImageViewerInstance->DeleteInstance(); + } + }