mpviewplugins/mpdetailsviewplugin/src/mpdetailsview.cpp
changeset 36 a0afa279b8fe
parent 35 fdb31ab341af
child 37 eb79a7c355bf
equal deleted inserted replaced
35:fdb31ab341af 36:a0afa279b8fe
     1 /*
     1 /*
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available 
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     8 *
     9 * Initial Contributors:
     9 * Initial Contributors:
    24 #include <QTranslator>
    24 #include <QTranslator>
    25 #include <QLocale>
    25 #include <QLocale>
    26 #include <QGraphicsLinearLayout>
    26 #include <QGraphicsLinearLayout>
    27 #include <QSizeF>
    27 #include <QSizeF>
    28 
    28 
    29 #include <thumbnailmanager_qt.h>
    29 
    30 #include <thumbnaildata.h>
       
    31 #include <thumbnailobjectsource.h>
       
    32 
    30 
    33 #include <hbinstance.h>
    31 #include <hbinstance.h>
    34 #include <hbmainwindow.h>
    32 #include <hbmainwindow.h>
    35 #include <hbaction.h>
    33 #include <hbaction.h>
    36 #include <hblabel.h>
    34 #include <hblabel.h>
    55 
    53 
    56 #ifdef SHARE_FUNC_ENABLED
    54 #ifdef SHARE_FUNC_ENABLED
    57 #include "mpdetailssharedialog.h"
    55 #include "mpdetailssharedialog.h"
    58 #endif
    56 #endif
    59 
    57 
    60 const int KUndefined = -1;
    58 
    61 const int KRecommendationCount = 2;
    59 const int KRecommendationCount = 2;
    62 
    60 
    63 
    61 
    64 /*!
    62 /*!
    65  Constructor
    63  Constructor
    66  */
    64  */
    67 MpDetailsView::MpDetailsView()
    65 MpDetailsView::MpDetailsView()
    68     : mMpEngine( 0 ),
    66     : mMpEngine( 0 ),
    69       mSongData( 0 ),
    67       mSongData( 0 ),
    70       mActivated( false ),
    68       mActivated( false ),
    71       mWindow( 0 ),
       
    72       mSoftKeyBack( 0 ),
    69       mSoftKeyBack( 0 ),
    73       mSongText( NULL ),
    70       mSongText( 0 ),
    74       mAlbumText( NULL ),
    71       mAlbumText( 0 ),
    75       mArtistText( NULL ),
    72       mArtistText( 0 ),
    76       mAlbumArt( NULL ),
    73       mAlbumArt( 0 ),
    77       mDocumentLoader( NULL ),
    74       mSongDetailsGroupBox(0),
    78       mDownloadedAlbumArts( 0 ),
    75       mInspireMeGroupBox(0),
       
    76       mShareButton(0),
       
    77       mDocumentLoader( 0 ),
       
    78       mDetailList(0),
       
    79       mInspireList(0),
       
    80       mInspireMeProgressBar(0),
    79       mMpTranslator( 0 ),
    81       mMpTranslator( 0 ),
    80       mCommonTranslator( 0 ), 
    82       mCommonTranslator( 0 ),
    81       mMpQueryManager( 0 ),
    83       mMpQueryManager( 0 ),
    82       mInspireMeQueryOngoing( false ),
    84       mInspireMeQueryOngoing( false ),
    83       mInspireMeQueryRendered( false ),
    85       mInspireMeQueryRendered( false ),
    84       mInspireMeOpen(true),
    86       mInspireMeOpen(true),
    85       mSongDetailsGbOpen(false)
    87       mSongDetailsGbOpen(false)
    89 {
    91 {
    90     TX_ENTRY
    92     TX_ENTRY
    91     bool widgetsOk = false;
    93     bool widgetsOk = false;
    92     HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
    94     HbMainWindow *mainWindow = hbInstance->allMainWindows()[0];
    93     mDocumentLoader = new HbDocumentLoader();
    95     mDocumentLoader = new HbDocumentLoader();
    94     
    96 
    95     TX_LOG_ARGS("Document loader created")
    97     TX_LOG_ARGS("Document loader created")
    96     if(!mDocumentLoader) {
    98     if(!mDocumentLoader) {
    97         TX_LOG_ARGS( "MpDetailsView() Error: HbDocumentLoader not constructed" );
    99         TX_LOG_ARGS( "MpDetailsView() Error: HbDocumentLoader not constructed" );
    98         return;    
   100         return;
    99     }
   101     }
   100 
   102 
   101     TX_LOG_ARGS("Loading :/mpdetailsviewdocml/mpdetailsview.docml")
   103     TX_LOG_ARGS("Loading :/mpdetailsviewdocml/mpdetailsview.docml")
   102     mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), &widgetsOk );
   104     mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), &widgetsOk );
   103     if(!widgetsOk) {
   105     if(!widgetsOk) {
   104         TX_LOG_ARGS( "MpDetailsView() Error: invalid mpdetailsview.docml" );
   106         TX_LOG_ARGS( "MpDetailsView() Error: invalid mpdetailsview.docml" );
   105         return;    
   107         return;
   106     }
   108     }
   107     
   109 
   108     TX_LOG_ARGS("Loaded :/mpdetailsviewdocml/mpdetailsview.docml")
   110     TX_LOG_ARGS("Loaded :/mpdetailsviewdocml/mpdetailsview.docml")
   109     QGraphicsWidget *widget = 0; 
   111     QGraphicsWidget *widget = 0;
   110         
   112 
   111     widget = mDocumentLoader->findWidget( QString("content") );
   113     widget = mDocumentLoader->findWidget( QString("content") );
   112     TX_LOG_ARGS( "MpDetailsView() mDocumentLoader->findWidget for <content>: " << (int)(widget) );
   114     TX_LOG_ARGS( "MpDetailsView() mDocumentLoader->findWidget for <content>: " << (int)(widget) );
   113     mContainer = qobject_cast<HbWidget *>(widget);
   115     setWidget(  qobject_cast<HbWidget *>(widget) );
   114     TX_LOG_ARGS("MpDetailsView() <content> widget found mContainer: " << (int)(mContainer));
       
   115     setWidget( mContainer );
       
   116 
   116 
   117     widget = mDocumentLoader->findWidget( QString("shareButton") );
   117     widget = mDocumentLoader->findWidget( QString("shareButton") );
   118     mShareButton = qobject_cast<HbPushButton *>(widget);
   118     mShareButton = qobject_cast<HbPushButton *>(widget);
   119     TX_LOG_ARGS("MpDetailsView() <shareButton> widget found mShareButton: " << (int)(mShareButton) );
   119     TX_LOG_ARGS("MpDetailsView() <shareButton> widget found mShareButton: " << (int)(mShareButton) );
   120 
   120 
   121     widget = mDocumentLoader->findWidget( QString("trackTitle") );
   121     widget = mDocumentLoader->findWidget( QString("trackTitle") );
   122     mSongText = qobject_cast<HbLabel *>(widget);
   122     mSongText = qobject_cast<HbLabel *>(widget);
   123     TX_LOG_ARGS("MpDetailsView() <trackTitle> widget found mSongText: " << (int)(mSongText) );
   123     TX_LOG_ARGS("MpDetailsView() <trackTitle> widget found mSongText: " << (int)(mSongText) );
   124     
   124 
   125     widget = mDocumentLoader->findWidget( QString("artist") );
   125     widget = mDocumentLoader->findWidget( QString("artist") );
   126     mArtistText = qobject_cast<HbLabel *>(widget);
   126     mArtistText = qobject_cast<HbLabel *>(widget);
   127     TX_LOG_ARGS("MpDetailsView() <artist> widget found mArtistText: " << (int)(mArtistText) );
   127     TX_LOG_ARGS("MpDetailsView() <artist> widget found mArtistText: " << (int)(mArtistText) );
   128     
   128 
   129     widget = mDocumentLoader->findWidget( QString("albumName") );
   129     widget = mDocumentLoader->findWidget( QString("albumName") );
   130     mAlbumText = qobject_cast<HbLabel *>(widget);
   130     mAlbumText = qobject_cast<HbLabel *>(widget);
   131     TX_LOG_ARGS("MpDetailsView() <albumName> widget found mAlbumText: " << (int)(mAlbumText) );
   131     TX_LOG_ARGS("MpDetailsView() <albumName> widget found mAlbumText: " << (int)(mAlbumText) );
   132 
   132 
   133     widget = mDocumentLoader->findWidget( QString("albumArt") );
   133     widget = mDocumentLoader->findWidget( QString("albumArt") );
   134     mAlbumArt = qobject_cast<HbLabel *>(widget);
   134     mAlbumArt = qobject_cast<HbLabel *>(widget);
   135     TX_LOG_ARGS("MpDetailsView() <albumArt> widget found mAlbumArt: " << (int)(mAlbumArt) );
   135     TX_LOG_ARGS("MpDetailsView() <albumArt> widget found mAlbumArt: " << (int)(mAlbumArt) );
   136     
   136 
   137     widget = mDocumentLoader->findWidget( QString("songDetails") );
   137     widget = mDocumentLoader->findWidget( QString("songDetails") );
   138     mSongDetailsGroupBox = qobject_cast<HbGroupBox *>(widget);
   138     mSongDetailsGroupBox = qobject_cast<HbGroupBox *>(widget);
   139     TX_LOG_ARGS("MpDetailsView() <songDetails> widget found mSongDetailsGroupBox: " << (int)(mSongDetailsGroupBox) );
   139     TX_LOG_ARGS("MpDetailsView() <songDetails> widget found mSongDetailsGroupBox: " << (int)(mSongDetailsGroupBox) );
   140      
   140 
   141     widget = mDocumentLoader->findWidget( QString("songDetailsListWidget") );
   141     widget = mDocumentLoader->findWidget( QString("songDetailsListWidget") );
   142     mDetailList = qobject_cast<HbListWidget *>(widget);
   142     mDetailList = qobject_cast<HbListWidget *>(widget);
   143     TX_LOG_ARGS("MpDetailsView() <songDetailsListWidget> widget found mDetailList: " << (int)(mDetailList) );
   143     TX_LOG_ARGS("MpDetailsView() <songDetailsListWidget> widget found mDetailList: " << (int)(mDetailList) );
   144              
   144 
   145     widget = mDocumentLoader->findWidget( QString("inspireMeGroupBox") );
   145     widget = mDocumentLoader->findWidget( QString("inspireMeGroupBox") );
   146     mInspireMeGroupBox = qobject_cast<HbGroupBox *>(widget);
   146     mInspireMeGroupBox = qobject_cast<HbGroupBox *>(widget);
   147     TX_LOG_ARGS("MpDetailsView() <inspireMeGroupBox> widget found mInspireMeGroupBox: " << (int)(mInspireMeGroupBox) );
   147     TX_LOG_ARGS("MpDetailsView() <inspireMeGroupBox> widget found mInspireMeGroupBox: " << (int)(mInspireMeGroupBox) );
   148 
   148 
   149     widget = mDocumentLoader->findWidget( QString("inspireListWidget") );
   149     widget = mDocumentLoader->findWidget( QString("inspireListWidget") );
   150     mInspireList = qobject_cast<HbListWidget *>(widget);
   150     mInspireList = qobject_cast<HbListWidget *>(widget);
   151     TX_LOG_ARGS("MpDetailsView() <inspireListWidget> widget found mInspireList: " << (int)(mInspireList) );
   151     TX_LOG_ARGS("MpDetailsView() <inspireListWidget> widget found mInspireList: " << (int)(mInspireList) );
   152         
   152 
   153     widget = mDocumentLoader->findWidget( QString("inspireMeProgressBar") );
   153     widget = mDocumentLoader->findWidget( QString("inspireMeProgressBar") );
   154     mInspireMeProgressBar = qobject_cast<HbProgressBar *>(widget);
   154     mInspireMeProgressBar = qobject_cast<HbProgressBar *>(widget);
   155     TX_LOG_ARGS("MpDetailsView() <inspireMeProgressBar> widget found mInspireMeProgressBar: " << (int)(mInspireMeProgressBar) );
   155     TX_LOG_ARGS("MpDetailsView() <inspireMeProgressBar> widget found mInspireMeProgressBar: " << (int)(mInspireMeProgressBar) );
   156    
   156     
       
   157     // load section HideInspireMe if no ovi store suport
       
   158     bool loadingSectionOk = false;
       
   159     mDocumentLoader->load( QString(":/mpdetailsviewdocml/mpdetailsview.docml"), QString( "ShowInspireMe" ), &loadingSectionOk );    
       
   160     if( loadingSectionOk ) {
       
   161         TX_LOG_ARGS( "Loading ShowInspireMe section is successful." );
       
   162     } else {
       
   163         TX_LOG_ARGS( "Loading ShowInspireMe section fails." );
       
   164     }
       
   165 
   157     TX_EXIT
   166     TX_EXIT
   158 }
   167 }
   159 
   168 
   160 /*!
   169 /*!
   161  Destructs the details view.
   170  Destructs the details view.
   162  */
   171  */
   163 MpDetailsView::~MpDetailsView()
   172 MpDetailsView::~MpDetailsView()
   164 {
   173 {
   165     TX_ENTRY    
   174     TX_ENTRY
   166     if ( mSoftKeyBack ) {
   175     delete mSoftKeyBack;
   167         delete mSoftKeyBack;
   176     delete mDocumentLoader;
   168     }
       
   169     if ( mDocumentLoader ) {
       
   170         delete mDocumentLoader;
       
   171     }
       
   172     if( mThumbnailManager ) {
       
   173         delete mThumbnailManager;
       
   174     }
       
   175     delete mMpTranslator;
   177     delete mMpTranslator;
   176     delete mCommonTranslator;
   178     delete mCommonTranslator;
   177     delete mMpQueryManager;
   179     delete mMpQueryManager;
   178 
   180 
   179 #ifdef SHARE_FUNC_ENABLED
   181 #ifdef SHARE_FUNC_ENABLED
   186 /*!
   188 /*!
   187  Initializes the details view. Allocates all resources needed by the view.
   189  Initializes the details view. Allocates all resources needed by the view.
   188  */
   190  */
   189 void MpDetailsView::initializeView()
   191 void MpDetailsView::initializeView()
   190 {
   192 {
   191     TX_ENTRY    
   193     TX_ENTRY
   192     
   194 
   193     //Load musicplayer and common translators
   195     //Load musicplayer and common translators
   194     QString lang = QLocale::system().name();
   196     QString lang = QLocale::system().name();
   195     QString path = QString( "z:/resource/qt/translations/" );
   197     QString path = QString( "z:/resource/qt/translations/" );
   196     bool translatorLoaded = false;
   198     bool translatorLoaded = false;
   197 
   199 
   206     translatorLoaded = mMpTranslator->load( path + "musicplayer_" + lang );
   208     translatorLoaded = mMpTranslator->load( path + "musicplayer_" + lang );
   207     TX_LOG_ARGS( "Loading translator ok=" << translatorLoaded );
   209     TX_LOG_ARGS( "Loading translator ok=" << translatorLoaded );
   208     if ( translatorLoaded ) {
   210     if ( translatorLoaded ) {
   209         qApp->installTranslator( mMpTranslator );
   211         qApp->installTranslator( mMpTranslator );
   210     }
   212     }
   211         
   213 
   212     // TODO: Hkn: Remove this once ELCE-844GBS is fixed    
   214     mSoftKeyBack = new HbAction( Hb::BackNaviAction, this );
   213     mInspireMeProgressBar->hide();
   215 
   214     
       
   215     mWindow = mainWindow();
       
   216     mSoftKeyBack = new HbAction( Hb::BackNaviAction, this );    
       
   217     
       
   218     mMpEngine = MpEngineFactory::sharedEngine();
   216     mMpEngine = MpEngineFactory::sharedEngine();
   219     mSongData = mMpEngine->songData();
   217     mSongData = mMpEngine->songData();
   220     
   218 
   221     // TODO: Remove this once Orbit bug ELCE-843HFJ is fixed
       
   222     mInspireList->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
       
   223     
       
   224     
       
   225    
       
   226     
       
   227     mThumbnailManager = new ThumbnailManager( this );
       
   228     mThumbnailManager->setQualityPreference( ThumbnailManager::OptimizeForQuality );
       
   229     mThumbnailManager->setThumbnailSize( ThumbnailManager::ThumbnailSmall );
       
   230     QObject::connect( mThumbnailManager, SIGNAL( thumbnailReady( QPixmap , void * , int , int ) ),
       
   231             this, SLOT( thumbnailReady( QPixmap , void * , int , int  ) ) );
       
   232     // TODO: Use the album art in provided by 10.1 wk16 platform. Current one is in the binary        
       
   233     mDefaultRecommendationAlbumArt = QPixmap( ":/mpdetailsviewicons/qtg_large_music_album.svg" );
       
   234     
       
   235     // TODO: might need later
   219     // TODO: might need later
   236     setupMenu();
   220     setupMenu();
   237     mMpQueryManager = new MpQueryManager(); 
   221     mMpQueryManager = new MpQueryManager();
   238       
   222 
   239     connect( mSoftKeyBack, SIGNAL( triggered() ), this, SLOT( back() ) );
   223     connect( mSoftKeyBack, SIGNAL( triggered() ), this, SLOT( back() ) );
   240     connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) ); 
   224     connect( mSongData, SIGNAL( albumArtReady() ), this, SLOT( albumArtChanged() ) );
   241     connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) );
   225     connect( mSongData, SIGNAL( playbackInfoChanged() ), this, SLOT( handlePlaybackInfoChanged() ) );
   242     connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) ); 
   226     connect( mSongData, SIGNAL( songDetailInfoChanged() ), this, SLOT( songDetailInfoChanged() ) );
       
   227     connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
       
   228     connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
   243     connect( mMpQueryManager, SIGNAL( networkError() ), this ,SLOT( handleNetworkError() ) );
   229     connect( mMpQueryManager, SIGNAL( networkError() ), this ,SLOT( handleNetworkError() ) );
   244     connect( mMpQueryManager, SIGNAL(setAlbumArt(const QString &, const QString &) ), this ,SLOT(setAlbumArtUri(const QString &, const QString & )));
       
   245     connect( mMpQueryManager, SIGNAL(searchUrlRetrieved(const QString&)), this, SLOT(updateSharedData(const QString&)));
   230     connect( mMpQueryManager, SIGNAL(searchUrlRetrieved(const QString&)), this, SLOT(updateSharedData(const QString&)));
   246 
   231     connect( mMpQueryManager, SIGNAL(recommendationAlbumArtsReady()), this, SLOT(RenderInspireMeGroupBox()));
   247 #ifdef SHARE_FUNC_ENABLED    
   232 
       
   233 #ifdef SHARE_FUNC_ENABLED
   248     connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) );
   234     connect( mShareButton, SIGNAL( clicked() ), this, SLOT( share() ) );
   249        
   235 
   250     // Preload the share popup
   236     // Preload the share popup
   251     createShareDialog();
   237     preloadShareDialog();
   252 #endif
   238 #endif
   253     TX_EXIT
   239     TX_EXIT
   254 }
   240 }
   255 
   241 
   256 /*!
   242 /*!
   257  Activates the details view.
   243  Activates the details view.
   258  */
   244  */
   259 void MpDetailsView::activateView()
   245 void MpDetailsView::activateView()
   260 {
   246 {
   261     TX_ENTRY    
   247     TX_ENTRY
   262     setNavigationAction( mSoftKeyBack );
   248     setNavigationAction( mSoftKeyBack );
   263     mMpEngine->retrieveSong();
   249     mMpEngine->retrieveSong();
   264         
   250 
   265     mActivated = true;
   251     mActivated = true;
   266     mInspireMeOpen = MpSettingsManager::inspireMe();
   252     mInspireMeOpen = MpSettingsManager::inspireMe();
   267     mSongDetailsGbOpen = MpSettingsManager::songDetailsGb();
   253     mSongDetailsGbOpen = MpSettingsManager::songDetailsGb();
   268     TX_LOG_ARGS( "InspireMeVal: " << mInspireMeOpen );
   254     TX_LOG_ARGS( "InspireMeVal: " << mInspireMeOpen );
   269     TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen );
   255     TX_LOG_ARGS( "SongDetailsGbVal: " << mSongDetailsGbOpen );
   270     mInspireMeGroupBox->setCollapsed(!mInspireMeOpen);
   256     mInspireMeGroupBox->setCollapsed(!mInspireMeOpen);
   271     mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen);
   257     mSongDetailsGroupBox->setCollapsed(!mSongDetailsGbOpen);
   272 
       
   273     connect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
       
   274     connect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
       
   275     
       
   276     TX_EXIT
   258     TX_EXIT
   277 }
   259 }
   278 
   260 
   279 /*!
   261 /*!
   280  Deactivates the details view.
   262  Deactivates the details view.
   281  */
   263  */
   282 void MpDetailsView::deactivateView()
   264 void MpDetailsView::deactivateView()
   283 {
   265 {
   284     TX_ENTRY    
   266     TX_ENTRY
   285     if (mInspireMeGroupBox->isCollapsed() ) {
   267     if (mInspireMeGroupBox->isCollapsed() ) {
   286       MpSettingsManager::setInspireMe(false);
   268       MpSettingsManager::setInspireMe(false);
   287       } else {
   269       } else {
   288       MpSettingsManager::setInspireMe(true);
   270       MpSettingsManager::setInspireMe(true);
   289       }
   271       }
   290       
   272 
   291     if (mSongDetailsGroupBox->isCollapsed() ) {
   273     if (mSongDetailsGroupBox->isCollapsed() ) {
   292       MpSettingsManager::setSongDetailsGb(false);
   274       MpSettingsManager::setSongDetailsGb(false);
   293       } else {
   275       } else {
   294       MpSettingsManager::setSongDetailsGb(true);
   276       MpSettingsManager::setSongDetailsGb(true);
   295       }
   277       }
   296     
   278 
   297     setNavigationAction( 0 );
   279     setNavigationAction( 0 );
   298     mActivated = false;    
   280     mActivated = false;
   299 
       
   300     disconnect( mSongDetailsGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleDetailsGroupBoxToggled( bool ) ) );
       
   301     disconnect( mInspireMeGroupBox, SIGNAL( toggled( bool ) ), this, SLOT( handleInspireMeGroupBoxToggled( bool ) ) );
       
   302     
       
   303     TX_EXIT
   281     TX_EXIT
   304 }
   282 }
   305 
   283 
   306 /*!
   284 /*!
   307  Setup the menu.
   285  Setup the menu.
   316 /*!
   294 /*!
   317  Slot to handle back command from softkey.
   295  Slot to handle back command from softkey.
   318  */
   296  */
   319 void MpDetailsView::back()
   297 void MpDetailsView::back()
   320 {
   298 {
   321     TX_ENTRY  
   299     TX_ENTRY
   322     emit command( MpCommon::ActivatePlaybackView );
   300     emit command( MpCommon::ActivatePlaybackView );
   323     TX_EXIT
   301     TX_EXIT
   324 }
   302 }
   325 
   303 
   326 /*!
   304 /*!
   327  Slot to handle Album art changed.
   305  Slot to handle Album art changed.
   328  */
   306  */
   329 void MpDetailsView::albumArtChanged( )
   307 void MpDetailsView::albumArtChanged( )
   330 {    
   308 {
   331     TX_ENTRY
   309     TX_ENTRY
   332     HbIcon icon;
   310     HbIcon icon;
   333     mSongData->albumArt( icon );
   311     mSongData->albumArt( icon );
   334     mAlbumArt->setIcon( icon );
   312     mAlbumArt->setIcon( icon );
   335     TX_EXIT
   313     TX_EXIT
   341 void MpDetailsView::handleNetworkError()
   319 void MpDetailsView::handleNetworkError()
   342 {
   320 {
   343     TX_ENTRY
   321     TX_ENTRY
   344     mInspireMeQueryOngoing = false;
   322     mInspireMeQueryOngoing = false;
   345     mInspireMeQueryRendered = false;
   323     mInspireMeQueryRendered = false;
   346     clearInspireMe();    
   324     clearInspireMe();
   347     mInspireMeGroupBox->setCollapsed( true );
   325     mInspireMeGroupBox->setCollapsed( true );
   348     TX_EXIT
   326     TX_EXIT
   349 }
   327 }
   350 
   328 
   351 /*!
   329 /*!
   352  Sets recommendation album art
       
   353 */
       
   354 void MpDetailsView::setAlbumArtUri( const QString &albumArtUri, const QString &albumArtName )
       
   355 {
       
   356     TX_ENTRY_ARGS( "albumArtUri = " << albumArtUri )
       
   357     TX_LOG_ARGS( "albumArtName = " << albumArtName )
       
   358     if ( !albumArtUri.isEmpty() && !albumArtName.isEmpty() ) {
       
   359         int id = mThumbnailManager->getThumbnail( albumArtName, reinterpret_cast<void *>( const_cast<QString *>( &albumArtUri ) ) );
       
   360         if ( id == KUndefined ) {
       
   361             // Request failed. Set default album art.
       
   362             mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
       
   363             recommendationAlbumArtReady();
       
   364         }
       
   365     }
       
   366     else {
       
   367         // No album art uri. Set default album art.
       
   368         mMpQueryManager->insertMapItem( albumArtUri, mDefaultRecommendationAlbumArt );
       
   369         recommendationAlbumArtReady();
       
   370     }
       
   371     TX_EXIT
       
   372 }
       
   373 
       
   374 /*!
       
   375  Render inspireme groupbox after album arts downloaded
   330  Render inspireme groupbox after album arts downloaded
   376  */
   331  */
   377 void MpDetailsView::RenderInspireMeGroupBox() 
   332 void MpDetailsView::RenderInspireMeGroupBox()
   378 {
   333 {
   379     TX_ENTRY
   334     TX_ENTRY
   380     mInspireMeQueryOngoing = false;
   335     mInspireMeQueryOngoing = false;
   381     mInspireMeQueryRendered = true;
   336     mInspireMeQueryRendered = true;
   382     mInspireMeProgressBar->hide();
   337     mInspireMeProgressBar->hide();
   384         TX_LOG_ARGS( "There are recommendations." )
   339         TX_LOG_ARGS( "There are recommendations." )
   385         // we have recommendations
   340         // we have recommendations
   386         for ( int i = 0; i < KRecommendationCount; i++ ) {
   341         for ( int i = 0; i < KRecommendationCount; i++ ) {
   387             // configure the layout properties
   342             // configure the layout properties
   388             if(!mInspireList->count()) {
   343             if(!mInspireList->count()) {
   389                 // we havent configured the prototype before 
   344                 // we havent configured the prototype before
   390                 HbListViewItem *prototype = mInspireList->listItemPrototype();
   345                 HbListViewItem *prototype = mInspireList->listItemPrototype();
   391                 prototype->setGraphicsSize( HbListViewItem::LargeIcon );
   346                 prototype->setGraphicsSize( HbListViewItem::LargeIcon );
   392             }
   347             }
   393             // create the item
   348             // create the item
   394             HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
   349             HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
   395             HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) ); 
   350             HbIcon icon( QIcon( mMpQueryManager->recommendationAlbumArtsMap().value(mMpQueryManager->recommendationAlbumArtsLink().at( i ) ) ) );
   396             inspireMeItem->setIcon( icon );
   351             inspireMeItem->setIcon( icon );
   397             inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) );
   352             inspireMeItem->setText( mMpQueryManager->recommendationSongs().at( i ) );
   398             inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) );
   353             inspireMeItem->setSecondaryText( mMpQueryManager->recommendationArtists().at( i ) );
   399             mInspireList->addItem( inspireMeItem );
   354             mInspireList->addItem( inspireMeItem );
   400         }
   355         }
   401     }
   356     }
   402     else {
   357     else {
   403         TX_LOG_ARGS( "There is NO recommendation." )
   358         TX_LOG_ARGS( "There is NO recommendation." )
   404         // we dont have recommendations
   359         // we dont have recommendations
   405         // we havent configured the prototype before 
   360         // we havent configured the prototype before
   406         HbListViewItem *prototype = mInspireList->listItemPrototype();
   361         HbListViewItem *prototype = mInspireList->listItemPrototype();
   407         const int maxTextRowCount = 20;
   362         const int maxTextRowCount = 20;
   408         const int minTextRowCount = 1;
   363         const int minTextRowCount = 1;
   409         prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount);
   364         prototype->setSecondaryTextRowCount(minTextRowCount,maxTextRowCount);
   410         
   365 
   411         HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
   366         HbListWidgetItem  *inspireMeItem = new HbListWidgetItem();
   412         QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi"));
   367         QString info(tr("There are no recommendations for this track, but you can always discover new music on Ovi"));
   413         inspireMeItem->setText( QString( " " ) );
   368         inspireMeItem->setText( QString( " " ) );
   414         inspireMeItem->setSecondaryText( info );
   369         inspireMeItem->setSecondaryText( info );
   415         mInspireList->addItem( inspireMeItem );
   370         mInspireList->addItem( inspireMeItem );
   416     }
   371     }
   417     
   372 
   418     TX_EXIT
   373     TX_EXIT
   419 }
   374 }
   420 
       
   421 void MpDetailsView::recommendationAlbumArtReady()
       
   422 {   
       
   423     TX_ENTRY_ARGS( "mAlbumArtsReadyCount = " << mMpQueryManager->albumArtsReadyCount() )
       
   424         ( mMpQueryManager->albumArtsReadyCount() )++;
       
   425     if ( mMpQueryManager->albumArtsReadyCount() == KRecommendationCount ) {
       
   426         RenderInspireMeGroupBox();
       
   427     }
       
   428     TX_EXIT
       
   429 }
       
   430 
       
   431 
   375 
   432 bool MpDetailsView::canQueryRecommendations() const
   376 bool MpDetailsView::canQueryRecommendations() const
   433 {
   377 {
   434     bool result = ( ( !mSongData->album().isEmpty() ) ||
   378     bool result = ( ( !mSongData->album().isEmpty() ) ||
   435                     ( !mSongData->artist().isEmpty() ) ) && 
   379                     ( !mSongData->artist().isEmpty() ) ) &&
   436                   !( mInspireMeGroupBox->isCollapsed() );
   380                   !( mInspireMeGroupBox->isCollapsed() );
   437     TX_LOG_ARGS( "Can query recommendations:" << result );
   381     TX_LOG_ARGS( "Can query recommendations:" << result );
   438     return result;
   382     return result;
   439 }
   383 }
   440 
   384 
   453 {
   397 {
   454     TX_ENTRY
   398     TX_ENTRY
   455     mMpQueryManager->clearNetworkReplies();
   399     mMpQueryManager->clearNetworkReplies();
   456     clearInspireMe();
   400     clearInspireMe();
   457     mInspireMeQueryRendered = false;
   401     mInspireMeQueryRendered = false;
   458     
   402 
       
   403     // Clear the song data link until new query has been made.
       
   404     mSongData->setLink( "" );
       
   405 
   459     if ( !mSongData->title().isEmpty () ) {
   406     if ( !mSongData->title().isEmpty () ) {
   460         mSongText->setPlainText( mSongData->title() );
   407         mSongText->setPlainText( mSongData->title() );
   461     } else {
   408     } else {
   462         mSongText->setPlainText( mSongData->fileName() );
   409         mSongText->setPlainText( mSongData->fileName() );
   463     }
   410     }
   464     
   411 
   465     if ( !mSongData->album().isEmpty () ) {
   412     if ( !mSongData->album().isEmpty () ) {
   466         mAlbumText->setPlainText( mSongData->album() );
   413         mAlbumText->setPlainText( mSongData->album() );
   467     } else {
   414     } else {
   468         mAlbumText->setPlainText( tr( "Unknown ") );
   415         mAlbumText->setPlainText( tr( "Unknown") );
   469     }
   416     }
   470     
   417 
   471     if ( !mSongData->artist().isEmpty() ) {
   418     if ( !mSongData->artist().isEmpty() ) {
   472         mArtistText->setPlainText( mSongData->artist() );
   419         mArtistText->setPlainText( mSongData->artist() );
   473     } else {
   420     } else {
   474         mArtistText->setPlainText( tr( "Unknown ") );
   421         mArtistText->setPlainText( tr( "Unknown") );
   475     }
   422     }
   476         
   423 
       
   424     if (canQuerySharePlayerLink() ) {
       
   425         mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title());
       
   426     }
       
   427 
   477     if (canQueryRecommendations()) {
   428     if (canQueryRecommendations()) {
   478         // start inspire me area progress bar
   429         // start inspire me area progress bar
   479         // TODO: currently, till we get to this callback from MPX the bar not shown
   430         // TODO: currently, till we get to this callback from MPX the bar not shown
   480         // TODO: check if inspireMe is ON, if not, dont show
   431         // TODO: check if inspireMe is ON, if not, dont show
   481         mInspireMeProgressBar->show();
   432         mInspireMeProgressBar->show();
   482         if (canQuerySharePlayerLink() ) {
       
   483         mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title());
       
   484         }
       
   485         mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
   433         mMpQueryManager->queryInspireMeItems(mSongData->artist(),mSongData->album(),mSongData->title());
   486         mInspireMeQueryOngoing = true;
   434         mInspireMeQueryOngoing = true;
   487     }
   435     }
   488     else {
   436     else {
   489         // metadata to query for inspire me items not available
   437         // metadata to query for inspire me items not available
   490         // show information note
   438         // show information note
   491       if (!mInspireMeGroupBox->isCollapsed())
   439       if (!mInspireMeGroupBox->isCollapsed())
   492         RenderInspireMeGroupBox();
   440         RenderInspireMeGroupBox();
   493     }
   441     }
   494     TX_EXIT    
   442     TX_EXIT
   495 }
   443 }
   496 
   444 
   497 void MpDetailsView::clearInspireMe()
   445 void MpDetailsView::clearInspireMe()
   498 {
   446 {
   499     TX_ENTRY    
   447     TX_ENTRY
   500     mInspireList->clear();
   448     mInspireList->clear();
   501     mMpQueryManager->clearRecommendations(); 
   449     mMpQueryManager->clearRecommendations();
   502     TX_EXIT    
   450     TX_EXIT
   503 }
   451 }
   504 /*!
   452 /*!
   505  Slot to handle detail song information
   453  Slot to handle detail song information
   506  */
   454  */
   507 void MpDetailsView::songDetailInfoChanged()
   455 void MpDetailsView::songDetailInfoChanged()
   508 {
   456 {
   509     TX_ENTRY
   457     TX_ENTRY
   510     mDetailList->clear();
   458     mDetailList->clear();
   511     
   459 
   512     if ( !mSongData->albumTrack().isNull() ) {
   460     if ( !mSongData->albumTrack().isNull() ) {
   513         HbListWidgetItem *item = new HbListWidgetItem(); 
   461         HbListWidgetItem *item = new HbListWidgetItem();
   514         item->setText( tr( "Song number" ) );
   462         item->setText( tr( "Song number" ) );
   515         item->setSecondaryText( mSongData->albumTrack() );
   463         item->setSecondaryText( mSongData->albumTrack() );
   516         item->setEnabled( false );
   464         item->setEnabled( false );
   517         mDetailList->addItem( item );
   465         mDetailList->addItem( item );
   518     }
   466     }
   519     
   467 
   520     if ( !mSongData->year().isNull() ) {
   468     if ( !mSongData->year().isNull() ) {
   521         HbListWidgetItem *item = new HbListWidgetItem();
   469         HbListWidgetItem *item = new HbListWidgetItem();
   522         item->setText( tr( "Year" ) );
   470         item->setText( tr( "Year" ) );
   523         item->setSecondaryText( mSongData->year() );
   471         item->setSecondaryText( mSongData->year() );
   524         item->setEnabled( false );
   472         item->setEnabled( false );
   525         mDetailList->addItem( item );
   473         mDetailList->addItem( item );
   526     }
   474     }
   527     
   475 
   528     if ( !mSongData->genre().isNull() ) {
   476     if ( !mSongData->genre().isNull() ) {
   529         HbListWidgetItem *item = new HbListWidgetItem();
   477         HbListWidgetItem *item = new HbListWidgetItem();
   530         item->setText( tr( "Genre" ) );
   478         item->setText( tr( "Genre" ) );
   531         item->setSecondaryText( mSongData->genre() );
   479         item->setSecondaryText( mSongData->genre() );
   532         item->setEnabled( false );
   480         item->setEnabled( false );
   533         mDetailList->addItem( item );
   481         mDetailList->addItem( item );
   534     }
   482     }
   535     
   483 
   536     if ( !mSongData->composer().isNull() ) {
   484     if ( !mSongData->composer().isNull() ) {
   537         HbListWidgetItem *item = new HbListWidgetItem();
   485         HbListWidgetItem *item = new HbListWidgetItem();
   538         item->setText( tr( "Composer" ) );
   486         item->setText( tr( "Composer" ) );
   539         item->setSecondaryText( mSongData->composer() );
   487         item->setSecondaryText( mSongData->composer() );
   540         item->setEnabled( false );
   488         item->setEnabled( false );
   546         item->setText( tr( "File name" ) );
   494         item->setText( tr( "File name" ) );
   547         item->setSecondaryText( mSongData->fileName() );
   495         item->setSecondaryText( mSongData->fileName() );
   548         item->setEnabled( false );
   496         item->setEnabled( false );
   549         mDetailList->addItem( item );
   497         mDetailList->addItem( item );
   550     }
   498     }
   551     
   499 
   552     if ( !mSongData->mimeType().isNull() ) {
   500     if ( !mSongData->mimeType().isNull() ) {
   553         HbListWidgetItem *item = new HbListWidgetItem();
   501         HbListWidgetItem *item = new HbListWidgetItem();
   554         item->setText( tr( "Format" ) );
   502         item->setText( tr( "Format" ) );
   555         item->setSecondaryText( mSongData->mimeType() );
   503         item->setSecondaryText( mSongData->mimeType() );
   556         item->setEnabled( false );
   504         item->setEnabled( false );
   562         item->setText( tr( "Duration" ) );
   510         item->setText( tr( "Duration" ) );
   563         item->setSecondaryText( mSongData->duration() );
   511         item->setSecondaryText( mSongData->duration() );
   564         item->setEnabled( false );
   512         item->setEnabled( false );
   565         mDetailList->addItem( item );
   513         mDetailList->addItem( item );
   566     }
   514     }
   567     
   515 
   568     if ( !mSongData->bitRate().isNull() ) {
   516     if ( !mSongData->bitRate().isNull() ) {
   569         HbListWidgetItem *item = new HbListWidgetItem();
   517         HbListWidgetItem *item = new HbListWidgetItem();
   570         item->setText( tr( "Bitrate" ) );
   518         item->setText( tr( "Bitrate" ) );
   571         item->setSecondaryText( mSongData->bitRate().append( " Kbps" ) );
   519         item->setSecondaryText( mSongData->bitRate().append( " Kbps" ) );
   572         item->setEnabled( false );
   520         item->setEnabled( false );
   573         mDetailList->addItem( item );
   521         mDetailList->addItem( item );
   574     }
   522     }
   575     
   523 
   576     if ( !mSongData->sampleRate().isNull() ) {
   524     if ( !mSongData->sampleRate().isNull() ) {
   577         HbListWidgetItem *item = new HbListWidgetItem();
   525         HbListWidgetItem *item = new HbListWidgetItem();
   578         item->setText( tr( "Sampling rate" ) );
   526         item->setText( tr( "Sampling rate" ) );
   579         item->setSecondaryText( mSongData->sampleRate().append( " hz" ) );
   527         item->setSecondaryText( mSongData->sampleRate().append( " hz" ) );
   580         item->setEnabled( false );
   528         item->setEnabled( false );
   581         mDetailList->addItem( item );
   529         mDetailList->addItem( item );
   582     }
   530     }
   583     
   531 
   584     if ( !mSongData->size().isNull() ) {
   532     if ( !mSongData->size().isNull() ) {
   585         HbListWidgetItem *item = new HbListWidgetItem();
   533         HbListWidgetItem *item = new HbListWidgetItem();
   586         item->setText( tr( "Size" ) );
   534         item->setText( tr( "Size" ) );
   587         item->setSecondaryText( mSongData->size().append( " MB" ) );
   535         item->setSecondaryText( mSongData->size().append( " MB" ) );
   588         item->setEnabled( false );
   536         item->setEnabled( false );
   589         mDetailList->addItem( item );
   537         mDetailList->addItem( item );
   590     }
   538     }
   591     
   539 
   592     if ( !mSongData->modified().isNull() ) {
   540     if ( !mSongData->modified().isNull() ) {
   593         HbListWidgetItem *item = new HbListWidgetItem();
   541         HbListWidgetItem *item = new HbListWidgetItem();
   594         item->setText( tr( "Modified" ) );
   542         item->setText( tr( "Modified" ) );
   595         item->setSecondaryText( mSongData->modified() );
   543         item->setSecondaryText( mSongData->modified() );
   596         item->setEnabled( false );
   544         item->setEnabled( false );
   602         item->setText( tr( "Copyright" ) );
   550         item->setText( tr( "Copyright" ) );
   603         item->setSecondaryText( mSongData->copyright() );
   551         item->setSecondaryText( mSongData->copyright() );
   604         item->setEnabled( false );
   552         item->setEnabled( false );
   605         mDetailList->addItem( item );
   553         mDetailList->addItem( item );
   606     }
   554     }
   607     
   555 
   608     if ( !mSongData->musicURL().isNull() ) {
   556     if ( !mSongData->musicURL().isNull() ) {
   609         HbListWidgetItem *item = new HbListWidgetItem();
   557         HbListWidgetItem *item = new HbListWidgetItem();
   610         item->setText( tr( "Web site" ) );
   558         item->setText( tr( "Web site" ) );
   611         item->setSecondaryText( mSongData->musicURL() );
   559         item->setSecondaryText( mSongData->musicURL() );
   612         item->setEnabled( true );
   560         item->setEnabled( true );
   613         mDetailList->addItem( item );
   561         mDetailList->addItem( item );
   614     }
   562     }
   615     
   563 
   616     if ( mSongData->isDrmProtected() ) {
   564     if ( mSongData->isDrmProtected() ) {
   617         HbListWidgetItem *item = new HbListWidgetItem();
   565         HbListWidgetItem *item = new HbListWidgetItem();
   618         item->setText( tr( "Licences" ) );
   566         item->setText( tr( "Licences" ) );
   619         item->setSecondaryText( tr( "Click for details" ) );
   567         item->setSecondaryText( tr( "Click for details" ) );
   620         item->setEnabled( true );
   568         item->setEnabled( true );
   622     }
   570     }
   623 
   571 
   624     TX_EXIT
   572     TX_EXIT
   625 }
   573 }
   626 
   574 
   627 void MpDetailsView::handleDetailsGroupBoxToggled(bool state)
   575 void MpDetailsView::handleDetailsGroupBoxToggled(bool /*state*/)
   628 {
   576 {
   629     Q_UNUSED(state);
       
   630     TX_ENTRY
   577     TX_ENTRY
   631     if ( !mSongDetailsGroupBox->isCollapsed() ) {
   578     if ( !mSongDetailsGroupBox->isCollapsed() ) {
   632             mInspireMeGroupBox->setCollapsed( true );
   579             mInspireMeGroupBox->setCollapsed( true );
   633     }
   580     }
   634     TX_EXIT
   581     TX_EXIT
   637 void MpDetailsView::handleInspireMeGroupBoxToggled(bool /*state*/)
   584 void MpDetailsView::handleInspireMeGroupBoxToggled(bool /*state*/)
   638 {
   585 {
   639     TX_ENTRY
   586     TX_ENTRY
   640     if ( !mInspireMeGroupBox->isCollapsed() ) {
   587     if ( !mInspireMeGroupBox->isCollapsed() ) {
   641         TX_LOG_ARGS( "InspireMe is expanded." )
   588         TX_LOG_ARGS( "InspireMe is expanded." )
   642         mSongDetailsGroupBox->setCollapsed( true );     
   589         mSongDetailsGroupBox->setCollapsed( true );
   643         if ( mInspireMeQueryOngoing ) {
   590         if ( mInspireMeQueryOngoing ) {
   644             TX_LOG_ARGS( "Query is ongoing " )
   591             TX_LOG_ARGS( "Query is ongoing " )
   645             mInspireMeProgressBar->show();
   592             mInspireMeProgressBar->show();
   646         } else {
   593         } else {
   647             TX_LOG_ARGS( "Query is NOT ongoing " )
   594             TX_LOG_ARGS( "Query is NOT ongoing " )
   656                     mInspireMeQueryOngoing = true;
   603                     mInspireMeQueryOngoing = true;
   657                 } else {
   604                 } else {
   658                     TX_LOG_ARGS( "InspireMe is NOT rendered yet and CANNOT query for recommendations either. " )
   605                     TX_LOG_ARGS( "InspireMe is NOT rendered yet and CANNOT query for recommendations either. " )
   659                     RenderInspireMeGroupBox();
   606                     RenderInspireMeGroupBox();
   660                 }
   607                 }
   661             }        
   608             }
   662         }
   609         }
   663     } else {
   610     } else {
   664         TX_LOG_ARGS( "InspireMe is collapsed." )
   611         TX_LOG_ARGS( "InspireMe is collapsed." )
   665         mInspireMeProgressBar->hide();
   612         mInspireMeProgressBar->hide();
   666     }
   613     }
   667     TX_EXIT
   614     TX_EXIT
   668 }
   615 }
   669 
   616 
   670 /*!
       
   671  Slot to handle the recommendation album art 
       
   672 */
       
   673 void MpDetailsView::thumbnailReady(
       
   674         const QPixmap& pixmap,
       
   675         void *data,
       
   676         int /*id*/,
       
   677         int error  )
       
   678 {
       
   679     TX_ENTRY
       
   680     // TODO: Hkn: use qobject_cast
       
   681     QString uri = *( reinterpret_cast<QString *>( data ) );
       
   682     TX_LOG_ARGS( "Uri: " << uri );
       
   683     
       
   684     if ( error == 0 ) {
       
   685         TX_LOG_ARGS( "album art link: " << uri );
       
   686         mMpQueryManager->insertMapItem( uri, pixmap );
       
   687     } else {
       
   688         mMpQueryManager->insertMapItem( uri, mDefaultRecommendationAlbumArt );
       
   689     }
       
   690     recommendationAlbumArtReady();
       
   691     TX_EXIT
       
   692 }
       
   693 
       
   694 #ifdef SHARE_FUNC_ENABLED
   617 #ifdef SHARE_FUNC_ENABLED
   695 /*!
   618 /*!
   696  Slot to be called when share button is clicked
   619  Slot to be called when share button is clicked
   697  */
   620  */
   698 void MpDetailsView::share()
   621 void MpDetailsView::share()
   699 {
   622 {
   700     TX_ENTRY
   623     TX_ENTRY
   701     createShareDialog();
   624     createShareDialog();
   702     if ( mSharePopup )
       
   703     {
       
   704         mSharePopup->show();
       
   705     }
       
   706     if (canQuerySharePlayerLink() )
   625     if (canQuerySharePlayerLink() )
   707     {
   626     {
   708         mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() );
   627         mMpQueryManager->queryLocalMusicStore(mSongData->artist(),mSongData->album(),mSongData->title() );
   709     }
   628     }
   710     TX_EXIT
   629     TX_EXIT
   711 }
   630 }
   712 
   631 
   713 /*!
   632 /*!
   714   Method to create the share dialog on demand.
   633   Method to create the share dialog on demand.
       
   634   This will cause the share web view to be created and start loading.
   715   */
   635   */
   716 void MpDetailsView::createShareDialog()
   636 void MpDetailsView::createShareDialog()
   717 {
   637 {
   718     TX_ENTRY
   638     TX_ENTRY
   719     if ( !mSharePopup )
   639     if ( !mSharePopup )
   720     {
   640     {
   721         mSharePopup = new MpDetailsShareDialog();
   641         mSharePopup = new MpDetailsShareDialog();
   722         connect( mSharePopup, SIGNAL(closeShareDialog() ), this, SLOT( closeShareDialog() ) );
   642     }
   723         mSharePopup->initialize( mSongData );
   643     if ( !mSharePopup->isInitialized() )
   724     }
   644     {
       
   645         connect( mSharePopup, SIGNAL( closeShareDialog() ), this, SLOT( closeShareDialog() ) );
       
   646         mSharePopup->initialize( mSongData, tr( "Unknown" ) );
       
   647     }
       
   648     TX_EXIT
       
   649 }
       
   650 
       
   651 /*!
       
   652   Method to create the share dialog on demand and preload publishing player files.
       
   653   This will construct the share dialog but it will still be in "uninitialized" state.
       
   654   */
       
   655 void MpDetailsView::preloadShareDialog()
       
   656 {
       
   657     TX_ENTRY
       
   658     if ( !mSharePopup )
       
   659     {
       
   660         mSharePopup = new MpDetailsShareDialog();
       
   661     }
       
   662     mSharePopup->cachePublishingPlayerFiles();
   725     TX_EXIT
   663     TX_EXIT
   726 }
   664 }
   727 
   665 
   728 /*!
   666 /*!
   729  Slot to be called when ok/close button in share dialog is pressed.
   667  Slot to be called when ok/close button in share dialog is pressed.
   731 void MpDetailsView::closeShareDialog()
   669 void MpDetailsView::closeShareDialog()
   732 {
   670 {
   733     TX_ENTRY
   671     TX_ENTRY
   734     if ( mSharePopup )
   672     if ( mSharePopup )
   735     {
   673     {
       
   674         // Dialog uses WA_DeleteOnClose so no need to delete it explicitely here, just close it.
   736         mSharePopup->close();
   675         mSharePopup->close();
   737         delete mSharePopup;
       
   738         mSharePopup = NULL;
   676         mSharePopup = NULL;
   739     }
   677     }
   740     TX_EXIT
   678     TX_EXIT
   741 }
   679 }
   742 #endif
   680 #endif