qtinternetradio/ui/src/irabstractlistviewbase.cpp
changeset 3 ee64f059b8e1
parent 2 2e1adbfc62af
child 5 0930554dc389
--- a/qtinternetradio/ui/src/irabstractlistviewbase.cpp	Mon May 03 12:25:23 2010 +0300
+++ b/qtinternetradio/ui/src/irabstractlistviewbase.cpp	Fri May 14 15:43:29 2010 +0300
@@ -21,11 +21,12 @@
 #include <hblistview.h>
 #include <hbabstractviewitem.h>
 #include <hbscrollbar.h>
-#include <QTimer>
+#include <HbGroupBox>
+#include <HbMarqueeItem>
+#include <HbLabel>
 
-#include "irabstractviewmanager.h"
+#include "irviewmanager.h"
 #include "irabstractlistviewbase.h"
-#include "irbannerlabel.h"
 #include "irplaycontroller.h"
 #include "irapplication.h"
 #include "irqmetadata.h"
@@ -34,14 +35,18 @@
 #include "irqenums.h"
 #include "iruidefines.h"
  
+const int KAnimationLoopTimes = 2; // Animation loop times
 
 IrAbstractListViewBase::IrAbstractListViewBase(IRApplication *aApplication, TIRViewId aViewId)
     : IRBaseView(aApplication, aViewId),
 	  iListView(NULL),
-      iBannerLabel(NULL),
+      iPlayingBanner(NULL),
+      iStationName(NULL),
+      iArtistSongName(NULL),
       iHeadingLabel(NULL),
       iCollectionsAction(NULL), iFavoritesAction(NULL),
-      iGenresAction(NULL), iSearchAction(NULL),iConvertTimer(NULL), iEffectOnGoing(false)
+      iGenresAction(NULL), iSearchAction(NULL),iConvertTimer(NULL),
+      iViewParameter(EIRViewPara_InvalidId)
 {
     // Create widget hierarchy
     setObjectName( ABSTRACT_LIST_VIEW_BASE_OBJECT_VIEW );
@@ -56,23 +61,10 @@
     iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME);
         
     iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION);
-    initEffects();
-    initMenu();
-    initContentWidget();
-    initScrollBar();
-    initToolBar();
-
-    connect(iListView, SIGNAL(activated(const QModelIndex&)), this, SLOT(clickItem(const QModelIndex&)));
-    connect(iListView, SIGNAL(longPressed(HbAbstractViewItem *,const QPointF&)), this, SLOT(listViewLongPressed(HbAbstractViewItem *,const QPointF&)));     
-    connect(iBannerLabel, SIGNAL(pressed()), this, SLOT(gotoNowPlaying()));
-    connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(metaDataAvailable(IRQMetaData*)));
-    connect(iPlayController, SIGNAL(playingStopped()), this, SLOT(removeBanner()));
 }
 
 IrAbstractListViewBase::~IrAbstractListViewBase()
 {
-    HbEffect::remove(QString("viewItem"), QString(":/effect/effects_item_selecte.fxml"), QString("chosen") );
-    HbEffect::remove(QString("viewItem"), QString(":/effect/effects_item_select_end.fxml"),QString("chosenEnd"));
 }
 
 void IrAbstractListViewBase::initMenu()
@@ -80,23 +72,19 @@
     HbMenu *viewMenu = menu();
     connect(viewMenu, SIGNAL(aboutToShow()), this, SLOT(prepareMenu()));
 
-    iOpenWebAddressAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_OPEN_WEB_ADDRESS_ACTION));
-    connect(iOpenWebAddressAction, SIGNAL(triggered()), this, SLOT(openWebAddress()));
+    QObject *openWebAddressAction = qobject_cast<HbAction *>(iLoader.findObject(GO_TO_STATION_ACTION));
+    connect(openWebAddressAction, SIGNAL(triggered()), this, SLOT(openWebAddress()));
 
-    QObject *settings = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_SETTING_ACTION);
-    connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+    QObject *settings = iLoader.findObject(SETTINGS_ACTION);
+    connect(settings, SIGNAL(triggered()), this, SLOT(launchSettingsView())); 
     
-    QObject *helpAction = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_HELP_ACTION);
-    connect(helpAction, SIGNAL(triggered()), this, SLOT(notReady()));
-    
-    QObject *exitAction = iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_EXIT_ACTION);
+    QObject *exitAction = iLoader.findObject(EXIT_ACTION);
     connect(exitAction, SIGNAL(triggered()), iApplication, SIGNAL(quit()));
 }
 
 void IrAbstractListViewBase::initToolBar()
 {
-    HbToolBar *viewToolBar = qobject_cast<HbToolBar *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_TOOLBAR));
-    QActionGroup *actionGroup = new QActionGroup(viewToolBar);
+    QActionGroup *actionGroup = new QActionGroup(this);
     iCollectionsAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_COLLECTION_ACTION));
 	iCollectionsAction->setActionGroup(actionGroup);
 	iFavoritesAction = qobject_cast<HbAction *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_FAVORITE_ACTION));
