mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerartists.cpp
changeset 36 a0afa279b8fe
parent 35 fdb31ab341af
child 37 eb79a7c355bf
--- a/mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerartists.cpp	Fri May 14 18:54:37 2010 -0500
+++ b/mpviewplugins/mpcollectionviewplugin/src/mpcollectioncontainerartists.cpp	Fri May 28 19:46:01 2010 -0500
@@ -136,11 +136,20 @@
                 if ( mTBoneListModel == 0 ) {
                     mTBoneListModel = new MpCollectionTBoneListDataModel(mCollectionData);
                     connect( mTBoneListModel, SIGNAL(albumDataChanged()), this, SLOT(albumDataChanged()) );
+                    connect( mTBoneListModel, SIGNAL(albumDataAvailable()), this, SLOT(albumDataAvailable()) );
                 }
                 mList->setModel(mTBoneListModel);
-
-                if ( !mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+                if ( mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+                    if ( mCollectionData->albumSongsCount() > 1 ) {
+                        emit shuffleEnabled(true);
+                    }
+                    else {
+                        emit shuffleEnabled(false);
+                    }
+                }
+                else {
                     emit findAlbumSongs(mCurrentAlbumIndex);
+                    emit shuffleEnabled(false);
                 }
             }
             break;
@@ -205,15 +214,30 @@
         // and the same album re-centers.
         mCurrentAlbumIndex = index;
         TX_LOG_ARGS("mCurrentAlbumIndex=" << mCurrentAlbumIndex);
-        if ( !mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+        if ( mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+            if ( mCollectionData->albumSongsCount() > 1 ) {
+                emit shuffleEnabled(true);
+            }
+            // Enable context menu
+            mLongPressEnabled = true;
+        }
+        else {
             emit findAlbumSongs(mCurrentAlbumIndex);
         }
     }
+    else {
+        // Landed on the same album. Just update menu.
+        if ( mCollectionData->albumSongsCount() > 1 ) {
+            emit shuffleEnabled(true);
+        }
+        // Enable context menu
+        mLongPressEnabled = true;
+    }
     TX_EXIT
 }
 
 /*!
- Slot to be called data model has new data. This occurs after a delete operation is complete.
+ Slot to be called when data model has new data. This occurs after a delete operation is complete.
  Two cases:
      1) User deleted an artist.
 	 2) User deleted last song in an album.
@@ -226,7 +250,12 @@
             --mCurrentAlbumIndex;
         }
         mTBone->scrollTo( mDataModel->index(mCurrentAlbumIndex - mAlbumIndexOffset, 0) );
-        if ( !mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+        if ( mCollectionData->setCurrentAlbum(mCurrentAlbumIndex) ) {
+            if ( mCollectionData->albumSongsCount() == 1 ) {
+                emit shuffleEnabled(false);
+            }
+        }
+        else {
             emit findAlbumSongs(mCurrentAlbumIndex);
         }
     }
@@ -237,13 +266,42 @@
 }
 
 /*!
- Slot to be called data model has new data.
+ Slot to be called when data model has new data.
  User has deleted one of the songs from TBone list.
  */
 void MpCollectionContainerArtists::albumDataChanged()
 {
     TX_ENTRY
     emit findAlbumSongs(mCurrentAlbumIndex);
+    emit shuffleEnabled(false);
+    TX_EXIT
+}
+
+/*!
+ Slot to be called TBone starts scrolling.
+ */
+void MpCollectionContainerArtists::scrollingStarted()
+{
+    TX_ENTRY
+    // Disable shuffle action from the menu
+    emit shuffleEnabled(false);
+    // Disable context menu
+    mLongPressEnabled = false;
+    TX_EXIT
+}
+
+/*!
+ Slot to be called album data is available. This is a result of findAlbumSongs signal.
+ */
+void MpCollectionContainerArtists::albumDataAvailable()
+{
+    TX_ENTRY
+    int count = mCollectionData->albumSongsCount();
+    if ( count > 1 ) {
+        emit shuffleEnabled(true);
+    }
+    // Enable context menu
+    mLongPressEnabled = true;
     TX_EXIT
 }
 
@@ -332,6 +390,7 @@
                 mTBone->setDescriptionFontSpec( HbFontSpec(HbFontSpec::Secondary) );
                 mTBone->setScrollBarPolicy( HgWidget::ScrollBarAlwaysOff );
                 mTBone->enableReflections(true);
+                connect( mTBone, SIGNAL(scrollingStarted()), this, SLOT(scrollingStarted()) );
                 connect( mTBone, SIGNAL(scrollingEnded()), this, SLOT(albumCentered()) );
                 }
                 break;