001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.tagging.presets.items; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import java.awt.event.MouseAdapter; 007import java.awt.event.MouseEvent; 008import java.util.Collection; 009import java.util.List; 010import java.util.Optional; 011 012import javax.swing.JLabel; 013import javax.swing.JPanel; 014 015import org.openstreetmap.josm.data.osm.OsmPrimitive; 016import org.openstreetmap.josm.data.osm.Tag; 017import org.openstreetmap.josm.gui.tagging.presets.TaggingPreset; 018import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetItemGuiSupport; 019import org.openstreetmap.josm.gui.tagging.presets.TaggingPresetLabel; 020import org.openstreetmap.josm.gui.tagging.presets.TaggingPresets; 021import org.openstreetmap.josm.tools.GBC; 022 023/** 024 * Adds a link to another preset. 025 * @since 8863 026 */ 027public class PresetLink extends TextItem { 028 029 static final class TaggingPresetMouseAdapter extends MouseAdapter { 030 private final TaggingPreset t; 031 private final Collection<OsmPrimitive> sel; 032 033 TaggingPresetMouseAdapter(TaggingPreset t, Collection<OsmPrimitive> sel) { 034 this.t = t; 035 this.sel = sel; 036 } 037 038 @Override 039 public void mouseClicked(MouseEvent e) { 040 t.showAndApply(sel); 041 } 042 } 043 044 /** The exact name of the preset to link to. Required. */ 045 public String preset_name = ""; // NOSONAR 046 047 /** 048 * Creates a label to be inserted aboive this link 049 * @return a label 050 */ 051 public JLabel createLabel() { 052 initializeLocaleText(tr("Edit also …")); 053 return new JLabel(locale_text); 054 } 055 056 @Override 057 public boolean addToPanel(JPanel p, TaggingPresetItemGuiSupport support) { 058 final String presetName = preset_name; 059 Optional<TaggingPreset> found = TaggingPresets.getTaggingPresets().stream().filter(preset -> presetName.equals(preset.name)).findFirst(); 060 if (found.isPresent()) { 061 TaggingPreset t = found.get(); 062 JLabel lbl = new TaggingPresetLabel(t); 063 lbl.addMouseListener(new TaggingPresetMouseAdapter(t, support.getSelected())); 064 lbl.applyComponentOrientation(support.getDefaultComponentOrientation()); 065 p.add(lbl, GBC.eol().fill(GBC.HORIZONTAL)); 066 } 067 return false; 068 } 069 070 @Override 071 public void addCommands(List<Tag> changedTags) { 072 // Do nothing 073 } 074 075 @Override 076 public String toString() { 077 return "PresetLink [preset_name=" + preset_name + ']'; 078 } 079}