package tim.prune.undo; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.TrackInfo; /** * Operation to undo an insertion (eg average) */ public class UndoInsert implements UndoOperation { private int _startPosition = 0; private int _numInserted = 0; private boolean _hasSegmentFlag = false; private boolean _segmentFlag = false; /** * Constructor without segment flag * @param inStart start of insert * @param inNumInserted number of points inserted */ public UndoInsert(int inStart, int inNumInserted) { this(inStart, inNumInserted, false, false); } /** * Constructor with segment flag * @param inStart start of insert * @param inNumInserted number of points inserted * @param inSegmentFlag segment flag of following point */ public UndoInsert(int inStart, int inNumInserted, boolean inSegmentFlag) { this(inStart, inNumInserted, true, inSegmentFlag); } /** * Constructor * @param inStart start of insert * @param inNumInserted number of points inserted * @param inHasFlag is there a segment flag present * @param inFlag segment flag, if any */ public UndoInsert(int inStart, int inNumInserted, boolean inHasFlag, boolean inFlag) { _startPosition = inStart; _numInserted = inNumInserted; _hasSegmentFlag = inHasFlag; _segmentFlag = inFlag; } /** * @return description of operation including parameters */ public String getDescription() { return I18nManager.getText("undo.insert") + " (" + _numInserted + ")"; } /** * Perform the undo operation on the given TrackInfo * @param inTrackInfo TrackInfo object on which to perform the operation */ public void performUndo(TrackInfo inTrackInfo) throws UndoException { // restore track to previous values inTrackInfo.getTrack().deleteRange(_startPosition, _startPosition + _numInserted - 1); if (_hasSegmentFlag) { DataPoint nextPoint = inTrackInfo.getTrack().getNextTrackPoint(_startPosition); if (nextPoint != null) {nextPoint.setSegmentStart(_segmentFlag);} } // reset selection inTrackInfo.getSelection().clearAll(); } }