videoplayback/hbvideoplaybackview/controlsrc/mpxvideoplaybackcontrolscontroller.cpp
changeset 46 adbe7d5ba2f5
parent 28 c48470be1ba7
--- a/videoplayback/hbvideoplaybackview/controlsrc/mpxvideoplaybackcontrolscontroller.cpp	Fri Jun 11 13:39:54 2010 +0300
+++ b/videoplayback/hbvideoplaybackview/controlsrc/mpxvideoplaybackcontrolscontroller.cpp	Wed Jun 23 18:14:16 2010 +0300
@@ -15,7 +15,7 @@
 *
 */
 
-// Version : %version: da1mmcf#40 %
+// Version : %version: da1mmcf#41 %
 
 
 
@@ -35,6 +35,8 @@
 #include <hbiconanimationmanager.h>
 #include <shareui.h>
 #include <hbinstance.h>
+#include <hbtapgesture.h>
+#include <hbpangesture.h>
 
 #include "mpxvideoviewwrapper.h"
 #include "hbvideobaseplaybackview.h"
@@ -96,7 +98,7 @@
                        this, SLOT( handleOrientationChanged( Qt::Orientation ) ) );
 
     MPX_DEBUG(
-        _L("QMPXVideoPlaybackControlsController::initializeController() orientation = %d, ok =%d"), 
+        _L("QMPXVideoPlaybackControlsController::initializeController() orientation = %d, ok =%d"),
         mOrientation, ok );
 
     setParent( mView );
@@ -129,15 +131,16 @@
 
     mFileDetails->mRNFormat = realFormat( mFileDetails->mClipName );
 
+    //
+    // Controls dismissing timer
+    //
     mControlsTimer = new QTimer( this );
     mControlsTimer->setInterval( KMPXControlsTimeOut );
     mControlsTimer->setSingleShot( false );
     connect( mControlsTimer, SIGNAL( timeout() ), this, SLOT( hideAllControls() ) );
 
-    connect( mView, SIGNAL( tappedOnScreen() ), this, SLOT( handleTappedOnScreen() ) );
-	
     mControlsPolicy = new QMPXVideoPlaybackControlPolicy();
-    
+
     mControlsConfig = new QMPXVideoPlaybackControlConfiguration( this );
     connect( mControlsConfig, SIGNAL( controlListUpdated() ), this, SLOT( controlsListUpdated() ) );
     mControlsConfig->createControlList();
@@ -152,14 +155,30 @@
     mVolumeControl->setRange( KPbPlaybackVolumeLevelMin, KPbPlaybackVolumeLevelMax );
 
     //
+    // grab tap gesture
+    //
+    mView->grabGesture( Qt::TapGesture );
+    connect( mView, SIGNAL( tappedOnScreen() ), this, SLOT( handleTappedOnScreen() ) );
+
+    //
+    // grab pan gesture for playlist
+    //
+    if ( mFileDetails->mMultiItemPlaylist )
+    {
+        mView->grabGesture( Qt::PanGesture );
+        connect( mView, SIGNAL( pannedToRight() ), this, SLOT( skipToPreviousVideoItem() ) );
+        connect( mView, SIGNAL( pannedToLeft() ), this, SLOT( skipToNextVideoItem() ) );
+    }
+
+    //
     // if videoplayback is in service mode, create a videoservices instance
     //
     if ( XQServiceUtil::isService() && ! mVideoServices )
     {
         //
-        // obtain VideoServices instance 
+        // obtain VideoServices instance
         //
-        mVideoServices = VideoServices::instance(); 
+        mVideoServices = VideoServices::instance();
 
         //
         // allow 'attach' operation only for non-streaming media clips
@@ -170,14 +189,14 @@
             // determine if this is 'attach' operation
             //
             mIsAttachOperation = ( mVideoServices->currentService() == VideoServices::EUriFetcher );
-            
+
             if ( mIsAttachOperation )
             {
                 //
                 // connect signal filePath() to videoservices slot itemSelected()
                 //
-                connect( this, SIGNAL( attachVideoPath( const QString& ) ), 
-                         mVideoServices, SLOT( itemSelected( const QString& ) ) );                        
+                connect( this, SIGNAL( attachVideoPath( const QString& ) ),
+                         mVideoServices, SLOT( itemSelected( const QString& ) ) );
             }
         }
     }
