radioapp/radiowidgets/src/radiostationsview.cpp
changeset 28 075425b8d9a4
parent 24 6df133bd92e1
child 32 189d20c34778
child 34 bc10a61bd7d3
--- a/radioapp/radiowidgets/src/radiostationsview.cpp	Fri Jun 04 10:21:36 2010 +0100
+++ b/radioapp/radiowidgets/src/radiostationsview.cpp	Fri Jun 11 13:38:32 2010 +0300
@@ -23,18 +23,21 @@
 #include <HbAction>
 #include <HbInputDialog>
 #include <HbMenu>
+#include <QSortFilterProxyModel>
 
 // User includes
 #include "radiostationsview.h"
 #include "radiologger.h"
 #include "radiowindow.h"
 #include "radiouiengine.h"
-#include "radiobannerlabel.h"
 #include "radiofrequencyscanner.h"
 #include "radiouiloader.h"
 #include "radiostationmodel.h"
 #include "radiostation.h"
-#include "radiostationfiltermodel.h"
+
+// Constants
+const char* REGEX_SHOW_FAVORITES = "true";
+const char* REGEX_SHOW_ALL = ".+";
 
 /*!
  *
@@ -42,11 +45,9 @@
 RadioStationsView::RadioStationsView() :
     RadioViewBase( false ),
     mModel( 0 ),
-    mFilterModel( 0 ),
     mScanStationsAction( 0 ),
     mClearListAction( 0 ),
     mStationsList( 0 ),
-    mHeadingBanner( 0 ),
     mFavoritesButton( 0 ),
     mLocalStationsButton( 0 ),
     mSelectedStation( new RadioStation ),
@@ -97,25 +98,25 @@
  * Private slot
  *
  */
-void RadioStationsView::listItemClicked( const QModelIndex& index )
+void RadioStationsView::handleClick( const QModelIndex& index )
 {
     LOG_TIMESTAMP( "Channel change started" );
     QModelIndex sourceIndex = mFilterModel->mapToSource( index );
     *mSelectedStation = mModel->stationAt( sourceIndex.row() );
-    mMainWindow->uiEngine().tuneFrequency( mSelectedStation->frequency(), TuneReason::StationsList );
+    mUiEngine->setFrequency( mSelectedStation->frequency(), TuneReason::StationsList );
 }
 
 /*!
  * Private slot
  *
  */
