// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.tagging.presets; import java.awt.Cursor; import java.awt.Font; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.font.TextAttribute; import java.util.Collections; import javax.swing.JLabel; public class TaggingPresetLabel extends JLabel { protected final TaggingPreset t; /** * Constructs a new {@code PresetLabel}. * @param t the tagging preset */ public TaggingPresetLabel(TaggingPreset t) { super(t.getName() + " …"); setIcon(t.getIcon()); addMouseListener(new PresetLabelMouseListener(this)); this.t = t; } /** * Small helper class that manages the highlighting of the label on hover as well as opening * the corresponding preset when clicked */ public static class PresetLabelMouseListener implements MouseListener { protected final JLabel label; protected final Font hover; protected final Font normal; /** * Constructs a new {@code PresetLabelMouseListener}. * @param lbl Label to highlight */ public PresetLabelMouseListener(JLabel lbl) { label = lbl; lbl.setCursor(new Cursor(Cursor.HAND_CURSOR)); normal = label.getFont(); hover = normal.deriveFont(Collections.singletonMap(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_LOW_DOTTED)); } @Override public void mouseClicked(MouseEvent e) { // Do nothing } @Override public void mouseEntered(MouseEvent e) { label.setFont(hover); } @Override public void mouseExited(MouseEvent e) { label.setFont(normal); } @Override public void mousePressed(MouseEvent e) { // Do nothing } @Override public void mouseReleased(MouseEvent e) { // Do nothing } } }