diff -r cce62ebc198e -r 93c594350b9a radioapp/radiowidgets/src/radiocarouselanimator.cpp --- a/radioapp/radiowidgets/src/radiocarouselanimator.cpp Tue Aug 31 15:15:02 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +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 -#include -#include - -// User includes -#include "radiocarouselanimator.h" -#include "radiostationcarousel.h" -#include "radiocarouselitem.h" -#include "radiostation.h" -#include "radiostationmodel.h" -#include "radiologger.h" - -// Constants -const int FREQUENCY_SCROLL_DIVIDER = 100000; -const int NUMBER_SCROLL_TIMELINE_DURATION = 1000; -const int FLASH_TIMER_INTERVAL = 400; -const qreal FLASHING_ITEM_DIM_OPACITY = 0.3; -const qreal FLASHING_ITEM_NORMAL_OPACITY = 1.0; - -/*! - * - */ -RadioCarouselAnimator::RadioCarouselAnimator( RadioStationCarousel& carousel ) : - mCarousel( carousel ), - mAnimationTimeLine( new QTimeLine( NUMBER_SCROLL_TIMELINE_DURATION, this ) ), - mTimer( new QTimer( this ) ), - mCanceled( false ), - mMode( NoAnimation ), - mStationIsFavorite( false ), - mFlashingToggle( false ) -{ - mAnimationTimeLine->setCurveShape( QTimeLine::EaseInCurve ); - Radio::connect( mAnimationTimeLine, SIGNAL(finished()), - this, SLOT(finalizeNumberScroll()) ); - Radio::connect( mAnimationTimeLine, SIGNAL(frameChanged(int)), - this, SLOT(updateNumberScroll(int)) ); - - mTimer->setInterval( FLASH_TIMER_INTERVAL ); - mTimer->setSingleShot( false ); - Radio::connect( mTimer, SIGNAL(timeout()), - this, SLOT(handleTimeout()) ); -} - -/*! - * - */ -RadioCarouselAnimator::~RadioCarouselAnimator() -{ - stopAll(); -} - -/*! - * - */ -void RadioCarouselAnimator::startNumberScroll( const uint startFrequency, const uint stopFrequency ) -{ - addMode( ScrollingNumbers ); - - //TODO: Take italy case into account - mAnimationTimeLine->setDuration( NUMBER_SCROLL_TIMELINE_DURATION ); - mAnimationTimeLine->setFrameRange( startFrequency / FREQUENCY_SCROLL_DIVIDER, - stopFrequency / FREQUENCY_SCROLL_DIVIDER ); - mAnimationTimeLine->start(); - - mCarousel.scrollContentsTo( QPointF( -mCarousel.mMaxScrollPos, 0 ), mCarousel.mAutoScrollTime ); -} - -/*! - * - */ -void RadioCarouselAnimator::startFlashingIcon() -{ - const uint frequency = mCarousel.mItems[RadioStationCarousel::CenterItem]->frequency(); - RadioStation station; - mCarousel.mModel->findFrequency( frequency, station ); - mStationIsFavorite = station.isFavorite(); - - mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_DIM_OPACITY ); - - addMode( FlashingIcon ); -} - -/*! - * - */ -void RadioCarouselAnimator::stopFlashingIcon() -{ - mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_NORMAL_OPACITY ); - removeMode( FlashingIcon ); -} - -/*! - * - */ -void RadioCarouselAnimator::startFlashingText() -{ - mCarousel.mInfoText->setOpacity( FLASHING_ITEM_DIM_OPACITY ); - addMode( FlashingText ); -} - -/*! - * - */ -void RadioCarouselAnimator::stopFlashingText() -{ - mCarousel.mInfoText->setOpacity( FLASHING_ITEM_NORMAL_OPACITY ); - removeMode( FlashingText ); -} - -/*! - * - */ -void RadioCarouselAnimator::stopAll() -{ - mCanceled = true; - mAnimationTimeLine->stop(); - mTimer->stop(); - - stopFlashingText(); - stopFlashingIcon(); - - mMode = NoAnimation; - deleteLater(); -} - -/*! - * Private slot - * - */ -void RadioCarouselAnimator::handleTimeout() -{ - mFlashingToggle = !mFlashingToggle; - if ( mMode.testFlag( IconItem ) ) { - if ( mFlashingToggle ) { - mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_NORMAL_OPACITY ); - } else { - mCarousel.mItems[RadioStationCarousel::CenterItem]->setIconOpacity( FLASHING_ITEM_DIM_OPACITY ); - } - } - - if ( mMode.testFlag( TextItem ) ) { - if ( mFlashingToggle ) { - mCarousel.mInfoText->setOpacity( FLASHING_ITEM_NORMAL_OPACITY ); - } else { - mCarousel.mInfoText->setOpacity( FLASHING_ITEM_DIM_OPACITY ); - } - } -} - -/*! - * Private slot - * - */ -void RadioCarouselAnimator::updateNumberScroll( int value ) -{ - mCarousel.mItems[RadioStationCarousel::RightItem]->setFrequency( value * FREQUENCY_SCROLL_DIVIDER ); -} - -/*! - * Private slot - * - */ -void RadioCarouselAnimator::finalizeNumberScroll() -{ - if ( !mCanceled ) { - mCarousel.mItems[RadioStationCarousel::CenterItem]->setFrequency( - mCarousel.mItems[RadioStationCarousel::RightItem]->frequency() ); - mCarousel.scrollContentsTo( QPointF( -mCarousel.mMidScrollPos, 0 ), 0 ); - emit mCarousel.scanAnimationFinished(); - } - removeMode( ScrollingNumbers ); -} - -/*! - * - */ -void RadioCarouselAnimator::addMode( AnimationMode mode ) -{ - mMode |= mode; - if ( mMode.testFlag( TimerItem ) && !mTimer->isActive() ) { - mTimer->start(); - } -} - -/*! - * - */ -void RadioCarouselAnimator::removeMode( AnimationMode mode ) -{ - mMode &= ~mode; - if ( !mMode.testFlag( TimerItem ) ) { - mTimer->stop(); - } - - if ( mMode == NoAnimation ) { - deleteLater(); - } - -}