Start/ | End/ | |||
True | False | - | Line | Source |
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: Music Player details view. | |||
15 | * | |||
16 | */ | |||
17 | #include <qwebsettings> | |||
18 | #include <QGraphicsWidget> | |||
19 | #include <QGraphicsLayoutItem> | |||
20 | #include <QUrl> | |||
21 | #include <QSslError> | |||
22 | #include <QDomElement> | |||
23 | #include <QList> | |||
24 | #include <QFile> | |||
25 | #include <QTranslator> | |||
26 | #include <QLocale> | |||
27 | #include <QGraphicsLinearLayout> | |||
28 | #include <QSizeF> | |||
29 | ||||
30 | #include <thumbnailmanager_qt.h> | |||
31 | #include <thumbnaildata.h> | |||
32 | #include <thumbnailobjectsource.h> | |||
33 | ||||
34 | #include <hbinstance.h> | |||
35 | #include <hbmainwindow.h> | |||
36 | #include <hbaction.h> | |||
37 | #include <hblabel.h> | |||
38 | #include <hbgroupbox.h> | |||
39 | #include <hbdocumentloader.h> | |||
40 | #include <hbwidget.h> | |||
41 | #include <hbpushbutton.h> | |||
42 | #include <hbpopup.h> | |||
43 | #include <hbdialog.h> | |||
44 | #include <hblistwidget.h> | |||
45 | #include <hblistwidgetitem.h> | |||
46 | #include <hblistviewitem.h> | |||
47 | #include <hbprogressbar> | |||
48 | ||||
49 | #include "mpdetailsview.h" | |||
50 | #include "mpenginefactory.h" | |||
51 | #include "mpcommondefs.h" | |||
52 | #include "mpsongdata.h" | |||
53 | #include "mpsettingsmanager.h" | |||
54 | #include "mpdetailssharedialog.h" | |||
55 | #include "mpquerymanager.h" | |||
56 | #include "mptrace.h" | |||
57 | #include "logger.h" | |||
58 | #define SHARE_FUNC_ENABLE | |||
59 | ||||
60 | const int KUndefined = -1; | |||
61 | const int KRecommendationNum = 2; | |||
62 | ||||
63 | /*! | |||
64 | Constructor | |||
65 | */ | |||
Top | ||||
4 | 4 | 66 | MpDetailsView::MpDetailsView() | |
67 | : mMpEngine( 0 ), | |||
68 | mSongData( 0 ), | |||
69 | mActivated( false ), | |||
70 | mWindow( 0 ), | |||
71 | mSoftKeyBack( 0 ), | |||
72 | mSongText( NULL ), | |||
73 | mAlbumText( NULL ), | |||
74 | mArtistText( NULL ), | |||
75 | mAlbumArt( NULL ), | |||
76 | mDocumentLoader( NULL ), | |||
77 | mDownloadedAlbumArts( 0 ), | |||
78 | mMpTranslator( 0 ), | |||
79 | mCommonTranslator( 0 ), | |||
80 | mSharePopup( 0 ), | |||
81 | mMpQueryManager( 0), | |||
82 | mInspireMeOpen(true), | |||
83 | mSongDetailsGbOpen(false) | |||
84 | { | |||
85 | TX_ENTRY | |||
86 | bool widgetsOk = false; | |||
87 | HbMainWindow *mainWindow = hbInstance->allMainWindows()[0]; | |||
88 | mDocumentLoader = new HbDocumentLoader(); | |||
89 | ||||
90 | TX_LOG_ARGS("Document loader created") | |||
0 | 4 | - | 91 | if(!mDocumentLoader) { |
92 | TX_LOG_ARGS( "MpDetailsView() Error: HbDocumentLoader not constructed" ); | |||
0 | - | 93 | return; | |
94 | } | |||
95 | ||||
96 | TX_LOG_ARGS("Loading :/mpdetailsviewdocml/mpdetailsview.docml") | |||
97 | mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), &widgetsOk ); | |||
0 | 4 | - | 98 | if(!widgetsOk) { |
99 | TX_LOG_ARGS( "MpDetailsView() Error: invalid mpdetailsview.docml" ); | |||
0 | - | 100 | return; | |
101 | } | |||
102 | ||||
103 | TX_LOG_ARGS("Loaded :/mpdetailsviewdocml/mpdetailsview.docml") | |||
104 | QGraphicsWidget *widget = 0; | |||
105 | ||||
106 | widget = mDocumentLoader->findWidget( QString("content") ); | |||
107 | TRACE2("MpDetailsView() mDocumentLoader->findWidget for <content>:%x", widget); | |||
107 | while ( 0 ) | |||
108 | mContainer = qobject_cast<HbWidget *>(widget); | |||
109 | TRACE2("MpDetailsView() <content> widget found mContainer:%x", mContainer); | |||
109 | while ( 0 ) | |||
110 | setWidget( mContainer ); | |||
111 | ||||
112 | widget = mDocumentLoader->findWidget( QString("shareButton") ); | |||
113 | mShareButton = qobject_cast<HbPushButton *>(widget); | |||
114 | TRACE2("MpDetailsView() <shareButton> widget found mShareButton:%x", mShareButton); | |||
114 | while ( 0 ) | |||
115 | ||||
116 | widget = mDocumentLoader->findWidget( QString("trackTitle") ); | |||
117 | mSongText = qobject_cast<HbLabel *>(widget); | |||
118 | TRACE2("MpDetailsView() <trackTitle> widget found mSongText:%x", mSongText); | |||
118 | while ( 0 ) | |||
119 | ||||
120 | widget = mDocumentLoader->findWidget( QString("artist") ); | |||
121 | mArtistText = qobject_cast<HbLabel *>(widget); | |||
122 | TRACE2("MpDetailsView() <artist> widget found mArtistText:%x", mArtistText); | |||
122 | while ( 0 ) | |||
123 | ||||
124 | widget = mDocumentLoader->findWidget( QString("albumName") ); | |||
125 | mAlbumText = qobject_cast<HbLabel *>(widget); | |||
126 | TRACE2("MpDetailsView() <albumName> widget found mAlbumText:%x", mAlbumText); | |||
126 | while ( 0 ) | |||
127 | ||||
128 | widget = mDocumentLoader->findWidget( QString("albumArt") ); | |||
129 | mAlbumArt = qobject_cast<HbLabel *>(widget); | |||
130 | TRACE2("MpDetailsView() <albumArt> widget found mAlbumArt:%x", mAlbumArt); | |||
130 | while ( 0 ) | |||
131 | ||||
132 | widget = mDocumentLoader->findWidget( QString("songDetails") ); | |||
133 | mSongDetailsGroupBox = qobject_cast<HbGroupBox *>(widget); | |||
134 | TRACE2("MpDetailsView() <songDetails> widget found mSongDetailsGroupBox:%x", mSongDetailsGroupBox); | |||
134 | while ( 0 ) | |||
135 | ||||
136 | widget = mDocumentLoader->findWidget( QString("songDetailsListWidget") ); | |||
137 | mDetailList = qobject_cast<HbListWidget *>(widget); | |||
138 | TRACE2("MpDetailsView() <songDetailsListWidget> widget found mDetailList:%x", mDetailList); | |||
138 | while ( 0 ) | |||
139 | ||||
140 | widget = mDocumentLoader->findWidget( QString("inspireMeGroupBox") ); | |||
141 | mInspireMeGroupBox = qobject_cast<HbGroupBox *>(widget); | |||
142 | TRACE2("MpDetailsView() <inspireMeGroupBox> widget found mInspireMeGroupBox:%x", mInspireMeGroupBox); | |||
142 | while ( 0 ) | |||
143 | ||||
144 | widget = mDocumentLoader->findWidget( QString("inspireListWidget") ); | |||
145 | mInspireList = qobject_cast<HbListWidget *>(widget); | |||
146 | TRACE2("MpDetailsView() <inspireListWidget> widget found mInspireList:%x", mInspireList); | |||
146 | while ( 0 ) | |||
147 | ||||
148 | widget = mDocumentLoader->findWidget( QString("inspireMeProgressBar") ); | |||
149 | mInspireMeProgressBar = qobject_cast<HbProgressBar *>(widget); | |||
150 | TRACE2("MpDetailsView() <inspireMeProgressBar> widget found mInspireMeProgressBar:%x", mInspireMeProgressBar); | |||
150 | while ( 0 ) | |||
151 | ||||
152 | TX_EXIT | |||
153 | } | |||
154 | ||||
155 | /*! | |||
156 | Destructs the details view. | |||
157 | */ | |||
Top | ||||
4 | 4 | 158 | MpDetailsView::~MpDetailsView() | |
159 | { | |||
160 | TX_ENTRY | |||
4 | 0 | - | 161 | if ( mSoftKeyBack ) { |
162 | delete mSoftKeyBack; | |||
163 | } | |||
4 | 0 | - | 164 | if ( mDocumentLoader ) { |
165 | delete mDocumentLoader; | |||
166 | } | |||
4 | 0 | - | 167 | if( mThumbnailManager ) { |
168 | delete mThumbnailManager; | |||
169 | } | |||
170 | delete mMpTranslator; | |||
171 | delete mCommonTranslator; | |||
172 | delete mSharePopup; | |||
173 | delete mMpQueryManager; | |||
174 | ||||
175 | TX_EXIT | |||
176 | } | |||
177 | ||||
178 | /*! | |||
179 | Initializes the details view. Allocates all resources needed by the view. | |||
180 | */ | |||
Top | ||||
4 | 4 | 181 | void MpDetailsView::initializeView() | |
182 | { | |||
183 | TX_ENTRY | |||
184 | ||||
185 | //Load musicplayer and common translators | |||
186 | QString lang = QLocale::system().name(); | |||
187 | QString path = QString( "z:/resource/qt/translations/" ); | |||
188 | bool translatorLoaded = false; | |||
189 | ||||
190 | mMpTranslator = new QTranslator( this ); | |||
191 | translatorLoaded = mMpTranslator->load( path + "musicplayer_" + lang ); | |||
192 | TX_LOG_ARGS( "Loading translator ok=" << translatorLoaded ); | |||
4 | 0 | - | 193 | if ( translatorLoaded ) { |
194 | qApp->installTranslator( mMpTranslator ); | |||
195 | } | |||
196 | ||||
197 | mCommonTranslator = new QTranslator( this ); | |||
198 | translatorLoaded = mCommonTranslator->load( path + "common_" + lang ); | |||
199 | TX_LOG_ARGS( "Loading common translator ok=" << translatorLoaded ); | |||
0 | 4 | - | 200 | if ( translatorLoaded ) { |
201 | qApp->installTranslator( mCommonTranslator ); | |||
202 | } | |||
203 | ||||
204 | // TODO: Hkn: Remove this once ELCE-844GBS is fixed | |||
205 | mInspireMeProgressBar->hide(); | |||
206 | ||||
207 | mWindow = mainWindow(); | |||
208 | mSoftKeyBack = new HbAction( Hb::BackAction, this ); | |||
209 | ||||
210 | mMpEngine = MpEngineFactory::sharedEngine(); | |||
211 | mSongData = mMpEngine->songData(); | |||
212 | ||||
213 | // TODO: Remove this once Orbit bug ELCE-843HFJ is fixed | |||
214 | mInspireList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff); | |||
215 | ||||
216 | ||||
217 | ||||
218 | ||||
219 | mThumbnailManager = new ThumbnailManager( this ); | |||
220 | mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForQuality ); | |||
221 | mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailSmall ); | |||
222 | QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ), | |||
223 | this, SLOT( thumbnailReady( QPixmap , void * , int , int ) ) ); | |||
224 | // TODO: Use the album art in provided by 10.1 wk16 platform. Current one is in the binary | |||
225 | mDefaultRecommendationAlbumArt = QPixmap( ":/mpdetailsviewicons/qtg_large_music_album.svg" ); | |||
226 | ||||
227 | // TODO: might need later | |||
228 | setupMenu(); | |||
229 | mMpQueryManager = new MpQueryManager(); | |||
230 | ||||
231 | connect( mSoftKeyBack, SIGNAL( triggered() ), this, SLOT( back() ) ); | |||
232 | connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) ); | |||
233 | connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) ); | |||
234 | connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) ); | |||
235 | connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) ); | |||
236 | connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) ); | |||
237 | connect( mMpQueryManager, SIGNAL(onlineStatusChanged(bool)), this ,SLOT(onlineStateChanged(bool))); | |||
238 | connect( mMpQueryManager, SIGNAL(setAlbumArt(const QString &, const QString &) ), this ,SLOT(setAlbumArtUri(const QString &, const QString & ))); | |||
239 | #ifdef SHARE_FUNC_ENABLED | |||
240 | connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) ); | |||
241 | ||||
242 | // Preload the share popup | |||
243 | mSharePopup = new MpDetailsShareDialog( mSongData ); | |||
244 | #endif | |||
245 | TX_EXIT | |||
246 | } | |||
247 | ||||
248 | /*! | |||
249 | Activates the details view. | |||
250 | */ | |||
Top | ||||
1 | 1 | 251 | void MpDetailsView::activateView() | |
252 | { | |||
253 | TX_ENTRY | |||
254 | setNavigationAction( mSoftKeyBack ); | |||
255 | mMpEngine->retrieveSong(); | |||
256 | ||||
257 | mActivated = true; | |||
258 | mInspireMeOpen = MpSettingsManager::inspireMe(); | |||
259 | mSongDetailsGbOpen = MpSettingsManager::songDetailsGb(); | |||
260 | TX_LOG_ARGS( "InspireMeVal: " << mInspireMeOpen ); | |||
261 | TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen ); | |||
262 | mInspireMeGroupBox->setCollapsed(!mInspireMeOpen); | |||
263 | mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen); | |||
264 | TX_EXIT | |||
265 | } | |||
266 | ||||
267 | /*! | |||
268 | Deactivates the details view. | |||
269 | */ | |||
Top | ||||
1 | 1 | 270 | void MpDetailsView::deactivateView() | |
271 | { | |||
272 | TX_ENTRY | |||
273 | setNavigationAction( 0 ); | |||
274 | mActivated = false; | |||
275 | TX_EXIT | |||
276 | } | |||
277 | ||||
278 | /*! | |||
279 | Setup the menu. | |||
280 | */ | |||
Top | ||||
4 | 4 | 281 | void MpDetailsView::setupMenu() | |
282 | { | |||
283 | TX_ENTRY | |||
284 | ||||
285 | TX_EXIT | |||
286 | } | |||
287 | ||||
288 | /*! | |||
289 | Slot to handle back command from softkey. | |||
290 | */ | |||
Top | ||||
1 | 1 | 291 | void MpDetailsView::back() | |
292 | { | |||
293 | TX_ENTRY | |||
0 | 1 | - | 294 | if (mInspireMeGroupBox->isCollapsed() ) { |
295 | MpSettingsManager::setInspireMe(false); | |||
296 | } else { | |||
297 | MpSettingsManager::setInspireMe(true); | |||
298 | } | |||
299 | ||||
0 | 1 | - | 300 | if (mSongDetailsGroupBox->isCollapsed() ) { |
301 | MpSettingsManager::setSongDetailsGb(false); | |||
302 | } else { | |||
303 | MpSettingsManager::setSongDetailsGb(true); | |||
304 | } | |||
305 | ||||
306 | emit command( MpCommon::ActivatePlaybackView ); | |||
307 | TX_EXIT | |||
308 | } | |||
309 | ||||
310 | /*! | |||
311 | Slot to be called when share button is clicked | |||
312 | */ | |||
Top | ||||
0 | 0 | - | 313 | void MpDetailsView::share() |
314 | { | |||
315 | TX_ENTRY | |||
316 | // TODO: Fix the layout issue in idex.html then enable this | |||
0 | 0 | - | 317 | if ( !mSharePopup ) |
318 | { | |||
319 | mSharePopup = new MpDetailsShareDialog( mSongData ); | |||
320 | } | |||
0 | 0 | - | 321 | if ( mSharePopup ) |
322 | { | |||
323 | mSharePopup->show(); | |||
324 | } | |||
0 | 0 | - | 325 | if (canQuerySharePlayerLink() ) { |
326 | mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() ); | |||
327 | } | |||
328 | TX_EXIT | |||
329 | } | |||
330 | ||||
331 | /*! | |||
332 | Slot to handle Album art changed. | |||
333 | */ | |||
Top | ||||
0 | 0 | - | 334 | void MpDetailsView::albumArtChanged( ) |
335 | { | |||
336 | TX_ENTRY | |||
337 | HbIcon icon; | |||
338 | mSongData->albumArt( icon ); | |||
339 | mAlbumArt->setIcon( icon ); | |||
340 | TX_EXIT | |||
341 | } | |||
342 | ||||
343 | /*! | |||
344 | Slot to handle Connection changes. | |||
345 | */ | |||
Top | ||||
0 | 0 | - | 346 | void MpDetailsView::onlineStateChanged(bool state) |
347 | { | |||
348 | TX_ENTRY | |||
349 | mOnline = state; | |||
350 | TX_EXIT | |||
351 | } | |||
352 | ||||
353 | /*! | |||
354 | Sets recommendation album art | |||
355 | */ | |||
Top | ||||
0 | 0 | - | 356 | void MpDetailsView::setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName ) |
357 | { | |||
358 | TX_ENTRY_ARGS( "albumArtUri = " << albumArtUri ) | |||
359 | TX_LOG_ARGS( "albumArtName = " << albumArtName ) | |||
0 | 0 | - | 360 | if ( !albumArtUri.isEmpty() ) { |
361 | int id = mThumbnailManager->getThumbnail( albumArtName, reinterpret_cast<void *>( const_cast<QString *>( &albumArtUri ) ) ); | |||
0 | 0 | - | 362 | if ( id == KUndefined ) { |
363 | // Request failed. Set default album art. | |||
364 | mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt ); | |||
365 | recommendationAlbumArtReady(); | |||
366 | } | |||
367 | } | |||
368 | else { | |||
369 | // No album art uri. Set default album art. | |||
370 | mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt ); | |||
371 | recommendationAlbumArtReady(); | |||
372 | } | |||
373 | TX_EXIT | |||
374 | } | |||
375 | ||||
376 | /*! | |||
377 | Render inspireme groupbox after album arts downloaded | |||
378 | */ | |||
Top | ||||
0 | 0 | - | 379 | void MpDetailsView::RenderInspireMeGroupBox() |
380 | { | |||
381 | TX_ENTRY | |||
382 | ||||
0 | 0 | - | 383 | if( mMpQueryManager->recommendationAlbumArtsMap().count() ) { |
384 | // we have recommendations | |||
0 | 0 | - | 385 | for ( int i = 0; i < KRecommendationNum; i++ ) { |
386 | // configure the layout properties | |||
0 | 0 | - | 387 | if(!mInspireList->count()) { |
388 | // we havent configured the prototype before | |||
389 | HbListViewItem *prototype = mInspireList->listItemPrototype(); | |||
390 | prototype->setGraphicsSize( HbListViewItem::LargeIcon ); | |||
391 | } | |||
392 | // create the item | |||
393 | HbListWidgetItem *inspireMeItem = new HbListWidgetItem(); | |||
394 | HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) ); | |||
395 | inspireMeItem->setIcon( icon ); | |||
396 | inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) ); | |||
397 | inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) ); | |||
398 | mInspireList->addItem( inspireMeItem ); | |||
399 | } | |||
400 | } | |||
401 | else { | |||
402 | // we dont have recommendations | |||
403 | // we havent configured the prototype before | |||
404 | HbListViewItem *prototype = mInspireList->listItemPrototype(); | |||
405 | const int maxTextRowCount = 20; | |||
406 | const int minTextRowCount = 1; | |||
407 | prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount); | |||
408 | ||||
409 | HbListWidgetItem *inspireMeItem = new HbListWidgetItem(); | |||
410 | QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi")); | |||
411 | inspireMeItem->setSecondaryText(info); | |||
412 | mInspireList->addItem( inspireMeItem ); | |||
413 | } | |||
414 | ||||
415 | TX_EXIT | |||
416 | } | |||
417 | ||||
Top | ||||
0 | 0 | - | 418 | void MpDetailsView::recommendationAlbumArtReady() |
419 | { | |||
420 | TX_ENTRY_ARGS( "mAlbumArtsReadyCount = " << mMpQueryManager->albumArtsReadyCount() ) | |||
421 | ( mMpQueryManager->albumArtsReadyCount() )++; | |||
0 | 0 | - | 422 | if ( mMpQueryManager->albumArtsReadyCount() == KRecommendationNum ) { |
423 | mInspireMeProgressBar->hide(); | |||
424 | RenderInspireMeGroupBox(); | |||
425 | } | |||
426 | TX_EXIT | |||
427 | } | |||
428 | ||||
429 | ||||
430 | ||||
Top | ||||
0 | 0 | - | 431 | bool MpDetailsView::canQueryRecommendations() const |
432 | { | |||
433 | bool result = (!(mAlbumText->isEmpty()) || !(mArtistText->isEmpty()) ) && !(mInspireMeGroupBox->isCollapsed()); | |||
434 | TX_LOG_ARGS(" result:" << result); | |||
0 | - | 435 | return result; | |
436 | } | |||
437 | ||||
Top | ||||
0 | 0 | - | 438 | bool MpDetailsView::canQuerySharePlayerLink() const |
439 | { | |||
440 | bool result = !(mSongText->isEmpty()) && !(mArtistText->isEmpty()); | |||
441 | TX_LOG_ARGS(" result:" << result); | |||
0 | - | 442 | return result; | |
443 | } | |||
444 | ||||
445 | /*! | |||
446 | Slot to handle basic song information | |||
447 | */ | |||
Top | ||||
0 | 0 | - | 448 | void MpDetailsView::handlePlaybackInfoChanged() |
449 | { | |||
450 | TX_ENTRY | |||
451 | ||||
452 | mMpQueryManager->clearNetworkReplies(); | |||
453 | clearInspireMe(); | |||
454 | ||||
0 | 0 | - | 455 | if ( !mSongData->title().isEmpty () ) { |
456 | mSongText->setPlainText( mSongData->title() ); | |||
457 | } else { | |||
458 | mSongText->setPlainText( mSongData->fileName() ); | |||
459 | } | |||
460 | ||||
0 | 0 | - | 461 | if ( !mSongData->album().isEmpty () ) { |
462 | mAlbumText->setPlainText( mSongData->album() ); | |||
463 | } else { | |||
464 | mAlbumText->setPlainText( tr( "Unknown ") ); | |||
465 | } | |||
466 | ||||
0 | 0 | - | 467 | if ( !mSongData->artist().isEmpty() ) { |
468 | mArtistText->setPlainText( mSongData->artist() ); | |||
469 | } else { | |||
470 | mArtistText->setPlainText( tr( "Unknown ") ); | |||
471 | } | |||
472 | ||||
0 | 0 | - | 473 | if (canQueryRecommendations()) { |
474 | // start inspire me area progress bar | |||
475 | // TODO: currently, till we get to this callback from MPX the bar not shown | |||
476 | // TODO: check if inspireMe is ON, if not, dont show | |||
477 | mInspireMeProgressBar->show(); | |||
0 | 0 | - | 478 | if (canQuerySharePlayerLink() ) { |
479 | mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
480 | } | |||
481 | mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
482 | } | |||
483 | else { | |||
484 | // metadata to query for inspire me items not available | |||
485 | // show information note | |||
0 | 0 | - | 486 | if (!mInspireMeGroupBox->isCollapsed()) |
487 | RenderInspireMeGroupBox(); | |||
488 | } | |||
489 | TX_EXIT | |||
490 | } | |||
491 | ||||
Top | ||||
0 | 0 | - | 492 | void MpDetailsView::clearInspireMe() |
493 | { | |||
494 | TX_ENTRY | |||
495 | mInspireList->clear(); | |||
496 | mMpQueryManager->clearRecommendations(); | |||
497 | TX_EXIT | |||
498 | } | |||
499 | /*! | |||
500 | Slot to handle detail song information | |||
501 | */ | |||
Top | ||||
0 | 0 | - | 502 | void MpDetailsView::songDetailInfoChanged() |
503 | { | |||
504 | TX_ENTRY | |||
505 | mDetailList->clear(); | |||
506 | ||||
0 | 0 | - | 507 | if ( !mSongData->albumTrack().isNull() ) { |
508 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
509 | item->setText( tr( "Song number" ) ); | |||
510 | item->setSecondaryText( mSongData->albumTrack() ); | |||
511 | item->setEnabled( false ); | |||
512 | mDetailList->addItem( item ); | |||
513 | } | |||
514 | ||||
0 | 0 | - | 515 | if ( !mSongData->year().isNull() ) { |
516 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
517 | item->setText( tr( "Year" ) ); | |||
518 | item->setSecondaryText( mSongData->year() ); | |||
519 | item->setEnabled( false ); | |||
520 | mDetailList->addItem( item ); | |||
521 | } | |||
522 | ||||
0 | 0 | - | 523 | if ( !mSongData->genre().isNull() ) { |
524 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
525 | item->setText( tr( "Genre" ) ); | |||
526 | item->setSecondaryText( mSongData->genre() ); | |||
527 | item->setEnabled( false ); | |||
528 | mDetailList->addItem( item ); | |||
529 | } | |||
530 | ||||
0 | 0 | - | 531 | if ( !mSongData->composer().isNull() ) { |
532 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
533 | item->setText( tr( "Composer" ) ); | |||
534 | item->setSecondaryText( mSongData->composer() ); | |||
535 | item->setEnabled( false ); | |||
536 | mDetailList->addItem( item ); | |||
537 | } | |||
538 | ||||
0 | 0 | - | 539 | if ( !mSongData->fileName().isNull() ) { |
540 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
541 | item->setText( tr( "File name" ) ); | |||
542 | item->setSecondaryText( mSongData->fileName() ); | |||
543 | item->setEnabled( false ); | |||
544 | mDetailList->addItem( item ); | |||
545 | } | |||
546 | ||||
0 | 0 | - | 547 | if ( !mSongData->mimeType().isNull() ) { |
548 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
549 | item->setText( tr( "Format" ) ); | |||
550 | item->setSecondaryText( mSongData->mimeType() ); | |||
551 | item->setEnabled( false ); | |||
552 | mDetailList->addItem( item ); | |||
553 | } | |||
554 | ||||
0 | 0 | - | 555 | if ( !mSongData->duration().isNull() ) { |
556 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
557 | item->setText( tr( "Duration" ) ); | |||
558 | item->setSecondaryText( mSongData->duration() ); | |||
559 | item->setEnabled( false ); | |||
560 | mDetailList->addItem( item ); | |||
561 | } | |||
562 | ||||
0 | 0 | - | 563 | if ( !mSongData->bitRate().isNull() ) { |
564 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
565 | item->setText( tr( "Bitrate" ) ); | |||
566 | item->setSecondaryText( mSongData->bitRate().append( " Kbps" ) ); | |||
567 | item->setEnabled( false ); | |||
568 | mDetailList->addItem( item ); | |||
569 | } | |||
570 | ||||
0 | 0 | - | 571 | if ( !mSongData->sampleRate().isNull() ) { |
572 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
573 | item->setText( tr( "Sampling rate" ) ); | |||
574 | item->setSecondaryText( mSongData->sampleRate().append( " hz" ) ); | |||
575 | item->setEnabled( false ); | |||
576 | mDetailList->addItem( item ); | |||
577 | } | |||
578 | ||||
0 | 0 | - | 579 | if ( !mSongData->size().isNull() ) { |
580 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
581 | item->setText( tr( "Size" ) ); | |||
582 | item->setSecondaryText( mSongData->size() ); | |||
583 | item->setEnabled( false ); | |||
584 | mDetailList->addItem( item ); | |||
585 | } | |||
586 | ||||
0 | 0 | - | 587 | if ( !mSongData->modified().isNull() ) { |
588 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
589 | item->setText( tr( "Modified" ) ); | |||
590 | item->setSecondaryText( mSongData->modified() ); | |||
591 | item->setEnabled( false ); | |||
592 | mDetailList->addItem( item ); | |||
593 | } | |||
594 | ||||
0 | 0 | - | 595 | if ( !mSongData->copyright().isNull() ) { |
596 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
597 | item->setText( tr( "Copyright" ) ); | |||
598 | item->setSecondaryText( mSongData->copyright() ); | |||
599 | item->setEnabled( false ); | |||
600 | mDetailList->addItem( item ); | |||
601 | } | |||
602 | ||||
0 | 0 | - | 603 | if ( !mSongData->musicURL().isNull() ) { |
604 | HbListWidgetItem *item = new HbListWidgetItem(); | |||
605 | item->setText( tr( "Web site" ) ); | |||
606 | item->setSecondaryText( mSongData->musicURL() ); | |||
607 | item->setEnabled( true ); | |||
608 | mDetailList->addItem( item ); | |||
609 | } | |||
610 | TX_EXIT | |||
611 | } | |||
612 | ||||
Top | ||||
1 | 1 | 613 | void MpDetailsView::handleDetailsGroupBoxToggled(bool state) | |
614 | { | |||
615 | TX_ENTRY | |||
0 | 1 | - | 616 | if ( !mSongDetailsGroupBox->isCollapsed() ) { |
617 | mInspireMeGroupBox->setCollapsed( true ); | |||
618 | } | |||
619 | TX_EXIT | |||
620 | } | |||
621 | ||||
Top | ||||
0 | 0 | - | 622 | void MpDetailsView::handleInspireMeGroupBoxToggled(bool /*state*/) |
623 | { | |||
624 | TX_ENTRY | |||
0 | 0 | - | 625 | if ( !mInspireMeGroupBox->isCollapsed() ) { |
626 | mSongDetailsGroupBox->setCollapsed( true ); | |||
627 | } | |||
628 | TX_LOG_ARGS("count" << mInspireList->count()); | |||
0 | 0 | - | 629 | if ( (mInspireList->count() == 0 ) && canQueryRecommendations() ) { |
630 | mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title()); | |||
0 | 0 | - | 631 | } else if (mInspireList->count() == 0 && !canQueryRecommendations()) { |
632 | RenderInspireMeGroupBox(); | |||
633 | } | |||
634 | TX_EXIT | |||
635 | } | |||
636 | ||||
637 | /*! | |||
638 | Slot to handle the recommendation album art | |||
639 | */ | |||
Top | ||||
0 | 0 | - | 640 | void MpDetailsView::thumbnailReady( |
641 | const QPixmap& pixmap, | |||
642 | void *data, | |||
643 | int /*id*/, | |||
644 | int error ) | |||
645 | { | |||
646 | TX_ENTRY | |||
647 | // TODO: Hkn: use qobject_cast | |||
648 | QString uri = *( reinterpret_cast<QString *>( data ) ); | |||
649 | TX_LOG_ARGS( "Uri: " << uri ); | |||
650 | ||||
0 | 0 | - | 651 | if ( error == 0 ) { |
652 | TX_LOG_ARGS( "album art link: " << uri ); | |||
653 | mMpQueryManager->insertMapItem( uri, pixmap ); | |||
654 | } else { | |||
655 | mMpQueryManager->insertMapItem( uri, mDefaultRecommendationAlbumArt ); | |||
656 | } | |||
657 | recommendationAlbumArtReady(); | |||
658 | TX_EXIT | |||
659 | } | |||
***TER 17% (18/109) of SOURCE FILE mpdetailsview.cpp |