1 /* |
|
2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Implementation of QMPXVideoPlaybackFileDetailsWidget |
|
15 * |
|
16 */ |
|
17 |
|
18 // Version : %version: 26 % |
|
19 |
|
20 |
|
21 #include <QDir> |
|
22 #include <QDateTime> |
|
23 #include <QFileInfo> |
|
24 |
|
25 #include <hbglobal.h> |
|
26 #include <hblistwidgetitem.h> |
|
27 #include <hbratingslider.h> |
|
28 #include <hblistwidget.h> |
|
29 #include <hblistviewitem.h> |
|
30 #include <hbextendedlocale.h> |
|
31 #include <hbanchorlayout.h> |
|
32 |
|
33 #include "mpxvideo_debug.h" |
|
34 #include "mpxvideoplaybackdocumentloader.h" |
|
35 #include "mpxvideoplaybackfiledetailswidget.h" |
|
36 #include "mpxvideoplaybackdocumentloader.h" |
|
37 #include "mpxvideoplaybackcontrolscontroller.h" |
|
38 |
|
39 const float KILOBYTE = 1024 ; |
|
40 |
|
41 // ------------------------------------------------------------------------------------------------- |
|
42 // QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget |
|
43 // ------------------------------------------------------------------------------------------------- |
|
44 // |
|
45 QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget( |
|
46 QMPXVideoPlaybackControlsController* controller ) |
|
47 : mController( controller ) |
|
48 , mListWidget( 0 ) |
|
49 , mFileDetailsUpdated( false ) |
|
50 { |
|
51 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::QMPXVideoPlaybackFileDetailsWidget()")); |
|
52 } |
|
53 |
|
54 // ------------------------------------------------------------------------------------------------- |
|
55 // QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget |
|
56 // ------------------------------------------------------------------------------------------------- |
|
57 // |
|
58 QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget() |
|
59 { |
|
60 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget()")); |
|
61 } |
|
62 |
|
63 // ------------------------------------------------------------------------------------------------- |
|
64 // QMPXVideoPlaybackFileDetailsWidget::updateWithFileDetails |
|
65 // ------------------------------------------------------------------------------------------------- |
|
66 // |
|
67 void QMPXVideoPlaybackFileDetailsWidget::updateWithFileDetails( |
|
68 QMPXVideoPlaybackViewFileDetails* details ) |
|
69 { |
|
70 QMPXVideoPlaybackDocumentLoader *loader = mController->layoutLoader(); |
|
71 |
|
72 if ( loader ) |
|
73 { |
|
74 // |
|
75 // load fileDetails widget |
|
76 // |
|
77 QGraphicsWidget *widget = loader->findWidget( QString( "fileDetails" ) ); |
|
78 |
|
79 // |
|
80 // cast fileDetails widget to HbListWidget |
|
81 // |
|
82 mListWidget = qobject_cast<HbListWidget*>( widget ); |
|
83 |
|
84 // |
|
85 // set the min/max number of lines in the second row |
|
86 // |
|
87 HbListViewItem *prototype = mListWidget->listItemPrototype(); |
|
88 prototype->setSecondaryTextRowCount( 1, 30 ); |
|
89 |
|
90 // |
|
91 // Title |
|
92 // |
|
93 makeTitleItem( details ); |
|
94 |
|
95 if ( ! mFileDetailsUpdated ) |
|
96 { |
|
97 HbExtendedLocale locale = HbExtendedLocale::system(); |
|
98 |
|
99 mFileDetailsUpdated = true; |
|
100 |
|
101 // |
|
102 // Description |
|
103 // |
|
104 addItemToListWidget( |
|
105 hbTrId( "txt_videos_list_description" ), details->mDescription ); |
|
106 |
|
107 // |
|
108 // Duration |
|
109 // |
|
110 if ( details->mPlaybackMode != EMPXVideoLiveStreaming && details->mDuration > 0 ) |
|
111 { |
|
112 int value = (qreal)details->mDuration / (qreal)KPbMilliMultiplier; |
|
113 QString hour = locale.toString( value / 3600 ); |
|
114 value = value % 3600; |
|
115 QString min = locale.toString( value / 60 ); |
|
116 value = value % 60; |
|
117 QString sec = locale.toString( value ); |
|
118 |
|
119 addItemToListWidget( |
|
120 hbTrId( "txt_videos_list_duration" ), |
|
121 hbTrId( "txt_videos_list_l1l2l3" ).arg( hour ).arg( min ).arg( sec ) ); |
|
122 } |
|
123 |
|
124 // |
|
125 // Date/Time |
|
126 // |
|
127 makeDateTimeItem( details ); |
|
128 |
|
129 // |
|
130 // Location |
|
131 // |
|
132 addItemToListWidget( hbTrId( "txt_videos_list_location" ), details->mLocation ); |
|
133 |
|
134 // |
|
135 // Author |
|
136 // |
|
137 addItemToListWidget( hbTrId( "txt_videos_list_author" ), details->mArtist ); |
|
138 |
|
139 // |
|
140 // Copyright |
|
141 // |
|
142 addItemToListWidget( hbTrId( "txt_videos_list_copyright" ), details->mCopyright ); |
|
143 |
|
144 // |
|
145 // Language |
|
146 // |
|
147 addItemToListWidget( hbTrId( "txt_videos_list_language" ), details->mLanguage ); |
|
148 |
|
149 // |
|
150 // Keywords |
|
151 // |
|
152 addItemToListWidget( hbTrId( "txt_videos_list_keywords" ), details->mKeywords ); |
|
153 |
|
154 // |
|
155 // Size |
|
156 // |
|
157 makeSizeItem( details ); |
|
158 |
|
159 // |
|
160 // Resolution |
|
161 // |
|
162 if ( details->mVideoEnabled ) |
|
163 { |
|
164 QString resolution = hbTrId( "txt_videos_list_l1l2" ) |
|
165 .arg( locale.toString( details->mVideoWidth ) ) |
|
166 .arg( locale.toString( details->mVideoHeight ) ); |
|
167 addItemToListWidget( hbTrId( "txt_videos_list_resolution" ), resolution ); |
|
168 } |
|
169 |
|
170 // |
|
171 // Format |
|
172 // |
|
173 addItemToListWidget( hbTrId( "txt_videos_list_format" ), details->mMimeType ); |
|
174 |
|
175 // |
|
176 // Bitrate |
|
177 // |
|
178 makeBitRateItem( details ); |
|
179 |
|
180 // |
|
181 // Folder |
|
182 // |
|
183 if ( details->mPlaybackMode == EMPXVideoLocal || |
|
184 details->mPlaybackMode == EMPXVideoProgressiveDownload) |
|
185 { |
|
186 QFileInfo fileInfo( details->mClipName ); |
|
187 QString folder = fileInfo.dir().dirName(); |
|
188 addItemToListWidget( hbTrId( "txt_videos_list_collection_name" ), folder ); |
|
189 } |
|
190 } |
|
191 |
|
192 // |
|
193 // Set the rect size dynamically based on the view mode |
|
194 // |
|
195 QGraphicsWidget *content = loader->findWidget( QString( "content" ) ); |
|
196 HbAnchorLayout *layout = static_cast<HbAnchorLayout*>( content->layout() ); |
|
197 |
|
198 if ( layout ) |
|
199 { |
|
200 QGraphicsWidget *titleLayout = loader->findWidget( QString( "titleLayout" ) ); |
|
201 QRectF titleRect = titleLayout->geometry(); |
|
202 |
|
203 switch ( mController->viewMode() ) |
|
204 { |
|
205 case EDetailsView: |
|
206 { |
|
207 layout->setAnchor( titleLayout, Hb::BottomEdge, this, Hb::TopEdge, 0 ); |
|
208 layout->setAnchor( layout, Hb::BottomEdge, this, Hb::BottomEdge, 0 ); |
|
209 |
|
210 break; |
|
211 } |
|
212 case EAudioOnlyView: |
|
213 { |
|
214 QGraphicsWidget *controlLayout = loader->findWidget( QString( "controlBarLayout" ) ); |
|
215 QRectF controlRect = controlLayout->geometry(); |
|
216 |
|
217 layout->setAnchor( |
|
218 this, Hb::TopEdge, titleLayout, |
|
219 Hb::BottomEdge, titleRect.bottom() - titleRect.top() ); |
|
220 |
|
221 layout->setAnchor( |
|
222 this, Hb::BottomEdge, |
|
223 layout, Hb::BottomEdge, layout->geometry().height() - controlRect.top() ); |
|
224 |
|
225 break; |
|
226 } |
|
227 } |
|
228 } |
|
229 } |
|
230 } |
|
231 |
|
232 // ------------------------------------------------------------------------------------------------- |
|
233 // QMPXVideoPlaybackFileDetailsWidget::makeTitleItem |
|
234 // ------------------------------------------------------------------------------------------------- |
|
235 // |
|
236 void QMPXVideoPlaybackFileDetailsWidget::makeTitleItem( QMPXVideoPlaybackViewFileDetails* details ) |
|
237 { |
|
238 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::makeTitleItem()")); |
|
239 |
|
240 // |
|
241 // Title should be the first item in file details list |
|
242 // |
|
243 if ( mController->viewMode() == EAudioOnlyView ) |
|
244 { |
|
245 // |
|
246 // show the title for audio-only view |
|
247 // |
|
248 if ( mListWidget->count() == 0 || ! mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) ) |
|
249 { |
|
250 QString title = details->mTitle; |
|
251 |
|
252 if ( title.count() == 0 ) |
|
253 { |
|
254 // |
|
255 // If title is not available, show clip name |
|
256 // |
|
257 QFileInfo fileInfo( details->mClipName ); |
|
258 title = fileInfo.completeBaseName(); |
|
259 } |
|
260 |
|
261 // |
|
262 // populate Title and its associated text |
|
263 // |
|
264 HbListWidgetItem* listWidgetItem = new HbListWidgetItem(); |
|
265 listWidgetItem->setText( hbTrId( "txt_videos_list_title" ) ); |
|
266 listWidgetItem->setSecondaryText( title ); |
|
267 mListWidget->insertItem( 0, listWidgetItem ); |
|
268 } |
|
269 } |
|
270 else if ( mListWidget->count() && |
|
271 mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) ) |
|
272 { |
|
273 // |
|
274 // title is displayed under the status pane for video clips, |
|
275 // so hide the title for this details view |
|
276 // |
|
277 delete mListWidget->takeItem ( 0 ); |
|
278 } |
|
279 } |
|
280 |
|
281 // ------------------------------------------------------------------------------------------------- |
|
282 // QMPXVideoPlaybackFileDetailsWidget::makeSizeItem |
|
283 // ------------------------------------------------------------------------------------------------- |
|
284 // |
|
285 void QMPXVideoPlaybackFileDetailsWidget::makeSizeItem( QMPXVideoPlaybackViewFileDetails* details ) |
|
286 { |
|
287 if ( details->mPlaybackMode == EMPXVideoLocal || |
|
288 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
|
289 { |
|
290 QFileInfo fileInfo( details->mClipName ); |
|
291 |
|
292 // |
|
293 // to prevent overflow, get an unsigned value of file size |
|
294 // |
|
295 ulong fileSize = fileInfo.size(); |
|
296 |
|
297 // |
|
298 // convert file size to KB, MB, GB accordingly |
|
299 // |
|
300 if ( fileSize > 0 ) |
|
301 { |
|
302 HbExtendedLocale locale = HbExtendedLocale::system(); |
|
303 |
|
304 QString scale; |
|
305 |
|
306 // |
|
307 // cast for later conversion with floating point |
|
308 // |
|
309 float size = (float) fileSize; |
|
310 |
|
311 if ( size > KILOBYTE ) |
|
312 { |
|
313 size /= KILOBYTE; |
|
314 scale = hbTrId( "txt_videos_list_l1_kb" ); |
|
315 } |
|
316 |
|
317 if ( size > KILOBYTE ) |
|
318 { |
|
319 size /= KILOBYTE; |
|
320 scale = hbTrId( "txt_videos_list_l1_mb" ); |
|
321 } |
|
322 |
|
323 if ( size > KILOBYTE ) |
|
324 { |
|
325 size /= KILOBYTE; |
|
326 scale = hbTrId( "txt_videos_list_l1_gb" ); |
|
327 } |
|
328 |
|
329 int temp = size * 10; |
|
330 size = (float)temp / 10; |
|
331 |
|
332 addItemToListWidget( |
|
333 hbTrId( "txt_videos_list_file_size" ), scale.arg( locale.toString( size ) ) ); |
|
334 } |
|
335 } |
|
336 } |
|
337 |
|
338 // ------------------------------------------------------------------------------------------------- |
|
339 // QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem |
|
340 // ------------------------------------------------------------------------------------------------- |
|
341 // |
|
342 void QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem( QMPXVideoPlaybackViewFileDetails* details ) |
|
343 { |
|
344 if ( details->mBitRate > 0 ) |
|
345 { |
|
346 HbExtendedLocale locale = HbExtendedLocale::system(); |
|
347 |
|
348 float bitrate = details->mBitRate; |
|
349 |
|
350 QString scale = hbTrId( "txt_videos_list_l1_kbps" ); |
|
351 |
|
352 if ( bitrate > KILOBYTE ) |
|
353 { |
|
354 bitrate /= KILOBYTE; |
|
355 } |
|
356 |
|
357 if ( bitrate > KILOBYTE ) |
|
358 { |
|
359 bitrate /= KILOBYTE; |
|
360 scale = hbTrId( "txt_videos_list_l1_mbps" ); |
|
361 } |
|
362 |
|
363 int temp = bitrate * 10; |
|
364 bitrate = (float)temp / 10; |
|
365 |
|
366 addItemToListWidget( |
|
367 hbTrId( "txt_videos_list_bitrate" ), scale.arg( locale.toString( bitrate ) ) ); |
|
368 } |
|
369 } |
|
370 |
|
371 // ------------------------------------------------------------------------------------------------- |
|
372 // QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget |
|
373 // ------------------------------------------------------------------------------------------------- |
|
374 // |
|
375 void QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( QString item, QString text ) |
|
376 { |
|
377 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget")); |
|
378 |
|
379 if ( text.count() > 0 ) |
|
380 { |
|
381 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( %s %s )"), |
|
382 item.data(), text.data() ); |
|
383 |
|
384 HbListWidgetItem* listWidgetItem = new HbListWidgetItem(); |
|
385 listWidgetItem->setText( item ); |
|
386 listWidgetItem->setSecondaryText( text ); |
|
387 |
|
388 mListWidget->addItem( listWidgetItem ); |
|
389 } |
|
390 } |
|
391 |
|
392 // ------------------------------------------------------------------------------------------------- |
|
393 // QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem |
|
394 // ------------------------------------------------------------------------------------------------- |
|
395 // |
|
396 void QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem( QMPXVideoPlaybackViewFileDetails* details ) |
|
397 { |
|
398 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem")); |
|
399 |
|
400 // |
|
401 // attempt to get 'created' and 'last modified' date/time from metadata first, |
|
402 // if it's not available, then get it from the file system |
|
403 // |
|
404 |
|
405 if ( details->mPlaybackMode == EMPXVideoLocal || |
|
406 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
|
407 { |
|
408 QDateTime dateTime; |
|
409 QFileInfo fileInfo( details->mClipName ); |
|
410 HbExtendedLocale locale = HbExtendedLocale::system(); |
|
411 |
|
412 // |
|
413 // Date created |
|
414 // |
|
415 if ( details->mCreationTime > 0 ) |
|
416 { |
|
417 dateTime.setTime_t( details->mCreationTime ); |
|
418 } |
|
419 else |
|
420 { |
|
421 dateTime = fileInfo.created(); |
|
422 } |
|
423 |
|
424 // |
|
425 // convert 'created' date/time to proper string format |
|
426 // according to its current locale |
|
427 // |
|
428 QString date = locale.format( dateTime.date(), r_qtn_date_usual ); |
|
429 QString time = locale.format( dateTime.time(), r_qtn_time_long_with_zero ); |
|
430 addItemToListWidget( hbTrId( "txt_videos_list_date" ), date + " " + time ); |
|
431 |
|
432 // |
|
433 // Date modified |
|
434 // |
|
435 if ( details->mModificationTime > 0 ) |
|
436 { |
|
437 dateTime.setTime_t( details->mModificationTime ); |
|
438 } |
|
439 else |
|
440 { |
|
441 dateTime = fileInfo.lastModified(); |
|
442 } |
|
443 |
|
444 // |
|
445 // convert 'last modified' date/time to proper string format |
|
446 // according to its current locale |
|
447 // |
|
448 date = locale.format( dateTime.date(), r_qtn_date_usual ); |
|
449 time = locale.format( dateTime.time(), r_qtn_time_long_with_zero ); |
|
450 addItemToListWidget( hbTrId( "txt_videos_list_modified" ), date + " " + time ); |
|
451 } |
|
452 } |
|
453 |
|
454 //End of file |
|