Fix idex creation in addSongs/removeSongsFromList

This commit is contained in:
craig
2012-01-16 19:49:58 +00:00
committed by craig
parent 07252ad365
commit 8a94ceae20
2 changed files with 10 additions and 28 deletions

View File

@@ -417,15 +417,13 @@ void Device::addSongToList(const Song &s)
{
MusicLibraryItemArtist *artistItem = artist(s, false);
if (!artistItem) {
QModelIndex idx=model->index(model->devices.indexOf(this), 0, QModelIndex());
model->beginInsertRows(idx, childCount(), childCount());
model->beginInsertRows(model->createIndex(model->devices.indexOf(this), 0, this), childCount(), childCount());
artistItem = createArtist(s);
model->endInsertRows();
}
MusicLibraryItemAlbum *albumItem = artistItem->album(s, false);
if (!albumItem) {
QModelIndex idx=model->index(children().indexOf(artistItem), 0, model->index(model->devices.indexOf(this), 0, QModelIndex()));
model->beginInsertRows(idx, artistItem->childCount(), artistItem->childCount());
model->beginInsertRows(model->createIndex(children().indexOf(artistItem), 0, artistItem), artistItem->childCount(), artistItem->childCount());
albumItem = artistItem->createAlbum(s);
model->endInsertRows();
}
@@ -435,10 +433,7 @@ void Device::addSongToList(const Song &s)
}
}
QModelIndex idx=model->index(artistItem->children().indexOf(albumItem), 0,
model->index(children().indexOf(artistItem), 0,
model->index(model->devices.indexOf(this), 0, QModelIndex())));
model->beginInsertRows(idx, albumItem->childCount(), albumItem->childCount());
model->beginInsertRows(model->createIndex(artistItem->children().indexOf(albumItem), 0, albumItem), albumItem->childCount(), albumItem->childCount());
MusicLibraryItemSong *songItem = new MusicLibraryItemSong(s, albumItem);
albumItem->append(songItem);
model->endInsertRows();
@@ -469,9 +464,8 @@ void Device::removeSongFromList(const Song &s)
if (1==artistItem->childCount() && 1==albumItem->childCount()) {
// 1 album with 1 song - so remove whole artist
QModelIndex idx=model->index(model->devices.indexOf(this), 0, QModelIndex());
int row=m_childItems.indexOf(artistItem);
model->beginRemoveRows(idx, row, row);
model->beginRemoveRows(model->createIndex(model->devices.indexOf(this), 0, this), row, row);
remove(artistItem);
model->endRemoveRows();
return;
@@ -479,20 +473,15 @@ void Device::removeSongFromList(const Song &s)
if (1==albumItem->childCount()) {
// multiple albums, but this album only has 1 song - remove album
QModelIndex idx=model->index(children().indexOf(artistItem), 0,
model->index(model->devices.indexOf(this), 0, QModelIndex()));
int row=artistItem->children().indexOf(albumItem);
model->beginRemoveRows(idx, row, row);
model->beginRemoveRows(model->createIndex(children().indexOf(artistItem), 0, artistItem), row, row);
artistItem->remove(albumItem);
model->endRemoveRows();
return;
}
// Just remove particular song
QModelIndex idx=model->index(artistItem->children().indexOf(albumItem), 0,
model->index(children().indexOf(artistItem), 0,
model->index(model->devices.indexOf(this), 0, QModelIndex())));
model->beginRemoveRows(idx, songRow, songRow);
model->beginRemoveRows(model->createIndex(artistItem->children().indexOf(albumItem), 0, albumItem), songRow, songRow);
albumItem->remove(songRow);
model->endRemoveRows();
}

View File

@@ -312,8 +312,7 @@ void MusicLibraryModel::addSongToList(const Song &s)
}
MusicLibraryItemAlbum *albumItem = artistItem->album(s, false);
if (!albumItem) {
QModelIndex idx=index(rootItem->children().indexOf(artistItem), 0, QModelIndex());
beginInsertRows(idx, artistItem->childCount(), artistItem->childCount());
beginInsertRows(createIndex(rootItem->children().indexOf(artistItem), 0, artistItem), artistItem->childCount(), artistItem->childCount());
albumItem = artistItem->createAlbum(s);
endInsertRows();
}
@@ -323,9 +322,7 @@ void MusicLibraryModel::addSongToList(const Song &s)
}
}
QModelIndex idx=index(artistItem->children().indexOf(albumItem), 0,
index(rootItem->children().indexOf(artistItem), 0, QModelIndex()));
beginInsertRows(idx, albumItem->childCount(), albumItem->childCount());
beginInsertRows(createIndex(artistItem->children().indexOf(albumItem), 0, albumItem), albumItem->childCount(), albumItem->childCount());
MusicLibraryItemSong *songItem = new MusicLibraryItemSong(s, albumItem);
albumItem->append(songItem);
endInsertRows();
@@ -354,7 +351,6 @@ void MusicLibraryModel::removeSongFromList(const Song &s)
return;
}
if (1==artistItem->childCount() && 1==albumItem->childCount()) {
// 1 album with 1 song - so remove whole artist
int row=rootItem->children().indexOf(artistItem);
@@ -366,18 +362,15 @@ void MusicLibraryModel::removeSongFromList(const Song &s)
if (1==albumItem->childCount()) {
// multiple albums, but this album only has 1 song - remove album
QModelIndex idx=index(children().indexOf(artistItem), 0, QModelIndex());
int row=artistItem->children().indexOf(albumItem);
beginRemoveRows(idx, row, row);
beginRemoveRows(createIndex(rootItem->children().indexOf(artistItem), 0, artistItem), row, row);
artistItem->remove(albumItem);
endRemoveRows();
return;
}
// Just remove particular song
QModelIndex idx=index(artistItem->children().indexOf(albumItem), 0,
index(children().indexOf(artistItem), 0, QModelIndex()));
beginRemoveRows(idx, songRow, songRow);
beginRemoveRows(createIndex(artistItem->children().indexOf(albumItem), 0, albumItem), songRow, songRow);
albumItem->remove(songRow);
endRemoveRows();
}