@@ -116,13 +104,17 @@
 
 void IrAbstractListViewBase::initContentWidget()
 {
-    iHeadingLabel = qobject_cast<IrViewBannerLabel *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_HEADINGTEXTLABEL));
+    iHeadingLabel = qobject_cast<HbGroupBox *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_HEADINGTEXTLABEL));
     QFont font;
     font.setBold(true);
     iHeadingLabel->setFont(font);
     
-    iBannerLabel = qobject_cast<IrNowPlayingBannerLabel *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_PLAYINGBANNER)); 
-    iBannerLabel->setFont(font);
+    iPlayingBanner = qobject_cast<HbWidget *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_PLAYINGBANNER)); 
+    iPlayingBanner->installEventFilter(iApplication);
+    iStationName = qobject_cast<HbLabel *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_STATIONNAME));
+    iStationName->setFont(font);
+    iArtistSongName = qobject_cast<HbMarqueeItem *>(iLoader.findWidget(ABSTRACT_LIST_VIEW_BASE_OBJECT_ARTISTSONGNAME));
+    iArtistSongName->setLoopCount(KAnimationLoopTimes);
 
     iListView = qobject_cast<HbListView *>(iLoader.findObject(ABSTRACT_LIST_VIEW_BASE_OBJECT_LISTVIEW));
 }
@@ -135,6 +127,17 @@
     iListView->setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAsNeeded);
 }
 
