001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.history;
003
004import java.awt.event.ActionEvent;
005import java.awt.event.MouseAdapter;
006import java.awt.event.MouseEvent;
007import java.util.Collections;
008import java.util.function.Function;
009
010import org.openstreetmap.josm.actions.AbstractShowHistoryAction;
011import org.openstreetmap.josm.data.osm.PrimitiveId;
012
013/**
014 * Open a history browser with the history of an object.
015 */
016class ShowHistoryAction extends AbstractShowHistoryAction {
017    private transient PrimitiveId primitiveId;
018
019    @Override
020    public void actionPerformed(ActionEvent e) {
021        if (isEnabled()) {
022            run();
023        }
024    }
025
026    public void setPrimitiveId(PrimitiveId pid) {
027        this.primitiveId = pid;
028        updateEnabledState();
029    }
030
031    public void run() {
032        HistoryBrowserDialogManager.getInstance().showHistory(Collections.singleton(primitiveId));
033    }
034
035    public void updateEnabledState() {
036        setEnabled(primitiveId != null && !primitiveId.isNew());
037    }
038
039    static class DoubleClickAdapter extends MouseAdapter {
040        private final Function<MouseEvent, PrimitiveId> primitiveIdFunction;
041
042        DoubleClickAdapter(Function<MouseEvent, PrimitiveId> primitiveIdFunction) {
043            this.primitiveIdFunction = primitiveIdFunction;
044        }
045
046        @Override
047        public void mouseClicked(MouseEvent e) {
048            if (e.getClickCount() < 2)
049                return;
050            PrimitiveId pid = primitiveIdFunction.apply(e);
051            if (pid == null || pid.isNew())
052                return;
053            HistoryBrowserDialogManager.getInstance().showHistory(Collections.singleton(pid));
054        }
055    }
056}