1 package net.sf.openrocket.gui.main;
\r
3 import java.awt.event.ActionEvent;
\r
5 import javax.swing.AbstractAction;
\r
7 import net.sf.openrocket.document.OpenRocketDocument;
\r
8 import net.sf.openrocket.document.UndoRedoListener;
\r
9 import net.sf.openrocket.gui.util.Icons;
\r
10 import net.sf.openrocket.l10n.Translator;
\r
11 import net.sf.openrocket.logging.LogHelper;
\r
12 import net.sf.openrocket.startup.Application;
\r
13 import net.sf.openrocket.util.BugException;
\r
16 * Inner class to implement undo/redo actions.
\r
18 public class UndoRedoAction extends AbstractAction implements UndoRedoListener {
\r
20 // Use Factory mechanism because we want to register the new instance as an
\r
21 // UndoRedoListener.
\r
22 public static UndoRedoAction newUndoAction( OpenRocketDocument document ) {
\r
23 UndoRedoAction undo = new UndoRedoAction( UNDO, document );
\r
24 document.addUndoRedoListener(undo);
\r
28 public static UndoRedoAction newRedoAction( OpenRocketDocument document ) {
\r
29 UndoRedoAction redo = new UndoRedoAction( REDO, document );
\r
30 document.addUndoRedoListener(redo);
\r
34 private static final LogHelper log = Application.getLogger();
\r
35 private static final Translator trans = Application.getTranslator();
\r
37 private static final int UNDO = 1;
\r
38 private static final int REDO = 2;
\r
40 private final int type;
\r
42 private final OpenRocketDocument document;
\r
45 private UndoRedoAction(int type, OpenRocketDocument document) {
\r
46 this.document = document;
\r
47 if (type != UNDO && type != REDO) {
\r
48 throw new IllegalArgumentException("Unknown type = " + type);
\r
55 // Actual action to make
\r
57 public void actionPerformed(ActionEvent e) {
\r
60 log.user("Performing undo, event=" + e);
\r
65 log.user("Performing redo, event=" + e);
\r
72 // Set all the values correctly (name and enabled/disabled status)
\r
73 public void setAllValues() {
\r
75 boolean actionEnabled;
\r
80 name = trans.get("OpenRocketDocument.Undo");
\r
81 desc = document.getUndoDescription();
\r
82 actionEnabled = document.isUndoAvailable();
\r
83 this.putValue(SMALL_ICON, Icons.EDIT_UNDO);
\r
88 name = trans.get("OpenRocketDocument.Redo");
\r
89 desc = document.getRedoDescription();
\r
90 actionEnabled = document.isRedoAvailable();
\r
91 this.putValue(SMALL_ICON, Icons.EDIT_REDO);
\r
95 throw new BugException("illegal type=" + type);
\r
99 name = name + " (" + desc + ")";
\r
101 putValue(NAME, name);
\r
102 setEnabled(actionEnabled);
\r