/**
*
*/
package icy.roi.edit;
import icy.painter.Anchor3D;
import icy.roi.ROI3D;
import icy.type.point.Point3D;
import java.util.List;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoableEdit;
import plugins.kernel.roi.roi3d.ROI3DPolyLine;
/**
* 3D control point removed implementation for ROI undoable edition.
*
* @author Stephane
*/
public class Point3DRemovedROIEdit extends AbstractPoint3DROIEdit
{
Point3D position;
final int index;
public Point3DRemovedROIEdit(ROI3D roi, List<Anchor3D> previousPoints, Anchor3D point)
{
super(roi, point, "ROI point removed");
position = point.getPosition();
// we need to save the index in the old point list
int i = 0;
for (Anchor3D p : previousPoints)
{
if (p.getPosition().equals(position))
break;
i++;
}
index = i;
}
@Override
public void undo() throws CannotUndoException
{
super.undo();
// undo
point.setPosition(position);
if (getROI3D() instanceof ROI3DPolyLine)
{
final ROI3DPolyLine roi = (ROI3DPolyLine) getROI3D();
roi.addPoint(point, Math.min(index, roi.getControlPoints().size()));
}
}
@Override
public void redo() throws CannotRedoException
{
super.redo();
// redo
if (getROI3D() instanceof ROI3DPolyLine)
{
final ROI3DPolyLine roi = (ROI3DPolyLine) getROI3D();
roi.removePoint(point);
}
}
@Override
public boolean addEdit(UndoableEdit edit)
{
// don't collapse here
return false;
}
@Override
public void die()
{
super.die();
position = null;
}
}