2 // C++ Implementation: playlistmodel
4 // Author: Oliver Groß <z.o.gross@gmx.de>, (C) 2008
6 // Copyright: See COPYING file that comes with this distribution
8 #include "playlistmodel.h"
12 using namespace XmmsQt
;
14 CPlaylistModel::CPlaylistModel(XmmsQt::QPlaylist
* playlist
, XmmsQt::QMedialib
* medialib
, QObject
* parent
) : QAbstractItemModel(parent
),
15 m_Playlist(playlist
), m_Medialib(medialib
) {
17 connect(m_Playlist
, SIGNAL(entryAboutToBeInserted(quint32
, quint32
)),
18 this, SLOT(prepareToInsertEntry(quint32
, quint32
)));
19 connect(m_Playlist
, SIGNAL(entryInserted(quint32
)),
20 this, SLOT(insertEntry(quint32
)));
22 connect(m_Playlist
, SIGNAL(entryAboutToBeRemoved(quint32
, quint32
)),
23 this, SLOT(prepareToRemoveEntry(quint32
, quint32
)));
24 connect(m_Playlist
, SIGNAL(entryRemoved(quint32
)),
25 this, SLOT(removeEntry(quint32
)));
27 connect(m_Playlist
, SIGNAL(entryMoved(quint32
, quint32
)),
28 this, SLOT(moveEntry(quint32
, quint32
)));
29 connect(m_Playlist
, SIGNAL(entryUpdated(quint32
, quint32
)),
30 this, SLOT(updateEntry(quint32
, quint32
)));
31 connect(m_Medialib
, SIGNAL(mediaInfoReady(quint32
)),
32 this, SLOT(updateEntriesByID(quint32
)));
33 connect(m_Playlist
, SIGNAL(reseted()),
34 this, SLOT(reloadMediaInfo()));
38 CPlaylistModel::~CPlaylistModel() {
41 void CPlaylistModel::prepareToInsertEntry(quint32 position
, quint32 id
) {
42 beginInsertRows(QModelIndex(), position
, position
);
43 if (!m_Medialib
->media().contains(id
))
44 m_Medialib
->requestMediaInfo(id
);
47 void CPlaylistModel::insertEntry(quint32 position
) {
51 void CPlaylistModel::prepareToRemoveEntry(quint32 position
, quint32 id
) {
52 beginRemoveRows(QModelIndex(), position
, position
);
53 m_Medialib
->removeMediaInfo(id
);
56 void CPlaylistModel::removeEntry(quint32 position
) {
60 void CPlaylistModel::moveEntry(quint32 from
, quint32 to
) {
61 emit
dataChanged(index(from
, 0), index(to
, columnCount()));
64 void CPlaylistModel::updateEntry(quint32 position
, quint32 oldid
) {
65 //m_Medialib->removeMediaInfo(oldid);
66 emit
dataChanged(index(position
, 0), index(position
, columnCount()));
67 quint32 id
= m_Playlist
->idList()[position
];
68 m_Medialib
->checkMediaInfo(id
);
71 void CPlaylistModel::updateEntriesByID(quint32 id
) {
72 for(quint32 i
= 0; i
< m_Playlist
->idList().count(); i
++){
73 if (m_Playlist
->idList()[i
] == id
)
74 emit
dataChanged(index(i
, 0), index(i
, columnCount()));
78 void CPlaylistModel::reloadMediaInfo() {
79 //m_Medialib->clearMediaInfo();
80 foreach(quint32 i
, m_Playlist
->idList()) {
81 m_Medialib
->requestMediaInfo(i
);
86 QVariant
CPlaylistModel::data(const QModelIndex
& index
, int role
) const {
91 /* if ((role == Qt::DecorationRole) && (index.column() == 0))
94 if (role
!= Qt::DisplayRole
)
97 quint32 id
= index
.internalId();
99 if (m_Medialib
->media().contains(id
)) {
100 MediaInfo
* data
= m_Medialib
->media()[id
];
101 switch (index
.column()) {
102 case MQ_PLAYLIST_TITLE
:
104 case MQ_PLAYLIST_ARTIST
:
106 case MQ_PLAYLIST_DURATION
:
107 return formatedTime(data
->duration
);
113 switch (index
.column()) {
114 case MQ_PLAYLIST_TITLE
:
115 return tr("unknown (id: %1)").arg(id
);
116 case MQ_PLAYLIST_ARTIST
:
117 return tr("unknown");
118 case MQ_PLAYLIST_DURATION
:
119 return QString("--:--");
128 Qt::ItemFlags
CPlaylistModel::flags(const QModelIndex
& index
) const {
129 if (!index
.isValid())
132 return Qt::ItemIsEnabled
| Qt::ItemIsSelectable
;
135 QVariant
CPlaylistModel::headerData(int section
, Qt::Orientation orientation
, int role
) const {
136 if (role
!= Qt::DisplayRole
)
139 if (orientation
== Qt::Horizontal
) {
141 case MQ_PLAYLIST_TITLE
:
143 case MQ_PLAYLIST_ARTIST
:
145 case MQ_PLAYLIST_DURATION
:
154 QModelIndex
CPlaylistModel::index(int row
, int column
, const QModelIndex
& parent
) const {
155 if (m_Playlist
->idList().isEmpty() || parent
.isValid() || row
>= m_Playlist
->idList().count())
156 return QModelIndex();
158 return createIndex(row
, column
, m_Playlist
->idList()[row
]);
161 QModelIndex
CPlaylistModel::parent(const QModelIndex
& index
) const {
162 return QModelIndex();
165 int CPlaylistModel::rowCount(const QModelIndex
& parent
) const {
166 if (parent
.isValid())
169 return m_Playlist
->idList().count();
172 int CPlaylistModel::columnCount(const QModelIndex
& parent
) const {