radioapp/radiowidgets/src/radioplaylogview.cpp
changeset 14 63aabac4416d
parent 13 46974bebc798
--- a/radioapp/radiowidgets/src/radioplaylogview.cpp	Fri Mar 19 09:29:04 2010 +0200
+++ b/radioapp/radiowidgets/src/radioplaylogview.cpp	Fri Apr 16 14:58:55 2010 +0300
@@ -16,8 +16,10 @@
 */
 
 // System includes
-#include <hblistview.h>
-#include <hbaction.h>
+#include <HbListView>
+#include <HbAction>
+#include <HbAbstractViewItem>
+#include <HbMenu>
 
 // User includes
 #include "radioplaylogview.h"
@@ -25,19 +27,87 @@
 #include "radiologger.h"
 #include "radioxmluiloader.h"
 #include "radiouiengine.h"
+#include "radiostationfiltermodel.h"
 #include "radioplaylogmodel.h"
 
+const char* SECTION_SHOW_LIST = "show_list";
+const char* SECTION_HIDE_LIST = "hide_list";
+const char* SECTION_HISTORY_MODE = "history_mode";
+const char* SECTION_FAVORITE_MODE = "favorite_mode";
+
 /*!
  *
  */
 RadioPlayLogView::RadioPlayLogView( RadioXmlUiLoader* uiLoader ) :
     RadioViewBase( uiLoader ),
-    mPlayLogList( 0 )
+    mPlayLogList( 0 ),
+    mAllSongsButton( 0 ),
+    mFavoritesButton( 0 )
 {
 }
 
 /*!
- * From RadioViewBase
+ * Private slot
+ *
+ */
+void RadioPlayLogView::deckButtonPressed()
+{
+    bool ok = false;
+    if ( sender() == mFavoritesButton ) {
+        mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, SECTION_FAVORITE_MODE, &ok );
+    } else {
+        mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, SECTION_HISTORY_MODE, &ok );
+    }
+
+    const bool showFavorites = mFavoritesButton->isChecked();
+//    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
+//                                               : RadioStation::LocalStation );
+
+    updateVisibilities();
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioPlayLogView::clearList()
+{
+    mMainWindow->uiEngine().playLogModel().removeAll();
+    updateVisibilities();
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioPlayLogView::updateVisibilities()
+{
+    const int itemCount = mMainWindow->uiEngine().playLogModel().rowCount();
+    bool ok = false;
+    mUiLoader->load( DOCML_PLAYLOGVIEW_FILE, itemCount ? SECTION_SHOW_LIST : SECTION_HIDE_LIST, &ok );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioPlayLogView::listItemClicked( const QModelIndex& index )
+{
+    showContextMenu( index );
+}
+
+/*!
+ * Private slot
+ *
+ */
+void RadioPlayLogView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
+{
+    Q_UNUSED( coords );
+    showContextMenu( item->modelIndex() );
+}
+
+/*!
+ * \reimp
  *
  */
 void RadioPlayLogView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
@@ -47,19 +117,63 @@
     mModel = aModel;
 
     RadioPlayLogModel* playLogModel = &mMainWindow->uiEngine().playLogModel();
+    playLogModel->setShowDetails( mOrientation == Qt::Horizontal );
 
     mPlayLogList = mUiLoader->findObject<HbListView>( DOCML_NAME_PLAYLOGLIST );
     mPlayLogList->setScrollingStyle( HbListView::PanOrFlick );
-    mPlayLogList->setModel( playLogModel );
+    mFilterModel = mMainWindow->uiEngine().createNewFilterModel( this );
+    mFilterModel->setSourceModel( playLogModel );
+    mPlayLogList->setModel( mFilterModel );
     mPlayLogList->setSelectionMode( HbListView::NoSelection );
     mPlayLogList->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
 
+    mAllSongsButton     = mUiLoader->findObject<HbAction>( DOCML_NAME_ALLSONGSBUTTON );
+    mFavoritesButton    = mUiLoader->findObject<HbAction>( DOCML_NAME_FAVORITESONGSBUTTON );
+
     HbAction* removeAction = mUiLoader->findObject<HbAction>( DOCML_NAME_PLV_REMOVEALLACTION );
-    connectAndTest( removeAction, SIGNAL(triggered()), playLogModel, SLOT(removeAll()) );
+    connectAndTest( removeAction, SIGNAL(triggered()), this, SLOT(clearList()) );
+
+    connectAndTest( mFavoritesButton,       SIGNAL(triggered() ),
+                    this,                   SLOT(deckButtonPressed() ) );
+    connectAndTest( mAllSongsButton,        SIGNAL(triggered() ),
+                    this,                   SLOT(deckButtonPressed() ) );
+    connectAndTest( playLogModel,           SIGNAL(itemAdded() ),
+                    this,                   SLOT(updateVisibilities() ) );
+    updateVisibilities();
+    
+    initBackAction();
+}
 
-    // "Go to tuning view" menu item
-    connectViewChangeMenuItem( DOCML_NAME_PLV_TUNINGVIEWACTION, SLOT(activateTuningView()) );
+/*!
+ * \reimp
+ *
+ */
+void RadioPlayLogView::setOrientation()
+{
+    RadioPlayLogModel& model = mMainWindow->uiEngine().playLogModel();
+    model.setShowDetails( mOrientation == Qt::Horizontal );
+}
 
-    // "Go to stations view" menu item
-    connectViewChangeMenuItem( DOCML_NAME_PLV_STATIONSVIEWACTION, SLOT(activateStationsView()) );
+/*!
+ * \reimp
+ *
+ */
+void RadioPlayLogView::showContextMenu( const QModelIndex& index )
+{
+    QModelIndex sourceIndex = mFilterModel->mapToSource( index );
+
+    HbMenu* menu = new HbMenu();
+    HbAction* action = menu->addAction( "Set favorite" );
+    menu->exec();
+
+//    RadioPlayLogItem item = mFilterModel->data( index, )
+
+    //    QModelIndex sourceIndex = mFilterModel->mapToSource( item->modelIndex() );
+    //    RadioStation station = mModel->stationAt( sourceIndex.row() );
+    //    RADIO_ASSERT( station.isValid() , "FMRadio", "invalid RadioStation");
+    //
+    //    RadioContextMenu* menu = mUiLoader->findObject<RadioContextMenu>( DOCML_NAME_CONTEXT_MENU );
+    //    menu->init( station, *mUiLoader );
+    //    menu->setPos( QPointF( size().width() / 2 - menu->size().width() / 2, coords.y() - menu->size().height() / 2 ) );
+    //    menu->exec();
 }