package apes.models.undo;
import java.awt.Point;
import javax.swing.undo.AbstractUndoableEdit;
import apes.models.InternalFormat;
import apes.models.MemoryHandler;
/**
* PasteEdit records changes which occurs after performing a paste action.
* PasteEdit provides undo/redo support for PasteAction.
*
* @author Johan Andersson (johandy@student.chalmers.se)
* @author Johan Ã…hlander (johan.ahlander@gmail.com)
*/
public class PasteEdit extends AbstractUndoableEdit
{
private InternalFormat internalFormat;
private MemoryHandler paste;
private long start, stop;
private boolean undoable;
public PasteEdit(InternalFormat intForm, Point marked, MemoryHandler p)
{
internalFormat = intForm;
start = marked.x;
stop = start + intForm.bytesToSamples(p.getUsedMemory() - 1);
paste = new MemoryHandler();
paste.transfer(p, 0, p.getUsedMemory(), 0);
redo();
}
@Override
public void redo()
{
internalFormat.pasteSamples(start, paste);
paste.dispose();
undoable = true;
}
@Override
public void undo()
{
paste.dispose();
internalFormat.cutSamples(start, stop, paste);
undoable = false;
}
@Override
public boolean canRedo()
{
return !undoable;
}
@Override
public boolean canUndo()
{
return undoable;
}
}