radioapp/radiowidgets/src/radiohistoryview.cpp
changeset 19 afea38384506
parent 16 f54ebcfc1b80
child 37 451b2e1545b2
--- a/radioapp/radiowidgets/src/radiohistoryview.cpp	Mon May 03 12:31:41 2010 +0300
+++ b/radioapp/radiowidgets/src/radiohistoryview.cpp	Fri May 14 15:52:32 2010 +0300
@@ -24,23 +24,86 @@
 
 // User includes
 #include "radiohistoryview.h"
-#include "radiomainwindow.h"
+#include "radiowindow.h"
 #include "radiologger.h"
-#include "radioxmluiloader.h"
+#include "radiouiloader.h"
 #include "radiouiengine.h"
-#include "radiostationfiltermodel.h"
 #include "radiohistorymodel.h"
+#include "radiohistoryitem.h"
+
+// BEGIN TEMPORARY TEST CODE CODE
+#include <QTimer>
+#include "radiostationmodel.h"
+
+struct Song
+{
+    const char* mArtist;
+    const char* mTitle;
+};
+const Song KRecognizedSongs[] = {
+    { "Red Hot Chili Peppers", "Under The Bridge" },
+    { "Queens Of The Stone Age", "No One Knows" },
+    { "The Presidents of the United States of America", "Dune Buggy" },
+    { "System of a Down", "Aerials" },
+    { "The White Stripes", "Seven Nation Army" },
+    { "Alice In Chains", "When The Sun Rose Again" },
+    { "Bullet For My Valentine", "Tears Don't Fall" }
+};
+const int KSongsCount = sizeof( KRecognizedSongs ) / sizeof( KRecognizedSongs[0] );
+// END TEMPORARY TEST CODE CODE
 
 /*!
  *
  */
 RadioHistoryView::RadioHistoryView() :
-    RadioViewBase(),
+    RadioViewBase( false ),
     mHistoryList( 0 ),
     mAllSongsButton( 0 ),
     mTaggedSongsButton( 0 ),
-    mFilterModel( 0 )
+    mSelectedItem( new RadioHistoryItem() ),
+    mCurrentRow( -1 ),
+    mSongIndex( 0 )
+{
+}
+
+/*!
+ *
+ */
+RadioHistoryView::~RadioHistoryView()
+{
+}
+
+/*!
+ *
+ */
+void RadioHistoryView::setNonTaggedIcon( const HbIcon& nonTaggedIcon )
 {
+    mNonTaggedIcon = nonTaggedIcon;
+    mNonTaggedIcon.setColor( Qt::white );
+}
+
+/*!
+ *
+ */
+HbIcon RadioHistoryView::nonTaggedIcon() const
+{
+    return mNonTaggedIcon;
+}
+
+/*!
+ *
+ */
+void RadioHistoryView::setTaggedIcon( const HbIcon& taggedIcon )
+{
+    mTaggedIcon = taggedIcon;
+}
+
+/*!
+ *
+ */
+HbIcon RadioHistoryView::taggedIcon() const
+{
+    return mTaggedIcon;
 }
 
 /*!
@@ -55,9 +118,8 @@
         loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE );
     }
 
-    const bool showFavorites = mTaggedSongsButton->isChecked();
-//    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
-//                                               : RadioStation::LocalStation );
+    const bool showTagged = mTaggedSongsButton->isChecked();
+    historyModel().setShowTagged( showTagged );
 
     updateVisibilities();
 }
@@ -68,12 +130,9 @@
  */
 void RadioHistoryView::clearList()
 {
-    const bool answer = HbMessageBox::question( hbTrId( "txt_rad_info_clear_recently_played_songs_list" ) );
-
-    if ( answer ) {
-        mMainWindow->uiEngine().historyModel().removeAll();
-        updateVisibilities();
-    }
+    const bool showingTagged = mTaggedSongsButton->isChecked();
+    askQuestion( hbTrId( showingTagged ? "txt_rad_info_clear_tagged_songs_list" :
+                                         "txt_rad_info_clear_recently_played_songs_list" ) );
 }
 
 /*!
@@ -90,47 +149,120 @@
  * Private slot
  *
  */
-void RadioHistoryView::listItemClicked( const QModelIndex& index )
+void RadioHistoryView::showContextMenu( const QModelIndex& index )
 {
-    showContextMenu( index );
+    *mSelectedItem = historyModel().itemAtIndex( index );
+    mCurrentRow = index.row();
+
+    HbMenu* menu = mUiLoader->findObject<HbMenu>( DOCML::HV_NAME_CONTEXT_MENU );
+
+    if ( HbAction* tagAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CONTEXT_TAG ) ) {
+        if ( mSelectedItem->isTagged() ) {
+            tagAction->setText( hbTrId( "txt_rad_menu_remove_tag" ) );
+        } else {
+            tagAction->setText( hbTrId( "txt_rad_menu_tag_song" ) );
+        }
+    }
+
+    if ( HbAction* searchAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CONTEXT_SEARCH ) ) {
+        //TODO: Check if "search from other store" should be available
+        searchAction->setVisible( false );
+    }
+
+    HbAbstractViewItem* item =  mHistoryList->itemByIndex( index );
+    QPointF coords = item->pos();
+    coords.setY( mHistoryList->contentWidget()->pos().y() + coords.y() );
+    menu->setPreferredPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() + menu->size().height() / 2 ) );
+
+    menu->show();
 }
 
 /*!
  * Private slot
  *
  */
