--- 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()