mpviewplugins/mpcollectionviewplugin/src/mpcollectiondatamodel.cpp
changeset 22 ecf06a08d4d9
parent 20 82baf59ce8dd
child 23 d45f4c087764
child 25 3ec52facab4d
child 34 2c5162224003
--- a/mpviewplugins/mpcollectionviewplugin/src/mpcollectiondatamodel.cpp	Fri Apr 16 14:56:30 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,301 +0,0 @@
-/*
-* 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: Music Player collection data model.
-*
-*/
-
-#include <QIcon>
-#include <QList>
-#include <qmimedata.h>
-#include <hbicon.h>
-#include <hbnamespace.h>
-
-#include "mpcollectiondatamodel.h"
-#include "mpcollectionalbumartmanager.h"
-#include "mpmpxcollectiondata.h"
-#include "mptrace.h"
-
-/*!
-    \class MpCollectionDataModel
-    \brief Music Player collection data model.
-
-    Collection data model implements the interface specified by HbAbstractDataModel,
-    which defines the standard interface that item models must use to be able to
-    interoperate with other components in the model/view architecture.
-
-    Every item of data that can be accessed via a model has an associated model
-    index.
-
-    Each item has a number of data elements associated with it and they can be
-    retrieved by specifying a role (see Qt::ItemDataRole) to the model's data
-    returned by itemData() function.
-
-    \sa HbAbstractDataModel
-*/
-
-/*!
-    \fn void orderChanged( int containerId, int itemId, int itemOrdinal, int newOrdinal )
-
-    This signal is emitted when a reorder operations is propagated to the 
-    model, indicates that the item with \a containerId , \a itemId is to 
-    be moved from \a itemOrdinal to \a newOrdinal.
- */
-
-/*!
- Constructs the collection data model.
- */
-MpCollectionDataModel::MpCollectionDataModel( MpMpxCollectionData *data, QObject *parent )
-    : QAbstractListModel(parent),
-      mCollectionData(data),
-      mRowCount(0)
-{
-    TX_ENTRY
-    mAlbumArtManager = new MpCollectionAlbumArtManager(mCollectionData);
-    connect( mAlbumArtManager, SIGNAL(albumArtReady(int)), this, SLOT(updateAlbumArt(int)) );
-    TX_EXIT
-}
-
-/*!
- Destructs the collection data model.
- */
-MpCollectionDataModel::~MpCollectionDataModel()
-{
-    TX_ENTRY
-    delete mAlbumArtManager;
-    TX_EXIT
-}
-
-/*!
- Returns the number of rows under the given \a parent.
-
- View will request for the row count immediately after a model is set.
- To prevent it from reading data while caching the album art for the first
- screen, return row count as zero.
-
- \reimp
- */
-int MpCollectionDataModel::rowCount( const QModelIndex &parent ) const
-{
-    TX_LOG
-    Q_UNUSED(parent);
-    return mRowCount;
-}
-
-/*!
- Returns the data stored for the item referred to by the \a index.
-
- \reimp
- */
-QVariant MpCollectionDataModel::data(const QModelIndex &index, int role) const
-{
-    TX_ENTRY
-    QVariant returnValue = QVariant();
-    if ( !index.isValid() ) {
-        return returnValue;
-    }
-
-    int row = index.row();
-    TX_LOG_ARGS("index=" << row << ", role=" << role);
-    TCollectionContext context = mCollectionData->context();
-    if ( role == Qt::DisplayRole ) {
-        QStringList display;
-        // Fetch the primary text, which is the title, if available.
-        QString primaryText;
-        primaryText = mCollectionData->itemData(row, MpMpxCollectionData::Title);
-        if ( !primaryText.isEmpty() ) {
-            display << primaryText;
-        }
-        else {
-            display << hbTrId("txt_mus_other_unknown4");
-        }
-
-        // Fetch the secondary text, which depends on the current context, if available.
-        QString secondaryText;
-        switch ( context ) {
-            case ECollectionContextAllSongs:
-            case ECollectionContextAlbums:
-            case ECollectionContextPlaylistSongs:
-                secondaryText = mCollectionData->itemData(row, MpMpxCollectionData::Artist);
-                if ( !secondaryText.isEmpty() ) {
-                    display << secondaryText;
-                }
-                else {
-                    display << hbTrId("txt_mus_other_unknown3");
-                }
-                break;
-            default:
-                break;
-        }
-        returnValue = display;
-    }
-    else if ( role == Qt::DecorationRole ) {
-        switch ( context ) {
-            case ECollectionContextAlbums:
-                const QIcon *icon = mAlbumArtManager->albumArt(row);
-                QVariant iconVariant(QVariant::Icon, icon);
-                returnValue = iconVariant;
-                break;
-        }
-    }
-    else if ( role == Hb::IndexFeedbackRole ) {
-        QString feedbackIndex;
-        feedbackIndex = mCollectionData->itemData(row, MpMpxCollectionData::Title);
-        returnValue = feedbackIndex;
-    }
-    TX_EXIT
-    return returnValue;
-}
-
-/*!
- \reimp
- */
-Qt::DropActions MpCollectionDataModel::supportedDropActions() const
-{
-    return Qt::MoveAction;
-}
-
-/*! 
- \reimp
-*/
-bool MpCollectionDataModel::removeRows(int row, int count, const QModelIndex &parent )
-{
-    if ( count > 1 ) {
-        return false;
-    }
-    beginRemoveRows ( parent, row, row);
-    //This call internally caches the item, to be inserted if it it drag and drop.
-    mCollectionData->removeItem(row);
-    mRowCount--;
-    endRemoveRows();
-    return true;
-}
-
-/*! 
- \reimp
-*/
-QStringList MpCollectionDataModel::mimeTypes() const
-{
-    QStringList types;
-    types << QLatin1String("application/x-mpcollectiondatamodelrowandids");
-    return types;
-}
-
-/*! 
- \reimp
-*/
-QMimeData *MpCollectionDataModel::mimeData(const QModelIndexList &indexes) const
-{
-    if (indexes.count() <= 0)
-        return 0;
-    QStringList types = mimeTypes();
-    if (types.isEmpty())
-        return 0;
-    QMimeData *data = new QMimeData();
-    QString format = types.at(0);
-    QByteArray encoded;
-    QDataStream stream(&encoded, QIODevice::WriteOnly);
-    stream << indexes.at(0).row();
-    stream << mCollectionData->containerId();
-    stream << mCollectionData->itemId( indexes.at(0).row() );
-    
-    data->setData(format, encoded);
-    return data;
-}
-
-/*! 
- \reimp
-*/
-bool MpCollectionDataModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
-                          int row, int column, const QModelIndex &parent)
-{
-    Q_UNUSED(column);
-    // check if the action is supported
-    if (!data || action != Qt::MoveAction ) {
-        return false;
-    }
-    // check if the format is supported
-    QStringList types = mimeTypes();
-    if (types.isEmpty()) {
-        return false;
-    }
-    QString format = types.at(0);
-    if (!data->hasFormat(format)) {
-        return false;
-    }
-    // decode and insert
-    QByteArray encoded = data->data(format);
-    QDataStream stream(&encoded, QIODevice::ReadOnly);
-    int rowFrom = -1;
-    int mpxContainerId = -1;
-    int mpxItemId = -1;
-    if (!stream.atEnd()) {
-        stream >> rowFrom;
-        stream >> mpxContainerId;
-        stream >> mpxItemId;
-    } 
-    if ( rowFrom == -1 || mpxContainerId == -1 || mpxItemId == -1  || 
-            !mCollectionData->testCachedItem( mpxItemId )) {
-        return false;
-    }    
-        
-    beginInsertRows( parent, row, row );
-    emit orderChanged( mpxContainerId, mpxItemId, rowFrom, row );
-    mCollectionData->insertCachedItem( row );
-    mRowCount++;
-    endInsertRows();
-    return true;
-}
-
-/*!
- Returns pointer to MpMpxCollectionData, which is the collection data.
- */
-MpMpxCollectionData *MpCollectionDataModel::collectionData()
-{
-    return mCollectionData;
-}
-
-/*!
- Slot to be called when album art for the \a index needs to be updated.
- */
-void MpCollectionDataModel::updateAlbumArt( int index )
-{
-    TX_ENTRY_ARGS("index=" << index);
-    if ( index >= 0 && index < mRowCount ) {
-        QModelIndex modelIndex = QAbstractItemModel::createIndex(index, 0);
-        emit dataChanged(modelIndex, modelIndex);
-    }
-    TX_EXIT
-}
-
-/*!
- Slot to be called when data has changed and model needs to be refreshed
- to reflect the new data.
- */
-void MpCollectionDataModel::refreshModel()
-{
-    TX_ENTRY
-    // Cancel all outstanding album art request first, then reset the model.
-    mAlbumArtManager->cancel();
-    mRowCount = mCollectionData->count();
-
-    TCollectionContext context = mCollectionData->context();
-    if ( context == ECollectionContextAlbums ) {
-        // Before providing the new data to the view (list, grid, etc.), we want
-        // to make sure that we have enough album arts for the first screen.
-        mAlbumArtManager->cacheFirstScreen();
-    }
-    reset();
-    TX_EXIT
-}
-