/** * */ package icy.roi.edit; import icy.roi.ROI; import icy.type.point.Point5D; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoableEdit; /** * Position change implementation for ROI undoable edition. * * @author Stephane */ public class PositionROIEdit extends AbstractROIEdit { Point5D prevPos; Point5D currentPos; public PositionROIEdit(ROI roi, Point5D prevPos, boolean mergeable) { super(roi, "ROI position changed"); this.prevPos = prevPos; this.currentPos = roi.getPosition5D(); setMergeable(mergeable); } public PositionROIEdit(ROI roi, Point5D prevPos) { this(roi, prevPos, true); } @Override public void undo() throws CannotUndoException { super.undo(); // undo getROI().setPosition5D(prevPos); } @Override public void redo() throws CannotRedoException { super.redo(); // redo getROI().setPosition5D(currentPos); } @Override public boolean addEdit(UndoableEdit edit) { if (!isMergeable()) return false; if (edit instanceof PositionROIEdit) { final PositionROIEdit posEdit = (PositionROIEdit) edit; // same ROI ? if (posEdit.getROI() == getROI()) { // collapse edits currentPos = posEdit.currentPos; return true; } } return false; } @Override public void die() { super.die(); prevPos = null; currentPos = null; } }