radioapp/radiouiengine/inc/radiouiengine.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 06 Jul 2010 14:16:27 +0300
changeset 33 11b6825f0862
parent 32 189d20c34778
child 37 451b2e1545b2
child 41 3a6b55c6390c
permissions -rw-r--r--
Revision: 201025 Kit: 2010127

/*
* 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:
*
*/


#ifndef RADIOUIENGINE_H_
#define RADIOUIENGINE_H_

// System includes
#include <QObject>
#include <QString>
#include <QScopedPointer>
#include <QSharedPointer>

// User includes
#include "radiouiengineexport.h"
#include "radio_global.h"

// Forward declarations
class RadioUiEnginePrivate;
class RadioStationModel;
class RadioSettingsIf;
class RadioStation;
class RadioHistoryModel;
class RadioHistoryItem;
class RadioScannerEngine;
class RadioMonitorService;

typedef QSharedPointer<RadioScannerEngine> RadioScannerEnginePtr;

// Constants
const uint DEFAULT_MIN_FREQUENCY = 87500000;

class UI_ENGINE_DLL_EXPORT RadioUiEngine : public QObject
{
    Q_OBJECT
    Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioUiEngine )
    Q_DISABLE_COPY( RadioUiEngine )

    friend class RadioScannerEngine;

public: // Static functions that are used before the ui engine is created

    /*!
     * Gets the last tuned frequency from central repository
     */
    static uint lastTunedFrequency( uint defaultFrequency = DEFAULT_MIN_FREQUENCY );

    /*!
     * Gets the last used volume level
     */
    static int lastVolume();

    /*!
     * Launches the radio server process
     */
    static void launchRadioServer();

public:

    RadioUiEngine( QObject* parent = 0 );
    ~RadioUiEngine();

    bool isInitialized() const;

    bool init();

    bool isFirstTimeStart();
    void setFirstTimeStartPerformed( bool firstTimeStartPerformed );

    void setPowerOn();
    void setPowerOff( int delay = 0 );
    bool isPoweringOff() const;

    /**
     * Getters for things owned by the engine
     */
    RadioSettingsIf& settings();
    RadioStationModel& stationModel();
    RadioHistoryModel& historyModel();
    RadioScannerEnginePtr createScannerEngine();
    RadioScannerEngine* scannerEngine();

    bool isRadioOn() const;
    bool isScanning() const;
    bool isMuted() const;
    bool isAntennaAttached() const;
    bool isUsingLoudspeaker() const;

    RadioRegion::Region region() const;
    uint currentFrequency() const;
    uint minFrequency() const;
    uint maxFrequency() const;
    uint frequencyStepSize() const;

    void setMute( bool muted );

    QList<RadioStation> stationsInRange( uint minFrequency, uint maxFrequency );

    QString genreToString( int genre, GenreTarget::Target target );

    bool isSongRecognitionAppAvailable();

    void addRecognizedSong( const QString& artist, const QString& title, const RadioStation& station );

    uint skipStation( StationSkip::Mode mode, uint startFrequency = 0 );

    enum MusicStore{ OviStore, OtherStore };
    void openMusicStore( const RadioHistoryItem& item, MusicStore store = OviStore );

    void launchBrowser( const QString& url );

    void setManualSeekMode( bool manualSeek );
    bool isInManualSeekMode() const;

    /**
     * Tunes the radio engine to given frequency
     */
    void setFrequency( uint frequency, const int reason = TuneReason::Unspecified );

signals:

    void tunedToFrequency( uint frequency, int commandSender );
    void seekingStarted( int direction );
    void radioStatusChanged( bool radioIsOn );

    void rdsAvailabilityChanged( bool available );

    void volumeChanged( int volume );
    void muteChanged( bool muted );

    void audioRouteChanged( bool loudspeaker );
    void antennaStatusChanged( bool connected );

    void powerOffRequested();

public slots:

    /*!
     * volume update command slot for the engine
     */
    void setVolume( int volume );
    void toggleMute();
    void toggleAudioRoute();

    void seekStation( int seekDirection );

    void launchSongRecognition();

private:

    /**
     * functions used only by the private class to get signals emitted
     */
    void emitTunedToFrequency( uint frequency, int commandSender );
    void emitSeekingStarted( Seek::Direction direction );
    void emitRadioStatusChanged( bool radioIsOn );
    void emitRdsAvailabilityChanged( bool available );
    void emitVolumeChanged( int volume );
    void emitMuteChanged( bool muted );
    void emitAudioRouteChanged( bool loudspeaker );
    void emitAntennaStatusChanged( bool connected );

private: // data

    /**
     * Unmodifiable pointer to the private implementation
     */
    const QScopedPointer<RadioUiEnginePrivate> d_ptr;

};


#endif // RADIOUIENGINE_H_