package icy.roi.edit; import icy.roi.ROI; import javax.swing.undo.CannotRedoException; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoableEdit; /** * Property change implementation for ROI undoable edition * * @author Stephane */ public class PropertyROIEdit extends AbstractROIEdit { String propertyName; Object previousValue; Object currentValue; public PropertyROIEdit(ROI roi, String propertyName, Object previousValue, Object currentValue, boolean mergeable) { super(roi, "ROI " + propertyName + " changed"); this.propertyName = propertyName; this.previousValue = previousValue; this.currentValue = currentValue; setMergeable(mergeable); } public PropertyROIEdit(ROI roi, String propertyName, Object previousValue, Object currentValue) { this(roi, propertyName, previousValue, currentValue, true); } @Override public void undo() throws CannotUndoException { super.undo(); // undo getROI().setPropertyValue(propertyName, previousValue); } @Override public void redo() throws CannotRedoException { super.redo(); // redo getROI().setPropertyValue(propertyName, currentValue); } @Override public boolean addEdit(UndoableEdit edit) { if (!isMergeable()) return false; if (edit instanceof PropertyROIEdit) { final PropertyROIEdit propEdit = (PropertyROIEdit) edit; // same ROI and same property ? if ((propEdit.getROI() == getROI()) && propEdit.propertyName.equals(propertyName)) { // collapse edits currentValue = propEdit.currentValue; return true; } } return false; } @Override public void die() { super.die(); previousValue = null; currentValue = null; } }