diff -r 8118492f1bdf -r b70d77332e66 mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp --- a/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Thu Jan 07 12:45:53 2010 +0200 +++ b/mpxplugins/viewplugins/views/collectionviewhg/src/mpxcollectionviewhgimp.cpp Mon Jan 18 20:18:06 2010 +0200 @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include @@ -3341,27 +3341,77 @@ // Prepares media object for selected items // ----------------------------------------------------------------------------- // -void CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL( CMPXMedia& aMedia ) +void CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL( CMPXMedia& aMedia, TMPXGeneralCategory aContainerCategory, TMPXGeneralType aContainerType ) { MPX_FUNC( "CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL" ); CMPXMediaArray* mediaArray( CMPXMediaArray::NewL() ); CleanupStack::PushL( mediaArray ); - CMPXCommonListBoxArrayBase* listBoxArray = - iContainer->ListBoxArray(); - TInt count( iSelectionIndexCache->Count() ); CMPXCollectionPath* path( iCollectionUtility->Collection().PathL() ); CleanupStack::PushL( path ); TMPXItemId id( path->Id( 0 ) ); MPX_DEBUG2( "CMPXCollectionViewHgImp::PrepareMediaForSelectedItemsL collection ID = 0x%x", id.iId1 ); CleanupStack::PopAndDestroy( path ); - - if ( count > 0 ) - { - if ( count == 1 ) - { - // marked one item, if it's not valid, ignore the command - const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(0) ); + + //support for TBone view add to playlist + if ( aContainerCategory == EMPXAlbum && aContainerType == EMPXItem) + { + CMPXMedia* media = iContainer->SelectedItemMediaL(); + if ( media->ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) + { + // leave with special error code, this error + // should not trigger any error message, the operation should + // be terminated silently + User::Leave( KMPXErrDataNotReady ); + } + else + { + CMPXMedia* entry( PopulateMediaLC( *media, id ) ); + mediaArray->AppendL( entry ); + CleanupStack::Pop( entry ); + } + } + + else + { + TInt count( iSelectionIndexCache->Count() ); + CMPXCommonListBoxArrayBase* listBoxArray = + iContainer->ListBoxArray(); + if ( count > 0 ) + { + + if ( count == 1 ) + { + // marked one item, if it's not valid, ignore the command + const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(0) ); + if ( listBoxMedia.ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) + { + // leave with special error code, this error + // should not trigger any error message, the operation should + // be terminated silently + User::Leave( KMPXErrDataNotReady ); + } + + } + for ( TInt i = 0; i < count; i++ ) + { + const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(i) ); + if ( listBoxMedia.ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) + { + // item not ready, cache this command and execute + // it when the data becomes valid + User::Leave( KMPXErrDataNotReadyCacheCommand ); + } + CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) ); + mediaArray->AppendL( entry ); + CleanupStack::Pop( entry ); + } + } + + else + { + const CMPXMedia& listBoxMedia = listBoxArray->MediaL( + iContainer->CurrentLbxItemIndex() ); if ( listBoxMedia.ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) { // leave with special error code, this error @@ -3369,44 +3419,20 @@ // be terminated silently User::Leave( KMPXErrDataNotReady ); } - } - for ( TInt i = 0; i < count; i++ ) - { - const CMPXMedia& listBoxMedia = listBoxArray->MediaL( iSelectionIndexCache->At(i) ); - if ( listBoxMedia.ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) - { - // item not ready, cache this command and execute - // it when the data becomes valid - User::Leave( KMPXErrDataNotReadyCacheCommand ); - } - CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) ); - mediaArray->AppendL( entry ); - CleanupStack::Pop( entry ); - } - } - else - { - const CMPXMedia& listBoxMedia = listBoxArray->MediaL( - iContainer->CurrentLbxItemIndex() ); - if ( listBoxMedia.ValueTObjectL( KMPXMediaGeneralId ) == KMPXInvalidItemId ) - { - // leave with special error code, this error - // should not trigger any error message, the operation should - // be terminated silently - User::Leave( KMPXErrDataNotReady ); - } - else - { - CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) ); - mediaArray->AppendL( entry ); - CleanupStack::Pop( entry ); - } - } - aMedia.SetTObjectValueL( KMPXMediaGeneralCollectionId, id ); - aMedia.SetCObjectValueL( KMPXMediaArrayContents, mediaArray ); - aMedia.SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() ); - iNumSongAddedToPlaylist = mediaArray->Count(); - CleanupStack::PopAndDestroy( mediaArray ); + else + { + CMPXMedia* entry( PopulateMediaLC( listBoxMedia, id ) ); + mediaArray->AppendL( entry ); + CleanupStack::Pop( entry ); + } + } + } + + aMedia.SetTObjectValueL( KMPXMediaGeneralCollectionId, id ); + aMedia.SetCObjectValueL( KMPXMediaArrayContents, mediaArray ); + aMedia.SetTObjectValueL( KMPXMediaArrayCount, mediaArray->Count() ); + iNumSongAddedToPlaylist = mediaArray->Count(); + CleanupStack::PopAndDestroy( mediaArray ); } // ----------------------------------------------------------------------------- @@ -3583,11 +3609,7 @@ const TDesC& location = aMedia.ValueText( KMPXMediaGeneralUri ); if ( location.Length() == 0 || ConeUtils::FileExists( location ) ) { -#ifdef SINGLE_CLICK_INCLUDED - HandleListBoxEventL( NULL, EEventItemSingleClicked ); -#else HandleListBoxEventL( NULL, EEventItemClicked ); -#endif HBufC* buf = HBufC::NewLC( 5 ); // magic number, array granularity buf->Des().AppendNum( iContainer->CurrentLbxItemIndex() ); // Activate view via View Framework @@ -3976,23 +3998,39 @@ } // USB flags // + CEikMenuBar* menuBar( MenuBar() ); +#ifdef SINGLE_CLICK_INCLUDED + iContainer->EnableMarking( EFalse ); + menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR_NO_MARKING ); +#else + iContainer->EnableMarking( ETrue ); + menuBar->SetMenuTitleResourceId( R_MPX_COLLECTION_VIEW_MENUBAR ); +#endif + TBool IsUSBEvent( EFalse ); if( type == EMcMsgUSBMassStorageStart || type == EMcMsgUSBMTPStart ) { iUSBOnGoing = ETrue; + IsUSBEvent = ETrue; } else if( type == EMcMsgUSBMassStorageEnd || type == EMcMsgUSBMTPEnd ) { iUSBOnGoing = EFalse; + IsUSBEvent = ETrue; RProperty::Set( KMPXViewPSUid, KMPXUSBUnblockingPSStatus, EMPXUSBUnblockingPSStatusUninitialized ); } else if( type == EMcMsgUSBMTPNotActive ) { + IsUSBEvent = ETrue; RProperty::Set( KMPXViewPSUid, KMPXUSBUnblockingPSStatus, EMPXUSBUnblockingPSStatusActive ); - } + } + if( IsUSBEvent && menuBar && menuBar->IsDisplayed() ) + { + menuBar->StopDisplayingMenuBar(); + } if ( iContainer && iIsEmbedded && type == EMcMsgUSBMassStorageEnd ) { @@ -5200,19 +5238,35 @@ // flag used only in the case when songs are added incrementally iIsAddingToPlaylist = ETrue; iNumSongAddedToPlaylist = -1; - TMPXGeneralCategory category( EMPXNoCategory ); - CMPXCommonListBoxArrayBase* array( - iContainer->ListBoxArray() ); - const CMPXMedia& media = array->MediaL( + + CMPXCommonListBoxArrayBase* listboxArray( + iContainer->ListBoxArray() ); + + const CMPXMedia& currentMedia = listboxArray->MediaL( iContainer->CurrentLbxItemIndex() ); - category = media.ValueTObjectL( - KMPXMediaGeneralCategory ); - if ( category == EMPXSong ) + + TMPXGeneralCategory mediaCategory( currentMedia.ValueTObjectL( KMPXMediaGeneralCategory )); + + const CMPXMedia& containerMedia = listboxArray->ContainerMedia(); + + TMPXGeneralType containerType( EMPXNoType ); + if ( containerMedia.IsSupported( KMPXMediaGeneralType ) ) + { + containerType = containerMedia.ValueTObjectL( KMPXMediaGeneralType ); + } + + TMPXGeneralCategory containerCategory( EMPXNoCategory ); + if ( containerMedia.IsSupported( KMPXMediaGeneralCategory ) ) + { + containerCategory = containerMedia.ValueTObjectL( KMPXMediaGeneralCategory ); + } + + if ( mediaCategory == EMPXSong || (containerCategory == EMPXAlbum && containerType== EMPXItem) ) { CMPXMedia* tracks = CMPXMedia::NewL(); CleanupStack::PushL( tracks ); - MPX_TRAPD( err, PrepareMediaForSelectedItemsL( *tracks ) ); + MPX_TRAPD( err, PrepareMediaForSelectedItemsL( *tracks, containerCategory, containerType ) ); if ( err == KErrNone ) { TBool ret = EFalse; @@ -5291,13 +5345,6 @@ EMPXMediaGeneralType | EMPXMediaGeneralCategory ) ); CMPXMedia* criteria = CMPXMedia::NewL(); CleanupStack::PushL( criteria ); - CMPXCommonListBoxArrayBase* listboxArray = - iContainer->ListBoxArray(); - const CMPXMedia& containerMedia = - listboxArray->ContainerMedia(); - TMPXGeneralCategory containerCategory( - containerMedia.ValueTObjectL( - KMPXMediaGeneralCategory ) ); if ( containerCategory == EMPXArtist ) { // artist/album level, need to specify artist ID in container ID @@ -5306,8 +5353,7 @@ criteria->SetTObjectValueL( KMPXMediaGeneralContainerId, containerId ); } - const CMPXMedia& currentMedia = listboxArray->MediaL( - iContainer->CurrentLbxItemIndex() ); + TMPXItemId id( currentMedia.ValueTObjectL( KMPXMediaGeneralId ) ); criteria->SetTObjectValueL( @@ -6000,7 +6046,7 @@ case EMPXAlbum: case EMPXArtist: { - // Album & Artist view + // Artists & Albums view aMenuPane->SetItemDimmed( EMPXCmdGoToArtistAlbums, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdGoToGenre, ETrue ); break; @@ -6040,6 +6086,8 @@ TInt currentItem( iContainer->CurrentLbxItemIndex() ); TBool isListEmpty( currentItem < 0 ); TInt selectionCount( 0 ); + + iSelectionIndexCache = iContainer->CurrentSelectionIndicesL(); // not owned if ( iSelectionIndexCache) { selectionCount = iSelectionIndexCache->Count(); @@ -6067,18 +6115,24 @@ // Always dim the find in hg implementation aMenuPane->SetItemDimmed( EMPXCmdFind, ETrue ); - MMPXPlaybackUtility* pdPlaybackUtility; - pdPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( KProgressDownloadUid ) ); - MMPXSource* pdsource( pdPlaybackUtility->Source() ); - MMPXSource* source( iPlaybackUtility->Source() ); - TBool hideNowPlaying; - hideNowPlaying = ( (pdsource == 0) - && (source == 0)); - pdPlaybackUtility->Close(); - if ( hideNowPlaying ) - { - aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, ETrue ); - } + + // Determine if we should hide "Goto now playing" option. + TBool hideNowPlaying(EFalse); + MMPXSource* source( iPlaybackUtility->Source() ); + if ( source == 0 ) + { + MMPXPlaybackUtility* pdPlaybackUtility; + pdPlaybackUtility = MMPXPlaybackUtility::UtilityL( TUid::Uid( KProgressDownloadUid ) ); + hideNowPlaying = pdPlaybackUtility->Source() ? EFalse : ETrue; + pdPlaybackUtility->Close(); + } + if (usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive) + { + aMenuPane->SetItemDimmed( EMPXCmdRefreshLibrary, ETrue ); + } + + aMenuPane->SetItemDimmed( EMPXCmdGoToNowPlaying, hideNowPlaying ); + if ( !isListEmpty ) { const CMPXMedia& media = array->MediaL( currentItem ); @@ -6091,12 +6145,13 @@ #ifdef SINGLE_CLICK_INCLUDED if ( containerType == EMPXGroup && containerCategory == EMPXAlbum ) { - // album view + // Artists & Albums view switch ( category ) { case EMPXAlbum: { - if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) + TBool landscapeOrientation = Layout_Meta_Data::IsLandscapeOrientation(); + if ( landscapeOrientation ) { aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); @@ -6105,18 +6160,32 @@ aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); } else { - aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); - aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse ); - aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); - aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); + if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive ) + { + aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdDelete, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); + } + else + { + aMenuPane->SetItemDimmed( EMPXCmdCreatePlaylist, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdAddToPlaylist, EFalse ); + aMenuPane->SetItemDimmed( EMPXCmdAddSongs, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdReorder, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdSend, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdDelete, EFalse ); + aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, EFalse ); + } } break; } @@ -6229,12 +6298,21 @@ } } aMenuPane->SetItemDimmed( EMPXCmdRemove, ETrue ); + TInt trackCount (0); + if(media.IsSupported(KMPXMediaGeneralCount)) + { + trackCount = media.ValueTObjectL( KMPXMediaGeneralCount ); + } + if( trackCount < 1 ) + { + aMenuPane->SetItemDimmed( EMPXCmdPlayItem, ETrue ); + } break; } #ifdef SINGLE_CLICK_INCLUDED case EMPXAlbum: { - // album contents view + // Album > Tracks view if ( iContainer->IsSelectedItemASong() ) { if ( usbUnblockingStatus == EMPXUSBUnblockingPSStatusActive )