--- a/radioapp/radiowidgets/src/radiofrequencystripbase.cpp Tue Aug 31 15:15:02 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,836 +0,0 @@
-/*
-* 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 <HbDocumentLoader>
-#include <HbEffect>
-#include <QPainter>
-#include <QStringListModel>
-#include <QGraphicsSceneResizeEvent>
-#include <QPen>
-#include <HbPushButton>
-#include <QTimer>
-#include <HbColorScheme>
-#include <HbEvent>
-#include <HbSwipeGesture>
-#include <HbDeviceProfile>
-#include <QDebug>
-
-// User includes
-#include "radiofrequencystripbase.h"
-#include "radiofrequencystripdef.h"
-#include "radiofrequencyitem.h"
-
-/*!
- * Convenience function to check signal-slot connections
- */
-//#define CHECK_SIGNAL_CONNECTIONS
-static bool connectAndCheck( const QObject* sender, const char* signal,
- const QObject* receiver, const char* member,
- Qt::ConnectionType type = Qt::AutoConnection )
-{
- bool connected = QObject::connect( sender, signal, receiver, member, type );
-
- #ifdef CHECK_SIGNAL_CONNECTIONS
-
- if ( !connected ) {
- qDebug() << "Failed to make a signal-slot connection!";
- qDebug() << "sender: " << sender->metaObject()->className();
- qDebug() << "signal: " << signal;
- qDebug() << "receiver: " << receiver->metaObject()->className();
- qDebug() << "slot/signal: " << signal;
-
- Q_ASSERT( false );
-
- // ----------------------------------------------------------------
- // SIGNAL-SLOT CONNECT FAILED!
- // ----------------------------------------------------------------
- }
-
- #endif // CHECK_SIGNAL_CONNECTIONS
-
- return connected;
-}
-
-/*!
- *
- */
-RadioFrequencyStripBase::RadioFrequencyStripBase( QGraphicsItem* parent ) :
- RadioStripBase( parent ),
- mItemHeight( 8 ),
- mMinFrequency( 87500000 ),
- mMaxFrequency( 108000000 ),
- mFrequencyStepSize( 100000 ),
- mFrequency( 87500000 ),
- mSelectorImage( new QGraphicsPixmapItem( this ) ),
- mSeparatorPos( 0.0 ),
- mMaxWidth( 0 ),
- mSelectorPos( 0.0 ),
- mLeftButton( 0 ),
- mRightButton( 0 ),
- mManualSeekTimer( NULL ),
- mManualSeekMode( false ),
- mLastReportedFrequency( 0 ),
- mManualSeekTimerId( 0 ),
- mForegroundColor( Qt::white )//HbColorScheme::color( FrequencyStrip::TEXT_COLOR_ATTRIBUTE ) )
-{
- setScrollingStyle( HbScrollArea::PanWithFollowOn );
- setItemSize( QSizeF( FrequencyStrip::ITEM_WIDTH + FrequencyStrip::PIXMAP_OVERLAP / 2, mItemHeight ) );
- setOverlap( FrequencyStrip::PIXMAP_OVERLAP / 2 );
-}
-
-/*!
- * Property
- */
-void RadioFrequencyStripBase::setItemHeight( int itemHeight )
-{
- mItemHeight = itemHeight;
-}
-
-/*!
- * Property
- */
-int RadioFrequencyStripBase::itemHeight() const
-{
- return mItemHeight;
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::initbase( uint minFrequency, uint maxFrequency, uint stepSize, uint frequency )
-{
- mMinFrequency = minFrequency;
- mMaxFrequency = maxFrequency;
- mFrequencyStepSize = stepSize;
- mFrequency = frequency;
-
- initModel();
- initEmptyItems();
- initPositions();
-
- HbDeviceProfile deviceProfile;
- mItemHeight = static_cast<int>( mItemHeight * deviceProfile.unitValue() );
-
- mManualSeekTimer = new QTimer( this );
- mManualSeekTimer->setInterval( FrequencyStrip::MANUALSEEK_START_TIMEOUT );
- mManualSeekTimer->setSingleShot( true );
- connectAndCheck( mManualSeekTimer, SIGNAL(timeout()),
- this, SLOT(toggleManualSeek()) );
-
- connectAndCheck( this, SIGNAL(scrollingEnded()),
- this, SLOT(handleScrollingEnd()) );
-
- grabGesture( Qt::SwipeGesture );
-
- //TODO: Remove. Stepsize temporarily hardcoded to 100 Khz in europe region
- if ( mFrequencyStepSize < FrequencyStrip::ONE_HUNDRED_KHZ ) {
- mFrequencyStepSize = FrequencyStrip::ONE_HUNDRED_KHZ;
- }
-
- updateAllItems();
-
- showButtons();
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::createButtonsFromDocml( HbDocumentLoader& uiLoader, const QString& leftButtonName, const QString& rightButtonName )
-{
- Q_ASSERT( !mLeftButton && !mRightButton );
- mLeftButton = qobject_cast<HbPushButton*>( uiLoader.findWidget( leftButtonName ) );
- mRightButton = qobject_cast<HbPushButton*>( uiLoader.findWidget( rightButtonName ) );
-
- initButtons();
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::createButtons()
-{
- Q_ASSERT( !mLeftButton && !mRightButton );
- mLeftButton = new HbPushButton( this );
- mRightButton = new HbPushButton( this );
-
- mLeftButton->setIcon( HbIcon( "qtg_mono_previous" ) );
- mRightButton->setIcon( HbIcon( "qtg_mono_next" ) );
-
- initButtons();
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::setFrequency( const uint frequency, int reason, Scroll::Direction direction )
-{
- if ( mFrequencies.contains( frequency ) ) {
- scrollToFrequency( frequency, direction, mAutoScrollTime );
- }
-}
-
-/*!
- *
- */
-uint RadioFrequencyStripBase::frequency() const
-{
- return mFrequency;
-}
-
-/*!
- *
- */
-bool RadioFrequencyStripBase::isInManualSeekMode() const
-{
- return mManualSeekMode;
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::cancelManualSeek()
-{
- mManualSeekTimer->stop();
- if ( mManualSeekMode ) {
- toggleManualSeek();
- }
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::addScannedStation( uint frequency )
-{
- FrequencyPos pos = mFrequencies.value( frequency );
- updateItem( pos.mItem, frequency );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::updateFavorite( uint frequency )
-{
- FrequencyPos pos = mFrequencies.value( frequency );
- updateItem( pos.mItem );
-}
-
-/*!
- * Public slot
- *
- */
-void RadioFrequencyStripBase::setScanningMode( bool isScanning )
-{
- mManualSeekTimer->stop();
- if ( isScanning ) {
- initEmptyItems();
- hideButtons();
- scrollToFrequency( mMinFrequency, Scroll::Shortest, mAutoScrollTime );
- } else {
- showButtons();
- }
- setEnabled( !isScanning );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioFrequencyStripBase::initEmptyItems()
-{
- //TODO: Remove the weird hack of checking the sender
- if ( !sender() || !isScanning() ) {
- QList<FrequencyStrip::StationMarker> emptyList;
- foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
- QPixmap pixmap = drawPixmap( item->frequency(), emptyList, item );
- item->setPixmap( pixmap );
- }
- }
-}
-
-/*!
- * Private slot
- *
- */
-void RadioFrequencyStripBase::removeStation( const QModelIndex& parent, int first, int last )
-{
- Q_UNUSED( parent );
- updateStationsInRange( first, last, true );
-}
-
-/*!
- * Private slot
- *
- */
-void RadioFrequencyStripBase::updateStation( const QModelIndex& parent, int first, int last )
-{
- Q_UNUSED( parent );
- updateStationsInRange( first, last );
-}
-
-/*!
- * Private slot
- */
-void RadioFrequencyStripBase::handleLeftButton()
-{
- skipToPrevious();
-}
-
-/*!
- * Private slot
- */
-void RadioFrequencyStripBase::handleRightButton()
-{
- skipToNext();
-}
-
-/*!
- * Private slot
- */
-void RadioFrequencyStripBase::handleLongLeftButton()
-{
- seekDown();
-}
-
-/*!
- * Private slot
- */
-void RadioFrequencyStripBase::handleLongRightButton()
-{
- seekUp();
-}
-
-/*!
- * Private slot
- *
- */
-void RadioFrequencyStripBase::toggleManualSeek()
-{
- mManualSeekMode = !mManualSeekMode;
- emit manualSeekChanged( mManualSeekMode );
-
- if ( mManualSeekMode ) {
- grabMouse();
- hideButtons();
- mManualSeekTimerId = startTimer( FrequencyStrip::MANUALSEEK_SIGNAL_DELAY );
- } else {
- ungrabMouse();
- showButtons();
- killTimer( mManualSeekTimerId );
- mManualSeekTimerId = 0;
- }
-}
-
-/*!
- * Private slot
- */
-void RadioFrequencyStripBase::handleScrollingEnd()
-{
- // Check if the selector is in the invalid area where the strip loops around
- const int selectorPosition = selectorPos();
- if ( mManualSeekMode ) {
- if ( !mPositions.contains( selectorPosition ) ) {
- if ( selectorPosition < mMaxWidth - FrequencyStrip::ITEM_WIDTH + mSeparatorPos ) {
- scrollToFrequency( mMaxFrequency, Scroll::Shortest, 500 );
- emitFrequencyChanged( mMaxFrequency, FrequencyStrip::ManualSeekUpdate, Scroll::Shortest );
- } else {
- scrollToFrequency( mMinFrequency, Scroll::Shortest, 500 );
- emitFrequencyChanged( mMinFrequency, FrequencyStrip::ManualSeekUpdate, Scroll::Shortest );
- }
- }
-
- mManualSeekTimer->start( FrequencyStrip::MANUALSEEK_END_TIMEOUT );
- }
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::updateItemPrimitive( QGraphicsItem* itemToUpdate, int itemIndex )
-{
- QGraphicsPixmapItem* item = static_cast<QGraphicsPixmapItem*>( itemToUpdate );
- if ( itemIndex < mFrequencyItems.count() ) {
- item->setPixmap( mFrequencyItems.at( itemIndex )->updatePrimitive( item ) );
- }
-}
-
-/*!
- * \reimp
- */
-QGraphicsItem* RadioFrequencyStripBase::createItemPrimitive( QGraphicsItem* parent )
-{
- return new QGraphicsPixmapItem( parent );
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::scrollPosChanged()
-{
- if ( mManualSeekMode ) {
- const int pos = selectorPos();
- const uint frequency = mPositions.value( pos );
- if ( frequency > 0 ) {
- mFrequency = mPositions.value( pos );
- emitFrequencyChanged( mFrequency, FrequencyStrip::ManualSeekUpdate, Scroll::Shortest );
- }
- }
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::resizeEvent ( QGraphicsSceneResizeEvent* event )
-{
- RadioStripBase::resizeEvent( event );
-
- initSelector();
-
- const qreal height = event->newSize().height();
- const qreal width = event->newSize().width();
-
- mSelectorPos = width / 2;
- mSelectorImage->setOffset( mSelectorPos - ( FrequencyStrip::INDICATOR_WIDTH / 2 ), 0.0 );
-
- if ( mLeftButton && mRightButton ) {
- mLeftButton->resize( height, height );
- mRightButton->resize( height, height );
- mRightButton->setPos( QPointF( width - height, 0 ) );
- }
-
- scrollToFrequency( mFrequency );
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::changeEvent( QEvent* event )
-{
- if ( event->type() == HbEvent::ThemeChanged ) {
- // Update the foreground color and redraw each item
- mForegroundColor = Qt::white;// HbColorScheme::color( FrequencyStrip::TEXT_COLOR_ATTRIBUTE );
- updateAllItems();
- }
-
- return RadioStripBase::changeEvent(event);
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::mousePressEvent( QGraphicsSceneMouseEvent* event )
-{
- RadioStripBase::mousePressEvent( event );
-
- mManualSeekTimer->stop();
- if ( mManualSeekMode ) {
- const bool insideStrip = rect().contains( event->pos() );
- if ( !insideStrip ) {
- toggleManualSeek();
- }
- } else {
- mManualSeekTimer->start( FrequencyStrip::MANUALSEEK_START_TIMEOUT );
- }
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::mouseReleaseEvent( QGraphicsSceneMouseEvent* event )
-{
- RadioStripBase::mouseReleaseEvent( event );
-
- mManualSeekTimer->stop();
- if ( mManualSeekMode ) {
- mManualSeekTimer->start( FrequencyStrip::MANUALSEEK_END_TIMEOUT );
- }
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::gestureEvent( QGestureEvent* event )
-{
- HbSwipeGesture* swipeGesture = static_cast<HbSwipeGesture*>( event->gesture( Qt::SwipeGesture ) );
- if ( swipeGesture && !mManualSeekMode ) {
- if ( swipeGesture->state() == Qt::GestureFinished ) {
- if ( swipeGesture->horizontalDirection() == QSwipeGesture::Left ) {
- skipToNext();
- } else if ( swipeGesture->horizontalDirection() == QSwipeGesture::Right ) {
- skipToPrevious();
- }
- }
- } else if ( mManualSeekMode ) {
- RadioStripBase::gestureEvent( event );
- }
-}
-
-/*!
- * \reimp
- */
-void RadioFrequencyStripBase::timerEvent( QTimerEvent* event )
-{
- Q_UNUSED( event );
- if ( mLastReportedFrequency != mFrequency ) {
- mLastReportedFrequency = mFrequency;
- emitFrequencyChanged( mFrequency, FrequencyStrip::ManualSeekTune, Scroll::Shortest );
- }
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::initModel()
-{
- const uint minFreq = uint( qreal(mMinFrequency) / FrequencyStrip::ONE_HERTZ + FrequencyStrip::ROUNDER );
- const uint maxFreq = uint( qreal(mMaxFrequency) / FrequencyStrip::ONE_HERTZ + 0.9 ); // always round up
-
- QStringList list;
- QString freqText;
- for ( uint i = minFreq; i <= maxFreq; ++i ) {
- freqText = QString::number( i );
- list.append( freqText );
- mFrequencyItems.append( new RadioFrequencyItem( freqText ) );
- }
- mFrequencyItems.append( new RadioFrequencyItem( "" ) );
- list.append( "" );
-
- mMaxWidth = list.count() * FrequencyStrip::ITEM_WIDTH;
-
- mSeparatorPos = qreal(FrequencyStrip::ITEM_WIDTH) / 2;
- const uint minDrawableFreq = minFreq * FrequencyStrip::ONE_HERTZ - FrequencyStrip::HALF_HERTZ;;
- const uint maxDrawableFreq = maxFreq * FrequencyStrip::ONE_HERTZ + FrequencyStrip::HALF_HERTZ;
- mSeparatorPos += qreal( ( mMinFrequency - minDrawableFreq ) / 2 ) / FrequencyStrip::PIXEL_IN_HZ;
- mSeparatorPos -= qreal( ( maxDrawableFreq - mMaxFrequency ) / 2 ) / FrequencyStrip::PIXEL_IN_HZ;
-
- setModel( new QStringListModel( list, this ) );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::initSelector()
-{
- QPixmap selectorPixmap = QPixmap( QSize( FrequencyStrip::SELECTOR_WIDTH, (int)size().height() ) );
- selectorPixmap.fill( Qt::red );
- mSelectorImage->setPixmap( selectorPixmap );
- mSelectorImage->setZValue( FrequencyStrip::SELECTOR_Z_POS );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::initPositions()
-{
- int prevPos = 0;
- int nextPos = 0;
- const int lastPos = mFrequencies.value( mMaxFrequency ).mPosition;
- for ( int i = mFrequencies.value( mMinFrequency ).mPosition; i < lastPos; ++i ) {
- if ( mPositions.contains( i ) ) {
- prevPos = i;
- const uint freq = mPositions.value( prevPos ) + mFrequencyStepSize;
- if ( mFrequencies.contains( freq ) ) {
- nextPos = mFrequencies.value( freq ).mPosition;
- } else {
- nextPos = prevPos;
- }
- } else {
- const int nearestHit = ( i - prevPos ) < ( nextPos - i ) ? prevPos : nextPos;
- mPositions.insert( i, mPositions.value( nearestHit ) );
- }
- }
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::initButtons()
-{
- Q_ASSERT( mLeftButton && mRightButton );
- connectAndCheck( mLeftButton, SIGNAL(clicked()),
- this, SLOT(handleLeftButton()) );
- connectAndCheck( mRightButton, SIGNAL(clicked()),
- this, SLOT(handleRightButton()) );
- connectAndCheck( mLeftButton, SIGNAL(longPress(QPointF)),
- this, SLOT(handleLongLeftButton()) );
- connectAndCheck( mRightButton, SIGNAL(longPress(QPointF)),
- this, SLOT(handleLongRightButton()) );
-
- mLeftButton->setZValue( FrequencyStrip::SELECTOR_Z_POS );
- mLeftButton->setObjectName( FrequencyStrip::LEFT_BUTTON );
- mRightButton->setZValue( FrequencyStrip::SELECTOR_Z_POS );
- mRightButton->setObjectName( FrequencyStrip::RIGHT_BUTTON );
-
- const qreal height = size().height();
- const qreal width = size().width();
- mLeftButton->resize( height, height );
- mRightButton->resize( height, height );
- mRightButton->setPos( QPointF( width - height, 0 ) );
-
- // Add left button effects
- QStringList pathList;
- pathList << ":/effects/slide_to_left.fxml" << ":/effects/slide_from_left.fxml";
- QStringList eventList;
- eventList << FrequencyStrip::SLIDE_TO_LEFT << FrequencyStrip::SLIDE_FROM_LEFT;
- HbEffect::add( mLeftButton, pathList, eventList );
-
- // Add right button effects
- pathList.clear();
- pathList << ":/effects/slide_to_right.fxml" << ":/effects/slide_from_right.fxml";
- eventList.clear();
- eventList << FrequencyStrip::SLIDE_TO_RIGHT << FrequencyStrip::SLIDE_FROM_RIGHT;
- HbEffect::add( mRightButton, pathList, eventList );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::addFrequencyPos( int pos, uint frequency, RadioFrequencyItem* item )
-{
- mFrequencies.insert( frequency, FrequencyPos( pos, item ) );
- mPositions.insert( pos, frequency );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::updateStationsInRange( int first, int last, bool stationRemoved )
-{
- if ( !isScanning() ) {
- uint frequency = 0;
- for ( int i = first; i <= last; ++i ) {
- frequency = frequencyAtIndex( i );
- if ( mFrequencies.contains( frequency ) ) {
- FrequencyPos pos = mFrequencies.value( frequency );
- updateItem( pos.mItem, 0, stationRemoved ? frequency : 0 );
- }
- }
- }
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::updateItem( RadioFrequencyItem* item, uint upperRange, uint ignoredFrequency )
-{
- if ( item ) {
- uint frequency = item->frequency();
- QList<FrequencyStrip::StationMarker> markers;
-
- if ( upperRange == 0 ) {
- upperRange = frequency + FrequencyStrip::HALF_HERTZ;
- }
-
- if ( isInitialized() ) {
- markers = stationsInRange( frequency - FrequencyStrip::HALF_HERTZ, upperRange );
- for ( int i = markers.count() - 1; ignoredFrequency > 0 && i >= 0; --i ) {
- if ( markers[i].mFrequency == ignoredFrequency ) {
- markers.removeAt( i );
- break;
- }
- }
- }
-
- QPixmap pixmap = drawPixmap( frequency, markers, item );
- item->setPixmap( pixmap );
-
- foreach ( const FrequencyStrip::StationMarker& marker, markers ) {
- FrequencyPos pos = mFrequencies.value( marker.mFrequency );
- mFrequencies.insert( marker.mFrequency, pos );
- }
- }
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::updateAllItems()
-{
- foreach ( RadioFrequencyItem* item, mFrequencyItems ) {
- updateItem( item );
- }
-}
-
-/*!
- *
- */
-QPixmap RadioFrequencyStripBase::drawPixmap( uint frequency, QList<FrequencyStrip::StationMarker> stations, RadioFrequencyItem* item )
-{
- QPixmap pixmap( FrequencyStrip::PIXMAP_WIDTH, mItemHeight );
- pixmap.fill( Qt::transparent );
- QPainter painter( &pixmap );
- QPen normalPen = painter.pen();
- QPen favoritePen = normalPen;
- normalPen.setColor( mForegroundColor );
- painter.setPen( normalPen );
-
- if ( frequency == 0 ) {
- painter.drawLine( makeTab( mSeparatorPos - 1 + FrequencyStrip::ROUNDER, mItemHeight ) );
- painter.drawLine( makeTab( mSeparatorPos + FrequencyStrip::ROUNDER, mItemHeight ) );
- return pixmap;
- }
-
- const QString itemText = QString::number( frequency / FrequencyStrip::ONE_HERTZ );
- const uint startFrequency = frequency - FrequencyStrip::HALF_HERTZ;
- const uint endFrequency = startFrequency + FrequencyStrip::ONE_HERTZ;
- const uint roundedMin = int( qreal(mMinFrequency) / FrequencyStrip::ONE_HERTZ + FrequencyStrip::ROUNDER );
- const uint freq = frequency / FrequencyStrip::ONE_HERTZ;
- const int diff = freq - roundedMin;
- const qreal startPixel = diff * FrequencyStrip::ITEM_WIDTH;
- qreal pixels = 0.0;
- const qreal leftOverlap = FrequencyStrip::PIXMAP_OVERLAP / 2;
-
- for ( uint frequency = startFrequency; frequency <= endFrequency; frequency += mFrequencyStepSize ) {
-
- if ( frequency < mMinFrequency || frequency > mMaxFrequency ) {
- continue;
- }
-
- pixels = qreal( frequency - startFrequency ) / FrequencyStrip::PIXEL_IN_HZ;
- if ( frequency % FrequencyStrip::ONE_HERTZ == 0 ) {
-
- // Draw the high frequency tab and the frequency text for the even number
- normalPen.setWidth( 3 );
- painter.setPen( normalPen );
- painter.drawLine( makeTab( pixels + leftOverlap - 1, FrequencyStrip::TAB_HEIGHT_BIG ) );
- normalPen.setWidth( 1 );
- painter.setPen( normalPen );
-
- // Draw the frequency text and its 00 decimals
- painter.setFont( FrequencyStrip::DECIMAL_FONT );
- const int decimalWidth = painter.fontMetrics().width( FrequencyStrip::DECIMAL_TEXT );
- const int decimalSpace = painter.fontMetrics().leftBearing( '.' );
- painter.setFont( FrequencyStrip::FREQUENCY_FONT );
- const int frequencyWidth = painter.fontMetrics().width( itemText );
- const int textPosX = int( pixels + leftOverlap - ( frequencyWidth + decimalSpace + decimalWidth ) / 2 );
- painter.drawText( QPoint( textPosX, FrequencyStrip::FREQUENCY_TEXT_Y_POS ), itemText );
- painter.setFont( FrequencyStrip::DECIMAL_FONT );
- painter.drawText( QPoint( textPosX + frequencyWidth + decimalSpace, FrequencyStrip::FREQUENCY_TEXT_Y_POS ), FrequencyStrip::DECIMAL_TEXT );
-
- } else if ( frequency % FrequencyStrip::ONE_TAB_IN_HZ == 0 ) {
-
- // Draw the low frequency tab for the uneven number
- painter.drawLine( makeTab( pixels + leftOverlap, FrequencyStrip::TAB_HEIGHT_SMALL ) );
-
- }
-
- addFrequencyPos( int( startPixel + pixels + FrequencyStrip::ROUNDER ), frequency, item );
- }
-
- // Draw favorites and local stations
- favoritePen.setColor( Qt::yellow );
-
- foreach ( const FrequencyStrip::StationMarker& station, stations ) {
- const uint frequency = station.mFrequency;
- pixels = qreal( frequency - startFrequency ) / FrequencyStrip::PIXEL_IN_HZ;
-
- if ( station.mIsFavorite ) {
- favoritePen.setWidth( FrequencyStrip::PEN_WIDTH_FAVORITE );
- painter.setPen( favoritePen );
- painter.drawEllipse( int( pixels + leftOverlap - 3 ), FrequencyStrip::STATION_MARKER_Y_POS - 3, 6, 6 );
- } else {
- favoritePen.setWidth( 1 );
- painter.setPen( favoritePen );
- painter.drawEllipse( int( pixels + leftOverlap - 4 ), FrequencyStrip::STATION_MARKER_Y_POS - 4, 8, 8 );
- }
- }
-
- return pixmap;
-}
-
-/*!
- *
- */
-QLineF RadioFrequencyStripBase::makeTab( qreal pos, int height )
-{
- return QLineF( pos, mItemHeight - height, pos, mItemHeight );
-}
-
-/*!
- *
- */
-int RadioFrequencyStripBase::selectorPos() const
-{
- const int pos = int( -contentWidget()->x() + mSelectorPos + FrequencyStrip::ROUNDER );
- return pos % mMaxWidth;
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::scrollToFrequency( uint frequency, Scroll::Direction direction, int time )
-{
- int targetFreqPos = mFrequencies.value( frequency ).mPosition;
- const int currentFreqPos = mFrequencies.value( mFrequency ).mPosition;
- const int currentPos = int( -contentWidget()->x() + mSelectorPos + FrequencyStrip::ROUNDER );
- const bool isInSecondHalf = currentPos >= mMaxWidth - FrequencyStrip::ITEM_WIDTH + mSeparatorPos;
-
- // Special case: When there is only one favorite and the user presses skip
- // the strip must scroll around to the same frequency.
- if ( mFrequency == frequency && direction != Scroll::Shortest ) {
- if ( direction == Scroll::Left ) {
- targetFreqPos += mMaxWidth;
- } else {
- targetFreqPos -= mMaxWidth;
- }
- }
-
- mFrequency = frequency;
-
- qreal newPos = targetFreqPos;
- if ( direction == Scroll::Left ) {
-
- if ( currentFreqPos > targetFreqPos ) {
- newPos += mMaxWidth;
- }
-
- } else if ( direction == Scroll::Right ) {
-
- if ( currentFreqPos < targetFreqPos ) {
- newPos -= mMaxWidth;
- }
-
- }
-
- if ( isInSecondHalf ) {
- newPos += mMaxWidth;
- }
-
- newPos -= mSelectorPos - FrequencyStrip::ROUNDER;
-
-// scrollContentsTo( QPointF( newPos, 0 ), time );
-// TODO: Remove this and uncomment the above line. This is a temporary workaround to get the strip to move
- scrollContentsTo( QPointF( newPos, 0 ), 0 );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::hideButtons()
-{
- HbEffect::start( mLeftButton, FrequencyStrip::SLIDE_TO_LEFT );
- HbEffect::start( mRightButton, FrequencyStrip::SLIDE_TO_RIGHT );
-}
-
-/*!
- *
- */
-void RadioFrequencyStripBase::showButtons()
-{
- HbEffect::start( mLeftButton, FrequencyStrip::SLIDE_FROM_LEFT );
- HbEffect::start( mRightButton, FrequencyStrip::SLIDE_FROM_RIGHT );
-}