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))
self.menu.addSeparator()
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.triggered.connect(lambda: self._info_row(row))
@ -624,34 +624,45 @@ class PlaylistTab(QTableWidget):
self.editing_cell = False
self.master_process.enable_play_next_controls()
def _delete_row(self, row):
"Delete row"
def _delete_rows(self):
"Delete mutliple rows"
DEBUG(f"playlist._delete_row({row})")
DEBUG("playlist._delete_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
rows = sorted(set(item.row() for item in self.selectedItems()))
rows_to_delete = []
notes = self._meta_get_notes()
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)
msg.setIcon(QMessageBox.Warning)
msg.setText(f"Delete '{title}'?")
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
msg.setDefaultButton(QMessageBox.Cancel)
msg.setWindowTitle("Delete row")
if msg.exec() == QMessageBox.Yes:
id = self._get_row_id(row)
if row in self._meta_get_notes():
title = self.item(row, self.COL_TITLE).text()
msg = QMessageBox(self)
msg.setIcon(QMessageBox.Warning)
msg.setText(f"Delete '{title}'?")
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
msg.setDefaultButton(QMessageBox.Cancel)
msg.setWindowTitle("Delete row")
# 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)
else:
PlaylistTracks.remove_track(session, self.id, row)
self.removeRow(row)
PlaylistTracks.remove_track(session, self.id, del_row)
self.removeRow(del_row)
self._save_playlist(session)
self._repaint()