mpviewplugins/mpmediawallviewplugin/src/mpmediawallview.cpp
changeset 41 ea59c434026a
parent 32 c163ef0b758d
child 43 0f32e550d9d8
--- a/mpviewplugins/mpmediawallviewplugin/src/mpmediawallview.cpp	Fri Jun 11 13:36:36 2010 +0300
+++ b/mpviewplugins/mpmediawallviewplugin/src/mpmediawallview.cpp	Wed Jun 23 18:10:13 2010 +0300
@@ -23,8 +23,9 @@
 #include <hbapplication.h>
 #include <hbscrollbar.h>
 #include <hblabel.h>
-#include <hbpushbutton.h>
 #include <hbtoolbutton.h>
+#include <hblistview.h>
+#include <hbstyleloader.h>
 
 #include <hgmediawall.h>
 
@@ -131,7 +132,7 @@
         mPlayPauseAction = new HbAction( HbIcon() , QString(), this );  
         mPlaybackData = MpEngineFactory::sharedEngine()->playbackData();
         qobject_cast<HbToolButton*>( widget )->setAction( mPlayPauseAction );
-        //we need this widget to hide the play pause button, for soem reaosn it does not want to hide.
+        //we need this widget to hide the play pause button, for some reason it does not want to hide.
         mPlayPauseContainer = mDocumentLoader->findWidget( QString( "playPauseButtonContainer" ) );
         updatePlayPauseAction();
         connect( mPlaybackData, SIGNAL( playbackStateChanged() ),
@@ -162,7 +163,7 @@
     }
     
     mAlbumCover = new MpAlbumCoverWidget( this );
-    mAlbumCover->setDefaultIcon( HbIcon( "qtg_large_music_album" ) );
+    mAlbumCover->setDefaultIcon( HbIcon( "qtg_large_album_art" ) );
     mAlbumCover->hide();
     
     mTrackList = new MpTrackListWidget( this );
@@ -171,9 +172,10 @@
     
     connect(mAlbumCover,SIGNAL(clicked()),this, SLOT(hideTracksList()));
     connect(mTrackList->list(), SIGNAL(activated(QModelIndex)), this, SLOT(listItemActivated(QModelIndex)));
-    connect(mTrackList,SIGNAL(close()),this, SLOT(hideTracksList()));
+    connect(mTrackList,SIGNAL(closed()),this, SLOT(hideTracksList()));
 
-
+    HbStyleLoader::registerFilePath(":/css/mpcustommediawall.css");
+    HbStyleLoader::registerFilePath(":/css/mpcustommediawall.hgmediawall.widgetml");  
     
     TX_EXIT
 }
@@ -227,8 +229,11 @@
             mDocumentLoader->load( MUSIC_MEDIAWALL_DOCML, "mediaWall", &ok);
             if ( ok ) {
                 QGraphicsWidget *widget;
-                widget = mDocumentLoader->findWidget(QString("mediaWallWidget"));
+                widget = mDocumentLoader->findWidget(QString("MPmediaWallWidget"));
                 mMediaWallWidget = qobject_cast<HgMediawall*>(widget);
+                //set these items as children of the media wall so they show behind the scrollbar.
+                mTrackList->setParentItem(mMediaWallWidget);
+                mAlbumCover->setParentItem(mMediaWallWidget);
                 mModel->refreshModel();
                 setUpMediaWallWidget();
             }
