void TopWidget::onArtistSelectionChanged(QItemSelection item) { QModelIndexList idx = item.indexes(); for(auto index : idx){ selectedArtist = artistList.at(index.row()); } updateAlbumList(); }
void Player::keyReleaseEvent(QKeyEvent *event) { switch(event->key()) { case Qt::Key_Delete: case Qt::Key_Backspace: { enum { AllTracksLevel, ArtistLevel, AlbumLevel, TrackLevel } delete_level = TrackLevel; if (artist_list->hasFocus()) { if (artist_list->currentRow() == 0) delete_level = AllTracksLevel; else delete_level = ArtistLevel; } else if (album_list->hasFocus()) { if (album_list->currentRow() == 0 || album_list->count() == 2) delete_level = ArtistLevel; else delete_level = AlbumLevel; } else if (titles_list->hasFocus()) { if (titles_list->count() == 1) { if (album_list->count() == 2) delete_level = ArtistLevel; else delete_level = AlbumLevel; } else delete_level = TrackLevel; } sqlite3_stmt *deleteQuery; char *query; switch (delete_level) { case AllTracksLevel: query = sqlite3_mprintf("%s", "DELETE FROM `tracks`"); break; case ArtistLevel: query = sqlite3_mprintf("DELETE FROM `tracks` WHERE `artist`=%Q", qtos(artist_list->currentItem()->text())); break; case AlbumLevel: query = sqlite3_mprintf("DELETE FROM `tracks` WHERE `artist`=%Q AND `album`=%Q", qtos(artist_list->currentItem()->text()), qtos(album_list->currentItem()->text())); break; case TrackLevel: query = sqlite3_mprintf("DELETE FROM `tracks` WHERE `tid`=%d", titles_list->currentItem()->data(Qt::UserRole).toInt()); break; } prepare(query, &deleteQuery, "Failed to Prepare DELETE query: "); bool done = false; //NOTE: value ignored for the case of a DELETE query, but required for the use of the the `step` convenience function step(deleteQuery, done, true, "Failed to Step DELETE: "); switch (delete_level) { case AllTracksLevel: artist_list->clear(); artist_list->addItem(ALL); cur_artist = artist_list->item(0); album_list->clear(); cur_album = 0; titles_list->clear(); cur_title = 0; statusBar()->changeItem("", SONG_NAME); artist_list->setCurrentItem(artist_list->item(0)); break; case ArtistLevel: { int row = artist_list->currentRow(); bool update_cur_artist = cur_artist == artist_list->currentItem(); delete artist_list->takeItem(row); row = row == artist_list->count() ? artist_list->count() - 1 : row; if (update_cur_artist) { cur_artist = artist_list->item(row); cur_album = 1; cur_title = 0; } artist_list->setCurrentItem(artist_list->item(row), 0); break; } case AlbumLevel: { int row = album_list->currentRow(); bool update_cur_album = cur_artist == artist_list->currentItem() && cur_album == row; updateAlbumList(artist_list->currentItem()); row = row == album_list->count() ? album_list->count() - 1 : row; if (update_cur_album) { cur_album = row; cur_title = 0; } album_list->setCurrentRow(row); break; } case TrackLevel: { int row = titles_list->currentRow(); bool update_cur_title = cur_artist == artist_list->currentItem() && cur_album == album_list->currentRow() && cur_title == row; updateTitlesList(album_list->currentItem()); row = row == titles_list->count() ? titles_list->count() - 1 : row; if (update_cur_title) cur_title = row; titles_list->setCurrentRow(row); break; } } break; } default: break; } }