equal
deleted
inserted
replaced
40 #include <aknclearer.h> |
40 #include <aknclearer.h> |
41 |
41 |
42 |
42 |
43 #include <e32const.h> |
43 #include <e32const.h> |
44 #ifdef UPNP_INCLUDED |
44 #ifdef UPNP_INCLUDED |
45 #include <upnpcopycommand.h> |
45 #include <upnpcopycommand.h> |
46 #endif |
46 #endif |
47 |
47 |
48 #include <apgcli.h> // For FF_FMTX |
48 #include <apgcli.h> // For FF_FMTX |
49 #include <AknWaitDialog.h> |
49 #include <AknWaitDialog.h> |
50 |
50 |
337 #endif // BACKSTEPPING_INCLUDED |
337 #endif // BACKSTEPPING_INCLUDED |
338 |
338 |
339 #ifdef UPNP_INCLUDED |
339 #ifdef UPNP_INCLUDED |
340 if (!iUpnpCopyCommand ) |
340 if (!iUpnpCopyCommand ) |
341 { |
341 { |
342 MPX_TRAPD ( error, iUpnpCopyCommand = CUpnpCopyCommand::NewL() ); |
342 MPX_TRAPD ( error, iUpnpCopyCommand = CUpnpCopyCommand::NewL() ); |
343 if ( error == KErrNone ) |
343 if ( error == KErrNone ) |
344 { |
344 { |
345 iUpnpFrameworkSupport = ETrue; |
345 iUpnpFrameworkSupport = ETrue; |
346 } |
346 } |
347 else |
347 else |
462 if(iDelayedErrorTimer) |
462 if(iDelayedErrorTimer) |
463 { |
463 { |
464 iDelayedErrorTimer->Cancel(); |
464 iDelayedErrorTimer->Cancel(); |
465 delete iDelayedErrorTimer; |
465 delete iDelayedErrorTimer; |
466 } |
466 } |
467 |
467 |
468 delete iOldUri; |
468 delete iOldUri; |
469 MPX_DEBUG1( "CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp exiting" ); |
469 MPX_DEBUG1( "CMPXCommonPlaybackViewImp::~CMPXCommonPlaybackViewImp exiting" ); |
470 } |
470 } |
471 |
471 |
472 // --------------------------------------------------------------------------- |
472 // --------------------------------------------------------------------------- |
730 TInt err( KErrNone ); |
730 TInt err( KErrNone ); |
731 if ( aMedia && aMedia->IsSupported(KMPXMediaGeneralUri)) |
731 if ( aMedia && aMedia->IsSupported(KMPXMediaGeneralUri)) |
732 { |
732 { |
733 const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri ); |
733 const TDesC& album = aMedia->ValueText( KMPXMediaGeneralUri ); |
734 if(!iOldUri || iOldUri->Compare(album)!= 0) |
734 if(!iOldUri || iOldUri->Compare(album)!= 0) |
735 { |
735 { |
736 |
736 |
737 TRect albumArtRect( |
737 TRect albumArtRect( |
738 iLayout->IndicatorLayout( |
738 iLayout->IndicatorLayout( |
739 ClientRect(), EAlbumArtArea ) ); |
739 ClientRect(), EAlbumArtArea ) ); |
740 |
740 |
744 *iContainer, |
744 *iContainer, |
745 albumArtRect.Size() ); ); |
745 albumArtRect.Size() ); ); |
746 delete iOldUri; |
746 delete iOldUri; |
747 iOldUri = NULL; |
747 iOldUri = NULL; |
748 iOldUri=album.AllocL(); |
748 iOldUri=album.AllocL(); |
749 } |
749 } |
750 } |
750 } |
751 |
751 |
752 if (KErrNone != err ) |
752 if (KErrNone != err ) |
753 { |
753 { |
754 // If error, show default album art |
754 // If error, show default album art |
1219 iMedia = CMPXMedia::NewL( aMedia ); |
1219 iMedia = CMPXMedia::NewL( aMedia ); |
1220 |
1220 |
1221 UpdateTrackPosInPlaylistL(); |
1221 UpdateTrackPosInPlaylistL(); |
1222 UpdateTrackInfoL( iMedia ); |
1222 UpdateTrackInfoL( iMedia ); |
1223 UpdateAlbumArtL( iMedia ); |
1223 UpdateAlbumArtL( iMedia ); |
1224 |
1224 |
1225 |
1225 |
1226 // Update duration if previously not available |
1226 // Update duration if previously not available |
1227 if ( iMedia->IsSupported( KMPXMediaGeneralDuration ) ) |
1227 if ( iMedia->IsSupported( KMPXMediaGeneralDuration ) ) |
1228 { |
1228 { |
1229 iDuration = iMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration ) / |
1229 iDuration = iMedia->ValueTObjectL<TInt>( KMPXMediaGeneralDuration ) / |
1283 } |
1283 } |
1284 } |
1284 } |
1285 } |
1285 } |
1286 else |
1286 else |
1287 { |
1287 { |
1288 |
1288 |
1289 #ifndef CAMESE_IN_DRM_UTILITY |
1289 #ifndef CAMESE_IN_DRM_UTILITY |
1290 // Check if Camese Support is enabled and |
1290 // Check if Camese Support is enabled and |
1291 // if the error is caused by PV being unable |
1291 // if the error is caused by PV being unable |
1292 // to retrieve media properties before handling |
1292 // to retrieve media properties before handling |
1293 // the error here. |
1293 // the error here. |
1294 if (iCameseSuperDistSupport && aError == KErrPermissionDenied) |
1294 if (iCameseSuperDistSupport && aError == KErrPermissionDenied) |
1430 ) |
1430 ) |
1431 { |
1431 { |
1432 iIgnoredByUsbEvent = EFalse; |
1432 iIgnoredByUsbEvent = EFalse; |
1433 return; |
1433 return; |
1434 } |
1434 } |
1435 |
1435 |
1436 // else iIgnoredByUsbEvent==EFalse, then furtherly check USB status in central repository. |
1436 // else iIgnoredByUsbEvent==EFalse, then furtherly check USB status in central repository. |
1437 else if ( !iIgnoredByUsbEvent ) |
1437 else if ( !iIgnoredByUsbEvent ) |
1438 { |
1438 { |
1439 TInt usbStatus; |
1439 TInt usbStatus; |
1440 RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); |
1440 RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); |
1441 |
1441 |
1442 if ( KUsbPersonalityIdMS == usbStatus && KErrDisMounted == aError ) |
1442 if ( KUsbPersonalityIdMS == usbStatus && KErrDisMounted == aError ) |
1443 { |
1443 { |
1444 // Igore this error when USB is avtive in MassStrorage mode. |
1444 // Igore this error when USB is avtive in MassStrorage mode. |
1445 return; |
1445 return; |
1446 } |
1446 } |
1535 case KErrNotSupported: |
1535 case KErrNotSupported: |
1536 case KErrCorrupt: |
1536 case KErrCorrupt: |
1537 case KErrNotFound: |
1537 case KErrNotFound: |
1538 case KErrPathNotFound: |
1538 case KErrPathNotFound: |
1539 case KErrDivideByZero: |
1539 case KErrDivideByZero: |
1540 case KErrGeneral: |
1540 case KErrGeneral: |
1541 { |
1541 { |
1542 // USB dismounts the disk, it cannot find any records |
1542 // USB dismounts the disk, it cannot find any records |
1543 if( !iDatabaseNotReady ) |
1543 if( !iDatabaseNotReady ) |
1544 { |
1544 { |
1545 SkipOnErrorL( currentIndex, plCount ); |
1545 SkipOnErrorL( currentIndex, plCount ); |
1885 // |
1885 // |
1886 void CMPXCommonPlaybackViewImp::PrepareStatusPaneForPlaybackViewL() |
1886 void CMPXCommonPlaybackViewImp::PrepareStatusPaneForPlaybackViewL() |
1887 { |
1887 { |
1888 iPreviousStatusPaneLayout = StatusPane()->CurrentLayoutResId(); |
1888 iPreviousStatusPaneLayout = StatusPane()->CurrentLayoutResId(); |
1889 TInt resId( KErrNone ); |
1889 TInt resId( KErrNone ); |
|
1890 |
|
1891 // We need to restore the status pane if not visible. |
|
1892 if (!StatusPane()->IsVisible()) |
|
1893 { |
|
1894 StatusPane()->MakeVisible(ETrue); |
|
1895 } |
1890 |
1896 |
1891 if ( !Layout_Meta_Data::IsLandscapeOrientation() ) |
1897 if ( !Layout_Meta_Data::IsLandscapeOrientation() ) |
1892 { |
1898 { |
1893 if ( iPreviousStatusPaneLayout != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ) |
1899 if ( iPreviousStatusPaneLayout != R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT ) |
1894 { |
1900 { |
2077 } |
2083 } |
2078 else |
2084 else |
2079 { |
2085 { |
2080 isEqual = EFalse; |
2086 isEqual = EFalse; |
2081 } |
2087 } |
2082 |
2088 |
2083 if ( isEqual ) // if they're the same path |
2089 if ( isEqual ) // if they're the same path |
2084 { |
2090 { |
2085 pbPath->Back(); |
2091 pbPath->Back(); |
2086 iViewUtility->PushDefaultHistoryL(); |
2092 iViewUtility->PushDefaultHistoryL(); |
2087 iCollectionUtility->Collection().OpenL( *pbPath ); |
2093 iCollectionUtility->Collection().OpenL( *pbPath ); |
2136 TInt val(0); |
2142 TInt val(0); |
2137 CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures ); |
2143 CRepository* repository = CRepository::NewL( KCRUidMPXMPFeatures ); |
2138 repository->Get( KMPXMPLocalVariation, val ); |
2144 repository->Get( KMPXMPLocalVariation, val ); |
2139 TBool startInAlbumMenu = val&KMPXStartMusicPlayerinArtistsandAlbums ? ETrue : EFalse; |
2145 TBool startInAlbumMenu = val&KMPXStartMusicPlayerinArtistsandAlbums ? ETrue : EFalse; |
2140 delete repository; |
2146 delete repository; |
2141 |
2147 |
2142 if ( startInAlbumMenu ) |
2148 if ( startInAlbumMenu ) |
2143 { |
2149 { |
2144 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); |
2150 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); |
2145 CleanupStack::PushL( cpath ); |
2151 CleanupStack::PushL( cpath ); |
2146 cpath->AppendL(3); // Albums |
2152 cpath->AppendL(3); // Albums |
2147 MPX_DEBUG_PATH(*cpath); |
2153 MPX_DEBUG_PATH(*cpath); |
2148 iCollectionUtility->Collection().OpenL( *cpath ); |
2154 iCollectionUtility->Collection().OpenL( *cpath ); |
2149 CleanupStack::PopAndDestroy( cpath ); |
2155 CleanupStack::PopAndDestroy( cpath ); |
2150 } |
2156 } |
2151 else |
2157 else |
2152 { |
2158 { |
2153 // Handle Goto Music menu |
2159 // Handle Goto Music menu |
2154 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); |
2160 CMPXCollectionPath* cpath = iCollectionUiHelper->MusicMenuPathL(); |
2466 TUid activeView = iViewUtility->ActiveViewImplementationUid(); |
2472 TUid activeView = iViewUtility->ActiveViewImplementationUid(); |
2467 if ( KMPXEqualizerViewImplementationId == activeView ) |
2473 if ( KMPXEqualizerViewImplementationId == activeView ) |
2468 { |
2474 { |
2469 iContainer->AdjustOrdinalPosition( KMPXPlaybackViewWindowBackground ); |
2475 iContainer->AdjustOrdinalPosition( KMPXPlaybackViewWindowBackground ); |
2470 } |
2476 } |
2471 else |
2477 else |
2472 { |
2478 { |
2473 iContainer->SetRect( ClientRect() ); |
2479 iContainer->SetRect( ClientRect() ); |
2474 iContainer->DrawDeferred(); |
2480 iContainer->DrawDeferred(); |
2475 } |
2481 } |
2476 } |
2482 } |
2494 delete iOldUri; |
2500 delete iOldUri; |
2495 iOldUri = NULL; |
2501 iOldUri = NULL; |
2496 CAknToolbar* toolbar = Toolbar(); |
2502 CAknToolbar* toolbar = Toolbar(); |
2497 if ( toolbar ) |
2503 if ( toolbar ) |
2498 { |
2504 { |
2499 AppUi()->AddToStackL(toolbar, |
2505 AppUi()->AddToStackL(toolbar, |
2500 ECoeStackPriorityCba, |
2506 ECoeStackPriorityCba, |
2501 ECoeStackFlagRefusesFocus |
2507 ECoeStackFlagRefusesFocus |
2502 | ECoeStackFlagRefusesAllKeys ); |
2508 | ECoeStackFlagRefusesAllKeys ); |
2503 toolbar->MakeVisible( ETrue ); |
2509 toolbar->MakeVisible( ETrue ); |
2504 toolbar->HideItemsAndDrawOnlyBackground(EFalse); |
2510 toolbar->HideItemsAndDrawOnlyBackground(EFalse); |
|
2511 toolbar->SetSkinBackgroundId(KAknsIIDQsnBgScreenMp); |
2505 toolbar->SetToolbarVisibility(ETrue); |
2512 toolbar->SetToolbarVisibility(ETrue); |
2506 } |
2513 } |
2507 PrepareStatusPaneForPlaybackViewL(); |
2514 PrepareStatusPaneForPlaybackViewL(); |
2508 |
2515 |
2509 iRandomMode = KErrNotFound; |
2516 iRandomMode = KErrNotFound; |
2523 iIdle = NULL; |
2530 iIdle = NULL; |
2524 } |
2531 } |
2525 iIdle = CIdle::NewL( CActive::EPriorityIdle ); |
2532 iIdle = CIdle::NewL( CActive::EPriorityIdle ); |
2526 iIdle->Start( TCallBack( CMPXCommonPlaybackViewImp::DeferredAlbumArtExtractCallback, this ) ); |
2533 iIdle->Start( TCallBack( CMPXCommonPlaybackViewImp::DeferredAlbumArtExtractCallback, this ) ); |
2527 |
2534 |
2528 // Retrieve current repeat & random modes, fix for EJZU-7NZ9CD |
2535 // Retrieve current repeat & random modes, fix for EJZU-7NZ9CD |
2529 iPlaybackUtility->PropertyL( *this, EPbPropertyRandomMode ); |
2536 iPlaybackUtility->PropertyL( *this, EPbPropertyRandomMode ); |
2530 iPlaybackUtility->PropertyL( *this, EPbPropertyRepeatMode ); |
2537 iPlaybackUtility->PropertyL( *this, EPbPropertyRepeatMode ); |
2531 |
2538 |
2532 // Set title |
2539 // Set title |
2533 // Ignore errors from updating title pane since if that is not |
2540 // Ignore errors from updating title pane since if that is not |
2545 } ); |
2552 } ); |
2546 |
2553 |
2547 CEikButtonGroupContainer* cba = Cba(); |
2554 CEikButtonGroupContainer* cba = Cba(); |
2548 if ( cba ) |
2555 if ( cba ) |
2549 { |
2556 { |
2550 CCoeControl* control = cba->ButtonGroup()->AsControl(); |
|
2551 static_cast<CEikCba*>( control )-> |
|
2552 SetSkinBackgroundId( KAknsIIDQsnBgAreaControlMp ); |
|
2553 |
2557 |
2554 #ifdef __ENABLE_MSK |
2558 #ifdef __ENABLE_MSK |
2555 iCommonUiHelper->SetMiddleSoftKeyLabelL( |
2559 iCommonUiHelper->SetMiddleSoftKeyLabelL( |
2556 *cba, |
2560 *cba, |
2557 R_TEXT_SOFTKEY_EMPTY, |
2561 R_TEXT_SOFTKEY_EMPTY, |
2730 TInt aResourceId, |
2734 TInt aResourceId, |
2731 CEikMenuPane* aMenuPane ) |
2735 CEikMenuPane* aMenuPane ) |
2732 { |
2736 { |
2733 TInt usbUnblockingStatus; |
2737 TInt usbUnblockingStatus; |
2734 RProperty::Get( KMPXViewPSUid, |
2738 RProperty::Get( KMPXViewPSUid, |
2735 KMPXUSBUnblockingPSStatus, |
2739 KMPXUSBUnblockingPSStatus, |
2736 usbUnblockingStatus); |
2740 usbUnblockingStatus); |
2737 |
2741 |
2738 switch ( aResourceId ) |
2742 switch ( aResourceId ) |
2739 { |
2743 { |
2740 case R_MPX_PLAYBACK_VIEW_MENU: |
2744 case R_MPX_PLAYBACK_VIEW_MENU: |
2941 { |
2945 { |
2942 const CMPXMediaArray* mediaArray = |
2946 const CMPXMediaArray* mediaArray = |
2943 iUserPlaylists->Value<CMPXMediaArray>( |
2947 iUserPlaylists->Value<CMPXMediaArray>( |
2944 KMPXMediaArrayContents ); |
2948 KMPXMediaArrayContents ); |
2945 User::LeaveIfNull(const_cast<CMPXMediaArray*>(mediaArray)); |
2949 User::LeaveIfNull(const_cast<CMPXMediaArray*>(mediaArray)); |
2946 |
2950 |
2947 TInt entriesCount( mediaArray->Count() ); |
2951 TInt entriesCount( mediaArray->Count() ); |
2948 MPX_DEBUG2( "CMPXCommonPlaybackViewImp::DynInitMenuPaneL Entry count = %d", entriesCount ); |
2952 MPX_DEBUG2( "CMPXCommonPlaybackViewImp::DynInitMenuPaneL Entry count = %d", entriesCount ); |
2949 if ( entriesCount > 0 ) |
2953 if ( entriesCount > 0 ) |
2950 { |
2954 { |
2951 dim = EFalse; |
2955 dim = EFalse; |
2984 if (iContainer && !iSwitchingView) |
2988 if (iContainer && !iSwitchingView) |
2985 { |
2989 { |
2986 if ( !Layout_Meta_Data::IsLandscapeOrientation() ) |
2990 if ( !Layout_Meta_Data::IsLandscapeOrientation() ) |
2987 { |
2991 { |
2988 TUid activeView = iViewUtility->ActiveViewImplementationUid(); |
2992 TUid activeView = iViewUtility->ActiveViewImplementationUid(); |
2989 |
2993 |
2990 // only switch to flat if current view is not equalizer |
2994 // only switch to flat if current view is not equalizer |
2991 // since it'll mess up equilizer's screen |
2995 // since it'll mess up equilizer's screen |
2992 if ( StatusPane()->CurrentLayoutResId() != |
2996 if ( StatusPane()->CurrentLayoutResId() != |
2993 R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT && |
2997 R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT && |
2994 activeView != KMPXEqualizerViewImplementationId ) |
2998 activeView != KMPXEqualizerViewImplementationId ) |
3007 } |
3011 } |
3008 } |
3012 } |
3009 |
3013 |
3010 iContainer->SetRect( ClientRect() ); |
3014 iContainer->SetRect( ClientRect() ); |
3011 delete iOldUri; |
3015 delete iOldUri; |
3012 iOldUri = NULL; |
3016 iOldUri = NULL; |
3013 // Update album art |
3017 // Update album art |
3014 TRAP_IGNORE( UpdateAlbumArtL( iMedia )); |
3018 TRAP_IGNORE( UpdateAlbumArtL( iMedia )); |
3015 TRAP_IGNORE( UpdateTrackInfoL( iMedia )); |
3019 TRAP_IGNORE( UpdateTrackInfoL( iMedia )); |
3016 iContainer->DrawDeferred(); |
3020 iContainer->DrawDeferred(); |
3017 } |
3021 } |
3114 // |
3118 // |
3115 EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisible() |
3119 EXPORT_C TBool CMPXCommonPlaybackViewImp::IsUpnpVisible() |
3116 { |
3120 { |
3117 MPX_FUNC( "CMPXCommonPlaybackViewImp::IsUpnpVisible" ); |
3121 MPX_FUNC( "CMPXCommonPlaybackViewImp::IsUpnpVisible" ); |
3118 TBool returnValue = EFalse; |
3122 TBool returnValue = EFalse; |
3119 |
3123 |
3120 #ifdef UPNP_INCLUDED |
3124 #ifdef UPNP_INCLUDED |
3121 if ( iUpnpCopyCommand && iUpnpFrameworkSupport ) |
3125 if ( iUpnpCopyCommand && iUpnpFrameworkSupport ) |
3122 { |
3126 { |
3123 returnValue = iUpnpCopyCommand->IsAvailableL(); |
3127 returnValue = iUpnpCopyCommand->IsAvailableL(); |
3124 } |
3128 } |
3125 #endif |
3129 #endif |
3126 return returnValue; |
3130 return returnValue; |
3127 |
3131 |
3128 } |
3132 } |
3129 |
3133 |
3130 // ----------------------------------------------------------------------------- |
3134 // ----------------------------------------------------------------------------- |
3131 // CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL |
3135 // CMPXCommonPlaybackViewImp::AddPlayersNamesToMenuL |
3555 default: |
3559 default: |
3556 { |
3560 { |
3557 break; |
3561 break; |
3558 } |
3562 } |
3559 } |
3563 } |
3560 |
3564 |
3561 if( setText ) |
3565 if( setText ) |
3562 { |
3566 { |
3563 CAknErrorNote* errNote = new(ELeave) CAknErrorNote(ETrue); |
3567 CAknErrorNote* errNote = new(ELeave) CAknErrorNote(ETrue); |
3564 errNote->SetTimeout(CAknNoteDialog::ELongTimeout); |
3568 errNote->SetTimeout(CAknNoteDialog::ELongTimeout); |
3565 errNote->ExecuteLD( *dialogText ); |
3569 errNote->ExecuteLD( *dialogText ); |
3898 CAknButton* rwControl; |
3902 CAknButton* rwControl; |
3899 rwControl = (CAknButton*)(toolbar->ComponentControl( 0 )); |
3903 rwControl = (CAknButton*)(toolbar->ComponentControl( 0 )); |
3900 CAknButton* pausePlayControl; |
3904 CAknButton* pausePlayControl; |
3901 pausePlayControl = (CAknButton*)(toolbar->ComponentControl( 1 )); |
3905 pausePlayControl = (CAknButton*)(toolbar->ComponentControl( 1 )); |
3902 CAknButton* fwControl; |
3906 CAknButton* fwControl; |
3903 fwControl = (CAknButton*)(toolbar->ComponentControl( 2 )); |
3907 fwControl = (CAknButton*)(toolbar->ComponentControl( 2 )); |
3904 MMPXSource* s = iPlaybackUtility->Source(); |
3908 MMPXSource* s = iPlaybackUtility->Source(); |
3905 if ( s ) |
3909 if ( s ) |
3906 { |
3910 { |
3907 CMPXCollectionPlaylist* playlist = s->PlaylistL(); |
3911 CMPXCollectionPlaylist* playlist = s->PlaylistL(); |
3908 if ( playlist ) |
3912 if ( playlist ) |
3963 // |
3967 // |
3964 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr ) |
3968 TInt CMPXCommonPlaybackViewImp::HandleDelayedError( TAny* aPtr ) |
3965 { |
3969 { |
3966 CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr ); |
3970 CMPXCommonPlaybackViewImp* pv = reinterpret_cast<CMPXCommonPlaybackViewImp*>( aPtr ); |
3967 pv->iDelayedErrorTimer->Cancel(); |
3971 pv->iDelayedErrorTimer->Cancel(); |
3968 |
3972 |
3969 // compare index |
3973 // compare index |
3970 if ( pv->iPlaybackUtility ) |
3974 if ( pv->iPlaybackUtility ) |
3971 { |
3975 { |
3972 MMPXSource* source( pv->iPlaybackUtility->Source() ); |
3976 MMPXSource* source( pv->iPlaybackUtility->Source() ); |
3973 if ( source ) |
3977 if ( source ) |