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}