-void RadioHistoryView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
+void RadioHistoryView::toggleTagging()
+{
+    historyModel().toggleTagging( *mSelectedItem, mCurrentRow );
+    mSelectedItem->reset();
+    mCurrentRow = -1;
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::openOviStore()
+{
+    QString msg = "To be implemented: Open ovi store. Artist: %1, Title: %2";
+    HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) );
+    mMainWindow->uiEngine().openMusicStore( *mSelectedItem );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioHistoryView::openOtherStore()
 {
-    Q_UNUSED( coords );
-    showContextMenu( item->modelIndex() );
+    QString msg = "To be implemented: Open other store. Artist: %1, Title: %2";
+    HbMessageBox::information( msg.arg( mSelectedItem->artist() ).arg( mSelectedItem->title() ) );
+    mMainWindow->uiEngine().openMusicStore( *mSelectedItem, RadioUiEngine::OtherStore );
+}
+
+/*!
+ * Private slot
+ * TEMPORARY TEST CODE
+ */
+void RadioHistoryView::addSongs()
+{
+    for ( int i = 0; i < KSongsCount; ++i ) {
+        QTimer::singleShot( 1000 + i * 1500, this, SLOT(addOneSong()) );
+    }
+}
+
+/*!
+ * Private slot
+ * TEMPORARY TEST CODE
+ */
+void RadioHistoryView::addOneSong()
+{
+    Song song = KRecognizedSongs[mSongIndex++];
+    mSongIndex %= KSongsCount;
+
+    RadioStation station = mMainWindow->uiEngine().stationModel().currentStation();
+    mMainWindow->uiEngine().historyModel().addItem( song.mArtist, song.mTitle, station );
 }
 
 /*!
  * \reimp
  *
  */
-void RadioHistoryView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
+void RadioHistoryView::init()
 {
     LOG_METHOD;
-    mUiLoader.reset( uiLoader );
-    mMainWindow = mainWindow;
+    mInitialized = true;
 
     RadioHistoryModel* historyModel = &mMainWindow->uiEngine().historyModel();
     historyModel->setShowDetails( mOrientation == Qt::Horizontal );
 
+    if ( !mNonTaggedIcon.isNull() && !mTaggedIcon.isNull() ) {
+        historyModel->setIcons( mNonTaggedIcon.qicon(), mTaggedIcon.qicon() );
+    }
+
     mHistoryList = mUiLoader->findObject<HbListView>( DOCML::HV_NAME_HISTORY_LIST );
     mHistoryList->setScrollingStyle( HbListView::PanOrFlick );
-    mFilterModel = mMainWindow->uiEngine().createNewFilterModel( this );
-    mFilterModel->setSourceModel( historyModel );
-    mHistoryList->setModel( mFilterModel );
+    mHistoryList->setModel( historyModel );
     mHistoryList->setSelectionMode( HbListView::NoSelection );
     mHistoryList->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
 
-    mAllSongsButton     = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_ALL_SONGS_BUTTON );
-    mTaggedSongsButton    = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_TAGGED_SONGS_BUTTON );
+    mAllSongsButton = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_ALL_SONGS_BUTTON );
+    mTaggedSongsButton = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_TAGGED_SONGS_BUTTON );
 
-    HbAction* clearListAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CLEAR_LIST_ACTION );
-    connectAndTest( clearListAction, SIGNAL(triggered()), this, SLOT(clearList()) );
+    if ( HbAction* clearListAction = mUiLoader->findObject<HbAction>( DOCML::HV_NAME_CLEAR_LIST_ACTION ) ) {
+        connectAndTest( clearListAction,    SIGNAL(triggered()),
+                        this,               SLOT(clearList()) );
+    }
 
     connectAndTest( mTaggedSongsButton,     SIGNAL(triggered() ),
                     this,                   SLOT(deckButtonPressed() ) );
@@ -138,9 +270,20 @@
                     this,                   SLOT(deckButtonPressed() ) );
     connectAndTest( historyModel,           SIGNAL(itemAdded() ),
                     this,                   SLOT(updateVisibilities() ) );
+
+    loadSection( DOCML::FILE_HISTORYVIEW, DOCML::HV_SECTION_HISTORY_MODE );
     updateVisibilities();
     
+    connectCommonMenuItem( MenuItem::UseLoudspeaker );
+
     initBackAction();
+
+    // BEGIN TEMPORARY TEST CODE
+    if ( HbAction* addSongsAction = mUiLoader->findObject<HbAction>( "hv:add_songs_action" ) ) {
+        connectAndTest( addSongsAction,     SIGNAL(triggered()),
+                        this,               SLOT(addSongs()) );
+    }
+    // END TEMPORARY TEST CODE
 }
 
 /*!
@@ -157,13 +300,16 @@
  * \reimp
  *
  */
-void RadioHistoryView::showContextMenu( const QModelIndex& index )
+void RadioHistoryView::userAccepted()
 {
-    QModelIndex sourceIndex = mFilterModel->mapToSource( index );
+    mMainWindow->uiEngine().historyModel().removeAll();
+    updateVisibilities();
+}
 
-    HbMenu* menu = new HbMenu();
-    HbAction* action = menu->addAction( "Set favorite" );
-    menu->exec();
-
-//    RadioHistoryItem item = mFilterModel->data( index, )
+/*!
+ *
+ */
+RadioHistoryModel& RadioHistoryView::historyModel() const
+{
+    return *static_cast<RadioHistoryModel*>( mHistoryList->model() );
 }