/**
* Copyright (c) 2001-2017 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*/
package net.sf.robocode.ui.editor;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.event.UndoableEditEvent;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.UndoManager;
/**
* Undo manager containing actions for performing undo and redo edits.
*
* @author Flemming N. Larsen (original)
*/
@SuppressWarnings("serial")
public class UndoManagerWithActions extends UndoManager {
private Action undoAction = new UndoAction();
private Action redoAction = new RedoAction();
public UndoManagerWithActions() {
super();
updateUndoRedoState();
}
@Override
public synchronized void undo() throws CannotUndoException {
super.undo();
updateUndoRedoState();
}
@Override
public synchronized void redo() throws CannotRedoException {
super.redo();
updateUndoRedoState();
}
@Override
public void undoableEditHappened(UndoableEditEvent undoableEditEvent) {
super.undoableEditHappened(undoableEditEvent);
updateUndoRedoState();
}
public Action getUndoAction() {
return undoAction;
}
public Action getRedoAction() {
return redoAction;
}
protected void updateUndoRedoState() {
undoAction.setEnabled(canUndo());
redoAction.setEnabled(canRedo());
}
private class UndoAction extends AbstractAction {
public UndoAction() {
super("Undo");
}
public void actionPerformed(ActionEvent ae) {
try {
undo();
} catch (CannotUndoException e) {
Toolkit.getDefaultToolkit().beep();
}
}
}
private class RedoAction extends AbstractAction {
public RedoAction() {
super("Redo");
}
public void actionPerformed(ActionEvent ae) {
try {
redo();
} catch (CannotRedoException e) {
Toolkit.getDefaultToolkit().beep();
}
}
}
}