1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
package tim.prune.function;
import java.util.ArrayList;
import java.util.List;
import tim.prune.App;
import tim.prune.I18nManager;
import tim.prune.cmd.CompoundCommand;
import tim.prune.cmd.PointFlag;
import tim.prune.data.DataPoint;
import tim.prune.data.Track;
/**
* Class to provide the function to delete the currently selected range
*/
public class DeleteSelectedRangeFunction extends DeleteBitOfTrackFunction
{
/**
* Constructor
* @param inApp application object for callback
*/
public DeleteSelectedRangeFunction(App inApp) {
super(inApp);
}
/** Get the name key */
public String getNameKey() {
return "function.deleterange";
}
/**
* Begin the function
*/
public void begin()
{
// check track
Track track = _app.getTrackInfo().getTrack();
if (track == null || track.getNumPoints() <= 0) {
return;
}
// check selection
final int selStart = _app.getTrackInfo().getSelection().getStart();
final int selEnd = _app.getTrackInfo().getSelection().getEnd();
if (selStart < 0 || selEnd < 0 || selEnd <= selStart) {
return;
}
ArrayList<Integer> indexesToKeep = new ArrayList<>();
ArrayList<Integer> indexesToDelete = new ArrayList<>();
int numMedia = fillLists(indexesToKeep, indexesToDelete, (i) -> i<selStart || i>selEnd);
List<PointFlag> nextBreak = null;
// Add segment break after this range if there was one within it
if (track.isSegmentBreakWithin(selStart, selEnd))
{
DataPoint nextPoint = track.getNextTrackPoint(selEnd + 1);
if (nextPoint != null) {
nextBreak = List.of(new PointFlag(nextPoint, true));
}
}
CompoundCommand command = createCommand(indexesToKeep, indexesToDelete, nextBreak, numMedia);
command.setDescription(I18nManager.getTextWithNumber("undo.deletepoints", indexesToDelete.size()));
_app.execute(command);
}
}
|