--- /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