videoplayback/videoplaybackview/controlsrc/videoplaybackfiledetailswidget.cpp
changeset 52 e3cecb93e76a
child 65 a9d57bd8d7b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoplayback/videoplaybackview/controlsrc/videoplaybackfiledetailswidget.cpp	Wed Aug 18 09:50:14 2010 +0300
@@ -0,0 +1,487 @@
+/*
+* 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 VideoPlaybackFileDetailsWidget
+*
+*/
+
+// Version : %version:  28 %
+
+
+#include <QDir>
+#include <QDateTime>
+#include <QFileInfo>
+
+#include <hbglobal.h>
+#include <hblistwidgetitem.h>
+#include <hbratingslider.h>
+#include <hblistwidget.h>
+#include <hblistviewitem.h>
+#include <hbextendedlocale.h>
+#include <hbanchorlayout.h>
+
+#include "mpxvideo_debug.h"
+#include "videoplaybackdocumentloader.h"
+#include "videoplaybackfiledetailswidget.h"
+#include "videoplaybackdocumentloader.h"
+#include "videoplaybackcontrolscontroller.h"
+
+const float KILOBYTE = 1024 ;
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::VideoPlaybackFileDetailsWidget
+// -------------------------------------------------------------------------------------------------
+//
+VideoPlaybackFileDetailsWidget::VideoPlaybackFileDetailsWidget(
+        VideoPlaybackControlsController* controller )
+    : mController( controller )
+    , mListWidget( 0 )
+    , mFileDetailsUpdated( false )
+{
+    MPX_ENTER_EXIT(_L("VideoPlaybackFileDetailsWidget::VideoPlaybackFileDetailsWidget()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::~VideoPlaybackFileDetailsWidget
+// -------------------------------------------------------------------------------------------------
+//
+VideoPlaybackFileDetailsWidget::~VideoPlaybackFileDetailsWidget()
+{
+    MPX_ENTER_EXIT(_L("VideoPlaybackFileDetailsWidget::~VideoPlaybackFileDetailsWidget()"));
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::updateWithFileDetails
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::updateWithFileDetails(
+        VideoPlaybackViewFileDetails* details )
+{
+    VideoPlaybackDocumentLoader *loader = mController->layoutLoader();
+
+    if ( loader )
+    {
+        //
+        // load fileDetails widget
+        //
+        QGraphicsWidget *widget = loader->findWidget( QString( "fileDetails" ) );
+
+        //
+        // cast fileDetails widget to HbListWidget
+        //
+        mListWidget = qobject_cast<HbListWidget*>( widget );
+
+        //
+        // set the min/max number of lines in the second row
+        //
+        HbListViewItem *prototype = mListWidget->listItemPrototype();
+        prototype->setSecondaryTextRowCount( 1, 30 );
+
+        //
+        // Title
+        //
+        makeTitleItem( details );
+
+        if ( ! mFileDetailsUpdated )
+        {
+            HbExtendedLocale locale = HbExtendedLocale::system();
+
+            mFileDetailsUpdated = true;
+
+            //
+            // Description
+            //
+            addItemToListWidget(
+                    hbTrId( "txt_videos_list_description" ), details->mDescription );
+
+            //
+            // Duration
+            //
+            makeDurationItem( details );
+
+            //
+            // Date/Time
+            //
+            makeDateTimeItem( details );
+
+            //
+            // Location
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_location" ), details->mLocation );
+
+            //
+            // Author
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_author" ), details->mArtist );
+
+            //
+            // Copyright
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_copyright" ), details->mCopyright );
+
+            //
+            // Language
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_language" ), details->mLanguage );
+
+            //
+            // Keywords
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_keywords" ), details->mKeywords );
+
+            //
+            // Size
+            //
+            makeSizeItem( details );
+
+            //
+            // Resolution
+            //
+            if ( details->mVideoEnabled )
+            {
+                QString resolution = hbTrId( "txt_videos_list_l1l2" )
+                       .arg( locale.toString( details->mVideoWidth ) )
+                       .arg( locale.toString( details->mVideoHeight ) );
+                addItemToListWidget( hbTrId( "txt_videos_list_resolution" ), resolution );
+            }
+
+            //
+            // Format
+            //
+            addItemToListWidget( hbTrId( "txt_videos_list_format" ), details->mMimeType );
+
+            //
+            // Bitrate
+            //
+            makeBitRateItem( details );
+
+            //
+            // Folder
+            //
+            if ( details->mPlaybackMode == EMPXVideoLocal ||
+                 details->mPlaybackMode == EMPXVideoProgressiveDownload)
+            {
+                QFileInfo fileInfo( details->mClipName );
+                QString folder = fileInfo.dir().dirName();
+                addItemToListWidget( hbTrId( "txt_videos_list_collection_name" ), folder );
+            }
+        }
+
+        //
+        // Set the rect size dynamically based on the view mode
+        //
+        QGraphicsWidget *content = loader->findWidget( QString( "content" ) );
+        HbAnchorLayout *layout = static_cast<HbAnchorLayout*>( content->layout() );
+
+        if ( layout )
+        {
+            QGraphicsWidget *titleLayout = loader->findWidget( QString( "titleLayout" ) );
+            QRectF titleRect = titleLayout->geometry();
+
+            switch ( mController->viewMode() )
+            {
+                case EDetailsView:
+                {
+                    layout->setAnchor( titleLayout, Hb::BottomEdge, this, Hb::TopEdge, 0 );
+                    layout->setAnchor( layout, Hb::BottomEdge, this, Hb::BottomEdge, 0 );
+
+                    break;
+                }
+                case EAudioOnlyView:
+                {
+                    QGraphicsWidget *controlLayout = loader->findWidget( QString( "controlBarLayout" ) );
+                    QRectF controlRect = controlLayout->geometry();
+
+                    layout->setAnchor(
+                            this, Hb::TopEdge, titleLayout,
+                            Hb::BottomEdge, titleRect.bottom() - titleRect.top() );
+
+                    layout->setAnchor(
+                            this, Hb::BottomEdge,
+                            layout, Hb::BottomEdge, layout->geometry().height() - controlRect.top() );
+
+                    break;
+                }
+            }
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::makeTitleItem
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::makeTitleItem( VideoPlaybackViewFileDetails* details )
+{
+    MPX_DEBUG(_L("VideoPlaybackFileDetailsWidget::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.completeBaseName();
+            }
+
+            //
+            // populate Title and its associated text
+            //
+            HbListWidgetItem* listWidgetItem = new HbListWidgetItem();
+            listWidgetItem->setText( hbTrId( "txt_videos_list_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 );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::makeSizeItem
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::makeSizeItem( VideoPlaybackViewFileDetails* details )
+{
+    if ( details->mPlaybackMode == EMPXVideoLocal ||
+         details->mPlaybackMode == EMPXVideoProgressiveDownload )
+    {
+        QFileInfo fileInfo( details->mClipName );
+
+        //
+        // to prevent overflow, get an unsigned value of file size
+        //
+        ulong fileSize = fileInfo.size();
+
+        //
+        // convert file size to KB, MB, GB accordingly
+        //
+        if ( fileSize > 0 )
+        {
+            HbExtendedLocale locale = HbExtendedLocale::system();
+
+            QString scale;
+
+            //
+            // cast for later conversion with floating point
+            //
+            float size = (float) fileSize;
+
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+                scale = hbTrId( "txt_videos_list_l1_kb" );
+            }
+
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+                scale = hbTrId( "txt_videos_list_l1_mb" );
+            }
+
+            if ( size > KILOBYTE )
+            {
+                size /= KILOBYTE;
+                scale = hbTrId( "txt_videos_list_l1_gb" );
+            }
+
+            int temp = size * 10;
+            size = (float)temp / 10;
+
+            addItemToListWidget(
+                    hbTrId( "txt_videos_list_file_size" ), scale.arg( locale.toString( size ) ) );
+        }
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::makeBitRateItem
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::makeBitRateItem( VideoPlaybackViewFileDetails* details  )
+{
+    if ( details->mBitRate > 0 )
+    {
+        HbExtendedLocale locale = HbExtendedLocale::system();
+
+        float bitrate = details->mBitRate;
+
+        QString scale = hbTrId( "txt_videos_list_l1_kbps" );
+
+        if ( bitrate > KILOBYTE )
+        {
+             bitrate /= KILOBYTE;
+        }
+
+        if ( bitrate > KILOBYTE )
+        {
+             bitrate /= KILOBYTE;
+             scale = hbTrId( "txt_videos_list_l1_mbps" );
+        }
+
+        int temp = bitrate * 10;
+        bitrate = (float)temp / 10;
+
+        addItemToListWidget(
+                hbTrId( "txt_videos_list_bitrate" ), scale.arg( locale.toString( bitrate ) ) );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::addItemToListWidget
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::addItemToListWidget( QString item, QString text  )
+{
+    MPX_ENTER_EXIT(_L("VideoPlaybackFileDetailsWidget::addItemToListWidget"));
+
+    if ( text.count() > 0 )
+    {
+        MPX_DEBUG(_L("VideoPlaybackFileDetailsWidget::addItemToListWidget( %s %s )"),
+		    item.data(), text.data() );
+
+        HbListWidgetItem* listWidgetItem = new HbListWidgetItem();
+        listWidgetItem->setText( item );
+        listWidgetItem->setSecondaryText( text );
+
+        mListWidget->addItem( listWidgetItem );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::makeDateTimeItem
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::makeDateTimeItem( VideoPlaybackViewFileDetails* details )
+{
+    MPX_ENTER_EXIT(_L("VideoPlaybackFileDetailsWidget::makeDateTimeItem"));
+
+    //
+    // attempt to get 'created' and 'last modified' date/time from metadata first,
+    // if it's not available, then get it from the file system
+    //
+
+    if ( details->mPlaybackMode == EMPXVideoLocal ||
+         details->mPlaybackMode == EMPXVideoProgressiveDownload )
+    {
+        QDateTime dateTime;
+        QFileInfo fileInfo( details->mClipName );
+        HbExtendedLocale locale = HbExtendedLocale::system();
+
+        //
+        // Date created
+        //
+        if ( details->mCreationTime > 0 )
+        {
+            dateTime.setTime_t( details->mCreationTime );
+        }
+        else
+        {
+            dateTime = fileInfo.created();
+        }
+
+        //
+        // convert 'created' date/time to proper string format
+        // according to its current locale
+        //
+        QString date = locale.format( dateTime.date(), r_qtn_date_usual );
+        QString time = locale.format( dateTime.time(), r_qtn_time_long_with_zero );
+        addItemToListWidget( hbTrId( "txt_videos_list_date" ), date + "  " + time );
+
+        //
+        // Date modified
+        //
+        if ( details->mModificationTime > 0 )
+        {
+            dateTime.setTime_t( details->mModificationTime );
+        }
+        else
+        {
+            dateTime = fileInfo.lastModified();
+        }
+
+        //
+        // convert 'last modified' date/time to proper string format
+        // according to its current locale
+        //
+        date = locale.format( dateTime.date(), r_qtn_date_usual );
+        time = locale.format( dateTime.time(), r_qtn_time_long_with_zero );
+        addItemToListWidget( hbTrId( "txt_videos_list_modified" ), date + "  " + time );
+    }
+}
+
+// -------------------------------------------------------------------------------------------------
+// VideoPlaybackFileDetailsWidget::makeDurationItem
+// -------------------------------------------------------------------------------------------------
+//
+void VideoPlaybackFileDetailsWidget::makeDurationItem( VideoPlaybackViewFileDetails* details )
+{
+    MPX_ENTER_EXIT(_L("VideoPlaybackFileDetailsWidget::makeDurationItem"));
+
+    if ( details->mPlaybackMode != EMPXVideoLiveStreaming && details->mDuration > 0 )
+    {
+        HbExtendedLocale locale = HbExtendedLocale::system();
+        QString hourString, minString, secString;
+
+        int value = (qreal)details->mDuration / (qreal)KPbMilliMultiplier;
+
+        int hours = value / 3600;
+        value = value % 3600;
+        int mins = value / 60;
+        value = value % 60;
+        int secs = value;
+
+        //
+        // Put "0" if it is less than 10 (0:00:03)
+        //
+        hourString = locale.toString( hours );
+
+        if ( mins < 10 )
+        {
+            minString = locale.toString( 0 );
+        }
+        minString.append( locale.toString( mins ) );
+
+        if ( secs < 10 )
+        {
+            secString = locale.toString( 0 );
+        }
+        secString.append( locale.toString( secs ) );
+
+        addItemToListWidget(
+                hbTrId( "txt_videos_list_duration" ),
+                hbTrId( "txt_videos_list_l1l2l3" )
+                .arg( hourString ).arg( minString ).arg( secString ) );
+    }
+}
+
+//End of file