--- a/radioapp/radiowidgets/src/radiomainview.cpp Fri Jun 04 10:21:36 2010 +0100
+++ b/radioapp/radiowidgets/src/radiomainview.cpp Fri Jun 11 13:38:32 2010 +0300
@@ -20,6 +20,8 @@
#include <HbLabel>
#include <HbPushButton>
#include <HbAction>
+#include <HbMenu>
+#include <QApplication>
// User includes
#include "radiowindow.h"
@@ -29,7 +31,7 @@
#include "radiologger.h"
#include "radiostationcarousel.h"
#include "radiouiloader.h"
-#include "radiouiutilities.h"
+#include "radioutil.h"
#include "radiostationmodel.h"
#include "radiofrequencyscanner.h"
@@ -41,7 +43,9 @@
RadioMainView::RadioMainView() :
RadioViewBase( false ),
mCarousel( NULL ),
- mFrequencyStrip( NULL )
+ mFrequencyStrip( NULL ),
+ mSkippingAction( NULL ),
+ mAlternateSkipping( false )
{
}
@@ -63,6 +67,12 @@
} else {
loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_NORMAL );
mFrequencyScanner.take();
+
+ const bool firsTimeStart = mUiEngine->isFirstTimeStart();
+ const int rowCount = mUiEngine->stationModel().rowCount();
+ if ( firsTimeStart && rowCount != 0 ) {
+ mUiEngine->setFirstTimeStartPerformed( true );
+ }
}
}
@@ -73,67 +83,81 @@
void RadioMainView::init()
{
LOG_METHOD;
- mInitialized = true;
+ loadSection( DOCML::FILE_MAINVIEW, DOCML::SECTION_LAZY_LOAD );
mCarousel = mUiLoader->findObject<RadioStationCarousel>( DOCML::MV_NAME_STATION_CAROUSEL );
- mCarousel->init( *mUiLoader, &mMainWindow->uiEngine() );
+ mCarousel->init( *mUiLoader, mUiEngine.data() );
// Note! UI connections are already made in the DocML file. Here we need to connect UI to engine
- RadioUiEngine* engine = &mMainWindow->uiEngine();
mFrequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::MV_NAME_FREQUENCY_STRIP );
- mFrequencyStrip->init( engine );
-
- RadioStationModel* stationModel = &engine->stationModel();
+ mFrequencyStrip->init( mUiEngine.data(), *mUiLoader );
- connectAndTest( mFrequencyStrip, SIGNAL(frequencyChanged(uint,int)),
- this, SLOT(setFrequencyFromWidget(uint,int)) );
- connectAndTest( mCarousel, SIGNAL(frequencyChanged(uint,int)),
- this, SLOT(setFrequencyFromWidget(uint,int)) );
- connectAndTest( engine, SIGNAL(tunedToFrequency(uint,int)),
- this, SLOT(setFrequencyFromEngine(uint,int)) );
+ RadioStationModel* stationModel = &mUiEngine->stationModel();
- connectAndTest( mFrequencyStrip, SIGNAL(skipRequested(int)),
- this, SLOT(skip(int)) );
- connectAndTest( mFrequencyStrip, SIGNAL(seekRequested(int)),
- engine, SLOT(seekStation(int)) );
+ Radio::connect( mFrequencyStrip, SIGNAL(frequencyChanged(uint,int,int)),
+ this, SLOT(setFrequencyFromWidget(uint,int,int)) );
+ Radio::connect( mCarousel, SIGNAL(frequencyChanged(uint,int,int)),
+ this, SLOT(setFrequencyFromWidget(uint,int,int)) );
+ Radio::connect( mUiEngine.data(), SIGNAL(tunedToFrequency(uint,int)),
+ this, SLOT(setFrequencyFromEngine(uint,int)) );
+ Radio::connect( mFrequencyStrip, SIGNAL(manualSeekChanged(bool)),
+ this, SLOT(setManualSeekMode(bool)) );
- connectAndTest( stationModel, SIGNAL(favoriteChanged(RadioStation)),
- mFrequencyStrip, SLOT(updateFavorite(RadioStation)) );
+ Radio::connect( mFrequencyStrip, SIGNAL(skipRequested(int)),
+ this, SLOT(skip(int)) );
+ Radio::connect( mCarousel, SIGNAL(skipRequested(int)),
+ this, SLOT(skip(int)) );
+ Radio::connect( mFrequencyStrip, SIGNAL(seekRequested(int)),
+ mUiEngine.data(), SLOT(seekStation(int)) );
- connectAndTest( engine, SIGNAL(seekingStarted(int)),
+ Radio::connect( mUiEngine.data(), SIGNAL(seekingStarted(int)),
this, SLOT(seekingStarted()) );
- connectAndTest( engine, SIGNAL(antennaStatusChanged(bool)),
- mCarousel, SLOT(updateAntennaStatus(bool)) );
- connectAndTest( engine, SIGNAL(audioRouteChanged(bool)),
+ Radio::connect( mUiEngine.data(), SIGNAL(antennaStatusChanged(bool)),
+ this, SLOT(updateAntennaStatus(bool)) );
+ Radio::connect( mUiEngine.data(), SIGNAL(audioRouteChanged(bool)),
this, SLOT(updateAudioRoute(bool)) );
- HbPushButton* stationsButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_STATIONS_BUTTON );
- connectAndTest( stationsButton, SIGNAL(clicked()),
- mMainWindow, SLOT(activateStationsView()) );
+ Radio::connect( stationModel, SIGNAL(favoriteChanged(RadioStation)),
+ this, SLOT(handleFavoriteChange(RadioStation)) );
+
+ connectXmlElement( DOCML::MV_NAME_STATIONS_BUTTON, SIGNAL(clicked()),
+ mMainWindow, SLOT(activateStationsView()) );
- HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SCAN_BUTTON );
- connectAndTest( scanButton, SIGNAL(clicked()),
- this, SLOT(toggleScanning()) );
+ connectXmlElement( DOCML::MV_NAME_SCAN_BUTTON, SIGNAL(clicked()),
+ this, SLOT(toggleScanning()) );
- HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SPEAKER_BUTTON );
- connectAndTest( loudspeakerButton, SIGNAL(clicked()),
- engine, SLOT(toggleAudioRoute()) );
+ connectXmlElement( DOCML::MV_NAME_SPEAKER_BUTTON, SIGNAL(clicked()),
+ mUiEngine.data(), SLOT(toggleAudioRoute()) );
+
+ connectCommonMenuItem( MenuItem::Exit );
// "Play history" menu item
connectViewChangeMenuItem( DOCML::MV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
- updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
+ //TODO: REMOVE. THIS IS TEMPORARY TEST CODE
+ toggleSkippingMode();
+ menu()->addAction( "Reset start count", this, SLOT(resetFirstTimeCount()) );
+ // END TEMPORARY TEST CODE
+
+ updateAudioRoute( mUiEngine->isUsingLoudspeaker() );
// Add "back" navigation action to put the application to background
HbAction* backAction = new HbAction( Hb::BackNaviAction, this );
- connectAndTest( backAction, SIGNAL(triggered()),
+#ifdef BUILD_WIN32
+ Radio::connect( backAction, SIGNAL(triggered()),
+ this, SLOT(quit()) );
+#else
+ Radio::connect( backAction, SIGNAL(triggered()),
mMainWindow, SLOT(lower()) );
+#endif // BUILD_WIN32
setNavigationAction( backAction );
- const bool firsTimeStart = engine->isFirstTimeStart();
- const int rowCount = engine->stationModel().rowCount();
+ const bool firsTimeStart = mUiEngine->isFirstTimeStart();
+ const int rowCount = mUiEngine->stationModel().rowCount();
if ( firsTimeStart && rowCount == 0 ){
QTimer::singleShot( 100, this, SLOT(toggleScanning()) );
}
+
+ emit applicationReady();
}
/*!
@@ -143,6 +167,9 @@
void RadioMainView::setOrientation()
{
loadSection( DOCML::FILE_MAINVIEW, mMainWindow->orientationSection() );
+ if ( mCarousel && mFrequencyStrip ) {
+ mCarousel->setFrequency( mFrequencyStrip->frequency(), TuneReason::Unspecified );
+ }
}
/*!
@@ -151,23 +178,41 @@
*/
void RadioMainView::userAccepted()
{
- mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) );
+ mFrequencyScanner.reset( new RadioFrequencyScanner( *mUiEngine, this ) );
mFrequencyScanner->startScanning();
}
/*!
+ * \reimp
+ *
+ */
+bool RadioMainView::eventFilter( QObject* watched, QEvent* event )
+{
+ if ( event->type() == QEvent::ApplicationDeactivate ) {
+ mFrequencyStrip->cancelManualSeek();
+ }
+
+ return RadioViewBase::eventFilter( watched, event );
+}
+
+/*!
* Private slot
*/
-void RadioMainView::setFrequencyFromWidget( uint frequency, int reason )
+void RadioMainView::setFrequencyFromWidget( uint frequency, int reason, int direction )
{
- LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason );
- if ( !RadioUiUtilities::isScannerAlive() ) {
+// LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason );
+ if ( !RadioUtil::isScannerAlive() ) {
if ( reason == TuneReason::FrequencyStrip ) {
- mCarousel->setFrequency( frequency, reason );
- mMainWindow->uiEngine().tuneWithDelay( frequency, reason );
+// mCarousel->setFrequency( frequency, reason, direction );
+// mUiEngine->tuneWithDelay( frequency, reason );
+ } else if ( reason == TuneReason::ManualSeekUpdate ) {
+ mCarousel->setFrequency( frequency, reason, RadioUtil::scrollDirection( direction ) );
+ } else if ( reason == TuneReason::ManualSeekTune ) {
+ LOG_FORMAT( "--------Manual seek tune: %u", frequency );
+ mUiEngine->setFrequency( frequency, reason );
} else if ( reason == TuneReason::StationCarousel ) {
- mFrequencyStrip->setFrequency( frequency, reason );
- mMainWindow->uiEngine().tuneFrequency( frequency, reason );
+ mFrequencyStrip->setFrequency( frequency, reason, RadioUtil::scrollDirection( direction ) );
+ mUiEngine->setFrequency( frequency, reason );
}
}
}
@@ -177,13 +222,14 @@
*/
void RadioMainView::setFrequencyFromEngine( uint frequency, int reason )
{
- if ( !RadioUiUtilities::isScannerAlive() ) {
+ LOG_FORMAT( "RadioMainView::setFrequencyFromEngine reason: %d", reason );
+ if ( !RadioUtil::isScannerAlive() && !mFrequencyStrip->isInManualSeekMode() ) {
mCarousel->clearInfoText();
if ( reason != TuneReason::FrequencyStrip &&
reason != TuneReason::StationCarousel &&
reason != TuneReason::Skip ) {
- mCarousel->setFrequency( frequency, reason );
- mFrequencyStrip->setFrequency( frequency, reason );
+ mCarousel->setFrequency( frequency, reason, Scroll::Shortest );
+ mFrequencyStrip->setFrequency( frequency, reason, Scroll::Shortest );
}
}
}
@@ -193,16 +239,48 @@
*/
void RadioMainView::skip( int skipMode )
{
- if ( ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) &&
- mMainWindow->uiEngine().stationModel().favoriteCount() == 0 ) {
- mCarousel->setInfoText( CarouselInfoText::NoFavorites );
- } else {
+// if ( !mAlternateSkipping && ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) &&
+// mUiEngine->stationModel().favoriteCount() == 0 ) {
+// mCarousel->setInfoText( CarouselInfoText::NoFavorites );
+// } else {
const uint currentFrequency = mFrequencyStrip->frequency();
- const uint frequency = mMainWindow->uiEngine().skipStation( static_cast<StationSkip::Mode>( skipMode ),
- currentFrequency);
- mCarousel->setFrequency( frequency, TuneReason::Skip );
- mFrequencyStrip->setFrequency( frequency, TuneReason::Skip );
- }
+ RadioStation station;
+ mUiEngine->stationModel().findFrequency( currentFrequency, station );
+
+ if ( mAlternateSkipping ) { //TODO: Remove. Temporary test code
+ if ( sender() == mFrequencyStrip ) {
+ if ( skipMode == StationSkip::NextFavorite ) {
+ skipMode = StationSkip::Next;
+ } else if ( skipMode == StationSkip::PreviousFavorite ) {
+ skipMode = StationSkip::Previous;
+ }
+ } else if ( sender() == mCarousel ) {
+ if ( skipMode == StationSkip::Next ) {
+ skipMode = StationSkip::NextFavorite;
+ } else if ( skipMode == StationSkip::Previous ) {
+ skipMode = StationSkip::PreviousFavorite;
+ }
+ }
+ }
+
+ const uint frequency = mUiEngine->skipStation( static_cast<StationSkip::Mode>( skipMode ),
+ currentFrequency);
+
+ if ( currentFrequency != frequency || station.isFavorite() ) {
+ const Scroll::Direction direction = RadioUtil::scrollDirectionFromSkipMode( skipMode );
+ mCarousel->setFrequency( frequency, TuneReason::Skip, direction );
+ mFrequencyStrip->setFrequency( frequency, TuneReason::Skip, direction );
+ }
+// }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::openStationsView()
+{
+ mFrequencyStrip->cancelManualSeek();
+ mMainWindow->activateStationsView();
}
/*!
@@ -210,10 +288,11 @@
*/
void RadioMainView::toggleScanning()
{
+ mFrequencyStrip->cancelManualSeek();
if ( mFrequencyScanner ) {
mFrequencyScanner->cancelScanning();
} else {
- const int rowCount = mMainWindow->uiEngine().stationModel().rowCount();
+ const int rowCount = mUiEngine->stationModel().rowCount();
if ( rowCount > 0 ) {
askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
} else {
@@ -227,7 +306,7 @@
*/
void RadioMainView::seekingStarted()
{
- if ( !RadioUiUtilities::isScannerAlive() ) {
+ if ( !RadioUtil::isScannerAlive() ) {
mCarousel->setInfoText( CarouselInfoText::Seeking );
}
}
@@ -235,14 +314,83 @@
/*!
* Private slot
*/
+void RadioMainView::updateAntennaStatus( bool connected )
+{
+ if ( !connected ) {
+ mFrequencyStrip->cancelManualSeek();
+ }
+
+ HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SCAN_BUTTON );
+ scanButton->setEnabled( connected );
+ mCarousel->updateAntennaStatus( connected );
+}
+
+/*!
+ * Private slot
+ */
void RadioMainView::updateAudioRoute( bool loudspeaker )
{
HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SPEAKER_BUTTON );
if ( loudspeaker ) {
- loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker_off.svg" ) );
+ loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker_off" ) );
loudspeakerButton->setText( hbTrId( "txt_rad_button_deactivate_loudspeaker" ) );
} else {
- loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker.svg" ) );
+ loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker" ) );
loudspeakerButton->setText( hbTrId( "txt_rad_button_activate_loudspeaker" ) );
}
}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::setManualSeekMode( bool manualSeekActive )
+{
+ if ( manualSeekActive ) {
+ qApp->installEventFilter( this );
+ } else {
+ qApp->removeEventFilter( this );
+ }
+
+ mUiEngine->setManualSeekMode( manualSeekActive );
+
+ mCarousel->setManualSeekMode( manualSeekActive );
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::handleFavoriteChange( const RadioStation& station )
+{
+ mFrequencyStrip->updateFavorite( station );
+ if ( station.isFavorite() ) {
+ RadioUtil::showDiscreetNote( "Station added to Favourites." );
+ } else {
+ RadioUtil::showDiscreetNote( "Station removed from Favourites." );
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::toggleSkippingMode()
+{
+ if ( !mSkippingAction ) {
+ mSkippingAction = menu()->addAction( "", this, SLOT(toggleSkippingMode()) );
+ }
+
+ mAlternateSkipping = !mAlternateSkipping;
+ mCarousel->setAlternateSkippingMode( mAlternateSkipping );
+ if ( mAlternateSkipping ) {
+ mSkippingAction->setText( "Normal skipping mode" );
+ } else {
+ mSkippingAction->setText( "Alternate skipping mode" );
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::resetFirstTimeCount()
+{
+ mUiEngine->setFirstTimeStartPerformed( false );
+}