radioapp/radiouiengine/inc/radiostationmodel.h
branchRCL_3
changeset 45 cce62ebc198e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/inc/radiostationmodel.h	Tue Aug 31 15:15:02 2010 +0300
@@ -0,0 +1,230 @@
+/*
+* 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 RADIOSTATIONMODEL_H_
+#define RADIOSTATIONMODEL_H_
+
+// System includes
+#include <QAbstractListModel>
+#include <QScopedPointer>
+#include <QMap>
+
+// User includes
+#include "radio_global.h"
+#include "radiouiengineexport.h"
+#include "radiostation.h"
+
+// Forward declarations
+class RadioStationModelPrivate;
+class RadioPresetStorage;
+class RadioStationHandlerIf;
+class RadioEngineWrapper;
+class RadioStation;
+class RadioUiEnginePrivate;
+class QIcon;
+
+// Constants
+typedef QMap<uint,RadioStation> Stations;
+
+namespace FindCriteria
+{
+    enum Criteria
+    {
+        OnlySavedStations,
+        IncludeManualStation
+    };
+}
+
+// Class declaration
+class UI_ENGINE_DLL_EXPORT RadioStationModel : public QAbstractListModel
+{
+    Q_OBJECT
+    Q_DECLARE_PRIVATE_D( d_ptr.data(), RadioStationModel )
+    Q_DISABLE_COPY( RadioStationModel )
+
+public:
+
+    enum DetailFlag
+    {
+        Minimal     = 1 << 0,
+        ShowIcons   = 1 << 1,
+        ShowGenre   = 1 << 2
+    };
+    Q_DECLARE_FLAGS( Detail, DetailFlag )
+
+    explicit RadioStationModel( RadioUiEnginePrivate& uiEngine );
+
+    ~RadioStationModel();
+
+// from base class QAbstractListModel
+
+    Qt::ItemFlags flags ( const QModelIndex& index ) const;
+    int rowCount( const QModelIndex& parent = QModelIndex() ) const;
+    QVariant data( const QModelIndex& index, int role = Qt::DisplayRole ) const;
+    bool setData( const QModelIndex& index, const QVariant& value, int role = Qt::EditRole );
+
+// New functions
+
+    /*!
+     * Called by the engine to initialize the list with given amount of presets
+     */
+    void initialize( RadioPresetStorage* storage, RadioEngineWrapper* wrapper );
+
+    /*!
+     * Sets the icons to be used in the lists
+     */
+    void setIcons( const QIcon& favoriteIcon, const QIcon& nowPlayingIcon );
+
+    /*!
+     * Returns a reference to the station handler interface
+     */
+    RadioStationHandlerIf& stationHandlerIf();
+
+    /*!
+     * Returns a reference to the underlying QList so that it can be easily looped
+     */
+    const Stations& list() const;
+
+    /*!
+     * Returns the station at the given index.
+     * The station is returned by value, but it is cheap because it is implicitly shared
+     */
+    RadioStation stationAt( int index ) const;
+
+    /*!
+     * Finds a station by frequency
+     */
+    bool findFrequency( uint frequency, RadioStation& station, FindCriteria::Criteria criteria = FindCriteria::OnlySavedStations ) const;
+
+    /*!
+     * Convenience function to find a radio station.
+     * Internally uses findFrequency() and returns an invalid station if the given frequency is not found
+     */
+    RadioStation findStation( uint frequency, FindCriteria::Criteria criteria = FindCriteria::OnlySavedStations ) const;
+
+    /*!
+     * Functions to find stations by preset index
+     */
+    int findPresetIndex( int presetIndex );
+    int findPresetIndex( int presetIndex, RadioStation& station );
+
+    /*!
+     * Finds the closest station from the given frequency
+     */
+    RadioStation findClosest( const uint frequency, StationSkip::Mode mode );
+
+    /*!
+     * Checks if the model contains the given frequency
+     */
+    bool contains( const uint frequency ) const;
+
+    /*!
+     * Functions to remove stations
+     */
+    void removeByFrequency( uint frequency );
+    void removeByPresetIndex( int presetIndex );
+    void removeStation( const RadioStation& station );
+
+    /**
+     * Removes all stations
+     */
+    enum RemoveMode{ RemoveAll, RemoveLocalStations, RemoveFavorites  };
+    void removeAll( RemoveMode mode = RemoveAll );
+
+    /*!
+     * Functions to add and save stations
+     */
+    void addStation( const RadioStation& station );
+    void saveStation( RadioStation& station );
+
+    /*!
+     * Function to check the number of favorite stations
+     */
+    int favoriteCount();
+
+    /*!
+     * Convenience functions to change common settings
+     */
+    void setFavoriteByFrequency( uint frequency, bool favorite );
+    void setFavoriteByPreset( int presetIndex, bool favorite );
+    void renameStation( int presetIndex, const QString& name );
+    void setFavorites( const QModelIndexList& favorites );
+
+    /*!
+     * Functions to init and access the currently tuned station
+     */
+    RadioStation& currentStation();
+    const RadioStation& currentStation() const;
+
+    /*!
+     * Sets the model detail level
+     */
+    void setDetail( Detail level );
+
+    /*!
+     * Returns a list of radio stations in the given frequency range
+     */
+    QList<RadioStation> stationsInRange( uint minFrequency, uint maxFrequency );
+
+    /*!
+     * Returns the model index corresponding to the given frequency
+     */
+    int indexFromFrequency( uint frequency );
+
+signals:
+
+    void stationDataChanged( const RadioStation& station );
+    void radioTextReceived( const RadioStation& station );
+    void dynamicPsChanged( const RadioStation& station );
+    void favoriteChanged( const RadioStation& station );
+
+private slots:
+
+    /*!
+     * Timer timeout slot to indicate that the dynamic PS check has ended
+     */
+    void dynamicPsCheckEnded();
+
+private:
+
+// New functions
+
+    /*!
+     * Checks the given station and emits signals based on what member variables had been changed
+     * since the last save or reset.
+     */
+    void emitChangeSignals( const RadioStation& station, RadioStation::Change flags );
+
+    void emitDataChanged( const RadioStation& station );
+
+    /*!
+     * Finds an unused preset index
+     */
+    int findUnusedPresetIndex();
+
+private: // data
+
+    /**
+     * Unmodifiable pointer to the private implementation
+     */
+    const QScopedPointer<RadioStationModelPrivate> d_ptr;
+
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS( RadioStationModel::Detail )
+
+#endif // RADIOSTATIONMODEL_H_