videoplayback/hbvideoplaybackview/controlsrc/mpxvideoplaybackfiledetailswidget.cpp
changeset 30 4f111d64a341
child 34 bbb98528c666
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/hbvideoplaybackview/controlsrc/mpxvideoplaybackfiledetailswidget.cpp	Thu Apr 01 22:38:49 2010 +0300
@@ -0,0 +1,419 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of QMPXVideoPlaybackFileDetailsWidget
+*
+*/
+
+// Version : %version:  13 %
+
+
+
+#include <qfileinfo>
+#include <qgraphicslinearlayout>
+#include <qdatetime>
+#include <qdir>
+
+#include <hblistwidgetitem.h>
+#include <hbratingslider.h>
+#include <hblistwidget.h>
+
+#include "mpxvideo_debug.h"
+#include "mpxvideoplaybackdocumentloader.h"
+#include "mpxvideoplaybackfiledetailswidget.h"
+#include "mpxvideoplaybackdocumentloader.h"
+#include "mpxvideoplaybackcontrolscontroller.h"
+
+const float KILOBYTE = 1024 ;
+const QString KDATETIMEFORMAT = "d/M/yyyy hh:mm:ss ap";
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget
+// -------------------------------------------------------------------------------------------------
+//
+QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget( 
+        QMPXVideoPlaybackControlsController* controller )
+    : mController( controller )
+    , mListWidget( 0 )
+    , mFileDetailsUpdated( false )
+{
+    MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget
+// -------------------------------------------------------------------------------------------------
+//
+QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget()
+{
+    MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget()"));
+
+    HbStyleLoader::unregisterFilePath( ":/hbvideoplaybackview/hblistwidget.css" );
+    
+    if ( mListWidget ) 
+    {
+        delete mListWidget;
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::initialize
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::initialize()
+{
+    MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::initialize"));
+
+    updateWithFileDetails( mController->fileDetails() );
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::updateControlsWithFileDetails
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::updateWithFileDetails(
+        QMPXVideoPlaybackViewFileDetails* details )
+{
+    QMPXVideoPlaybackDocumentLoader *loader = mController->layoutLoader();
+
+    if ( loader )
+    {
+        //
+        // load fileDetails widget
+        //
+        QGraphicsWidget *widget = loader->findWidget( QString( "fileDetails" ) );
+        
+        //
+        // cast fileDetails widget to HbListWidget
+        //
+        mListWidget = qobject_cast<HbListWidget*>( widget );
+
+        if ( ! mFileDetailsUpdated )
+        {        
+            //
+            // load file details style sheet
+            //
+            bool ret = HbStyleLoader::registerFilePath( ":/hbvideoplaybackview/hblistwidget.css" );
+            
+            mFileDetailsUpdated = true;
+            
+            QFileInfo fileInfo( details->mClipName );     
+
+            //
+            // Title
+            //            
+            makeTitleItem( details );
+            
+            //
+            // Description
+            //
+            addItemToListWidget( "Description", details->mDescription ); 
+            
+            //
+            // Duration
+            //
+            if ( details->mPlaybackMode != EMPXVideoLiveStreaming && details->mDuration > 0 )
+            {
+                QString duration = QString("%1").arg( 
+                        valueToReadableFormat( (qreal)details->mDuration / (qreal)KPbMilliMultiplier ) );                    
+                addItemToListWidget( "Duration", duration );                                                                        
+            }    
+            
+            //
+            // Date 
+            //
+            if ( details->mPlaybackMode == EMPXVideoLocal ||
+                 details->mPlaybackMode == EMPXVideoProgressiveDownload )
+            {       
+                //
+                // Date created
+                //
+                QString date = QString("%1").arg( fileInfo.created().toString( KDATETIMEFORMAT ) );                
+                addItemToListWidget( "Date", date );      
+                
+                //
+                // Date modified
+                //
+                QString modified = QString("%1").arg( fileInfo.lastModified().toString( KDATETIMEFORMAT ) );                
+                addItemToListWidget( "Modified", modified );                                                                        
+            }
+
+            //
+            // Location
+            //
+            addItemToListWidget( "Location", details->mLocation );                                                
+            
+            //
+            // Author
+            //
+            addItemToListWidget( "Author", details->mArtist );                                            
+            
+            //
+            // Copyright
+            //
+            addItemToListWidget( "Copyright", details->mCopyright );                                        
+            
+            //
+            // Language
+            //
+            addItemToListWidget( "Language", details->mLanguage );                                    
+            
+            //
+            // Keywords
+            //
+            addItemToListWidget( "Keywords", details->mKeywords );                                
+            
+            //
+            // Size
+            //
+            makeSizeItem( details );
+
+            //
+            // Resolution
+            //
+            if ( details->mVideoEnabled )
+            {
+                QString resolution = QString("%1 x %2")
+                       .arg( details->mVideoWidth ).arg( details->mVideoHeight );            
+                addItemToListWidget( "Resolution", resolution );                    
+            }
+            
+            //
+            // Format
+            //
+            addItemToListWidget( "Format", details->mMimeType );                    
+            
+            //
+            // Bitrate
+            //
+            makeBitRateItem( details );
+            
+            //
+            // Folder
+            //
+            if ( details->mPlaybackMode == EMPXVideoLocal ||
+                 details->mPlaybackMode == EMPXVideoProgressiveDownload)
+            {
+                QString folder = fileInfo.dir().dirName();                    
+                addItemToListWidget( "Collection", folder );    
+            }
+            
+        }
+
+        //
+        // Set the rect size dynamically based on the view mode
+        //
+        QString sectionName;
+
+        if ( mController->viewMode() == EDetailsView )
+        {
+            sectionName = "detailsView";
+        }
+        else if ( mController->viewMode() == EAudioOnlyView )
+        {
+            if ( details->mPlaybackMode == EMPXVideoLocal )
+            {
+                sectionName = "audioOnlyViewWithLocalPlayback";
+            }
+            else
+            {
+                sectionName = "audioOnlyViewWithNonLocalPlayback";
+            }
+        }
+
+        bool ok = false;
+        loader->load( KMPXPLAYBACKVIEW_XML, sectionName, &ok );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::valueToReadableFormat
+// -------------------------------------------------------------------------------------------------
+//
+QString QMPXVideoPlaybackFileDetailsWidget::valueToReadableFormat( int value )
+{
+    MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::valueToReadableFormat value = %d"), value);
+
+    int hour = value / 3600;
+    value = value % 3600;
+    int minutes = value / 60;
+    value = value % 60;
+    int second = value;
+
+    QTime time( hour ,minutes ,second );
+    QString str;
+    
+    if ( hour > 0 )
+    {
+        str = time.toString( QString::number( hour ) ).append(" hr "); 
+    }
+    
+    if ( minutes > 0 )
+    {
+        str.append( time.toString( QString::number( minutes ) ).append(" min ")); 
+    }
+    
+    if ( second > 0 )
+    {
+        str.append( time.toString( QString::number( second ) ).append(" sec ")); 
+    }
+    
+    return str;
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::makeTitleItem
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::makeTitleItem( QMPXVideoPlaybackViewFileDetails* details )
+{    
+    MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::makeTitleItem()"));
+
+    //
+    // Title should be the first item in file details list
+    //
+    if ( mController->viewMode() == EAudioOnlyView )
+    {    
+        //
+        // show the title for audio-only view 
+        //
+        if ( mListWidget->count() == 0 || ! mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) )
+        {
+            QString title = details->mTitle;
+
+            if ( title.count() == 0 )
+            {
+                //
+                // If title is not available, show clip name
+                //            
+                QFileInfo fileInfo( details->mClipName );
+                title = fileInfo.baseName ();
+            }
+
+            //
+            // populate Title and its associated text
+            //
+            HbListWidgetItem* listWidgetItem = new HbListWidgetItem();
+            listWidgetItem->setText( "Title" );
+            listWidgetItem->setSecondaryText( title );
+            mListWidget->insertItem( 0, listWidgetItem );
+        }
+    }
+    else if ( mListWidget->count() &&
+              mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) )
+    {
+        // 
+        // title is displayed under the status pane for video clips,
+        // so hide the title for this details view
+        //
+        delete mListWidget->takeItem ( 0 );
+    }
+    
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::makeSizeItem
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::makeSizeItem( QMPXVideoPlaybackViewFileDetails* details )
+{        
+    if ( details->mPlaybackMode == EMPXVideoLocal ||
+         details->mPlaybackMode == EMPXVideoProgressiveDownload )
+    {
+        QFileInfo fileInfo( details->mClipName );     
+        float size = fileInfo.size();
+          
+        if ( size > 0.0 )
+        {        
+            QString scale(" KB");
+        
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+            }
+            
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+                scale = QString(" MB");
+            }
+     
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+                scale = QString(" GB");
+            }
+             
+            int temp = size * 10;
+            size = (float)temp / 10;
+    
+            QString text = QString("%1").arg( size );
+            text.append( scale );
+            
+            addItemToListWidget( "Size", text );                            
+        }    
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem( QMPXVideoPlaybackViewFileDetails* details  )
+{        
+    if ( details->mBitRate > 0 )
+    {
+        float bitrate = details->mBitRate;
+    
+        QString scale(" Kbps");
+        
+        if ( bitrate > KILOBYTE )
+        {
+             bitrate /= KILOBYTE;
+        }
+        
+        if ( bitrate > KILOBYTE )
+        {
+             bitrate /= KILOBYTE;
+             scale = QString(" Mbps");
+        }
+    
+        int temp = bitrate * 10;
+        bitrate = (float)temp / 10;
+    
+        QString text = QString("%1").arg( bitrate );
+        text.append( scale );
+        
+        addItemToListWidget( "Bitrate", text );            
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget
+// -------------------------------------------------------------------------------------------------
+//
+void QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( QString item, QString text  )
+{    
+    if ( text.count() > 0 )
+    {
+        MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( %s , %s )"), item.data(), text.data() );
+		
+        HbListWidgetItem* listWidgetItem = new HbListWidgetItem();
+        listWidgetItem->setText( item );
+        listWidgetItem->setSecondaryText( text );
+        
+        mListWidget->addItem( listWidgetItem );
+    }
+}
+
+//End of file