Delete multiple rows

Fixes #22
This commit is contained in:
Keith Edmunds 2021-08-22 16:42:33 +01:00
parent d9ccaf7caa
commit 70d986f4ac

View File

@ -183,7 +183,7 @@ class PlaylistTab(QTableWidget):
act_rescan.triggered.connect(lambda: self._rescan(row)) act_rescan.triggered.connect(lambda: self._rescan(row))
self.menu.addSeparator() self.menu.addSeparator()
act_delete = self.menu.addAction('Delete') act_delete = self.menu.addAction('Delete')
act_delete.triggered.connect(lambda: self._delete_row(row)) act_delete.triggered.connect(self._delete_rows)
act_info = self.menu.addAction('Info') act_info = self.menu.addAction('Info')
act_info.triggered.connect(lambda: self._info_row(row)) act_info.triggered.connect(lambda: self._info_row(row))
@ -624,34 +624,45 @@ class PlaylistTab(QTableWidget):
self.editing_cell = False self.editing_cell = False
self.master_process.enable_play_next_controls() self.master_process.enable_play_next_controls()
def _delete_row(self, row): def _delete_rows(self):
"Delete row" "Delete mutliple rows"
DEBUG(f"playlist._delete_row({row})") DEBUG("playlist._delete_rows()")
if row == self._meta_get_current(): rows = sorted(set(item.row() for item in self.selectedItems()))
show_warning("Silly", "Can't delete playing track") rows_to_delete = []
return notes = self._meta_get_notes()
elif row == self._meta_get_next():
show_warning("Safety", "Can't delete next track")
return
with Session() as session: with Session() as session:
title = self.item(row, self.COL_TITLE).text() for row in rows:
if row == self._meta_get_current():
show_warning("Silly", "Can't delete playing track")
return
elif row == self._meta_get_next():
show_warning("Safety", "Can't delete next track")
return
msg = QMessageBox(self) title = self.item(row, self.COL_TITLE).text()
msg.setIcon(QMessageBox.Warning)
msg.setText(f"Delete '{title}'?") msg = QMessageBox(self)
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel) msg.setIcon(QMessageBox.Warning)
msg.setDefaultButton(QMessageBox.Cancel) msg.setText(f"Delete '{title}'?")
msg.setWindowTitle("Delete row") msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
if msg.exec() == QMessageBox.Yes: msg.setDefaultButton(QMessageBox.Cancel)
id = self._get_row_id(row) msg.setWindowTitle("Delete row")
if row in self._meta_get_notes(): # Store list of notes
if msg.exec() == QMessageBox.Yes:
rows_to_delete.append(row)
# delete in reverse row order so row numbers don't
# change
for del_row in sorted(rows_to_delete, reverse=True):
id = self._get_row_id(del_row)
if del_row in notes:
Notes.delete_note(session, id) Notes.delete_note(session, id)
else: else:
PlaylistTracks.remove_track(session, self.id, row) PlaylistTracks.remove_track(session, self.id, del_row)
self.removeRow(row) self.removeRow(del_row)
self._save_playlist(session) self._save_playlist(session)
self._repaint() self._repaint()