/**
*
*/
package icy.roi.edit;
import icy.roi.BooleanMask2D;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoableEdit;
import plugins.kernel.roi.roi2d.ROI2DArea;
/**
* ROI2DARea change implementation for ROI undoable edition.
*
* @author Stephane
*/
public class Area2DChangeROIEdit extends AbstractROIEdit
{
BooleanMask2D oldMask;
BooleanMask2D newMask;
public Area2DChangeROIEdit(ROI2DArea roi, BooleanMask2D oldMask, String name)
{
super(roi, name);
this.oldMask = oldMask;
// get actual mask
this.newMask = roi.getBooleanMask(true);
}
public Area2DChangeROIEdit(ROI2DArea roi, BooleanMask2D oldMask)
{
this(roi, oldMask, "ROI mask changed");
}
public ROI2DArea getROI2DArea()
{
return (ROI2DArea) source;
}
@Override
public void undo() throws CannotUndoException
{
super.undo();
// undo
getROI2DArea().setAsBooleanMask(oldMask);
}
@Override
public void redo() throws CannotRedoException
{
super.redo();
// redo
getROI2DArea().setAsBooleanMask(newMask);
}
@Override
public boolean addEdit(UndoableEdit edit)
{
// if (!isMergeable())
// return false;
//
// if (edit instanceof Area2DChangeROIEdit)
// {
// final Area2DChangeROIEdit changeEdit = (Area2DChangeROIEdit) edit;
//
// // same ROI ?
// if (changeEdit.getROI() == getROI())
// {
// // collapse edits
// newMask = changeEdit.newMask;
// return true;
// }
// }
return false;
}
@Override
public void die()
{
super.die();
oldMask = null;
newMask = null;
}
}