radioapp/radiowidgets/src/radiotuningview.cpp
changeset 16 f54ebcfc1b80
parent 14 63aabac4416d
--- a/radioapp/radiowidgets/src/radiotuningview.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiotuningview.cpp	Mon May 03 12:31:41 2010 +0300
@@ -16,24 +16,31 @@
 */
 
 // System includes
+#include <QTimer>
+#include <HbLabel>
+#include <HbPushButton>
+#include <HbMessageBox>
 
 // User includes
 #include "radiomainwindow.h"
 #include "radiotuningview.h"
 #include "radiofrequencystrip.h"
-#include "radiolocalization.h"
 #include "radiouiengine.h"
 #include "radiologger.h"
 #include "radiostationcarousel.h"
-#include "radiostationcontrolwidget.h"
 #include "radioxmluiloader.h"
 #include "radiostationmodel.h"
+#include "radiofrequencyscanner.h"
+
+// Constants
 
 /*!
  *
  */
-RadioTuningView::RadioTuningView( RadioXmlUiLoader* uiLoader ) :
-    RadioViewBase( uiLoader, false )
+RadioTuningView::RadioTuningView() :
+    RadioViewBase( false ),
+    mFrequencyScanner( 0 ),
+    mCarousel( 0 )
 {
 }
 
@@ -41,55 +48,101 @@
  * From RadioViewBase
  *
  */
-void RadioTuningView::init( RadioMainWindow* aMainWindow, RadioStationModel* aModel )
+void RadioTuningView::setScanningMode( bool scanning )
+{
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SCAN_BUTTON );
+    if ( scanning ) {
+        disconnect( scanButton,     SIGNAL(clicked()),
+                    this,           SLOT(startScanning()) );
+        connectAndTest( scanButton,         SIGNAL(clicked()),
+                        mFrequencyScanner,  SLOT(scanAndSavePresetsCancelled()) );
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_SCANNING );
+    } else {
+        disconnect( scanButton, SIGNAL(clicked()) );
+        connectAndTest( scanButton,     SIGNAL(clicked()),
+                        this,           SLOT(startScanning()) );
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
+}
+
+/*!
+ * From RadioViewBase
+ *
+ */
+void RadioTuningView::init( RadioXmlUiLoader* uiLoader, RadioMainWindow* mainWindow )
 {
     LOG_METHOD;
-    mMainWindow = aMainWindow;
-    mModel = aModel;
+    mUiLoader.reset( uiLoader );
+    mMainWindow = mainWindow;
 
-    RadioStationCarousel* carousel = mUiLoader->findObject<RadioStationCarousel>( DOCML_NAME_STATIONCAROUSEL );
-
-    RadioStationControlWidget* stationControlWidget = mUiLoader->findObject<RadioStationControlWidget>( DOCML_NAME_STATIONCONTROLWIDGET );
-    stationControlWidget->init( mMainWindow );
+    mCarousel = mUiLoader->findObject<RadioStationCarousel>( DOCML::TV_NAME_STATION_CAROUSEL );
+    mCarousel->init( &mMainWindow->uiEngine() );
 
     // Note! UI connections are already made in the DocML file. Here we need to connect UI to engine
     RadioUiEngine* engine = &mMainWindow->uiEngine();
-    RadioFrequencyStrip* frequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML_NAME_FREQUENCYSTRIP );
+    RadioFrequencyStrip* frequencyStrip = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::TV_NAME_FREQUENCY_STRIP );
     RadioStationModel* stationModel = &engine->model();
 
