allow deletion from non-consecutive range

This commit is contained in:
Greg DiCristofaro 2023-08-30 07:53:15 -04:00
parent c23b4fd71d
commit b2c29bb03f

View File

@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import java.io.File; import java.io.File;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
@ -330,12 +331,7 @@ final class LocalFilesPanel extends javax.swing.JPanel {
}//GEN-LAST:event_changeNameButtonActionPerformed }//GEN-LAST:event_changeNameButtonActionPerformed
private void deleteButonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButonActionPerformed private void deleteButonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_deleteButonActionPerformed
int minIdx = this.fileList.getMinSelectionIndex(); this.listModel.remove(this.fileList.getSelectedIndices());
int maxIdx = this.fileList.getMaxSelectionIndex();
if (minIdx >= 0 && maxIdx >= minIdx) {
this.listModel.remove(minIdx, maxIdx);
}
this.fileList.clearSelection(); this.fileList.clearSelection();
enableNext = !this.listModel.getFiles().isEmpty(); enableNext = !this.listModel.getFiles().isEmpty();
@ -516,16 +512,26 @@ final class LocalFilesPanel extends javax.swing.JPanel {
} }
/** /**
* Removes files in the list starting at minIdx going to maxIdx. * Removes the selected indices.
* * @param selectedIndices The selected indices.
* @param minIdx The minimum index of items to be removed.
* @param maxIdx The maximum index to be removed.
*/ */
void remove(int minIdx, int maxIdx) { void remove(int[] selectedIndices) {
for (int i = maxIdx; i >= minIdx; i--) { if (selectedIndices != null) {
items.remove(i); Iterable<Integer> sortedIndices = (Iterable<Integer>) () -> Arrays.stream(selectedIndices)
.mapToObj(i -> i)
// reverse order to remove highest index to lowest index
.sorted((a,b) -> Integer.compare(b, a))
.iterator();
int prevIdxMax = items.size() - 1;
for (Integer idx: sortedIndices) {
if (idx != null && idx >= 0 && idx < this.items.size()) {
this.items.remove((int) idx);
}
}
this.fireContentsChanged(this, 0, prevIdxMax);
} }
this.fireContentsChanged(this, 0, items.size() - 1);
} }
/** /**