001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.actions; 003 004import static org.openstreetmap.josm.gui.help.HelpUtil.ht; 005import static org.openstreetmap.josm.tools.I18n.tr; 006 007import java.awt.event.ActionEvent; 008import java.awt.event.KeyEvent; 009 010import org.openstreetmap.josm.Main; 011import org.openstreetmap.josm.data.UndoRedoHandler.CommandQueueListener; 012import org.openstreetmap.josm.gui.MainApplication; 013import org.openstreetmap.josm.gui.MapFrame; 014import org.openstreetmap.josm.tools.Shortcut; 015 016/** 017 * Redoes the last command. 018 * 019 * @author imi 020 */ 021public class RedoAction extends JosmAction implements CommandQueueListener { 022 023 /** 024 * Construct the action with "Redo" as label. 025 */ 026 public RedoAction() { 027 super(tr("Redo"), "redo", tr("Redo the last undone action."), 028 Shortcut.registerShortcut("system:redo", tr("Edit: {0}", tr("Redo")), KeyEvent.VK_Y, Shortcut.CTRL), true); 029 setEnabled(false); 030 putValue("help", ht("/Action/Redo")); 031 } 032 033 @Override 034 public void actionPerformed(ActionEvent e) { 035 MapFrame map = MainApplication.getMap(); 036 if (map == null) 037 return; 038 map.repaint(); 039 MainApplication.undoRedo.redo(); 040 } 041 042 @Override 043 protected void updateEnabledState() { 044 setEnabled(Main.main != null && !MainApplication.undoRedo.redoCommands.isEmpty()); 045 } 046 047 @Override 048 public void commandChanged(int queueSize, int redoSize) { 049 if (MainApplication.undoRedo.redoCommands.isEmpty()) { 050 putValue(NAME, tr("Redo")); 051 setTooltip(tr("Redo the last undone action.")); 052 } else { 053 putValue(NAME, tr("Redo ...")); 054 setTooltip(tr("Redo {0}", 055 MainApplication.undoRedo.redoCommands.getFirst().getDescriptionText())); 056 } 057 } 058}