diff -r 74c9f037fd5d -r 99ad1390cd33 ui/commandhandlers/commandhandlerbase/src/glxmpxcommandhandler.cpp --- a/ui/commandhandlers/commandhandlerbase/src/glxmpxcommandhandler.cpp Fri Mar 19 09:28:59 2010 +0200 +++ b/ui/commandhandlers/commandhandlerbase/src/glxmpxcommandhandler.cpp Fri Apr 16 14:58:46 2010 +0300 @@ -24,52 +24,84 @@ #include #include #include -#include +#include +#include +#include +#include +#include -GlxMpxCommandHandler::GlxMpxCommandHandler() -{ +#include +#include +#include +#include +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "glxmpxcommandhandlerTraces.h" +#endif + +GlxMpxCommandHandler::GlxMpxCommandHandler() : + iProgressComplete(EFalse) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_GLXMPXCOMMANDHANDLER_ENTRY ); iMediaList = NULL; -} + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_GLXMPXCOMMANDHANDLER_EXIT ); + } GlxMpxCommandHandler::~GlxMpxCommandHandler() -{ + { + OstTraceFunctionEntry0( DUP1_GLXMPXCOMMANDHANDLER_GLXMPXCOMMANDHANDLER_ENTRY ); //close the existing instance of Media List - if ( iMediaList ) { + if (iMediaList) + { iMediaList->Close(); iMediaList = NULL; + } + OstTraceFunctionExit0( DUP1_GLXMPXCOMMANDHANDLER_GLXMPXCOMMANDHANDLER_EXIT ); } -} -void GlxMpxCommandHandler::executeCommand(int commandId,int collectionId) -{ - qDebug("GlxMpxCommandHandler::executeCommand "); - int aHierarchyId = 0; +void GlxMpxCommandHandler::executeCommand(int commandId, int collectionId,QList indexList) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_EXECUTECOMMAND_ENTRY ); + int aHierarchyId = 0; TGlxFilterItemType aFilterType = EGlxFilterImage; - //CreateMediaListL(aCollectionId, aHierarchyId,aFilterType); - if(collectionId != KGlxAlbumsMediaId) - { - qDebug("GlxMpxCommandHandler::executeCommand ::CreateMediaListL"); - CreateMediaListL(collectionId, aHierarchyId,aFilterType); - } - else - { - qDebug("GlxMpxCommandHandler::executeCommand ::CreateMediaListAlbumItemL"); - //for creating Medial List for Albums Media path Items - CreateMediaListAlbumItemL(collectionId, aHierarchyId,aFilterType); - } + //CreateMediaListL(aCollectionId, aHierarchyId,aFilterType); + if (collectionId != KGlxAlbumsMediaId) + { + OstTrace0( TRACE_NORMAL, DUP2_GLXMPXCOMMANDHANDLER_EXECUTECOMMAND, "GlxMpxCommandHandler::executeCommand::CreateMediaListL" ); + CreateMediaListL(collectionId, aHierarchyId, aFilterType); + } + else + { + OstTrace0( TRACE_NORMAL, DUP3_GLXMPXCOMMANDHANDLER_EXECUTECOMMAND, "GlxMpxCommandHandler::executeCommand::CreateMediaListAlbumItemL" ); + //for creating Medial List for Albums Media path Items + CreateMediaListAlbumItemL(collectionId, aHierarchyId, aFilterType); + } TBool consume = ETrue; - //Execute Command - DoExecuteCommandL(commandId,*iMediaList,consume); - //Create MPX command if any - CMPXCommand* command = CreateCommandL(commandId,*iMediaList,consume); - if(command){ - command->SetTObjectValueL(KMPXCommandGeneralSessionId, static_cast(this)); - iMediaList->AddMediaListObserverL(this); - iMediaList->CommandL(*command); + iProgressComplete = EFalse; + //Execute Command + DoExecuteCommandL(commandId, *iMediaList, consume); + //Create MPX command if any + consume = ConfirmationNoteL(*iMediaList); + if(consume) + { + CMPXCommand* command = CreateCommandL(commandId, *iMediaList, consume); + if (command) + { + command->SetTObjectValueL (KMPXCommandGeneralSessionId, + static_cast (this)); + iMediaList->AddMediaListObserverL(this); + iMediaList->CommandL(*command); + ProgressNoteL(commandId); + } + } + else //command cancelled,so unmark all items + { + MGlxMediaList::UnmarkAllL(*iMediaList); + } + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_EXECUTECOMMAND_EXIT ); } -} // --------------------------------------------------------------------------- // CreateMediaListL() @@ -77,65 +109,77 @@ // Create a filter as requested filtertype // Creates the medialist // --------------------------------------------------------------------------- -void GlxMpxCommandHandler::CreateMediaListL(int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType) -{ - Q_UNUSED(aHierarchyId); - Q_UNUSED(aFilterType); - - //close the existing instance of Media List - if ( iMediaList ) { - iMediaList->Close(); - iMediaList = NULL; - } +void GlxMpxCommandHandler::CreateMediaListL(int aCollectionId, + int aHierarchyId, TGlxFilterItemType aFilterType) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_CREATEMEDIALISTL_ENTRY ); + Q_UNUSED(aHierarchyId); + Q_UNUSED(aFilterType); + + //close the existing instance of Media List + if (iMediaList) + { + iMediaList->Close(); + iMediaList = NULL; + } - // Create path to the list of images and videos - CMPXCollectionPath* path = CMPXCollectionPath::NewL(); - CleanupStack::PushL( path ); - path->AppendL(aCollectionId); - // Create filter to filter out either images or videos - CMPXFilter* filter = TGlxFilterFactory::CreateItemTypeFilterL(EGlxFilterImage); //todo take actual filter type - CleanupStack::PushL(filter); - - // Create the media list - iMediaList = MGlxMediaList::InstanceL( *path, - TGlxHierarchyId(0), filter ); //todo take actual hierarchy - CleanupStack::PopAndDestroy( filter ); - - CleanupStack::PopAndDestroy(path); -} + // Create path to the list of images and videos + CMPXCollectionPath* path = CMPXCollectionPath::NewL(); + CleanupStack::PushL(path); + path->AppendL(aCollectionId); + // Create filter to filter out either images or videos + CMPXFilter* filter = TGlxFilterFactory::CreateItemTypeFilterL( + EGlxFilterImage); //todo take actual filter type + CleanupStack::PushL(filter); + + // Create the media list + iMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(0), filter); //todo take actual hierarchy + CleanupStack::PopAndDestroy(filter); + + CleanupStack::PopAndDestroy(path); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_CREATEMEDIALISTL_EXIT ); + } + // --------------------------------------------------------------------------- // CreateMediaListAlbumItemL() // Creates the media list for the album Item // --------------------------------------------------------------------------- -void GlxMpxCommandHandler::CreateMediaListAlbumItemL(int aCollectionId, int aHierarchyId, TGlxFilterItemType aFilterType) - { - Q_UNUSED(aCollectionId); - Q_UNUSED(aHierarchyId); - //retrieve the instance of Media list for ALBUMS LIST which will be saved in iMediaList - CreateMediaListL(KGlxCollectionPluginAlbumsImplementationUid,0,EGlxFilterAlbum); - //retrieve the path of the focussed item of the MediaList - CMPXCollectionPath* path = iMediaList->PathLC(NGlxListDefs:: EPathFocusOrSelection); - //close the existing instance of Media List - iMediaList->Close(); - iMediaList = NULL; - //create new media list with the derived path - CMPXFilter* filter = TGlxFilterFactory::CreateItemTypeFilterL(aFilterType); //todo take actual filter type - CleanupStack::PushL(filter); - iMediaList = MGlxMediaList::InstanceL( *path, - TGlxHierarchyId(0), filter ); //todo take actual hierarchy - CleanupStack::PopAndDestroy( filter ); - - CleanupStack::PopAndDestroy(path); - } +void GlxMpxCommandHandler::CreateMediaListAlbumItemL(int aCollectionId, + int aHierarchyId, TGlxFilterItemType aFilterType) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_CREATEMEDIALISTALBUMITEML_ENTRY ); + Q_UNUSED(aCollectionId); + Q_UNUSED(aHierarchyId); + //retrieve the instance of Media list for ALBUMS LIST which will be saved in iMediaList + CreateMediaListL(KGlxCollectionPluginAlbumsImplementationUid, 0, + EGlxFilterAlbum); + //retrieve the path of the focussed item of the MediaList + CMPXCollectionPath* path = iMediaList->PathLC( + NGlxListDefs::EPathFocusOrSelection); + //close the existing instance of Media List + iMediaList->Close(); + iMediaList = NULL; + //create new media list with the derived path + CMPXFilter* filter = + TGlxFilterFactory::CreateItemTypeFilterL(aFilterType); + CleanupStack::PushL(filter); + iMediaList = MGlxMediaList::InstanceL(*path, TGlxHierarchyId(0), filter); //todo take actual hierarchy + CleanupStack::PopAndDestroy(filter); + + CleanupStack::PopAndDestroy(path); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_CREATEMEDIALISTALBUMITEML_EXIT ); + } // ----------------------------------------------------------------------------- // HandleItemAddedL // ----------------------------------------------------------------------------- // -void GlxMpxCommandHandler::HandleItemAddedL(TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/) +void GlxMpxCommandHandler::HandleItemAddedL(TInt /*aStartIndex*/, + TInt /*aEndIndex*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEITEMADDEDL_ENTRY ); // Do nothing - qDebug("New item added "); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEITEMADDEDL_EXIT ); } // ----------------------------------------------------------------------------- @@ -143,18 +187,23 @@ // ----------------------------------------------------------------------------- // void GlxMpxCommandHandler::HandleMediaL(TInt /*aListIndex*/, MGlxMediaList* /*aList*/) - { - // Do nothing - } - + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEMEDIAL_ENTRY ); + // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEMEDIAL_EXIT ); + } + // ----------------------------------------------------------------------------- // HandleItemRemovedL // ----------------------------------------------------------------------------- // -void GlxMpxCommandHandler::HandleItemRemovedL(TInt /*aStartIndex*/, TInt /*aEndIndex*/, MGlxMediaList* /*aList*/) - { - // Do nothing - } +void GlxMpxCommandHandler::HandleItemRemovedL(TInt /*aStartIndex*/, + TInt /*aEndIndex*/, MGlxMediaList* /*aList*/) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEITEMREMOVEDL_ENTRY ); + // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEITEMREMOVEDL_EXIT ); + } // ----------------------------------------------------------------------------- // HandleItemModifiedL @@ -163,7 +212,9 @@ void GlxMpxCommandHandler::HandleItemModifiedL(const RArray& /*aItemIndexes*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEITEMMODIFIEDL_ENTRY ); // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEITEMMODIFIEDL_EXIT ); } // ----------------------------------------------------------------------------- @@ -173,7 +224,9 @@ void GlxMpxCommandHandler::HandleAttributesAvailableL(TInt /*aItemIndex*/, const RArray& /*aAttributes*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEATTRIBUTESAVAILABLEL_ENTRY ); // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEATTRIBUTESAVAILABLEL_EXIT ); } // ----------------------------------------------------------------------------- @@ -183,7 +236,9 @@ void GlxMpxCommandHandler::HandleFocusChangedL(NGlxListDefs::TFocusChangeType /*aType*/, TInt /*aNewIndex*/, TInt /*aOldIndex*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEFOCUSCHANGEDL_ENTRY ); // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEFOCUSCHANGEDL_EXIT ); } // ----------------------------------------------------------------------------- @@ -193,39 +248,58 @@ void GlxMpxCommandHandler::HandleItemSelectedL(TInt /*aIndex*/, TBool /*aSelected*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEITEMSELECTEDL_ENTRY ); // Do nothing + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEITEMSELECTEDL_EXIT ); } // ----------------------------------------------------------------------------- // HandleMessageL // ----------------------------------------------------------------------------- // -void GlxMpxCommandHandler::HandleMessageL(const CMPXMessage& aMessage, - MGlxMediaList* aList) -{ - if ((aMessage.IsSupported(KMPXMessageGeneralId) && (aMessage.IsSupported(KMPXCommandGeneralSessionId)))) +void GlxMpxCommandHandler::HandleMessageL(const CMPXMessage& aMessage, + MGlxMediaList*/* aList*/) { - TInt msgId = aMessage.ValueTObjectL(KMPXMessageGeneralId); - TAny* sessionId = aMessage.ValueTObjectL(KMPXCommandGeneralSessionId); - + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEMESSAGEL_ENTRY ); + if ((aMessage.IsSupported(KMPXMessageGeneralId) && (aMessage.IsSupported( + KMPXCommandGeneralSessionId)))) + { + TInt msgId = aMessage.ValueTObjectL (KMPXMessageGeneralId); + TAny* sessionId = aMessage.ValueTObjectL ( + KMPXCommandGeneralSessionId); + TInt error = KErrNone; // Check if this is a progress message and intended for this object + TryExitL(error); + } + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEMESSAGEL_EXIT ); } -} // ----------------------------------------------------------------------------- // HandleCommandCompleteL // ----------------------------------------------------------------------------- // -void GlxMpxCommandHandler::HandleCommandCompleteL(TAny* aSessionId, CMPXCommand* aCommandResult, TInt aError, MGlxMediaList* aList) +void GlxMpxCommandHandler::HandleCommandCompleteL(TAny* aSessionId, + CMPXCommand* aCommandResult, TInt aError, MGlxMediaList* aList) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLECOMMANDCOMPLETEL_ENTRY ); + MGlxMediaList::UnmarkAllL(*iMediaList); - MGlxMediaList::UnmarkAllL(*iMediaList); + DoHandleCommandCompleteL(aSessionId, aCommandResult, aError, aList); + iProgressComplete = ETrue; + TryExitL(aError); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLECOMMANDCOMPLETEL_EXIT ); + } + +// ----------------------------------------------------------------------------- +// HandleError +// ----------------------------------------------------------------------------- +// +void GlxMpxCommandHandler::HandleError(TInt /*aError*/) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEERROR_ENTRY ); - DoHandleCommandCompleteL(aSessionId, aCommandResult, aError, aList); - - iMediaList->RemoveMediaListObserver(this); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEERROR_EXIT ); } - // ----------------------------------------------------------------------------- // Default implementation of advanced command handling does nothing // ----------------------------------------------------------------------------- @@ -233,6 +307,9 @@ void GlxMpxCommandHandler::DoHandleCommandCompleteL(TAny* /*aSessionId*/, CMPXCommand* /*aCommandResult*/, TInt /*aError*/, MGlxMediaList* /*aList*/) { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_DOHANDLECOMMANDCOMPLETEL_ENTRY ); + + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_DOHANDLECOMMANDCOMPLETEL_EXIT ); } // ----------------------------------------------------------------------------- @@ -240,7 +317,203 @@ // ----------------------------------------------------------------------------- // -void GlxMpxCommandHandler::DoExecuteCommandL(TInt /*aCommandId*/, MGlxMediaList& /*aMediaList*/, TBool& /*aConsume*/) -{ +void GlxMpxCommandHandler::DoExecuteCommandL(TInt /*aCommandId*/, + MGlxMediaList& /*aMediaList*/, TBool& /*aConsume*/) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_DOEXECUTECOMMANDL_ENTRY ); + + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_DOEXECUTECOMMANDL_EXIT ); + } + +// ----------------------------------------------------------------------------- +// TryExitL +// ----------------------------------------------------------------------------- +// +void GlxMpxCommandHandler::TryExitL(TInt aErrorCode) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_TRYEXITL_ENTRY ); + if (KErrNone != aErrorCode) + { + // @todo error received. Close progress note + DismissProgressNoteL(); + iMediaList->RemoveMediaListObserver(this); + + // handle error + HandleErrorL(aErrorCode); + } + else if (iProgressComplete) + { + DismissProgressNoteL(); + iMediaList->RemoveMediaListObserver(this); + CompletionNoteL(); + } + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_TRYEXITL_EXIT ); + } + +// ----------------------------------------------------------------------------- +// Default implementation shows an error note +// ----------------------------------------------------------------------------- +// +void GlxMpxCommandHandler::HandleErrorL(TInt aErrorCode) + { + OstTraceFunctionEntry0( GLXMPXCOMMANDHANDLER_HANDLEERRORL_ENTRY ); + // show error note + // TextResolver instance for error resolving. + CTextResolver* textresolver = CTextResolver::NewLC(); + // Resolve the error text + const TDesC& text = textresolver->ResolveErrorString(aErrorCode); + + QString qtText = QString::fromUtf16(text.Ptr(), text.Length()); + + HbMessageBox box(HbMessageBox::MessageTypeInformation); + box.setText(qtText); + box.exec(); + CleanupStack::PopAndDestroy(textresolver); + OstTraceFunctionExit0( GLXMPXCOMMANDHANDLER_HANDLEERRORL_EXIT ); + } + +void GlxMpxCommandHandler::CompletionNoteL() const + { + QString displayText = CompletionTextL(); + if (!displayText.isNull()) + { + HbMessageBox::information(displayText); + } + } + +QString GlxMpxCommandHandler::CompletionTextL() const + { + return QString(); + } + +QString GlxMpxCommandHandler::ProgressTextL() const + { + return QString("Progressing..."); + } + +void GlxMpxCommandHandler::ProgressNoteL(TInt /*aCommandId*/) + { + mProgressDialog = new HbProgressDialog(HbProgressDialog::WaitDialog); + mProgressDialog->setText(ProgressTextL()); + mProgressDialog->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter); + mProgressDialog->show(); + } + +void GlxMpxCommandHandler::DismissProgressNoteL() + { + mProgressDialog->close(); + delete mProgressDialog; + mProgressDialog = NULL; + } + +bool GlxMpxCommandHandler::ConfirmationNoteL(MGlxMediaList& aMediaList) const + { + TInt selectionCount = aMediaList.SelectionCount(); -} + // If media list is not empty, treat focused item as selected + // At this point can assume that the command was disabled + // if static items were not supported + if ( selectionCount == 0 ) + { + selectionCount = 1; + } + + // Show confirmation note + bool confirmed = true; + if ( selectionCount == 1 ) + { + confirmed = ConfirmationNoteSingleL(aMediaList); + } + else + { + confirmed = ConfirmationNoteMultipleL(aMediaList); + } + + return confirmed; + } + +bool GlxMpxCommandHandler::ConfirmationNoteSingleL(MGlxMediaList& aMediaList) const + { + bool confirmAction = true; + + QString qtText = ConfirmationTextL(); + + if(!qtText.isEmpty ()) + { + // create fetch context + TGlxSelectionIterator iterator; + iterator.SetRange(1); + CGlxAttributeContext* attributeContext = new(ELeave) CGlxAttributeContext(&iterator); + CleanupStack::PushL(attributeContext); + attributeContext->AddAttributeL(KMPXMediaGeneralTitle); + + // add context to media list + aMediaList.AddContextL(attributeContext, KGlxFetchContextPriorityLow); + + // TGlxContextRemover will remove the context when it goes out of scope + // Used here to avoid a trap and still have safe cleanup + TGlxFetchContextRemover contextRemover(attributeContext, aMediaList); + // put to cleanupstack as cleanupstack is emptied before stack objects + // are deleted + CleanupClosePushL( contextRemover); + // retrieve title attribute + TInt err = GlxAttributeRetriever::RetrieveL(*attributeContext, aMediaList, EFalse); + // context off the list + CleanupStack::PopAndDestroy( &contextRemover ); + + if ( err == KErrNone ) + { + // use iterator to get the index of the right item + iterator.SetToFirst(&aMediaList); + const CGlxMedia* media = aMediaList.Item(iterator++).Properties(); + + // noteText has a place for a title string in it + const TDesC& itemName = media->ValueText(KMPXMediaGeneralTitle); + QString qtItemName = QString::fromUtf16(itemName.Ptr(),itemName.Length()); + qtText.append(QString("%1").arg(qtItemName)); + } + // (else) If error, assume confirmed anyway + + CleanupStack::PopAndDestroy(attributeContext); + + HbMessageBox box(HbMessageBox::MessageTypeQuestion); + box.setDismissPolicy(HbDialog::NoDismiss); + + // Set timeout to zero to wait user to either click Ok or Cancel + box.setTimeout(HbDialog::NoTimeout); + + box.setText(qtText); + HbAction *action = box.exec(); + if(action != box.primaryAction()) + { + confirmAction = false; + } + } + return confirmAction; + } + +bool GlxMpxCommandHandler::ConfirmationNoteMultipleL(MGlxMediaList& /*aMediaList*/) const + { + bool confirmAction = true; + + QString qtText = ConfirmationTextL(true); + if(!qtText.isEmpty ()) + { + HbMessageBox box(HbMessageBox::MessageTypeQuestion); + box.setDismissPolicy(HbDialog::NoDismiss); + // Set timeout to zero to wait user to either click Ok or Cancel + box.setTimeout(HbDialog::NoTimeout); + box.setText(qtText); + HbAction *action = box.exec(); + if(action != box.primaryAction()) + { + confirmAction = false; + } + } + return confirmAction; + } + +QString GlxMpxCommandHandler::ConfirmationTextL(bool /*multiSelection */) const + { + return QString(); + }