diff --git a/src/widget/wtracktableview.cpp b/src/widget/wtracktableview.cpp index 248bce12595c..14f02ffe1e5a 100644 --- a/src/widget/wtracktableview.cpp +++ b/src/widget/wtracktableview.cpp @@ -466,7 +466,11 @@ void WTrackTableView::createActions() { connect(m_pFileBrowserAct, SIGNAL(triggered()), this, SLOT(slotOpenInFileBrowser())); - m_pAutoDJBottomAct = new QAction(tr("Add to Auto DJ Queue (bottom)"), this); + m_pFileRemoveFromDiskAct = new QAction(tr("Remove from Disk"),this); + connect(m_pFileRemoveFromDiskAct,SIGNAL(triggered()), + this, SLOT(slotRemoveFromDisk())); + + m_pAutoDJBottomAct = new QAction(tr("Add to Auto DJ Queue (Bottom)"), this); connect(m_pAutoDJBottomAct, SIGNAL(triggered()), this, SLOT(slotAddToAutoDJBottom())); @@ -684,6 +688,36 @@ void WTrackTableView::slotOpenInFileBrowser() { mixxx::DesktopHelper::openInFileBrowser(locations); } +void WTrackTableView::slotRemoveFromDisk() { + TrackModel* trackModel = getTrackModel(); + if (!trackModel) { + return; + } + QMessageBox msgBox (QMessageBox::Information, QObject::tr("Remove From Disk"), QObject::tr("Really delete the files from disk? (Permanent Deletion)")); + QAbstractButton* pYES = (QAbstractButton*)msgBox.addButton(QMessageBox::Yes); + QAbstractButton* pNO = (QAbstractButton*)msgBox.addButton(QMessageBox::No); + QCheckBox alsoHide(QObject::tr("Also hide track in library"), &msgBox); + alsoHide.blockSignals(true); + // Note ronso0 Set checked by default because that is what I usually need + alsoHide.setCheckState(Qt::Checked); + msgBox.addButton(&alsoHide, QMessageBox::ActionRole); + + if (QMessageBox::Yes == msgBox.exec()) { + QModelIndexList indices = selectionModel()->selectedRows(); + + for (const QModelIndex& index : indices) { + if (!index.isValid()) { + continue; + } + QString filenameWithPath = trackModel->getTrackLocation(index); + QFile file (filenameWithPath); + file.remove(); + } if( alsoHide.checkState() == Qt::Checked ) { + trackModel->hideTracks(indices); + } + } +} + void WTrackTableView::slotHide() { QModelIndexList indices = selectionModel()->selectedRows(); if (indices.size() > 0) { @@ -1112,6 +1146,7 @@ void WTrackTableView::contextMenuEvent(QContextMenuEvent* event) { m_pMenu->addAction(m_pPurgeAct); } m_pMenu->addAction(m_pFileBrowserAct); + m_pMenu->addAction(m_pFileRemoveFromDiskAct); if (modelHasCapabilities(TrackModel::TRACKMODELCAPS_EDITMETADATA)) { m_pMenu->addSeparator(); diff --git a/src/widget/wtracktableview.h b/src/widget/wtracktableview.h index 910f479848f2..410d9f7ba345 100644 --- a/src/widget/wtracktableview.h +++ b/src/widget/wtracktableview.h @@ -58,6 +58,7 @@ class WTrackTableView : public WLibraryTableView { void slotRemove(); void slotHide(); void slotOpenInFileBrowser(); + void slotRemoveFromDisk(); void slotShowTrackInfo(); void slotShowDlgTagFetcher(); void slotNextTrackInfo(); @@ -187,6 +188,8 @@ class WTrackTableView : public WLibraryTableView { QAction *m_pPropertiesAct; QAction *m_pFileBrowserAct; + // Remove from disk action + QAction *m_pFileRemoveFromDiskAct; // BPM feature QAction *m_pBpmLockAction; QAction *m_pBpmUnlockAction;