+
+void IrAbstractListViewBase::setViewParameter(TIRViewParameter aParameter)
+{
+    iViewParameter = aParameter;
+}
+
+TIRViewParameter IrAbstractListViewBase::getViewParameter() const
+{
+    return iViewParameter;
+}
+
 void IrAbstractListViewBase::setCheckedAction()
 {       
     //default implementation
@@ -149,19 +152,10 @@
 {
     if (iHeadingLabel)
     {
-        iHeadingLabel->setText(aText);
+        iHeadingLabel->setHeading(aText);
     }
 }
 
-QString IrAbstractListViewBase::getHeadingText() const
-{
-    if (iHeadingLabel)
-    {
-        return iHeadingLabel->text();
-    }
-    return ("");
-}
-
 void IrAbstractListViewBase::resetCurrentItem()
 {
     
@@ -194,16 +188,25 @@
     Q_UNUSED(aReason);
     TIRHandleResult ret = EIR_DoDefault;
 
+    if (!initCompleted())
+    {
+        return ret;
+    }
+    
     switch (aCommand)
     {
-    case EIR_ViewCommand_ACTIVATED:
+    case EIR_ViewCommand_TOBEACTIVATED:
         updateView();
-        iBannerLabel->startAnimation();
+        break;
+        
+    case EIR_ViewCommand_ACTIVATED:
+        iArtistSongName->stopAnimation();
+        iArtistSongName->startAnimation();
         break;
 
     case EIR_ViewCommand_DEACTIVATE:
         storeCurrentItem();
-        iBannerLabel->stopAnimation();
+        iArtistSongName->stopAnimation();
         ret = EIR_NoDefault;
         break;
 
@@ -219,29 +222,34 @@
  */
 void IrAbstractListViewBase::updateView()
 {
-    if (iPlayController->isPlaying())
+    updateBanner(getViewManager()->orientation());
+  
+    setCheckedAction();
+}
+
+void IrAbstractListViewBase::handleOrientationChanged(Qt::Orientation aOrientation)
+{
+    updateBanner(aOrientation);
+}
+
+void IrAbstractListViewBase::lazyInit()
+{
+    if (!initCompleted())
     {
-        IRQMetaData *metaData = iPlayController->getMetaData();
-        if (metaData && "" != metaData->getArtistSongName().trimmed() &&
-            "-" != metaData->getArtistSongName().trimmed())
-        {
-            //set the banner text as song name
-            addBanner(metaData->getArtistSongName());
-        }
-        else
-        {
-            //set the banner text as station name
-            IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
-            Q_ASSERT(nowPlayingPreset);
-            addBanner(nowPlayingPreset->name);
-        }
+        IRBaseView::lazyInit();
+        
+        initMenu();
+        initContentWidget();
+        initScrollBar();
+        initToolBar();
+        
+        connect(iListView, SIGNAL(activated(const QModelIndex&)), this, SLOT(clickItem(const QModelIndex&)));
+        connect(iListView, SIGNAL(longPressed(HbAbstractViewItem *,const QPointF&)), this, SLOT(listViewLongPressed(HbAbstractViewItem *,const QPointF&)));
+        connect(iPlayController, SIGNAL(metaDataAvailable(IRQMetaData*)), this, SLOT(metaDataAvailable(IRQMetaData*)));
+        connect(iPlayController, SIGNAL(playingStopped()), this, SLOT(removeBanner()));
+        connect(getViewManager(), SIGNAL(orientationChanged(Qt::Orientation)),
+                this, SLOT(handleOrientationChanged(Qt::Orientation)));
     }
-    else
-    {
-        removeBanner();
-    }
-    
-    setCheckedAction();
 }
 
 void IrAbstractListViewBase::collectionsActionClicked()
@@ -272,11 +280,46 @@
 {
 }
 
-void IrAbstractListViewBase::addBanner(const QString &aText)
+void IrAbstractListViewBase::updateBanner(Qt::Orientation aOrientation)
+{
+    if ((aOrientation == Qt::Vertical) && iPlayController->isPlaying())
+    {
+        IRQMetaData *metaData = iPlayController->getMetaData();
+        if (metaData && "" != metaData->getArtistSongName().trimmed() &&
+            "-" != metaData->getArtistSongName().trimmed())
+        {
+            //set the banner text as song name
+            addBanner(metaData->getArtistSongName(), true);
+        }
+        else
+        {
+            //set the banner text as station name
+            IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
+            Q_ASSERT(nowPlayingPreset);
+            addBanner(nowPlayingPreset->name, false);
+        }
+    }
+    else
+    {
+        removeBanner();
+    }
+}
+
+void IrAbstractListViewBase::addBanner(const QString &aText, const bool &aMetaDataFlag)
 {
     iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_WITH_PLAYINGBANNER_SECTION);
-    iBannerLabel->setText(aText);
-    iBannerLabel->setLoopCount(-1);
+    iStationName->setPlainText(iPlayController->getNowPlayingPreset()->name);
+    if (aMetaDataFlag)
+    {
+        iArtistSongName->setText(aText);
+        // As the metadata is changed, the animation should be started again.
+        iArtistSongName->stopAnimation();
+        iArtistSongName->startAnimation();
+    }
+    else
+    {
+        iArtistSongName->setText(" ");
+    }
 
 }
 
@@ -287,86 +330,31 @@
 
 void IrAbstractListViewBase::metaDataAvailable(IRQMetaData* aMetaData)
 {
-    if (!aMetaData)
+    Q_UNUSED(aMetaData);
+
+    if (getViewManager()->currentView() != this)
     {
         return;
     }
-    
-    const QString artistSongName = aMetaData->getArtistSongName();
-    if ("" != artistSongName.trimmed() && "-" != artistSongName.trimmed())
-    {
-        addBanner(aMetaData->getArtistSongName());
-    }
-    else
-    {
-        //set the banner text as station name
-        IRQPreset *nowPlayingPreset = iPlayController->getNowPlayingPreset();
-        Q_ASSERT(nowPlayingPreset);
-        addBanner(nowPlayingPreset->name);
-    }
+
+    updateBanner(getViewManager()->orientation());
 }
 
 void IrAbstractListViewBase::removeBanner()
 {
-    if (getViewManager()->currentView() == this)
-    {
-        iBannerLabel->stopAnimation();
-        iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION);
-    }
-}
-
-void IrAbstractListViewBase::notReady()
-{
-	popupNote(tr("Not ready"), HbMessageBox::MessageTypeInformation );
-}
-
-void IrAbstractListViewBase::gotoNowPlaying()
-{
-    Q_ASSERT(iPlayController->isPlaying());
-    
-    getViewManager()->activateView(EIRView_PlayingView);
+    iArtistSongName->stopAnimation();
+    iLoader.load(ABSTRACT_LIST_VIEW_BASE_LAYOUT_FILENAME, ABSTRACT_LIST_VIEW_BASE_NO_PLAYINGBANNER_SECTION);
 }
 
 void IrAbstractListViewBase::listViewLongPressed(HbAbstractViewItem *aItem, const QPointF &aCoords)
 {    
     Q_UNUSED(aItem);
-    Q_UNUSED(aCoords);    
+    Q_UNUSED(aCoords);
 }
 
 void IrAbstractListViewBase::clickItem(const QModelIndex &aIndex)
 {   
-    if (!iEffectOnGoing)
-    {        
-        HbAbstractViewItem *listViewItem = iListView->itemByIndex(aIndex);
-        iEffectOnGoing = true;         
-        iChosenIndex = aIndex;
-        HbEffect::start(listViewItem, "viewItem", "chosen",this, "selectEffectComplete1");
-    } 
-}
-
-void IrAbstractListViewBase::initEffects()
-{
-    HbEffect::add(QString("viewItem"), QString(":/effect/effects_item_select.fxml"),
-        QString("chosen") );
-    HbEffect::add(QString("viewItem"), QString(":/effect/effects_item_select_end.fxml"),QString("chosenEnd"));
-}
-
-void IrAbstractListViewBase::selectEffectComplete1(HbEffect::EffectStatus aStatus )
-{
-    Q_UNUSED(aStatus);
-    HbAbstractViewItem *listViewItem = iListView->itemByIndex(iChosenIndex);     
-    HbEffect::start(listViewItem, QString("viewItem"), QString("chosenEnd"),this, "selectEffectComplete2");
-}
-
-void IrAbstractListViewBase::selectEffectComplete2(HbEffect::EffectStatus aStatus )
-{
-    Q_UNUSED(aStatus);
-    iEffectOnGoing = false;        
-    clickAfterEffects();
-}
-
-void IrAbstractListViewBase::clickAfterEffects()
-{        
+    Q_UNUSED(aIndex);
     bool needNetwork;
     itemAboutToBeSelected(needNetwork);     
     if (needNetwork)