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}