/* * Copyright 2008, 2011 Jason A. Donenfeld */ #include "CollectionModel.h" #include "Song.h" #include "PlayerWindow.h" #include "Credentials.h" #include #include #include #include #include CollectionModel::CollectionModel(QList songs, Credentials *credentials, QObject *parent) : QAbstractItemModel(parent), m_songs(songs), m_position(-1), m_fakeBoldState(false), m_credentials(credentials) { } QVariant CollectionModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); int row = index.row(); if(role == Qt::DisplayRole) { switch(index.column()) { case 0: if(m_songs[row]->track() == 0) return QVariant(); else return QVariant(m_songs[row]->track()); case 1: return QVariant(m_songs[row]->title()); case 2: return QVariant(m_songs[row]->album()); case 3: return QVariant(m_songs[row]->artist()); default: return QVariant(); } } if (row != m_position && !m_fakeBoldState) return QVariant(); if(role == Qt::FontRole) { QFont font; font.setBold(true); return font; } if (role == Qt::BackgroundRole) return QApplication::palette().alternateBase(); return QVariant(); } QVariant CollectionModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) switch(section) { case 0: return tr("#"); case 1: return tr("Title"); case 2: return tr("Album"); case 3: return tr("Artist"); default: return QVariant(); } return QVariant(); } int CollectionModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_songs.size(); } int CollectionModel::columnCount(const QModelIndex&) const { return 4; } QModelIndex CollectionModel::index(int row, int column, const QModelIndex& parent) const { if (parent.isValid()) return QModelIndex(); if(!hasIndex(row, column, parent)) return QModelIndex(); return createIndex(row, column); } QModelIndex CollectionModel::parent(const QModelIndex&) const { return QModelIndex(); } Qt::ItemFlags CollectionModel::flags(const QModelIndex &index) const { if(!index.isValid()) return 0; return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled; } QStringList CollectionModel::mimeTypes() const { QStringList ret; ret << "text/uri-list"; return ret; } QMimeData* CollectionModel::mimeData(const QModelIndexList& indexes) const { QMimeData* ret = new QMimeData(); QStringList urls; Q_FOREACH(QModelIndex index, indexes) { if(index.column() == 1) urls << m_credentials->songUrl(m_songs[index.row()]->sha1()).toString(); }; ret->setData("text/uri-list", urls.join("\n").toUtf8()); return ret; } Song* CollectionModel::song(const QModelIndex& index) const { if (!index.isValid()) return 0; return m_songs[index.row()]; }