[multimedia/kid3] /: Superfluous imported tracks can be deleted before import

Urs Fleisch null at kde.org
Sun Sep 29 14:31:32 BST 2024


Git commit 693789e1301b6a970a0d41830e6bda4f67b60f6b by Urs Fleisch.
Committed on 29/09/2024 at 13:13.
Pushed by ufleisch into branch 'master'.

Superfluous imported tracks can be deleted before import

This makes it easier to import just a part of the imported
tracks, e.g. a single disc from a multi disc album.

BUG 493591

M  +9    -0    doc/en/index.docbook
M  +48   -0    src/gui/dialogs/importdialog.cpp
M  +5    -0    src/gui/dialogs/importdialog.h

https://invent.kde.org/multimedia/kid3/-/commit/693789e1301b6a970a0d41830e6bda4f67b60f6b

diff --git a/doc/en/index.docbook b/doc/en/index.docbook
index 3cbce9fed..9ceee7ad4 100644
--- a/doc/en/index.docbook
+++ b/doc/en/index.docbook
@@ -1312,6 +1312,15 @@ manually, a track can be dragged with the <mousebutton>left</mousebutton> mouse
 and then dropped at the new location.
 </para>
 <para>
+If there are more imported tracks than files, for example if the current folder
+contains only the second disc of a two disc album but the tracks of both discs
+are imported, it is possible to delete the tracks of the first disc by selecting
+them by clicking on the row label of the first track, then clicking on the row
+label of the last track of the first disc while holding down the
+<keycap>Shift</keycap> key, and finally removing the tracks by pressing the
+<keycap>Delete</keycap> key.
+</para>
+<para>
 When the import dialog is opened, it contains the actual contents of the
 tags. The tag type (Tag 1, Tag 2, Tag 1 and Tag 2) can be selected using the
 <guilabel>Destination</guilabel> combo box. The button on the right of this
diff --git a/src/gui/dialogs/importdialog.cpp b/src/gui/dialogs/importdialog.cpp
index 0d933584a..6b72aac0f 100644
--- a/src/gui/dialogs/importdialog.cpp
+++ b/src/gui/dialogs/importdialog.cpp
@@ -259,6 +259,12 @@ ImportDialog::ImportDialog(IPlatformTools* platformTools,
   connect(okButton, &QAbstractButton::clicked, this, &QDialog::accept);
   connect(cancelButton, &QAbstractButton::clicked, this, &QDialog::reject);
   vlayout->addLayout(hlayout);
+
+  auto deleteAction = new QAction(this);
+  deleteAction->setShortcut(QKeySequence::Delete);
+  connect(deleteAction, &QAction::triggered,
+          this, &ImportDialog::deleteSelectedTableRows);
+  addAction(deleteAction);
 }
 
 /**
@@ -588,6 +594,48 @@ void ImportDialog::moveTableRow(int, int fromIndex, int toIndex) {
   }
 }
 
+/**
+ * Delete the selected table rows.
+ */
+void ImportDialog::deleteSelectedTableRows()
+{
+  QSet<int> rows;
+  const QModelIndexList selectedRows =
+      m_trackDataTable->selectionModel()->selectedRows();
+  for (const QModelIndex& index : selectedRows) {
+    rows.insert(index.row());
+  }
+  if (rows.isEmpty()) {
+    if (auto index = m_trackDataTable->currentIndex(); index.isValid()) {
+      rows.insert(index.row());
+    }
+  }
+  if (!rows.isEmpty()) {
+    ImportTrackDataVector trackDataVector(m_trackDataModel->getTrackData());
+    int numTracks = trackDataVector.size();
+    int fromIndex = 0;
+    for (auto toIt = trackDataVector.begin(), fromIt = trackDataVector.begin();
+         toIt != trackDataVector.end();) {
+      if (fromIndex >= numTracks) {
+        trackDataVector.erase(toIt, trackDataVector.end());
+        break;
+      }
+      if (!rows.contains(fromIndex)) {
+        if (toIt != fromIt) {
+          toIt->setFrameCollection(fromIt->getFrameCollection());
+          toIt->setImportDuration(fromIt->getImportDuration());
+        }
+        ++toIt;
+      }
+      ++fromIt;
+      ++fromIndex;
+    }
+    m_trackDataModel->setTrackData(trackDataVector);
+    // redisplay the table
+    showPreview();
+  }
+}
+
 /**
  * Called when the destination combo box value is changed.
  */
diff --git a/src/gui/dialogs/importdialog.h b/src/gui/dialogs/importdialog.h
index 0a904b7c5..b7f92c0c7 100644
--- a/src/gui/dialogs/importdialog.h
+++ b/src/gui/dialogs/importdialog.h
@@ -125,6 +125,11 @@ private slots:
    */
   void moveTableRow(int, int fromIndex, int toIndex);
 
+  /**
+   * Delete the selected table rows.
+   */
+  void deleteSelectedTableRows();
+
   /**
    * Import from server and preview in table.
    */


More information about the kde-doc-english mailing list