@@ -191,8 +210,18 @@
 {
     MPX_ENTER_EXIT(_L("QMPXVideoPlaybackControlsController::~QMPXVideoPlaybackControlsController()"));
 
+    mView->ungrabGesture( Qt::TapGesture );
+    disconnect( mView, SIGNAL( tappedOnScreen() ), this, SLOT( handleTappedOnScreen() ) );
+
+    if ( mFileDetails->mMultiItemPlaylist )
+    {
+        mView->ungrabGesture( Qt::PanGesture );
+
+        disconnect( mView, SIGNAL( pannedToRight() ), this, SLOT( skipToNextVideoItem() ) );
+        disconnect( mView, SIGNAL( pannedToLeft() ), this, SLOT( skipToPreviousVideoItem() ) );
+    }
+
     disconnect( mControlsConfig, SIGNAL( controlListUpdated() ), this, SLOT( controlsListUpdated() ) );
-    disconnect( mView, SIGNAL( tappedOnScreen() ), this, SLOT( handleTappedOnScreen() ) );
     disconnect( mControlsTimer, SIGNAL( timeout() ), this, SLOT( hideAllControls() ) );
     disconnect( hbInstance->allMainWindows()[0], SIGNAL( orientationChanged( Qt::Orientation ) ),
                 this, SLOT( handleOrientationChanged( Qt::Orientation ) ) );
@@ -209,7 +238,7 @@
 
     if ( mRNLogoTimer )
     {
-        disconnect( mRNLogoTimer, SIGNAL( timeout() ), this, SLOT( handleRNLogoTimeout() ) );        
+        disconnect( mRNLogoTimer, SIGNAL( timeout() ), this, SLOT( handleRNLogoTimeout() ) );
 
         delete mRNLogoTimer;
         mRNLogoTimer = NULL;
@@ -236,7 +265,7 @@
     if ( mThumbnailManager )
     {
         delete mThumbnailManager;
-        mThumbnailManager = NULL;                    
+        mThumbnailManager = NULL;
     }
 
     if ( mVolumeControl )
@@ -244,18 +273,18 @@
         delete mVolumeControl;
         mVolumeControl = NULL;
     }
-    
+
     if ( mIsAttachOperation )
     {
         //
         // disable connection for 'attach' operation
         //
-        disconnect( this, SIGNAL( attachVideoPath( const QString& ) ), 
-                    mVideoServices, SLOT( itemSelected( const QString& ) ) );    
+        disconnect( this, SIGNAL( attachVideoPath( const QString& ) ),
+                    mVideoServices, SLOT( itemSelected( const QString& ) ) );
     }
-    
+
     if ( mVideoServices )
-    {    
+    {
         //
         // decrease videoservices instance count
         //
@@ -275,6 +304,8 @@
 
     mFileDetails = details;
 
+    mFileDetails->mRNFormat = realFormat( mFileDetails->mClipName );
+
     mControlsConfig->updateControlsWithFileDetails();
 
     //
@@ -438,7 +469,7 @@
             }
             default:
             {
-                break;    
+                break;
             }
         }
     }
@@ -482,7 +513,7 @@
             //  Update the policy property based on file details and view mode to the controls
             //
             TUint properties = 0;
