001/**
002 * 
003 */
004package icy.roi.edit;
005
006import icy.roi.BooleanMask2D;
007
008import javax.swing.undo.CannotRedoException;
009import javax.swing.undo.CannotUndoException;
010import javax.swing.undo.UndoableEdit;
011
012import plugins.kernel.roi.roi2d.ROI2DArea;
013
014/**
015 * ROI2DARea change implementation for ROI undoable edition.
016 * 
017 * @author Stephane
018 */
019public class Area2DChangeROIEdit extends AbstractROIEdit
020{
021    BooleanMask2D oldMask;
022    BooleanMask2D newMask;
023
024    public Area2DChangeROIEdit(ROI2DArea roi, BooleanMask2D oldMask, String name)
025    {
026        super(roi, name);
027
028        this.oldMask = oldMask;
029        // get actual mask
030        this.newMask = roi.getBooleanMask(true);
031    }
032
033    public Area2DChangeROIEdit(ROI2DArea roi, BooleanMask2D oldMask)
034    {
035        this(roi, oldMask, "ROI mask changed");
036    }
037
038    public ROI2DArea getROI2DArea()
039    {
040        return (ROI2DArea) source;
041    }
042
043    @Override
044    public void undo() throws CannotUndoException
045    {
046        super.undo();
047
048        // undo
049        getROI2DArea().setAsBooleanMask(oldMask);
050    }
051
052    @Override
053    public void redo() throws CannotRedoException
054    {
055        super.redo();
056
057        // redo
058        getROI2DArea().setAsBooleanMask(newMask);
059    }
060
061    @Override
062    public boolean addEdit(UndoableEdit edit)
063    {
064        // if (!isMergeable())
065        // return false;
066        //
067        // if (edit instanceof Area2DChangeROIEdit)
068        // {
069        // final Area2DChangeROIEdit changeEdit = (Area2DChangeROIEdit) edit;
070        //
071        // // same ROI ?
072        // if (changeEdit.getROI() == getROI())
073        // {
074        // // collapse edits
075        // newMask = changeEdit.newMask;
076        // return true;
077        // }
078        // }
079
080        return false;
081    }
082
083    @Override
084    public void die()
085    {
086        super.die();
087
088        oldMask = null;
089        newMask = null;
090    }
091
092}