/** * */ package icy.roi.edit; import icy.painter.Anchor2D; import java.awt.geom.Point2D; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoableEdit; import plugins.kernel.roi.roi2d.ROI2DShape; /** * Control point position change implementation for ROI undoable edition. * * @author Stephane */ public class Point2DMovedROIEdit extends AbstractPoint2DROIEdit { protected Point2D prevPos; protected Point2D currentPos; public Point2DMovedROIEdit(ROI2DShape roi, Anchor2D point, Point2D prevPos) { super(roi, point, "ROI point moved"); this.prevPos = prevPos; this.currentPos = point.getPosition(); } @Override public void undo() throws CannotUndoException { super.undo(); // undo point.setPosition(prevPos); } @Override public void redo() throws CannotRedoException { super.redo(); // redo point.setPosition(currentPos); } @Override public boolean addEdit(UndoableEdit edit) { if (!isMergeable()) return false; if (edit instanceof Point2DMovedROIEdit) { final Point2DMovedROIEdit posEdit = (Point2DMovedROIEdit) edit; // same ROI and point ? if ((posEdit.getROI() == getROI()) && (posEdit.getPoint() == getPoint())) { // collapse edits currentPos = posEdit.currentPos; return true; } } return false; } @Override public void die() { super.die(); prevPos = null; currentPos = null; } }