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}