--- /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_