-    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
-                    engine,             SLOT(tuneWithDelay(uint,int)) );
-    connectAndTest( frequencyStrip,     SIGNAL(frequencyChanged(uint,int)),
-                    carousel,           SLOT(setFrequency(uint)) );
-    connectAndTest( carousel,           SIGNAL(frequencyChanged(uint,int)),
-                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
-    connectAndTest( engine,             SIGNAL(tunedToFrequency(uint,int)),
-                    frequencyStrip,     SLOT(setFrequency(uint,int)) );
-    connectAndTest( stationModel,       SIGNAL(favoriteChanged(RadioStation)),
-                    frequencyStrip,     SLOT(favoriteChanged(RadioStation)) );
-    connectAndTest( stationModel,       SIGNAL(stationAdded(RadioStation)),
-                    frequencyStrip,     SLOT(stationAdded(RadioStation)) );
-    connectAndTest( stationModel,       SIGNAL(stationRemoved(RadioStation)),
-                    frequencyStrip,     SLOT(stationRemoved(RadioStation)) );
-    connectAndTest( frequencyStrip,     SIGNAL(swipedLeft()),
-                    engine,             SLOT(skipNext()) );
-    connectAndTest( frequencyStrip,     SIGNAL(swipedRight()),
-                    engine,             SLOT(skipPrevious()) );
-    connectAndTest( engine,             SIGNAL(seekingStarted(int)),
-                    carousel,           SLOT(setSeekingText()) );
-    connectAndTest( engine,             SIGNAL(headsetStatusChanged(bool)),
-                    carousel,           SLOT(updateHeadsetStatus(bool)) );
+    connectAndTest( frequencyStrip,             SIGNAL(frequencyChanged(uint,int)),
+                    engine,                     SLOT(tuneWithDelay(uint,int)) );
+    connectAndTest( frequencyStrip,             SIGNAL(frequencyChanged(uint,int)),
+                    mCarousel,                  SLOT(setFrequency(uint)) );
+    connectAndTest( mCarousel,                  SIGNAL(frequencyChanged(uint,int)),
+                    frequencyStrip,             SLOT(setFrequency(uint,int)) );
+    connectAndTest( engine,                     SIGNAL(tunedToFrequency(uint,int)),
+                    frequencyStrip,             SLOT(setFrequency(uint,int)) );
+    connectAndTest( engine,                     SIGNAL(tunedToFrequency(uint,int)),
+                    this,                       SLOT(seekingFinished()) );
+    connectAndTest( stationModel,               SIGNAL(favoriteChanged(RadioStation)),
+                    frequencyStrip,             SLOT(favoriteChanged(RadioStation)) );
+    connectAndTest( stationModel,               SIGNAL(stationAdded(RadioStation)),
+                    frequencyStrip,             SLOT(stationAdded(RadioStation)) );
+    connectAndTest( stationModel,               SIGNAL(stationRemoved(RadioStation)),
+                    frequencyStrip,             SLOT(stationRemoved(RadioStation)) );
+    connectAndTest( frequencyStrip,             SIGNAL(swipedLeft()),
+                    engine,                     SLOT(skipNext()) );
+    connectAndTest( frequencyStrip,             SIGNAL(swipedRight()),
+                    engine,                     SLOT(skipPrevious()) );
+    connectAndTest( engine,                     SIGNAL(seekingStarted(int)),
+                    this,                       SLOT(seekingStarted()) );
+    connectAndTest( engine,                     SIGNAL(antennaStatusChanged(bool)),
+                    mCarousel,                  SLOT(updateAntennaStatus(bool)) );
+    connectAndTest( engine,                     SIGNAL(antennaStatusChanged(bool)),
+                    this,                       SLOT(updateAntennaStatus(bool)) );
+    connectAndTest( engine,                     SIGNAL(audioRouteChanged(bool)),
+                    this,                       SLOT(updateAudioRoute(bool)) );
+
+    HbPushButton* stationsButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_STATIONS_BUTTON );
+    connectAndTest( stationsButton,             SIGNAL(clicked()),
+                    mMainWindow,                SLOT(activateStationsView()) );
+
+    HbPushButton* scanButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SCAN_BUTTON );
+    connectAndTest( scanButton,                 SIGNAL(clicked()),
+                    this,                       SLOT(startScanning()) );
+
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_NAME_SPEAKER_BUTTON );
+    connectAndTest( loudspeakerButton,          SIGNAL(clicked()),
+                    engine,                     SLOT(toggleAudioRoute()) );
 
     frequencyStrip->connectLeftButton( SIGNAL(clicked()), engine, SLOT(skipPrevious()) );
     frequencyStrip->connectRightButton( SIGNAL(clicked()), engine, SLOT(skipNext()) );
+    frequencyStrip->connectLeftButton( SIGNAL(clicked()), this, SLOT(buttonPressed()) );
+    frequencyStrip->connectRightButton( SIGNAL(clicked()), this, SLOT(buttonPressed()) );
 
     frequencyStrip->connectLeftButton( SIGNAL(longPress(QPointF)), engine, SLOT(seekDown()) );
     frequencyStrip->connectRightButton( SIGNAL(longPress(QPointF)), engine, SLOT(seekUp()) );
 
