radioapp/radiowidgets/src/radiofrequencystrip.cpp
changeset 16 f54ebcfc1b80
parent 14 63aabac4416d
child 19 afea38384506
--- a/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Fri Apr 16 14:58:55 2010 +0300
+++ b/radioapp/radiowidgets/src/radiofrequencystrip.cpp	Mon May 03 12:31:41 2010 +0300
@@ -22,6 +22,8 @@
 #include <QPen>
 #include <HbPushButton>
 #include <QTimer>
+#include <HbColorScheme>
+#include <HbEvent>
 
 #include "radiofrequencystrip.h"
 #include "radiofrequencyitem.h"
@@ -41,6 +43,14 @@
 const int KSelectorWidth = 2;
 const int KSelectorZPos = 100;
 
+const int KHalfHertz = KOneHertz / 2;
+const int KOneTabDistance = 15;
+const uint KOneTabInHz = 0.2 * KOneHertz;
+const qreal KPixelInHz = KOneTabInHz / KOneTabDistance;
+//const int KCharWidth = 8;                  // TODO: Remove hardcoding
+const int KWidth = KOneTabDistance * 5;
+const int KHeight = 50;                 //TODO: Remove hardcoding
+
 const int K100Khz = 100000;
 
 //const int KTouchPosThreshold = 30;
@@ -49,6 +59,10 @@
 const QString KSlideFromLeft    = "SlideFromLeft";
 const QString KSlideToRight     = "SlideToRight";
 const QString KSlideFromRight   = "SlideFromRight";
+static const char* BUTTON_LEFT  = "button_left";
+static const char* BUTTON_RIGHT = "button_right";
+
+static const char* TEXT_COLOR_ATTRIBUTE = "text";
 
 /*!
  *
@@ -61,27 +75,25 @@
 /*!
  *
  */
-RadioFrequencyStrip::RadioFrequencyStrip( uint minFrequency,
-                                          uint maxFrequency,
-                                          uint stepSize,
-                                          uint currentFrequency,
-                                          RadioUiEngine* engine ) :
+RadioFrequencyStrip::RadioFrequencyStrip( RadioUiEngine* engine ) :
     RadioStripBase( 0 ),
-    mMinFrequency( minFrequency ),
-    mMaxFrequency( maxFrequency ),
-    mFrequencyStepSize( stepSize ),
-    mEngine( engine ),
+    mUiEngine( engine ),
+    mMinFrequency( mUiEngine ? mUiEngine->minFrequency() : 87500000 ),
+    mMaxFrequency( mUiEngine ? mUiEngine->maxFrequency() : 108000000 ),
+    mFrequencyStepSize( mUiEngine ? mUiEngine->frequencyStepSize() : 100000 ),
+    mFrequency( mUiEngine ? mUiEngine->currentFrequency() : 87500000 ),
     mSelectorImage( new QGraphicsPixmapItem( this ) ),
     mSeparatorPos( 0.0 ),
     mMaxWidth( 0 ),
     mSelectorPos( 0.0 ),
-    mFrequency( currentFrequency ),
     mFavoriteSelected( false ),
     mLeftButton( new HbPushButton( this ) ),
     mRightButton( new HbPushButton( this ) ),
     mButtonTimer( new QTimer( this ) ),
-    mIsPanGesture( false )
+    mIsPanGesture( false ),
+    mForegroundColor( HbColorScheme::color( TEXT_COLOR_ATTRIBUTE ) )
 {
+    RadioUiUtilities::setFrequencyStrip( this );
     mButtonTimer->setInterval( 500 );
     mButtonTimer->setSingleShot( true );
     connectAndTest( mButtonTimer, SIGNAL(timeout()), this, SLOT(toggleButtons()) );
@@ -203,7 +215,7 @@
     uint frequency = station.frequency();
     if ( mFrequencies.contains( frequency ) ) {
         FrequencyPos pos = mFrequencies.value( frequency );
-        mFrequencies.remove( frequency );
+//        mFrequencies.remove( frequency );
         updateFavorites( pos.mItem );
     }
 }
@@ -212,11 +224,11 @@
  * Public slot
  *
  */
