UndoRedoActivity.java
/*
* @(#)DragTracker.java
*
* Project: JHotdraw - a GUI framework for technical drawings
* http://www.jhotdraw.org
* http://jhotdraw.sourceforge.net
* Copyright: © by the original author(s) and all contributors
* License: Lesser GNU Public License (LGPL)
* http://www.opensource.org/licenses/lgpl-license.html
*/
package CH.ifa.draw.util;
import CH.ifa.draw.framework.*;
/**
* An UndoRedoActivity can be used to turn a UndoActivity into a RedoActivity.
* In this case, the redo() method of an encapsulated activity is called when
* the undo() is executed, and undo() when redo() is executed.
*
* @author Wolfram Kaiser
* @version <$CURRENT_VERSION$>
*/
public class UndoRedoActivity implements Undoable {
private Undoable myReversedActivity;
protected UndoRedoActivity(Undoable newReversedActivity) {
setReversedActivity(newReversedActivity);
}
/**
* Undo the activity
* @return true if the activity could be undone, false otherwise
*/
public boolean undo() {
if (isRedoable()) {
return getReversedActivity().redo();
}
return false;
}
/*
* Redo the activity
* @return true if the activity could be redone, false otherwise
*/
public boolean redo() {
if (isUndoable()) {
return getReversedActivity().undo();
}
return false;
}
/**
* Dispatch to isRedoable of the activity to be reversed.
*/
public boolean isUndoable() {
return getReversedActivity().isRedoable();
}
/**
* Dispatch to setRedoable of the activity to be reversed.
*/
public void setUndoable(boolean newIsUndoable) {
getReversedActivity().setRedoable(newIsUndoable);
}
/**
* Dispatch to isUndoable of the activity to be reversed.
*/
public boolean isRedoable() {
return getReversedActivity().isUndoable();
}
/**
* Dispatch to setUndoable of the activity to be reversed.
*/
public void setRedoable(boolean newIsRedoable) {
getReversedActivity().setUndoable(newIsRedoable);
}
public void setAffectedFigures(FigureEnumeration newAffectedFigures) {
getReversedActivity().setAffectedFigures(newAffectedFigures);
}
public FigureEnumeration getAffectedFigures() {
return getReversedActivity().getAffectedFigures();
}
public int getAffectedFiguresCount() {
return getReversedActivity().getAffectedFiguresCount();
}
public DrawingView getDrawingView() {
return getReversedActivity().getDrawingView();
}
public void release() {
getReversedActivity().release();
}
protected void setReversedActivity(Undoable newReversedActivity) {
myReversedActivity = newReversedActivity;
}
public Undoable getReversedActivity() {
return myReversedActivity;
}
public static Undoable createUndoRedoActivity(Undoable toBeReversed) {
// instead of reversing the reversed activity just return the original activity
if (toBeReversed instanceof UndoRedoActivity) {
return ((UndoRedoActivity)toBeReversed).getReversedActivity();
}
else {
return new UndoRedoActivity(toBeReversed);
}
}
}