diff -r f3d95d9c00ab -r 46974bebc798 radioapp/radiouiengine/src/radiouiengine_p.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radiouiengine/src/radiouiengine_p.cpp Fri Mar 19 09:29:04 2010 +0200 @@ -0,0 +1,235 @@ +/* +* 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 + +// User includes +#include "radiouiengine.h" +#include "radiouiengine_p.h" +#include "radioenginewrapper.h" +#include "radiostationmodel.h" +#include "radiopresetstorage.h" +#include "radiosettings.h" +#include "radiostation.h" +#include "radiologger.h" + +/*! + * + */ +RadioUiEnginePrivate::RadioUiEnginePrivate( RadioUiEngine* engine ) : + q_ptr( engine ), + mEngineWrapper( 0 ), + mStationModel( 0 ), + mPlayLogModel( 0 ) +{ +} + +/*! + * + */ +RadioUiEnginePrivate::~RadioUiEnginePrivate() +{ +} + +/*! + * + */ +bool RadioUiEnginePrivate::startRadio() +{ + mStationModel = new RadioStationModel( *q_ptr ); + mEngineWrapper.reset( new RadioEngineWrapper( mStationModel->stationHandlerIf(), *this ) ); + mPresetStorage.reset( new RadioPresetStorage() ); + mStationModel->initialize( mPresetStorage.data(), mEngineWrapper.data() ); + + return mEngineWrapper->isEngineConstructed(); +} + +/*! + * + */ +void RadioUiEnginePrivate::tunedToFrequency( uint frequency, int commandSender ) +{ + Q_Q( RadioUiEngine ); + q->emitTunedToFrequency( frequency, commandSender ); +} + +/*! + * + */ +void RadioUiEnginePrivate::seekingStarted( Seeking::Direction direction ) +{ + Q_Q( RadioUiEngine ); + q->emitSeekingStarted( direction ); +} + +/*! + * + */ +void RadioUiEnginePrivate::radioStatusChanged( bool radioIsOn ) +{ + Q_Q( RadioUiEngine ); + q->emitRadioStatusChanged( radioIsOn ); + + if ( radioIsOn ) { + Q_Q( RadioUiEngine ); + QStringList args; // = qApp->arguments(); + if ( args.count() == 2 ) + { + if ( args.at( 0 ) == "-f" ) // Frequency + { + uint frequency = args.at( 1 ).toUInt(); + + if ( frequency >= mEngineWrapper->minFrequency() && frequency <= mEngineWrapper->maxFrequency() ) + { + LOG_FORMAT( "RadioApplication::handleArguments, Tuning to frequency: %d", frequency ); + q->tuneFrequency( frequency, 0 ); + } + } + else if ( args.at( 0 ) == "-i" ) // Preset index + { + int preset = args.at( 1 ).toInt(); + if ( preset > 0 && preset < mStationModel->rowCount() ) + { + LOG_FORMAT( "RadioApplication::handleArguments, Tuning to preset %d", preset ); + q->tunePreset( preset ); + } + } + } + } +} + +/*! + * + */ +void RadioUiEnginePrivate::rdsAvailabilityChanged( bool available ) +{ + Q_Q( RadioUiEngine ); + q->emitRdsAvailabilityChanged( available ); +} + +/*! + * + */ +void RadioUiEnginePrivate::volumeChanged( int volume ) +{ + Q_Q( RadioUiEngine ); + q->emitVolumeChanged( volume ); +} + +/*! + * + */ +void RadioUiEnginePrivate::muteChanged( bool muted ) +{ + Q_Q( RadioUiEngine ); + q->emitMuteChanged( muted ); +} + +/*! + * + */ +void RadioUiEnginePrivate::audioRouteChanged( bool loudspeaker ) +{ + Q_Q( RadioUiEngine ); + q->emitAudioRouteChanged( loudspeaker ); +} + +/*! + * + */ +void RadioUiEnginePrivate::scanAndSaveFinished() +{ + Q_Q( RadioUiEngine ); + q->emitScanAndSaveFinished(); +} + +/*! + * + */ +void RadioUiEnginePrivate::headsetStatusChanged( bool connected ) +{ + Q_Q( RadioUiEngine ); + q->emitheadsetStatusChanged( connected ); +} + +/*! + * + */ +void RadioUiEnginePrivate::skipPrevious() +{ + skip( Previous ); +} + +/*! + * + */ +void RadioUiEnginePrivate::skipNext() +{ + skip( Next ); +} + +/*! + * Tunes to next or previous favorite preset + */ +void RadioUiEnginePrivate::skip( RadioUiEnginePrivate::TuneDirection direction ) +{ + LOG_FORMAT( "RadioUiEnginePrivate::skip: direction: %d", direction ); + + //TODO: Refactor to go through RadioStationModel + QList favorites; + const uint currentFreq = mStationModel->currentStation().frequency(); + + // Find all favorites + foreach( const RadioStation& station, mStationModel->list() ) { + if ( station.isFavorite() && station.frequency() != currentFreq ) { + favorites.append( station.frequency() ); + } + } + + const int favoriteCount = favorites.count(); + if ( favoriteCount == 0 ) { + return; + } + + // Find the previous and next favorite from current frequency + uint previous = 0; + uint next = 0; + foreach( uint favorite, favorites ) { + if ( favorite > currentFreq ) { + next = favorite; + break; + } + previous = favorite; + } + + if ( direction == RadioUiEnginePrivate::Previous ) { + if ( previous == 0 ) { + previous = favorites.last(); + } + LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, previous ); + mEngineWrapper->tuneFrequency( previous, CommandSender::Unspecified ); + } else { + if ( next == 0 ) { + next = favorites.first(); + } + LOG_FORMAT( "RadioUiEnginePrivate::skip. CurrentFreq: %u, tuning to: %u", currentFreq, next ); + mEngineWrapper->tuneFrequency( next, CommandSender::Unspecified ); + } +} +