-    // "Play log" menu item
-    connectViewChangeMenuItem( DOCML_NAME_PLAYLOGVIEWACTION, SLOT(activatePlayLogView()) );
+    // "Play history" menu item
+    connectViewChangeMenuItem( DOCML::TV_NAME_HISTORYVIEW_ACTION, SLOT(activateHistoryView()) );
+
+    const bool firsTimeStart = engine->isFirstTimeStart();
+    const int rowCount = engine->model().rowCount();
 
-    connectCommonMenuItem( MenuItem::UseLoudspeaker );
+    updateAudioRoute( mMainWindow->uiEngine().isUsingLoudspeaker() );
+
+    if ( firsTimeStart && rowCount == 0 ){
+        QTimer::singleShot( 100, this, SLOT(startScanning()) );
+    }
 }
 
 /*!
@@ -98,10 +151,7 @@
  */
 void RadioTuningView::setOrientation()
 {
-    bool ok = false;
-    QString section = mMainWindow->orientationSection();
-    mUiLoader->load( DOCML_TUNINGVIEW_FILE, section, &ok );
-//    LOG_ASSERT( ok, LOG_FORMAT( "Failed to set orientation %1 from docml %2", section, *DOCML_TUNINGVIEW_FILE ) );
+    loadSection( DOCML::FILE_TUNINGVIEW, mMainWindow->orientationSection() );
 }
 
 /*!
@@ -110,6 +160,119 @@
 void RadioTuningView::toggleFavorite()
 {
     bool favorite = false;
-    uint frequency = mUiLoader->findObject<RadioFrequencyStrip>( DOCML_NAME_FREQUENCYSTRIP )->frequency( &favorite );
-    mModel->setFavoriteByFrequency( frequency, !favorite );
+    uint frequency = mUiLoader->findObject<RadioFrequencyStrip>( DOCML::TV_NAME_FREQUENCY_STRIP )->frequency( &favorite );
+    mMainWindow->uiEngine().model().setFavoriteByFrequency( frequency, !favorite );
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::startScanning()
+{
+    const int rowCount =  mMainWindow->uiEngine().model().rowCount();
+    bool scanAllowed = true;
+    if ( rowCount > 0 ) {
+        scanAllowed = HbMessageBox::question( hbTrId( "txt_rad_info_all_stations_in_stations_list_will_be" ) );
+    }
+
+    if ( scanAllowed ) {
+        mFrequencyScanner = new RadioFrequencyScanner( mMainWindow->uiEngine(), this );
+
+        connectAndTest( mFrequencyScanner,  SIGNAL(frequencyScannerFinished() ),
+                        this,               SLOT(scanningFinished()) );
+
+        mFrequencyScanner->startScanning( *mUiLoader );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::scanningFinished()
+{
+    disconnect( mFrequencyScanner,  SIGNAL(frequencyScannerFinished() ),
+                this,               SLOT(scanningFinished()) );
+
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    mFrequencyScanner = 0;
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::seekingStarted()
+{
+    mCarousel->cleanRdsData();
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_SEEKING );
+    HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+    infoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::seekingFinished()
+{
+    if ( !mFrequencyScanner && mMainWindow->uiEngine().isAntennaAttached() ) {
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
 }
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::updateAntennaStatus( bool connected )
+{
+    if ( !connected ) {
+        mCarousel->cleanRdsData();
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NO_ANTENNA );
+
+        HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+        infoText->setAlignment( Qt::AlignBottom | Qt::AlignHCenter );
+        infoText->setTextWrapping( Hb::TextWordWrap );
+    } else {
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::updateAudioRoute( bool loudspeaker )
+{
+    HbPushButton* loudspeakerButton = mUiLoader->findWidget<HbPushButton>( DOCML::TV_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" ) );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::buttonPressed()
+{
+    if ( mMainWindow->uiEngine().model().favoriteCount() == 0 ) {
+
+        mCarousel->setItemVisibility( false );
+
+        loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NO_FAVORITES );
+        HbLabel* infoText = mUiLoader->findWidget<HbLabel>( DOCML::TV_NAME_INFO_TEXT );
+        infoText->setAlignment( Qt::AlignCenter );
+        infoText->setTextWrapping( Hb::TextWordWrap );
+
+        QTimer::singleShot( 6000, this, SLOT(removeInfoText()) );
+    }
+}
+
+/*!
+ * Private slot
+ */
+void RadioTuningView::removeInfoText()
+{
+    mCarousel->setItemVisibility( true );
+    loadSection( DOCML::FILE_TUNINGVIEW, DOCML::TV_SECTION_NORMAL );
+}