Exemple #1
0
void TopWidget::onArtistSelectionChanged(QItemSelection item)
{
	QModelIndexList idx = item.indexes();
	for(auto index : idx){
		selectedArtist = artistList.at(index.row());
	}
	updateAlbumList();
}
Exemple #2
0
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;
	}
}