package icy.roi.edit; import icy.roi.ROI; import icy.type.rectangle.Rectangle5D; 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 BoundsROIEdit extends AbstractROIEdit { Rectangle5D prevBounds; Rectangle5D currentBounds; public BoundsROIEdit(ROI roi, Rectangle5D prevBounds, boolean mergeable) { super(roi, "ROI bounds changed"); this.prevBounds = prevBounds; this.currentBounds = roi.getBounds5D(); setMergeable(mergeable); } public BoundsROIEdit(ROI roi, Rectangle5D prevBounds) { this(roi, prevBounds, true); } @Override public void undo() throws CannotUndoException { super.undo(); // undo getROI().setBounds5D(prevBounds); } @Override public void redo() throws CannotRedoException { super.redo(); // redo getROI().setBounds5D(currentBounds); } @Override public boolean addEdit(UndoableEdit edit) { if (!isMergeable()) return false; if (edit instanceof BoundsROIEdit) { final BoundsROIEdit bndEdit = (BoundsROIEdit) edit; // same ROI ? if (bndEdit.getROI() == getROI()) { // collapse edits currentBounds = bndEdit.currentBounds; return true; } } return false; } @Override public void die() { super.die(); prevBounds = null; currentBounds = null; } }