@@ -241,6 +246,9 @@
     }
     else {
         if ( mMediaWallWidget ) {
+            //Take ownership of these items to prevent delete from media wall widget.
+            mTrackList->setParentItem( this );
+            mAlbumCover->setParentItem( this );
             delete mMediaWallWidget;
             mMediaWallWidget = 0;
             
@@ -344,6 +352,7 @@
     setUpListAnimation();
     mListShowAnimationGroup->setDirection(QAbstractAnimation::Forward);
     mListShowAnimationGroup->start();
+    mModel->setItemVisibility( mMediaWallWidget->currentIndex(), false );
 }
 
 /*!
@@ -367,6 +376,7 @@
     mShowingSongsList = false;
     mAlbumCover->hide();
     mTrackList->hide();
+    mModel->setItemVisibility( mMediaWallWidget->currentIndex(), true );
     mListShowAnimationGroup->stop();
     disconnect(mListShowAnimationGroup, SIGNAL(finished()), this, SLOT(dismissListClosingAnimation()));
 }
@@ -383,14 +393,24 @@
 }
 
 /*!
+ Slot to be called to fetch the songs for an album.
+ */
+void MpMediaWallView::fetchAlbumSongs(QModelIndex index)
+{
+    if ( !mCollectionData->setCurrentAlbum( index.row() ) ) {
+        mEngine->findAlbumSongs( index.row() );
+    }
+}
+
+/*!
  Loads the media wall widget.
  */
 void MpMediaWallView::setUpMediaWallWidget()
 {
-    HbIcon defaultIcon( "qtg_large_music_album" );
+    HbIcon defaultIcon( "qtg_large_album_art" );
     defaultIcon.setSize(mMediaWallWidget->itemSize());
     mMediaWallWidget->setDefaultImage( defaultIcon.pixmap().toImage() );
-    mMediaWallWidget->enableReflections( false );
+    mMediaWallWidget->enableReflections( true );
     mMediaWallWidget->setModel( mModel );
     if ( mPlaybackData->playbackState() != MpPlaybackData::NotPlaying ) {
         scrollToNowPlaying();
@@ -427,6 +447,7 @@
     mMediaWallWidget->setScrollBarPolicy( HgWidget::ScrollBarAlwaysOn ); //HgWidget::ScrollBarAutoHide
     mMediaWallWidget->scrollBar()->setInteractive( true );
     mMediaWallWidget->setIndexFeedbackPolicy( HgWidget::IndexFeedbackSingleCharacter );
+    connect(mMediaWallWidget, SIGNAL(animationAboutToEnd(QModelIndex)), SLOT(fetchAlbumSongs(QModelIndex)));
     connect(mMediaWallWidget, SIGNAL(activated(QModelIndex)), SLOT(showTrackList()));
     connect(mMediaWallWidget, SIGNAL(scrollingStarted()), SLOT(dismissListClosingAnimation()));
 }
@@ -458,11 +479,7 @@
         mListShowListAnimation = new QPropertyAnimation( mTrackList, "geometry", this );
         mListShowListAnimation->setDuration( 400 );
         mListShowListAnimation->setEasingCurve(QEasingCurve::InOutCubic);
-        mListShowAnimationGroup->addAnimation(mListShowListAnimation);
-        //track list goes on top of media wall.
-        mTrackList->setZValue(mMediaWallWidget->zValue()+1);
-        //album cover goes on top of track list.
-        mAlbumCover->setZValue(mMediaWallWidget->zValue()+2);
+        mListShowAnimationGroup->addAnimation(mListShowListAnimation);      
     }
     
     //Get the current album cover geometry.
@@ -472,11 +489,6 @@
         return;
     }
     QRectF itemRect = poly.boundingRect();
-
-    //Request the albums tracks, they are set to the track list model.
-    if ( !mCollectionData->setCurrentAlbum( index.row() ) ) {
-        mEngine->findAlbumSongs( index.row() );
-    }
     
     //Get the album cover icon.
     QVariant image = mModel->data(index, Qt::DecorationRole);
@@ -494,7 +506,7 @@
     endRect.moveTo( endRect.topLeft().x() - endRect.size().width() / 2.0, endRect.topLeft().y() );
     mCoverShowListAnimation->setStartValue(itemRect);
     mCoverShowListAnimation->setEndValue(endRect);
-    endRect.moveTo(endRect.topRight() - QPointF(1,0)); //adjust by one pixel to prevent a gap.
+    endRect.moveTo( endRect.topRight() );
     mListShowListAnimation->setStartValue(itemRect);
     mListShowListAnimation->setEndValue(endRect);