-void RadioFrequencyStrip::setFrequency( const uint frequency, int commandSender )
+void RadioFrequencyStrip::setFrequency( const uint frequency, int reason )
 {
 //    LOG_SLOT_CALLER;
 //    LOG_FORMAT( "RadioFrequencyStrip::setFrequency, frequency: %d, sender: %d", frequency, commandSender );
-    if ( commandSender != CommandSender::FrequencyStrip &&  // Not sent by the FrequencyStrip
+    if ( reason != TuneReason::FrequencyStrip &&            // Not sent by the FrequencyStrip
          frequency != mFrequency &&                         // Different from the current
          mFrequencies.contains( frequency ) )               // 0 frequency means any illegal value
     {
@@ -226,6 +238,26 @@
 }
 
 /*!
+ * Public slot
+ *
+ */
+void RadioFrequencyStrip::setScanningMode( bool isScanning )
+{
+    if (isScanning)
+    {
+        HbEffect::start( mLeftButton, KSlideToLeft );
+        HbEffect::start( mRightButton, KSlideToRight );
+    }
+    else
+    {
+        HbEffect::start( mLeftButton, KSlideFromLeft );
+        HbEffect::start( mRightButton, KSlideFromRight );
+
+    }
+    setEnabled( !isScanning );
+}
+
+/*!
  * Private slot
  *
  */
@@ -340,6 +372,22 @@
 /*!
  * \reimp
  */
+void RadioFrequencyStrip::changeEvent( QEvent* event )
+{
+    if ( event->type() == HbEvent::ThemeChanged ) {
+        // Update the foreground color and redraw each item
+        mForegroundColor = HbColorScheme::color( TEXT_COLOR_ATTRIBUTE );
+        foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
+            updateFavorites( item );
+        }
+    }
+
+    return HbWidgetBase::changeEvent(event);
+}
+
+/*!
+ * \reimp
+ */
 void RadioFrequencyStrip::mousePressEvent( QGraphicsSceneMouseEvent* event )
 {
     RadioStripBase::mousePressEvent( event );
@@ -452,8 +500,8 @@
         updateFavorites( item );
     }
 
-    if ( mEngine ) {
-        QList<RadioStation> stations = mEngine->stationsInRange( mMinFrequency, mMaxFrequency );
+    if ( mUiEngine ) {
+        QList<RadioStation> stations = mUiEngine->stationsInRange( mMinFrequency, mMaxFrequency );
         foreach ( const RadioStation& station, stations ) {
             if ( station.isFavorite() ) {
                 mFrequencies[ station.frequency() ].mFavorite = true;
@@ -489,7 +537,9 @@
 void RadioFrequencyStrip::initButtons()
 {
     mLeftButton->setZValue( KSelectorZPos );
+    mLeftButton->setObjectName( BUTTON_LEFT );
     mRightButton->setZValue( KSelectorZPos );
+    mRightButton->setObjectName( BUTTON_RIGHT );
 
     QEffectList effectList;
     effectList.append( EffectInfo( mLeftButton, ":/effects/slide_to_left.fxml", KSlideToLeft ) );
@@ -513,21 +563,23 @@
  */
 void RadioFrequencyStrip::updateFavorites( RadioFrequencyItem* item )
 {
-    uint frequency = item->frequency();
-    QList<RadioStation> stations;
-    if ( mEngine ) {
-        stations = mEngine->stationsInRange( frequency - KHalfHertz, frequency + KHalfHertz );
-    }
+    if ( item ) {
+        uint frequency = item->frequency();
+        QList<RadioStation> stations;
+        if ( mUiEngine ) {
+            stations = mUiEngine->stationsInRange( frequency - KHalfHertz, frequency + KHalfHertz );
+        }
 
-    QPixmap pixmap = drawPixmap( frequency, stations, item );
-    item->setPixmap( pixmap );
+        QPixmap pixmap = drawPixmap( frequency, stations, item );
+        item->setPixmap( pixmap );
 
-    foreach ( const RadioStation& station, stations ) {
-        frequency = station.frequency();
-        FrequencyPos pos = mFrequencies.value( frequency );
-        pos.mFavorite = station.isFavorite();
-        pos.mLocalStation = station.isType( RadioStation::LocalStation );
-        mFrequencies.insert( frequency, pos );
+        foreach ( const RadioStation& station, stations ) {
+            frequency = station.frequency();
+            FrequencyPos pos = mFrequencies.value( frequency );
+            pos.mFavorite = station.isFavorite();
+            pos.mLocalStation = station.isType( RadioStation::LocalStation );
+            mFrequencies.insert( frequency, pos );
+        }
     }
 }
 
@@ -541,7 +593,7 @@
     QPainter painter( &pixmap );
     QPen normalPen = painter.pen();
     QPen favoritePen = normalPen;
-    normalPen.setColor( Qt::white );
+    normalPen.setColor( mForegroundColor );
     painter.setPen( normalPen );
 
     if ( frequency == 0 ) {
@@ -624,7 +676,7 @@
 //    LOG_FORMAT( "RadioFrequencyStrip::emitFrequencyChanged, frequency: %d", frequency );
     if ( frequency > 0 && frequency != mFrequency ) {
         mFrequency = frequency;
-        emit frequencyChanged( frequency, CommandSender::FrequencyStrip );
+        emit frequencyChanged( frequency, TuneReason::FrequencyStrip );
         emitFavoriteSelected( mFrequencies.value( frequency ).mFavorite );
     }
 }