radioapp/radiouiengine/src/radiocarouselmodel.cpp
changeset 19 afea38384506
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/radioapp/radiouiengine/src/radiocarouselmodel.cpp	Fri May 14 15:52:32 2010 +0300
@@ -0,0 +1,140 @@
+/*
+* 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
+
+// User includes
+#include "radiocarouselmodel.h"
+#include "radiocarouselmodel_p.h"
+#include "radiostationmodel.h"
+#include "radiouiengine.h"
+#include "radiostation.h"
+#include "radio_global.h"
+#include "radiologger.h"
+
+/*!
+ *
+ */
+RadioCarouselModel::RadioCarouselModel( RadioUiEngine& uiEngine, RadioStationModel& stationModel ) :
+    QAbstractListModel( &uiEngine ),
+    d_ptr( new RadioCarouselModelPrivate( this, uiEngine, stationModel ) )
+{
+    connectAndTest( &stationModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+                    this,          SIGNAL(dataChanged(QModelIndex,QModelIndex)) );
+    connectAndTest( &stationModel, SIGNAL(layoutAboutToBeChanged()),
+                    this,          SIGNAL(layoutAboutToBeChanged()) );
+    connectAndTest( &stationModel, SIGNAL(layoutChanged()),
+                    this,          SIGNAL(layoutChanged()) );
+    connectAndTest( &stationModel, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsInserted(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+                    this,          SIGNAL(rowsRemoved(QModelIndex,int,int)) );
+    connectAndTest( &stationModel, SIGNAL(modelAboutToBeReset()),
+                    this,          SIGNAL(modelAboutToBeReset()) );
+    connectAndTest( &stationModel, SIGNAL(modelReset()),
+                    this,          SIGNAL(modelReset()) );
+
+//    connectAndTest( model(),        SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
+//                    this,           SLOT(removeFrequency(QModelIndex,int,int)) );
+}
+
+/*!
+ *
+ */
+RadioCarouselModel::~RadioCarouselModel()
+{
+    delete d_ptr;
+}
+
+/*!
+ * \reimp
+ */
+int RadioCarouselModel::rowCount( const QModelIndex& parent ) const
+{
+    Q_UNUSED( parent );
+    Q_D( const RadioCarouselModel );
+    const int rowCount = d->mStationModel.rowCount();
+    if ( rowCount == 0 ) {
+        return 1;
+    }
+    return rowCount;
+}
+
+/*!
+ * \reimp
+ */
+QVariant RadioCarouselModel::data( const QModelIndex& index, int role ) const
+{
+    if ( !index.isValid() ) {
+        return QVariant();
+    }
+
+    Q_D( const RadioCarouselModel );
+    if ( role == RadioStationModel::RadioStationRole ) {
+        const int rowCount = d->mStationModel.rowCount();
+        if ( rowCount == 0 ) {
+            QVariant variant;
+            variant.setValue( d->mStationModel.currentStation() );
+            return variant;
+        } else {
+            return d->mStationModel.data( index, role );
+        }
+    }
+
+    return QVariant();
+}
+
+/*!
+ * Finds the closest station from the given frequency
+ */
+RadioStation RadioCarouselModel::findClosest( const uint frequency, StationSkip::Mode mode )
+{
+    Q_D( RadioCarouselModel );
+    return d->mStationModel.findClosest( frequency, mode );
+}
+
+/*!
+ * Returns the model index corresponding to the given frequency
+ */
+QModelIndex RadioCarouselModel::modelIndexFromFrequency( uint frequency )
+{
+    Q_D( RadioCarouselModel );
+    if ( d->mStationModel.rowCount() == 0 ) {
+        return index( 0, 0 );
+    } else {
+        RadioStation station;
+        if ( d->mStationModel.findFrequency( frequency, station ) ) {
+            return index( d->mStationModel.findPresetIndex( station.presetIndex() ), 0 );
+        }
+    }
+
+    return QModelIndex();
+}
+
+/*!
+ * \reimp
+ */
+void RadioCarouselModel::removeFrequency( const QModelIndex& parent, int first, int last )
+{
+    Q_UNUSED( parent );
+    Q_UNUSED( first );
+    Q_UNUSED( last );
+}