--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiowidgets/src/radiomainview.cpp Fri May 14 15:52:32 2010 +0300
@@ -0,0 +1,248 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+// System includes
+#include <QTimer>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbAction>
+
+// User includes
+#include "radiowindow.h"
+#include "radiomainview.h"
+#include "radiofrequencystrip.h"
+#include "radiouiengine.h"
+#include "radiologger.h"
+#include "radiostationcarousel.h"
+#include "radiouiloader.h"
+#include "radiouiutilities.h"
+#include "radiostationmodel.h"
+#include "radiofrequencyscanner.h"
+
+// Constants
+
+/*!
+ *
+ */
+RadioMainView::RadioMainView() :
+ RadioViewBase( false ),
+ mCarousel( NULL ),
+ mFrequencyStrip( NULL )
+{
+}
+
+/*!
+ *
+ */
+RadioMainView::~RadioMainView()
+{
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::setScanningMode( bool scanning )
+{
+ if ( scanning ) {
+ loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_SCANNING );
+ } else {
+ loadSection( DOCML::FILE_MAINVIEW, DOCML::MV_SECTION_NORMAL );
+ mFrequencyScanner.take();
+ }
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::init()
+{
+ LOG_METHOD;
+ mInitialized = true;
+ mCarousel = mUiLoader->findObject<RadioStationCarousel>( DOCML::MV_NAME_STATION_CAROUSEL );
+ mCarousel->init( *mUiLoader, &mMainWindow->uiEngine() );
+
+ // 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();
+
+ 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)) );
+
+ connectAndTest( mFrequencyStrip, SIGNAL(skipRequested(int)),
+ this, SLOT(skip(int)) );
+ connectAndTest( mFrequencyStrip, SIGNAL(seekRequested(int)),
+ engine, SLOT(seekStation(int)) );
+
+ connectAndTest( stationModel, SIGNAL(favoriteChanged(RadioStation)),
+ mFrequencyStrip, SLOT(updateFavorite(RadioStation)) );
+
+ connectAndTest( engine, SIGNAL(seekingStarted(int)),
+ this, SLOT(seekingStarted()) );
+ connectAndTest( engine, SIGNAL(antennaStatusChanged(bool)),
+ mCarousel, SLOT(updateAntennaStatus(bool)) );
+ connectAndTest( engine, SIGNAL(audioRouteChanged(bool)),
+ this, SLOT(updateAudioRoute(bool)) );
+
+ HbPushButton* stationsButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_STATIONS_BUTTON );
+ connectAndTest( stationsButton, SIGNAL(clicked()),
+ mMainWindow, SLOT(activateStationsView()) );
+
+ HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SCAN_BUTTON );
+ connectAndTest( scanButton, SIGNAL(clicked()),
+ this, SLOT(toggleScanning()) );
+
+ HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::MV_NAME_SPEAKER_BUTTON );
+ connectAndTest( loudspeakerButton, SIGNAL(clicked()),
+ engine, SLOT(toggleAudioRoute()) );
+
+ // "Play history" menu item
+ connectViewChangeMenuItem( DOCML::MV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
+
+ updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
+
+ // Add "back" navigation action to put the application to background
+ HbAction* backAction = new HbAction( Hb::BackNaviAction, this );
+ connectAndTest( backAction, SIGNAL(triggered()),
+ mMainWindow, SLOT(lower()) );
+ setNavigationAction( backAction );
+
+ const bool firsTimeStart = engine->isFirstTimeStart();
+ const int rowCount = engine->stationModel().rowCount();
+ if ( firsTimeStart && rowCount == 0 ){
+ QTimer::singleShot( 100, this, SLOT(toggleScanning()) );
+ }
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::setOrientation()
+{
+ loadSection( DOCML::FILE_MAINVIEW, mMainWindow->orientationSection() );
+}
+
+/*!
+ * \reimp
+ *
+ */
+void RadioMainView::userAccepted()
+{
+ mFrequencyScanner.reset( new RadioFrequencyScanner( mMainWindow->uiEngine(), this ) );
+ mFrequencyScanner->startScanning();
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::setFrequencyFromWidget( uint frequency, int reason )
+{
+ LOG_FORMAT( "RadioMainView::setFrequencyFromWidget: %u, reason = %d", frequency, reason );
+ if ( !RadioUiUtilities::isScannerAlive() ) {
+ if ( reason == TuneReason::FrequencyStrip ) {
+ mCarousel->setFrequency( frequency, reason );
+ mMainWindow->uiEngine().tuneWithDelay( frequency, reason );
+ } else if ( reason == TuneReason::StationCarousel ) {
+ mFrequencyStrip->setFrequency( frequency, reason );
+ mMainWindow->uiEngine().tuneFrequency( frequency, reason );
+ }
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::setFrequencyFromEngine( uint frequency, int reason )
+{
+ if ( !RadioUiUtilities::isScannerAlive() ) {
+ mCarousel->clearInfoText();
+ if ( reason != TuneReason::FrequencyStrip &&
+ reason != TuneReason::StationCarousel &&
+ reason != TuneReason::Skip ) {
+ mCarousel->setFrequency( frequency, reason );
+ mFrequencyStrip->setFrequency( frequency, reason );
+ }
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::skip( int skipMode )
+{
+ if ( ( skipMode == StationSkip::PreviousFavorite || skipMode == StationSkip::NextFavorite ) &&
+ mMainWindow->uiEngine().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 );
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::toggleScanning()
+{
+ if ( mFrequencyScanner ) {
+ mFrequencyScanner->cancelScanning();
+ } else {
+ const int rowCount = mMainWindow->uiEngine().stationModel().rowCount();
+ if ( rowCount > 0 ) {
+ askQuestion( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+ } else {
+ userAccepted();
+ }
+ }
+}
+
+/*!
+ * Private slot
+ */
+void RadioMainView::seekingStarted()
+{
+ if ( !RadioUiUtilities::isScannerAlive() ) {
+ mCarousel->setInfoText( CarouselInfoText::Seeking );
+ }
+}
+
+/*!
+ * 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->setText( hbTrId( "txt_rad_button_deactivate_loudspeaker" ) );
+ } else {
+ loudspeakerButton->setIcon( HbIcon( "qtg_mono_speaker.svg" ) );
+ loudspeakerButton->setText( hbTrId( "txt_rad_button_activate_loudspeaker" ) );
+ }
+}