-            mControlsPolicy->setControlProperties( 
+            mControlsPolicy->setControlProperties(
                     mControls[i]->controlIndex(), properties, mFileDetails, mViewMode );
             mControls[i]->updateControlProperties( properties );
 
@@ -567,7 +598,7 @@
             // Status key (signal + title + back key)
             //
             control = new QMPXVideoPlaybackStatusPaneControl( this,
-                                                              controlIndex, 
+                                                              controlIndex,
                                                               NULL,
                                                               properties );
             mControls.append( control );
@@ -580,7 +611,7 @@
             // Button bar
             //
             QGraphicsWidget *widget = mLoader->findWidget( QString( "controlBarLayout" ) );
-            QMPXVideoPlaybackControlBar *controlBar = 
+            QMPXVideoPlaybackControlBar *controlBar =
                 qobject_cast<QMPXVideoPlaybackControlBar*>( widget );
             controlBar->initialize();
 
@@ -595,7 +626,7 @@
         case EMPXFileDetailsWidget:
         {
             QGraphicsWidget *widget = mLoader->findWidget( QString( "fileDetailsLayout" ) );
-            QMPXVideoPlaybackFileDetailsWidget *fileDetails = 
+            QMPXVideoPlaybackFileDetailsWidget *fileDetails =
                 qobject_cast<QMPXVideoPlaybackFileDetailsWidget*>( widget );
 
             control = new QMPXVideoPlaybackFullScreenControl( this,
@@ -639,7 +670,7 @@
         case EMPXDetailsViewPlaybackWindow:
         {
             QGraphicsWidget *widget = mLoader->findWidget( QString( "detailsPlaybackWindow" ) );
-            QMPXVideoPlaybackDetailsPlaybackWindow *detailsPlaybackWindow = 
+            QMPXVideoPlaybackDetailsPlaybackWindow *detailsPlaybackWindow =
                     qobject_cast<QMPXVideoPlaybackDetailsPlaybackWindow*>( widget );
             detailsPlaybackWindow->initialize();
 
@@ -664,33 +695,41 @@
     MPX_ENTER_EXIT(_L("QMPXVideoPlaybackControlsController::handleTappedOnScreen()"));
 
     //
-    //  Toggle visibility only if the followings are true 
-    //  - TV-Out is not connected
-    //  - Video is available
-    //  - We are in playing or paused state
+    // If we are in full screen view, toggle the visibility when playing and paused
+    // If we are in details view, issue playpause
+    // If we are in audio only view, ignore
     //
-    if ( ! isTvOutConnected() &&
-         mFileDetails->mVideoEnabled &&
-         ( mState == EPbStatePlaying || mState == EPbStatePaused ) )
+    switch( mViewMode )
     {
-        if ( mViewMode == EFullScreenView )
+        case EFullScreenView:
         {
-            if ( isVisible() )
+            if ( mState == EPbStatePlaying || mState == EPbStatePaused )
             {
-                //
-                // If the volume control is visible, hide it
-                //
-                if ( mVolumeControl->isVisible() )
+                if ( isVisible() )
                 {
-                    mVolumeControl->setVisible( false );
+                    //
+                    // If the volume control is visible, hide it
+                    //
+                    if ( mVolumeControl->isVisible() )
+                    {
+                        mVolumeControl->setVisible( false );
+                    }
+
+                    hideAllControls();
                 }
-
-                hideAllControls();
+                else
+                {
+                    showControls();
+                }
             }
-            else
-            {
-                showControls();
-            }            
+
+            break;
+        }
+        case EDetailsView:
+        {
+            handleCommand( EMPXPbvCmdPlayPause );
+
+            break;
         }
     }
 }
@@ -753,7 +792,7 @@
         {
             mControls[i]->setVisibility( mState );
         }
-    }        
+    }
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -786,7 +825,7 @@
 //   QMPXVideoPlaybackControlsController::handleCommand()
 // -------------------------------------------------------------------------------------------------
 //
-void QMPXVideoPlaybackControlsController::handleCommand( 
+void QMPXVideoPlaybackControlsController::handleCommand(
         TMPXVideoPlaybackViewCommandIds command, int value )
 {
     MPX_DEBUG(_L("QMPXVideoPlaybackControlsController::handleCommand(%d)"), command);
@@ -795,14 +834,14 @@
     {
         case EMPXPbvCmdSetPosition:
         {
-            TRAP_IGNORE( mViewWrapper->SetPropertyL( EPbPropertyPosition, 
+            TRAP_IGNORE( mViewWrapper->SetPropertyL( EPbPropertyPosition,
                                                      value * KPbMilliMultiplier ) );
             break;
         }
         case EMPXPbvCmdSetVolume:
         {
             TRAP_IGNORE( mViewWrapper->SetPropertyL( EPbPropertyVolume, value ) );
-            break;            
+            break;
         }
         default:
         {
@@ -970,7 +1009,7 @@
                         fileName->Des()[j]='/';
                     }
                 }
-                err = filePath.Set( fileName->Des(), NULL, NULL );                
+                err = filePath.Set( fileName->Des(), NULL, NULL );
             }
 
             if ( fileName )
@@ -1017,10 +1056,10 @@
 bool QMPXVideoPlaybackControlsController::realFormatForLocal()
 {
     bool realFormat = false;
-    
+
     QString real( "real" );
     QString rn( "rn" );
-    
+
     if ( mFileDetails->mMimeType.contains( real, Qt::CaseInsensitive ) ||
          mFileDetails->mMimeType.contains( rn, Qt::CaseInsensitive ) )
     {
@@ -1123,7 +1162,7 @@
     }
 
     //
-    // Change the view. 
+    // Change the view.
     // If Tv-out is connected, go to AudioOnlyView.
     // If not, go back to default view.
     //
@@ -1141,7 +1180,7 @@
 //   QMPXVideoPlaybackControlsController::changeViewMode
 // -------------------------------------------------------------------------------------------------
 //
-void QMPXVideoPlaybackControlsController::changeViewMode( 
+void QMPXVideoPlaybackControlsController::changeViewMode(
         TPlaybackViewMode viewMode, bool transitionEffect )
 {
     MPX_DEBUG(_L("QMPXVideoPlaybackControlsController::changeViewMode( %d, %d )"),
@@ -1215,7 +1254,10 @@
 {
     MPX_DEBUG(_L("QMPXVideoPlaybackControlsController::skipToPreviousVideoItem()"));
 
-    handleCommand( EMPXPbvCmdPreviousListItem );
+    if ( mViewMode == EFullScreenView )
+    {
+        handleCommand( EMPXPbvCmdPreviousListItem );
+    }
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1226,7 +1268,10 @@
 {
     MPX_DEBUG(_L("QMPXVideoPlaybackControlsController::skipToNextVideoItem()"));
 
-    handleCommand( EMPXPbvCmdNextListItem );
+    if ( mViewMode == EFullScreenView )
+    {
+        handleCommand( EMPXPbvCmdNextListItem );
+    }
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1246,7 +1291,7 @@
 
         MPX_DEBUG(_L("QMPXVideoPlaybackControlsController::updateVideoRect() : mViewMode = %d )"),
                 mViewMode );
-			
+
         if ( mViewMode == EDetailsView )
         {
             QGraphicsWidget *parent = mLoader->findWidget( QString( "detailsPlaybackWindow" ) );
@@ -1260,7 +1305,7 @@
             rect = widget->geometry();
         }
 
-        mViewWrapper->UpdateVideoRect( 
+        mViewWrapper->UpdateVideoRect(
                 rect.x(), rect.y(), rect.width(), rect.height(), transitionEffect );
     }
 }
@@ -1295,7 +1340,7 @@
         {
             tvOutBitmap->setVisible( true );
         }
-        else if ( mFileDetails->mRNFormat ) 
+        else if ( mFileDetails->mRNFormat )
         {
             realAudioOnlyBitmap->setVisible( true );
         }
@@ -1307,7 +1352,7 @@
         {
             audioOnlyBitmap->setVisible( true );
         }
-    }    
+    }
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1325,12 +1370,12 @@
     {
         if ( mThumbNailState == EThumbNailEmpty )
         {
-            mThumbnailManager = new ThumbnailManager(); ; 
+            mThumbnailManager = new ThumbnailManager(); ;
 
             mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailLarge );
             mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForPerformance );
-         
-            if ( connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ), 
+
+            if ( connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
                           this, SLOT( handleThumbnailReady( QPixmap , void * , int , int ) ) ) )
             {
                 mThumbnailManager->getThumbnail( mFileDetails->mClipName );
@@ -1348,7 +1393,7 @@
 // QMPXVideoPlaybackControlsController::handleThumbnailReady()
 // -------------------------------------------------------------------------------------------------
 //
-void QMPXVideoPlaybackControlsController::handleThumbnailReady( 
+void QMPXVideoPlaybackControlsController::handleThumbnailReady(
         QPixmap tnData, void *internal , int id, int error )
 {
     Q_UNUSED( internal );
@@ -1374,7 +1419,7 @@
 
     setDefaultBitmap();
 
-    disconnect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ), 
+    disconnect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
                 this, SLOT( handleThumbnailReady( QPixmap , void * , int , int ) ) );
 }
 
@@ -1386,17 +1431,17 @@
 {
     MPX_ENTER_EXIT(_L("QMPXVideoPlaybackControlsController::attachVideo()"),
                    _L("file = %s"), mFileDetails->mClipName.data() );
-    
+
     //
     // close playback view
     //
     mView->closePlaybackView();
-	
+
     //
     // emit signal to launch videoservices itemSelected() slot
     //
     emit( attachVideoPath( mFileDetails->mClipName ) );
-    
+
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1407,19 +1452,19 @@
 {
     MPX_ENTER_EXIT(_L("QMPXVideoPlaybackControlsController::sendVideo()"),
                    _L("file = %s"), mFileDetails->mClipName.data() );
-    
+
     //
     // pause playback
     //
     handleCommand( EMPXPbvCmdPause );
-    
-    // 
+
+    //
     // send video to shareUI
     //
     ShareUi dlg;
     QStringList fileList;
     fileList.append( mFileDetails->mClipName );
-    dlg.send( fileList, true );   
+    dlg.send( fileList, true );
 }
 
 // -------------------------------------------------------------------------------------------------
@@ -1443,7 +1488,7 @@
         mRNLogoTimer = new QTimer( this );
         mRNLogoTimer->setInterval( KMPXRNLogoTimeOut );
         mRNLogoTimer->setSingleShot( true );
-        connect( mRNLogoTimer, SIGNAL( timeout() ), this, SLOT( handleRNLogoTimeout() ) );        
+        connect( mRNLogoTimer, SIGNAL( timeout() ), this, SLOT( handleRNLogoTimeout() ) );
 
         mRNLogoTimer->start();
     }