26 #include <hblistwidgetitem.h> |
26 #include <hblistwidgetitem.h> |
27 #include <hbratingslider.h> |
27 #include <hbratingslider.h> |
28 #include <hblistwidget.h> |
28 #include <hblistwidget.h> |
29 #include <hblistviewitem.h> |
29 #include <hblistviewitem.h> |
30 #include <hbextendedlocale.h> |
30 #include <hbextendedlocale.h> |
|
31 #include <hbanchorlayout.h> |
31 |
32 |
32 #include "mpxvideo_debug.h" |
33 #include "mpxvideo_debug.h" |
33 #include "mpxvideoplaybackdocumentloader.h" |
34 #include "mpxvideoplaybackdocumentloader.h" |
34 #include "mpxvideoplaybackfiledetailswidget.h" |
35 #include "mpxvideoplaybackfiledetailswidget.h" |
35 #include "mpxvideoplaybackdocumentloader.h" |
36 #include "mpxvideoplaybackdocumentloader.h" |
55 // ------------------------------------------------------------------------------------------------- |
56 // ------------------------------------------------------------------------------------------------- |
56 // |
57 // |
57 QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget() |
58 QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget() |
58 { |
59 { |
59 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget()")); |
60 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::~QMPXVideoPlaybackFileDetailsWidget()")); |
60 |
|
61 if ( mListWidget ) |
|
62 { |
|
63 delete mListWidget; |
|
64 } |
|
65 } |
|
66 |
|
67 // ------------------------------------------------------------------------------------------------- |
|
68 // QMPXVideoPlaybackFileDetailsWidget::initialize |
|
69 // ------------------------------------------------------------------------------------------------- |
|
70 // |
|
71 void QMPXVideoPlaybackFileDetailsWidget::initialize() |
|
72 { |
|
73 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::initialize")); |
|
74 |
|
75 updateWithFileDetails( mController->fileDetails() ); |
|
76 } |
61 } |
77 |
62 |
78 // ------------------------------------------------------------------------------------------------- |
63 // ------------------------------------------------------------------------------------------------- |
79 // QMPXVideoPlaybackFileDetailsWidget::updateWithFileDetails |
64 // QMPXVideoPlaybackFileDetailsWidget::updateWithFileDetails |
80 // ------------------------------------------------------------------------------------------------- |
65 // ------------------------------------------------------------------------------------------------- |
88 { |
73 { |
89 // |
74 // |
90 // load fileDetails widget |
75 // load fileDetails widget |
91 // |
76 // |
92 QGraphicsWidget *widget = loader->findWidget( QString( "fileDetails" ) ); |
77 QGraphicsWidget *widget = loader->findWidget( QString( "fileDetails" ) ); |
93 |
78 |
94 // |
79 // |
95 // cast fileDetails widget to HbListWidget |
80 // cast fileDetails widget to HbListWidget |
96 // |
81 // |
97 mListWidget = qobject_cast<HbListWidget*>( widget ); |
82 mListWidget = qobject_cast<HbListWidget*>( widget ); |
98 |
83 |
99 // |
84 // |
100 // set the min/max number of lines in the second row |
85 // set the min/max number of lines in the second row |
101 // |
86 // |
102 HbListViewItem *prototype = mListWidget->listItemPrototype(); |
87 HbListViewItem *prototype = mListWidget->listItemPrototype(); |
103 prototype->setSecondaryTextRowCount( 1, 30 ); |
88 prototype->setSecondaryTextRowCount( 1, 30 ); |
104 |
89 |
|
90 // |
|
91 // Title |
|
92 // |
|
93 makeTitleItem( details ); |
|
94 |
105 if ( ! mFileDetailsUpdated ) |
95 if ( ! mFileDetailsUpdated ) |
106 { |
96 { |
107 HbExtendedLocale locale = HbExtendedLocale::system(); |
97 HbExtendedLocale locale = HbExtendedLocale::system(); |
108 |
98 |
109 mFileDetailsUpdated = true; |
99 mFileDetailsUpdated = true; |
110 |
100 |
111 // |
|
112 // Title |
|
113 // |
|
114 makeTitleItem( details ); |
|
115 |
|
116 // |
101 // |
117 // Description |
102 // Description |
118 // |
103 // |
119 addItemToListWidget( |
104 addItemToListWidget( |
120 hbTrId( "txt_videos_list_description" ), details->mDescription ); |
105 hbTrId( "txt_videos_list_description" ), details->mDescription ); |
121 |
106 |
122 |
|
123 // |
107 // |
124 // Duration |
108 // Duration |
125 // |
109 // |
126 if ( details->mPlaybackMode != EMPXVideoLiveStreaming && details->mDuration > 0 ) |
110 if ( details->mPlaybackMode != EMPXVideoLiveStreaming && details->mDuration > 0 ) |
127 { |
111 { |
130 value = value % 3600; |
114 value = value % 3600; |
131 QString min = locale.toString( value / 60 ); |
115 QString min = locale.toString( value / 60 ); |
132 value = value % 60; |
116 value = value % 60; |
133 QString sec = locale.toString( value ); |
117 QString sec = locale.toString( value ); |
134 |
118 |
135 addItemToListWidget( |
119 addItemToListWidget( |
136 hbTrId( "txt_videos_list_duration" ), |
120 hbTrId( "txt_videos_list_duration" ), |
137 hbTrId( "txt_videos_list_l1_l2_l3" ).arg( hour ).arg( min ).arg( sec ) ); |
121 hbTrId( "txt_videos_list_l1l2l3" ).arg( hour ).arg( min ).arg( sec ) ); |
138 } |
122 } |
139 |
123 |
140 // |
124 // |
141 // Date/Time |
125 // Date/Time |
142 // |
126 // |
143 makeDateTimeItem( details ); |
127 makeDateTimeItem( details ); |
144 |
128 |
145 // |
129 // |
146 // Location |
130 // Location |
147 // |
131 // |
148 addItemToListWidget( hbTrId( "txt_videos_list_location" ), details->mLocation ); |
132 addItemToListWidget( hbTrId( "txt_videos_list_location" ), details->mLocation ); |
149 |
133 |
150 // |
134 // |
151 // Author |
135 // Author |
152 // |
136 // |
153 addItemToListWidget( hbTrId( "txt_videos_list_author" ), details->mArtist ); |
137 addItemToListWidget( hbTrId( "txt_videos_list_author" ), details->mArtist ); |
154 |
138 |
155 // |
139 // |
156 // Copyright |
140 // Copyright |
157 // |
141 // |
158 addItemToListWidget( hbTrId( "txt_videos_list_copyright" ), details->mCopyright ); |
142 addItemToListWidget( hbTrId( "txt_videos_list_copyright" ), details->mCopyright ); |
159 |
143 |
160 // |
144 // |
161 // Language |
145 // Language |
162 // |
146 // |
163 addItemToListWidget( hbTrId( "txt_videos_list_language" ), details->mLanguage ); |
147 addItemToListWidget( hbTrId( "txt_videos_list_language" ), details->mLanguage ); |
164 |
148 |
165 // |
149 // |
166 // Keywords |
150 // Keywords |
167 // |
151 // |
168 addItemToListWidget( hbTrId( "txt_videos_list_keywords" ), details->mKeywords ); |
152 addItemToListWidget( hbTrId( "txt_videos_list_keywords" ), details->mKeywords ); |
169 |
153 |
170 // |
154 // |
171 // Size |
155 // Size |
172 // |
156 // |
173 makeSizeItem( details ); |
157 makeSizeItem( details ); |
174 |
158 |
177 // |
161 // |
178 if ( details->mVideoEnabled ) |
162 if ( details->mVideoEnabled ) |
179 { |
163 { |
180 QString resolution = hbTrId( "txt_videos_list_l1l2" ) |
164 QString resolution = hbTrId( "txt_videos_list_l1l2" ) |
181 .arg( locale.toString( details->mVideoWidth ) ) |
165 .arg( locale.toString( details->mVideoWidth ) ) |
182 .arg( locale.toString( details->mVideoHeight ) ); |
166 .arg( locale.toString( details->mVideoHeight ) ); |
183 addItemToListWidget( hbTrId( "txt_videos_list_resolution" ), resolution ); |
167 addItemToListWidget( hbTrId( "txt_videos_list_resolution" ), resolution ); |
184 } |
168 } |
185 |
169 |
186 // |
170 // |
187 // Format |
171 // Format |
188 // |
172 // |
189 addItemToListWidget( hbTrId( "txt_videos_list_format" ), details->mMimeType ); |
173 addItemToListWidget( hbTrId( "txt_videos_list_format" ), details->mMimeType ); |
190 |
174 |
191 // |
175 // |
192 // Bitrate |
176 // Bitrate |
193 // |
177 // |
194 makeBitRateItem( details ); |
178 makeBitRateItem( details ); |
195 |
179 |
196 // |
180 // |
197 // Folder |
181 // Folder |
198 // |
182 // |
199 if ( details->mPlaybackMode == EMPXVideoLocal || |
183 if ( details->mPlaybackMode == EMPXVideoLocal || |
200 details->mPlaybackMode == EMPXVideoProgressiveDownload) |
184 details->mPlaybackMode == EMPXVideoProgressiveDownload) |
201 { |
185 { |
202 QFileInfo fileInfo( details->mClipName ); |
186 QFileInfo fileInfo( details->mClipName ); |
203 QString folder = fileInfo.dir().dirName(); |
187 QString folder = fileInfo.dir().dirName(); |
204 addItemToListWidget( hbTrId( "txt_videos_list_collection_name" ), folder ); |
188 addItemToListWidget( hbTrId( "txt_videos_list_collection_name" ), folder ); |
205 } |
189 } |
206 |
|
207 } |
190 } |
208 |
191 |
209 // |
192 // |
210 // Set the rect size dynamically based on the view mode |
193 // Set the rect size dynamically based on the view mode |
211 // |
194 // |
212 QString sectionName; |
195 QGraphicsWidget *content = loader->findWidget( QString( "content" ) ); |
213 |
196 HbAnchorLayout *layout = static_cast<HbAnchorLayout*>( content->layout() ); |
214 if ( mController->viewMode() == EDetailsView ) |
197 |
215 { |
198 if ( layout ) |
216 sectionName = "detailsView"; |
199 { |
217 } |
200 QGraphicsWidget *titleLayout = loader->findWidget( QString( "titleLayout" ) ); |
218 else if ( mController->viewMode() == EAudioOnlyView ) |
201 QRectF titleRect = titleLayout->geometry(); |
219 { |
202 |
220 sectionName = "audioOnlyView"; |
203 switch ( mController->viewMode() ) |
221 } |
204 { |
222 |
205 case EDetailsView: |
223 bool ok = false; |
206 { |
224 loader->load( KMPXPLAYBACKVIEW_XML, sectionName, &ok ); |
207 layout->setAnchor( titleLayout, Hb::BottomEdge, this, Hb::TopEdge, 0 ); |
225 |
208 layout->setAnchor( layout, Hb::BottomEdge, this, Hb::BottomEdge, 0 ); |
226 if ( ! ok ) |
209 |
227 { |
210 break; |
228 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget failed to load section")); |
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 } |
229 } |
228 } |
230 } |
229 } |
231 } |
230 } |
232 |
231 |
233 // ------------------------------------------------------------------------------------------------- |
232 // ------------------------------------------------------------------------------------------------- |
234 // QMPXVideoPlaybackFileDetailsWidget::makeTitleItem |
233 // QMPXVideoPlaybackFileDetailsWidget::makeTitleItem |
235 // ------------------------------------------------------------------------------------------------- |
234 // ------------------------------------------------------------------------------------------------- |
236 // |
235 // |
237 void QMPXVideoPlaybackFileDetailsWidget::makeTitleItem( QMPXVideoPlaybackViewFileDetails* details ) |
236 void QMPXVideoPlaybackFileDetailsWidget::makeTitleItem( QMPXVideoPlaybackViewFileDetails* details ) |
238 { |
237 { |
239 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::makeTitleItem()")); |
238 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::makeTitleItem()")); |
240 |
239 |
241 // |
240 // |
242 // Title should be the first item in file details list |
241 // Title should be the first item in file details list |
243 // |
242 // |
244 if ( mController->viewMode() == EAudioOnlyView ) |
243 if ( mController->viewMode() == EAudioOnlyView ) |
245 { |
244 { |
246 // |
245 // |
247 // show the title for audio-only view |
246 // show the title for audio-only view |
248 // |
247 // |
249 if ( mListWidget->count() == 0 || ! mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) ) |
248 if ( mListWidget->count() == 0 || ! mListWidget->item( 0 )->text().contains( "Title", Qt::CaseInsensitive ) ) |
250 { |
249 { |
251 QString title = details->mTitle; |
250 QString title = details->mTitle; |
252 |
251 |
253 if ( title.count() == 0 ) |
252 if ( title.count() == 0 ) |
254 { |
253 { |
255 // |
254 // |
256 // If title is not available, show clip name |
255 // If title is not available, show clip name |
257 // |
256 // |
258 QFileInfo fileInfo( details->mClipName ); |
257 QFileInfo fileInfo( details->mClipName ); |
259 title = fileInfo.baseName (); |
258 title = fileInfo.completeBaseName(); |
260 } |
259 } |
261 |
260 |
262 // |
261 // |
263 // populate Title and its associated text |
262 // populate Title and its associated text |
264 // |
263 // |
282 // ------------------------------------------------------------------------------------------------- |
281 // ------------------------------------------------------------------------------------------------- |
283 // QMPXVideoPlaybackFileDetailsWidget::makeSizeItem |
282 // QMPXVideoPlaybackFileDetailsWidget::makeSizeItem |
284 // ------------------------------------------------------------------------------------------------- |
283 // ------------------------------------------------------------------------------------------------- |
285 // |
284 // |
286 void QMPXVideoPlaybackFileDetailsWidget::makeSizeItem( QMPXVideoPlaybackViewFileDetails* details ) |
285 void QMPXVideoPlaybackFileDetailsWidget::makeSizeItem( QMPXVideoPlaybackViewFileDetails* details ) |
287 { |
286 { |
288 if ( details->mPlaybackMode == EMPXVideoLocal || |
287 if ( details->mPlaybackMode == EMPXVideoLocal || |
289 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
288 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
290 { |
289 { |
291 QFileInfo fileInfo( details->mClipName ); |
290 QFileInfo fileInfo( details->mClipName ); |
292 |
291 |
293 // |
292 // |
294 // to prevent overflow, get an unsigned value of file size |
293 // to prevent overflow, get an unsigned value of file size |
295 // |
294 // |
296 ulong fileSize = fileInfo.size(); |
295 ulong fileSize = fileInfo.size(); |
297 |
296 |
298 // |
297 // |
299 // convert file size to KB, MB, GB accordingly |
298 // convert file size to KB, MB, GB accordingly |
300 // |
299 // |
301 if ( fileSize > 0 ) |
300 if ( fileSize > 0 ) |
302 { |
301 { |
328 } |
327 } |
329 |
328 |
330 int temp = size * 10; |
329 int temp = size * 10; |
331 size = (float)temp / 10; |
330 size = (float)temp / 10; |
332 |
331 |
333 addItemToListWidget( |
332 addItemToListWidget( |
334 hbTrId( "txt_videos_list_file_size" ), scale.arg( locale.toString( size ) ) ); |
333 hbTrId( "txt_videos_list_file_size" ), scale.arg( locale.toString( size ) ) ); |
335 } |
334 } |
336 } |
335 } |
337 } |
336 } |
338 |
337 |
339 // ------------------------------------------------------------------------------------------------- |
338 // ------------------------------------------------------------------------------------------------- |
340 // QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem |
339 // QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem |
341 // ------------------------------------------------------------------------------------------------- |
340 // ------------------------------------------------------------------------------------------------- |
342 // |
341 // |
343 void QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem( QMPXVideoPlaybackViewFileDetails* details ) |
342 void QMPXVideoPlaybackFileDetailsWidget::makeBitRateItem( QMPXVideoPlaybackViewFileDetails* details ) |
344 { |
343 { |
345 if ( details->mBitRate > 0 ) |
344 if ( details->mBitRate > 0 ) |
346 { |
345 { |
347 HbExtendedLocale locale = HbExtendedLocale::system(); |
346 HbExtendedLocale locale = HbExtendedLocale::system(); |
348 |
347 |
349 float bitrate = details->mBitRate; |
348 float bitrate = details->mBitRate; |
352 |
351 |
353 if ( bitrate > KILOBYTE ) |
352 if ( bitrate > KILOBYTE ) |
354 { |
353 { |
355 bitrate /= KILOBYTE; |
354 bitrate /= KILOBYTE; |
356 } |
355 } |
357 |
356 |
358 if ( bitrate > KILOBYTE ) |
357 if ( bitrate > KILOBYTE ) |
359 { |
358 { |
360 bitrate /= KILOBYTE; |
359 bitrate /= KILOBYTE; |
361 scale = hbTrId( "txt_videos_list_l1_mbps" ); |
360 scale = hbTrId( "txt_videos_list_l1_mbps" ); |
362 } |
361 } |
363 |
362 |
364 int temp = bitrate * 10; |
363 int temp = bitrate * 10; |
365 bitrate = (float)temp / 10; |
364 bitrate = (float)temp / 10; |
366 |
365 |
367 addItemToListWidget( |
366 addItemToListWidget( |
368 hbTrId( "txt_videos_list_bitrate" ), scale.arg( locale.toString( bitrate ) ) ); |
367 hbTrId( "txt_videos_list_bitrate" ), scale.arg( locale.toString( bitrate ) ) ); |
369 } |
368 } |
370 } |
369 } |
371 |
370 |
372 // ------------------------------------------------------------------------------------------------- |
371 // ------------------------------------------------------------------------------------------------- |
373 // QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget |
372 // QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget |
374 // ------------------------------------------------------------------------------------------------- |
373 // ------------------------------------------------------------------------------------------------- |
375 // |
374 // |
376 void QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( QString item, QString text ) |
375 void QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( QString item, QString text ) |
377 { |
376 { |
378 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget")); |
377 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget")); |
379 |
378 |
380 if ( text.count() > 0 ) |
379 if ( text.count() > 0 ) |
381 { |
380 { |
382 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( %s %s )"), |
381 MPX_DEBUG(_L("QMPXVideoPlaybackFileDetailsWidget::addItemToListWidget( %s %s )"), |
383 item.data(), text.data() ); |
382 item.data(), text.data() ); |
384 |
383 |
385 HbListWidgetItem* listWidgetItem = new HbListWidgetItem(); |
384 HbListWidgetItem* listWidgetItem = new HbListWidgetItem(); |
386 listWidgetItem->setText( item ); |
385 listWidgetItem->setText( item ); |
387 listWidgetItem->setSecondaryText( text ); |
386 listWidgetItem->setSecondaryText( text ); |
388 |
387 |
389 mListWidget->addItem( listWidgetItem ); |
388 mListWidget->addItem( listWidgetItem ); |
390 } |
389 } |
391 } |
390 } |
392 |
391 |
393 // ------------------------------------------------------------------------------------------------- |
392 // ------------------------------------------------------------------------------------------------- |
394 // QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem |
393 // QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem |
395 // ------------------------------------------------------------------------------------------------- |
394 // ------------------------------------------------------------------------------------------------- |
396 // |
395 // |
397 void QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem( QMPXVideoPlaybackViewFileDetails* details ) |
396 void QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem( QMPXVideoPlaybackViewFileDetails* details ) |
398 { |
397 { |
399 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem")); |
398 MPX_ENTER_EXIT(_L("QMPXVideoPlaybackFileDetailsWidget::makeDateTimeItem")); |
400 |
399 |
401 // |
400 // |
402 // attempt to get 'created' and 'last modified' date/time from metadata first, |
401 // attempt to get 'created' and 'last modified' date/time from metadata first, |
403 // if it's not available, then get it from the file system |
402 // if it's not available, then get it from the file system |
404 // |
403 // |
405 |
404 |
406 if ( details->mPlaybackMode == EMPXVideoLocal || |
405 if ( details->mPlaybackMode == EMPXVideoLocal || |
407 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
406 details->mPlaybackMode == EMPXVideoProgressiveDownload ) |
408 { |
407 { |
409 QDateTime dateTime; |
408 QDateTime dateTime; |
410 QFileInfo fileInfo( details->mClipName ); |
409 QFileInfo fileInfo( details->mClipName ); |
411 HbExtendedLocale locale = HbExtendedLocale::system(); |
410 HbExtendedLocale locale = HbExtendedLocale::system(); |
412 |
411 |
413 // |
412 // |
414 // Date created |
413 // Date created |
415 // |
414 // |
416 if ( details->mCreationTime > 0 ) |
415 if ( details->mCreationTime > 0 ) |
417 { |
416 { |