-void RadioStationsView::listItemLongPressed( HbAbstractViewItem* item, const QPointF& coords )
+void RadioStationsView::handleLongPress( HbAbstractViewItem* item, const QPointF& coords )
 {
     Q_UNUSED( item );
 
     HbMenu* menu = mUiLoader->findObject<HbMenu>( DOCML::NAME_CONTEXT_MENU );
 
-    *mSelectedStation = mFilterModel->data( item->modelIndex(), RadioStationModel::RadioStationRole ).value<RadioStation>();
+    *mSelectedStation = mFilterModel->data( item->modelIndex(), RadioRole::RadioStationRole ).value<RadioStation>();
 
     HbAction* favoriteAction = mUiLoader->findObject<HbAction>( DOCML::NAME_CONTEXT_FAVORITE );
     if ( mSelectedStation->isFavorite() ) {
@@ -135,35 +136,27 @@
 void RadioStationsView::updateAntennaStatus( bool connected )
 {
     Q_UNUSED( connected );
-    updateControlVisibilities();
+    updateVisibilities();
 }
 
 /*!
  * Private slot
  *
  */
-void RadioStationsView::updateCurrentStation()
+void RadioStationsView::updateViewMode()
 {
-    mFilterModel->invalidate();
-}
+    QString section = DOCML::SV_SECTION_SHOW_ALL_STATIONS;
+    QString filter = REGEX_SHOW_ALL;
 
-/*!
- * Private slot
- *
- */
-void RadioStationsView::deckButtonPressed()
-{
-    const bool showFavorites = mFavoritesButton->isChecked();
-    if ( showFavorites ) {
-        loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_FAVORITES );
-    } else {
-        loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS );
+    if ( sender() == mFavoritesButton ) {
+        section = DOCML::SV_SECTION_SHOW_FAVORITES;
+        filter = REGEX_SHOW_FAVORITES;
     }
 
-    mFilterModel->setTypeFilter( showFavorites ? RadioStation::Favorite
-                                               : RadioStation::LocalStation );
+    loadSection( DOCML::FILE_STATIONSVIEW, section );
+    mFilterModel->setFilterRegExp( filter );
 
-    updateControlVisibilities();
+    updateVisibilities();
 }
 
 /*!
@@ -172,7 +165,7 @@
  */
 void RadioStationsView::startScanning()
 {
-    const int rowCount =  mMainWindow->uiEngine().stationModel().rowCount();
+    const int rowCount =  mUiEngine->stationModel().rowCount();
     mCurrentQuestion = StartScanning;
     if ( rowCount > 0 ) {
         askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
@@ -187,7 +180,7 @@
  */
 void RadioStationsView::finishScanning()
 {
-    updateControlVisibilities();
+    updateVisibilities();
     mFrequencyScanner.take();
 }
 
@@ -195,7 +188,7 @@
  * Private slot
  *
  */
-void RadioStationsView::updateControlVisibilities()
+void RadioStationsView::updateVisibilities()
 {
     LOG_SLOT_CALLER;
     bool listEmpty = mModel->rowCount() == 0;
@@ -205,10 +198,10 @@
         listEmpty = mModel->favoriteCount() == 0;
     }
 
-    mClearListAction->setVisible( !listEmpty );
+    mClearListAction->setEnabled( !listEmpty );
 
-    const bool scanAvailable = mMainWindow->uiEngine().isAntennaAttached() && localStationsMode;
-    mScanStationsAction->setVisible( scanAvailable );
+    const bool scanAvailable = mUiEngine->isAntennaAttached() && localStationsMode;
+    mScanStationsAction->setEnabled( scanAvailable );
     HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::SV_NAME_SCAN_BUTTON );
     scanButton->setEnabled( scanAvailable );
 
@@ -235,12 +228,12 @@
 {
     HbInputDialog* nameQuery = new HbInputDialog();
     nameQuery->setAttribute( Qt::WA_DeleteOnClose, true );
-    nameQuery->setDismissPolicy( HbDialog::NoDismiss );
+    nameQuery->setDismissPolicy( HbDialog::TapOutside );
     nameQuery->setPromptText( hbTrId( "txt_rad_dialog_new_name" ) );
     nameQuery->setInputMode( HbInputDialog::TextInput );
     nameQuery->setValue( mSelectedStation->name() );
     nameQuery->setObjectName( DOCML::NAME_INPUT_QUERY );
-    nameQuery->open( this, SLOT(renameDone(HbAction* )) );
+    nameQuery->open( this, SLOT(renameDone(HbAction*)) );
 }
 
 /*!
@@ -270,7 +263,7 @@
 {
     HbInputDialog* dlg = static_cast<HbInputDialog*>( sender() );
 
-    if( action == dlg->primaryAction() ) {
+    if( action ) {
         mModel->renameStation( mSelectedStation->presetIndex(), dlg->value().toString() );
     }
 }
@@ -282,13 +275,12 @@
 void RadioStationsView::init()
 {
     LOG_METHOD;
-    mInitialized = true;
-    mModel = &mMainWindow->uiEngine().stationModel();
+    mModel = &mUiEngine->stationModel();
 
-    RadioUiEngine* engine = &mMainWindow->uiEngine();
-
-    mFilterModel = engine->createNewFilterModel( this );
-    mFilterModel->setTypeFilter( RadioStation::LocalStation );
+    mFilterModel = new QSortFilterProxyModel( this );
+    mFilterModel->setDynamicSortFilter( true );
+    mFilterModel->setFilterRole( RadioRole::IsFavoriteRole );
+    mFilterModel->setSourceModel( &mUiEngine->stationModel() );
 
     loadSection( DOCML::FILE_STATIONSVIEW, DOCML::SV_SECTION_SHOW_ALL_STATIONS );
 
@@ -298,40 +290,55 @@
     mModel->setDetail( RadioStationModel::ShowIcons | RadioStationModel::ShowGenre );
 
     mStationsList           = mUiLoader->findObject<HbListView>( DOCML::SV_NAME_STATIONS_LIST );
-    mHeadingBanner          = mUiLoader->findWidget<RadioBannerLabel>( DOCML::SV_NAME_HEADING_BANNER );
     mFavoritesButton        = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_FAVORITES_BUTTON );
     mLocalStationsButton    = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_LOCALS_BUTTON );
 
-    connectAndTest( engine,                 SIGNAL(antennaStatusChanged(bool)),
+    Radio::connect( mUiEngine.data(),       SIGNAL(antennaStatusChanged(bool)),
                     this,                   SLOT(updateAntennaStatus(bool)) );
-    connectAndTest( mModel,                 SIGNAL(rowsInserted(QModelIndex,int,int)),
-                    this,                   SLOT(updateControlVisibilities() ) );
-    connectAndTest( mModel,                 SIGNAL(rowsRemoved(QModelIndex,int,int)),
-                    this,                   SLOT(updateControlVisibilities()) );
-    connectAndTest( mModel,                 SIGNAL(modelReset() ),
-                    this,                   SLOT(updateControlVisibilities() ) );
-    connectAndTest( mFavoritesButton,       SIGNAL(triggered() ),
-                    this,                   SLOT(deckButtonPressed() ) );
-    connectAndTest( mLocalStationsButton,   SIGNAL(triggered() ),
-                    this,                   SLOT(deckButtonPressed() ) );
+    Radio::connect( mModel,                 SIGNAL(rowsInserted(QModelIndex,int,int)),
+                    this,                   SLOT(updateVisibilities()) );
+    Radio::connect( mModel,                 SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,                   SLOT(updateVisibilities()) );
+    Radio::connect( mModel,                 SIGNAL(modelReset()),
+                    this,                   SLOT(updateVisibilities()) );
+    Radio::connect( mFavoritesButton,       SIGNAL(triggered()),
+                    this,                   SLOT(updateViewMode()) );
+    Radio::connect( mLocalStationsButton,   SIGNAL(triggered() ),
+                    this,                   SLOT(updateViewMode()) );
+    Radio::connect( mStationsList,          SIGNAL(activated(QModelIndex)),
+                    this,                   SLOT(handleClick(QModelIndex)) );
+    Radio::connect( mStationsList,          SIGNAL(longPressed(HbAbstractViewItem*,QPointF)),
+                    this,                   SLOT(handleLongPress(HbAbstractViewItem*,QPointF)) );
 
-    connectAndTest( engine, SIGNAL(tunedToFrequency(uint,int)), this, SLOT(updateCurrentStation()) );
+    connectCommonMenuItem( MenuItem::Exit );
+    connectXmlElement( DOCML::SV_NAME_SCAN_BUTTON,      SIGNAL(clicked()),
+                       this,                            SLOT(startScanning()) );
+
+    // Context menu actions
+    connectXmlElement( DOCML::SV_NAME_RENAME_ACTION,    SIGNAL(triggered()),
+                       this,                            SLOT(rename()) );
+    connectXmlElement( DOCML::SV_NAME_FAVORITE_ACTION,  SIGNAL(triggered()),
+                       this,                            SLOT(toggleFavorite()) );
+    connectXmlElement( DOCML::SV_NAME_DELETE_ACTION,    SIGNAL(triggered()),
+                       this,                            SLOT(deleteStation()) );
 
     // "Scan local stations" menu item
     mScanStationsAction = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_SCAN_ACTION );
-    
+    Radio::connect( mScanStationsAction,   SIGNAL(triggered() ),
+                    this,                   SLOT(startScanning() ) );
+
     // "Remove all presets" menu item
     mClearListAction = mUiLoader->findObject<HbAction>( DOCML::SV_NAME_CLEAR_LIST_ACTION );
-    connectAndTest( mClearListAction,   SIGNAL(triggered() ),
+    Radio::connect( mClearListAction,   SIGNAL(triggered() ),
                     this,               SLOT(clearList() ) );
 
     connectCommonMenuItem( MenuItem::UseLoudspeaker );
 
     initListView();
-    
+
     initBackAction();
 
-    updateControlVisibilities();
+    updateViewMode();
 }
 
 /*!
@@ -340,16 +347,16 @@
 void RadioStationsView::userAccepted()
 {
     if ( mCurrentQuestion == StartScanning ) {
-        mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) );
+        mFrequencyScanner.reset( new RadioFrequencyScanner( *mUiEngine, this ) );
 
-        connectAndTest( mFrequencyScanner.data(),   SIGNAL(frequencyScannerFinished()),
+        Radio::connect( mFrequencyScanner.data(),   SIGNAL(frequencyScannerFinished()),
                         this,                       SLOT(finishScanning()) );
 
         mFrequencyScanner->startScanning();
     } else if ( mCurrentQuestion == ClearList ){
         const bool favoriteMode = mFavoritesButton->isChecked();
         mModel->removeAll( favoriteMode ? RadioStationModel::RemoveFavorites : RadioStationModel::RemoveAll );
-        updateControlVisibilities();
+        updateVisibilities();
     } else if ( mCurrentQuestion == DeleteStation ) {
         mModel->removeStation( mModel->currentStation() );
     }
@@ -358,14 +365,6 @@
 }
 
 /*!
- * \reimp
- */
-void RadioStationsView::showEvent( QShowEvent* event )
-{
-    RadioViewBase::showEvent( event );
-}
-
-/*!
  *
  */
 void RadioStationsView::initListView()