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.osm.DataSet;
012import org.openstreetmap.josm.gui.dialogs.OsmIdSelectionDialog;
013import org.openstreetmap.josm.gui.history.HistoryBrowserDialogManager;
014import org.openstreetmap.josm.io.OnlineResource;
015import org.openstreetmap.josm.tools.Shortcut;
016
017/**
018 * Display history information about OSM ways, nodes, or relations.
019 * @since 968
020 */
021public class HistoryInfoAction extends JosmAction {
022
023    /**
024     * Constructs a new {@code HistoryInfoAction}.
025     */
026    public HistoryInfoAction() {
027        super(tr("History"), "dialogs/history",
028                tr("Display history information about OSM ways, nodes, or relations."),
029                Shortcut.registerShortcut("core:historyinfo",
030                        tr("History"), KeyEvent.VK_H, Shortcut.CTRL), false);
031        putValue("help", ht("/Action/ObjectHistory"));
032        putValue("toolbar", "action/historyinfo");
033        Main.toolbar.register(this);
034        setEnabled(true);
035    }
036
037    @Override
038    public void actionPerformed(ActionEvent ae) {
039        DataSet set = getLayerManager().getEditDataSet();
040        if (set != null && !set.selectionEmpty()) {
041            HistoryBrowserDialogManager.getInstance().showHistory(set.getAllSelected());
042        } else {
043            HistoryObjectIDDialog dialog = new HistoryObjectIDDialog();
044            if (dialog.showDialog().getValue() == dialog.getContinueButtonIndex()) {
045                HistoryBrowserDialogManager.getInstance().showHistory(dialog.getOsmIds());
046            }
047        }
048    }
049
050    /**
051     * Dialog allowing to choose object id if no one is selected.
052     * @since 6448
053     */
054    public static class HistoryObjectIDDialog extends OsmIdSelectionDialog {
055
056        /**
057         * Constructs a new {@code HistoryObjectIDDialog}.
058         */
059        public HistoryObjectIDDialog() {
060            super(Main.parent, tr("Show history"), new String[]{tr("Show history"), tr("Cancel")});
061            setButtonIcons(new String[]{"dialogs/history", "cancel"});
062            init();
063        }
064
065        @Override
066        public void setupDialog() {
067            super.setupDialog();
068            buttons.get(0).setEnabled(!Main.isOffline(OnlineResource.OSM_API));
069        }
070    }
071}