001package jmri.jmrix.openlcb.swing; 002 003import java.awt.event.*; 004 005import jmri.util.swing.*; 006import jmri.jmrix.can.CanSystemConnectionMemo; 007import jmri.jmrix.openlcb.OlcbAddress; 008 009import org.openlcb.swing.EventIdTextField; 010 011/** 012 * This is an entry field for Event IDs that also 013 * accepts event names 014 * 015 * @author Bob Jacobsen (C) 2024 016 */ 017public class NamedEventIdTextField extends OvertypeTextArea { 018 019 public NamedEventIdTextField(CanSystemConnectionMemo memo) { 020 this(23, memo); // heuristically-found default size 021 } 022 023 public NamedEventIdTextField(int size, CanSystemConnectionMemo memo) { 024 super(size); 025 this.memo = memo; 026 027 // set up semi-automatic tool tip 028 addMouseListener(JmriMouseListener.adapt(new JmriMouseListener() { 029 @Override 030 public void mouseEntered(JmriMouseEvent arg0) { 031 // Generate dynamic tooltip text here 032 setToolTipText(makeToolTipText(getText())); 033 } 034 035 @Override public void mouseClicked(JmriMouseEvent e) {} 036 @Override public void mouseExited(JmriMouseEvent arg0) {} 037 @Override public void mousePressed(JmriMouseEvent arg0) {} 038 @Override public void mouseReleased(JmriMouseEvent arg0) {} 039 })); 040 041 // Add a focus listener to update the tooltip dynamically 042 addFocusListener(new FocusListener() { 043 @Override 044 public void focusGained(FocusEvent e) { 045 setToolTipText(makeToolTipText(getText())); 046 } 047 048 @Override public void focusLost(FocusEvent e) {} 049 }); 050 051 EventIdTextField.configurePopUp(this); 052 053 } 054 055 final CanSystemConnectionMemo memo; 056 057 protected String makeToolTipText(String fieldText) { 058 var address = new OlcbAddress(fieldText, memo); 059 if (address.isFromName()) { 060 return fieldText+" is "+address.toDottedString(); 061 } 062 return "Enter an event ID or event name"; 063 } 064 065 // private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(NamedEventIdTextField.class); 066}